Repository files navigation

Spillgebees.Transmodel

GitHub Workflow Status (with branch)License

Strongly-typed C# XML bindings for Transmodel-based European public transport standards. Currently, covers NeTEx (Network Timetable Exchange) and SIRI (Service Interface for Real-time Information), with the flexibility to support additional Transmodel-based standards.

Generated from the official CEN XSD schemas and verified with automated tests.

Note: This project was developed with significant AI assistance. While it is functional and tested, it has not yet undergone a full manual review. Treat it as pre-production. Cntributions and feedback are welcome.

Generator tool

A CLI tool that downloads XSD schemas from the official CEN repositories and generates modern C# XML bindings with the latest features. Use it to generate bindings for any schema version, including unreleased branches or specific commits.

PackageNuGet
Spillgebees.Transmodel.GeneratorNuGet
dotnet tool install -g Spillgebees.Transmodel.Generator

NeTEx generation

transmodel-generator generate-netex --version v1.3.1 --output ./Generated --namespace MyApp.NeTEx

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.NeTEx.NeTExhttp://www.netex.org.uk/netexNeTEx types
MyApp.NeTEx.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
MyApp.NeTEx.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)

SIRI generation

transmodel-generator generate-siri --version v2.2 --output ./Generated --namespace MyApp.SIRI

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.SIRI.SIRIhttp://www.siri.org.uk/siriCore SIRI types
MyApp.SIRI.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
MyApp.SIRI.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
MyApp.SIRI.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
MyApp.SIRI.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
MyApp.SIRI.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
MyApp.SIRI.W3http://www.w3.org/XML/1998/namespaceW3 types

CLI reference

transmodel-generator generate-netex [options]
transmodel-generator generate-siri [options]
Options:
-v, --version <version> Schema version tag (default: v1.3.1 for NeTEx, v2.2 for SIRI)
--ref <ref> Git ref (branch or commit SHA), mutually exclusive with --version
-o, --output <output> Output directory for generated C# files (default: ./Generated)
-n, --namespace <namespace> Root C# namespace (default: NeTEx.Models / SIRI.Models)
--clean Delete output directory before generating
--verbose Enable verbose logging
transmodel-generator list-netex-versions List available NeTEx version tags
transmodel-generator list-siri-versions List available SIRI version tags

Pre-generated packages

If you don't need custom generation, install one of the pre-generated packages below. These are built with the same generator, tested, and published to NuGet for every release.

NeTEx

Versions correspond to tags in the NeTEx-CEN/NeTEx GitHub repository.

NeTEx versionPackageNuGet
v1.2Spillgebees.NeTEx.Models.V1_2NuGet
v1.2.2Spillgebees.NeTEx.Models.V1_2_2NuGet
v1.2.3Spillgebees.NeTEx.Models.V1_2_3NuGet
v1.3.0Spillgebees.NeTEx.Models.V1_3_0NuGet
v1.3.1Spillgebees.NeTEx.Models.V1_3_1NuGet
All versionsSpillgebees.NeTEx.ModelsNuGet
dotnet add package Spillgebees.NeTEx.Models.V1_3_1

Each NeTEx version package contains three sub-namespaces:

Sub-namespaceXML NamespaceDescription
.NeTExhttp://www.netex.org.uk/netexNeTEx types
.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.NeTEx.Models.V1_3_1.NeTEx;vardelivery=newPublicationDeliveryStructure{PublicationTimestamp=DateTimeOffset.UtcNow,ParticipantRef="my-data-provider",Description=newMultilingualString{Value="Stop places export"},};varserializer=newXmlSerializer(typeof(PublicationDeliveryStructure));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,delivery);// <?xml version="1.0" encoding="utf-8"?>// <PublicationDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <PublicationTimestamp>2026-02-13T12:00:00+00:00</PublicationTimestamp>// <ParticipantRef>my-data-provider</ParticipantRef>// <Description>Stop places export</Description>// </PublicationDelivery>

SIRI

Versions correspond to tags in the SIRI-CEN/SIRI GitHub repository.

SIRI versionPackageNuGet
v2.1Spillgebees.SIRI.Models.V2_1NuGet
v2.2Spillgebees.SIRI.Models.V2_2NuGet
All versionsSpillgebees.SIRI.ModelsNuGet
dotnet add package Spillgebees.SIRI.Models.V2_2

Each SIRI version package contains seven sub-namespaces:

Sub-namespaceXML NamespaceDescription
.SIRIhttp://www.siri.org.uk/siriSIRI types
.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
.W3http://www.w3.org/XML/1998/namespaceW3 types
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.SIRI.Models.V2_2.SIRI;varsiri=newSiri{ServiceDelivery=newServiceDelivery{ResponseTimestamp=DateTimeOffset.UtcNow,},};varserializer=newXmlSerializer(typeof(Siri));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,siri);// <?xml version="1.0" encoding="utf-8"?>// <Siri xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <ServiceDelivery>// <ResponseTimestamp>2026-02-13T12:00:00+00:00</ResponseTimestamp>// </ServiceDelivery>// </Siri>

Building from source

The generated bindings are not committed to the repository, they are generated at build time. To build locally:

dotnet build Spillgebees.Transmodel.slnx --configuration Release
dotnet test --solution Spillgebees.Transmodel.slnx --configuration Release

The build downloads the XSD schemas from GitHub, generates the XML bindings, and compiles them. Downloaded schemas are cached in local app data so subsequent builds don't require network access.

Use dotnet clean to remove the generated files and trigger a fresh generation on the next build.

Supported frameworks

  • .NET 10.0

License

This project is licensed under the European Union Public Licence v. 1.2 (EUPL-1.2).

The NeTEx schemas are licensed under GPL-3.0 by CEN. EUPL-1.2 is compatible with GPL-3.0 per its compatibility clause. The SIRI schemas are published by CEN on the SIRI-CEN/SIRI repository without an explicit open-source license.

About

Strongly-typed C# XML bindings for European public transport standards (NeTEx, SIRI, ...).

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Spillgebees.Transmodel

GitHub Workflow Status (with branch)License

Strongly-typed C# XML bindings for Transmodel-based European public transport standards. Currently, covers NeTEx (Network Timetable Exchange) and SIRI (Service Interface for Real-time Information), with the flexibility to support additional Transmodel-based standards.

Generated from the official CEN XSD schemas and verified with automated tests.

Note: This project was developed with significant AI assistance. While it is functional and tested, it has not yet undergone a full manual review. Treat it as pre-production. Cntributions and feedback are welcome.

Generator tool

A CLI tool that downloads XSD schemas from the official CEN repositories and generates modern C# XML bindings with the latest features. Use it to generate bindings for any schema version, including unreleased branches or specific commits.

PackageNuGet
Spillgebees.Transmodel.GeneratorNuGet
dotnet tool install -g Spillgebees.Transmodel.Generator

NeTEx generation

transmodel-generator generate-netex --version v1.3.1 --output ./Generated --namespace MyApp.NeTEx

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.NeTEx.NeTExhttp://www.netex.org.uk/netexNeTEx types
MyApp.NeTEx.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
MyApp.NeTEx.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)

SIRI generation

transmodel-generator generate-siri --version v2.2 --output ./Generated --namespace MyApp.SIRI

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.SIRI.SIRIhttp://www.siri.org.uk/siriCore SIRI types
MyApp.SIRI.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
MyApp.SIRI.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
MyApp.SIRI.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
MyApp.SIRI.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
MyApp.SIRI.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
MyApp.SIRI.W3http://www.w3.org/XML/1998/namespaceW3 types

CLI reference

transmodel-generator generate-netex [options]
transmodel-generator generate-siri [options]
Options:
-v, --version <version> Schema version tag (default: v1.3.1 for NeTEx, v2.2 for SIRI)
--ref <ref> Git ref (branch or commit SHA), mutually exclusive with --version
-o, --output <output> Output directory for generated C# files (default: ./Generated)
-n, --namespace <namespace> Root C# namespace (default: NeTEx.Models / SIRI.Models)
--clean Delete output directory before generating
--verbose Enable verbose logging
transmodel-generator list-netex-versions List available NeTEx version tags
transmodel-generator list-siri-versions List available SIRI version tags

Pre-generated packages

If you don't need custom generation, install one of the pre-generated packages below. These are built with the same generator, tested, and published to NuGet for every release.

NeTEx

Versions correspond to tags in the NeTEx-CEN/NeTEx GitHub repository.

NeTEx versionPackageNuGet
v1.2Spillgebees.NeTEx.Models.V1_2NuGet
v1.2.2Spillgebees.NeTEx.Models.V1_2_2NuGet
v1.2.3Spillgebees.NeTEx.Models.V1_2_3NuGet
v1.3.0Spillgebees.NeTEx.Models.V1_3_0NuGet
v1.3.1Spillgebees.NeTEx.Models.V1_3_1NuGet
All versionsSpillgebees.NeTEx.ModelsNuGet
dotnet add package Spillgebees.NeTEx.Models.V1_3_1

Each NeTEx version package contains three sub-namespaces:

Sub-namespaceXML NamespaceDescription
.NeTExhttp://www.netex.org.uk/netexNeTEx types
.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.NeTEx.Models.V1_3_1.NeTEx;vardelivery=newPublicationDeliveryStructure{PublicationTimestamp=DateTimeOffset.UtcNow,ParticipantRef="my-data-provider",Description=newMultilingualString{Value="Stop places export"},};varserializer=newXmlSerializer(typeof(PublicationDeliveryStructure));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,delivery);// <?xml version="1.0" encoding="utf-8"?>// <PublicationDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <PublicationTimestamp>2026-02-13T12:00:00+00:00</PublicationTimestamp>// <ParticipantRef>my-data-provider</ParticipantRef>// <Description>Stop places export</Description>// </PublicationDelivery>

SIRI

Versions correspond to tags in the SIRI-CEN/SIRI GitHub repository.

SIRI versionPackageNuGet
v2.1Spillgebees.SIRI.Models.V2_1NuGet
v2.2Spillgebees.SIRI.Models.V2_2NuGet
All versionsSpillgebees.SIRI.ModelsNuGet
dotnet add package Spillgebees.SIRI.Models.V2_2

Each SIRI version package contains seven sub-namespaces:

Sub-namespaceXML NamespaceDescription
.SIRIhttp://www.siri.org.uk/siriSIRI types
.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
.W3http://www.w3.org/XML/1998/namespaceW3 types
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.SIRI.Models.V2_2.SIRI;varsiri=newSiri{ServiceDelivery=newServiceDelivery{ResponseTimestamp=DateTimeOffset.UtcNow,},};varserializer=newXmlSerializer(typeof(Siri));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,siri);// <?xml version="1.0" encoding="utf-8"?>// <Siri xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <ServiceDelivery>// <ResponseTimestamp>2026-02-13T12:00:00+00:00</ResponseTimestamp>// </ServiceDelivery>// </Siri>

Building from source

The generated bindings are not committed to the repository, they are generated at build time. To build locally:

dotnet build Spillgebees.Transmodel.slnx --configuration Release
dotnet test --solution Spillgebees.Transmodel.slnx --configuration Release

The build downloads the XSD schemas from GitHub, generates the XML bindings, and compiles them. Downloaded schemas are cached in local app data so subsequent builds don't require network access.

Use dotnet clean to remove the generated files and trigger a fresh generation on the next build.

Supported frameworks

  • .NET 10.0

License

This project is licensed under the European Union Public Licence v. 1.2 (EUPL-1.2).

The NeTEx schemas are licensed under GPL-3.0 by CEN. EUPL-1.2 is compatible with GPL-3.0 per its compatibility clause. The SIRI schemas are published by CEN on the SIRI-CEN/SIRI repository without an explicit open-source license.

About

Strongly-typed C# XML bindings for European public transport standards (NeTEx, SIRI, ...).

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Spillgebees.Transmodel

GitHub Workflow Status (with branch)License

Strongly-typed C# XML bindings for Transmodel-based European public transport standards. Currently, covers NeTEx (Network Timetable Exchange) and SIRI (Service Interface for Real-time Information), with the flexibility to support additional Transmodel-based standards.

Generated from the official CEN XSD schemas and verified with automated tests.

Note: This project was developed with significant AI assistance. While it is functional and tested, it has not yet undergone a full manual review. Treat it as pre-production. Cntributions and feedback are welcome.

Generator tool

A CLI tool that downloads XSD schemas from the official CEN repositories and generates modern C# XML bindings with the latest features. Use it to generate bindings for any schema version, including unreleased branches or specific commits.

PackageNuGet
Spillgebees.Transmodel.GeneratorNuGet
dotnet tool install -g Spillgebees.Transmodel.Generator

NeTEx generation

transmodel-generator generate-netex --version v1.3.1 --output ./Generated --namespace MyApp.NeTEx

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.NeTEx.NeTExhttp://www.netex.org.uk/netexNeTEx types
MyApp.NeTEx.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
MyApp.NeTEx.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)

SIRI generation

transmodel-generator generate-siri --version v2.2 --output ./Generated --namespace MyApp.SIRI

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.SIRI.SIRIhttp://www.siri.org.uk/siriCore SIRI types
MyApp.SIRI.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
MyApp.SIRI.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
MyApp.SIRI.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
MyApp.SIRI.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
MyApp.SIRI.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
MyApp.SIRI.W3http://www.w3.org/XML/1998/namespaceW3 types

CLI reference

transmodel-generator generate-netex [options]
transmodel-generator generate-siri [options]
Options:
-v, --version <version> Schema version tag (default: v1.3.1 for NeTEx, v2.2 for SIRI)
--ref <ref> Git ref (branch or commit SHA), mutually exclusive with --version
-o, --output <output> Output directory for generated C# files (default: ./Generated)
-n, --namespace <namespace> Root C# namespace (default: NeTEx.Models / SIRI.Models)
--clean Delete output directory before generating
--verbose Enable verbose logging
transmodel-generator list-netex-versions List available NeTEx version tags
transmodel-generator list-siri-versions List available SIRI version tags

Pre-generated packages

If you don't need custom generation, install one of the pre-generated packages below. These are built with the same generator, tested, and published to NuGet for every release.

NeTEx

Versions correspond to tags in the NeTEx-CEN/NeTEx GitHub repository.

NeTEx versionPackageNuGet
v1.2Spillgebees.NeTEx.Models.V1_2NuGet
v1.2.2Spillgebees.NeTEx.Models.V1_2_2NuGet
v1.2.3Spillgebees.NeTEx.Models.V1_2_3NuGet
v1.3.0Spillgebees.NeTEx.Models.V1_3_0NuGet
v1.3.1Spillgebees.NeTEx.Models.V1_3_1NuGet
All versionsSpillgebees.NeTEx.ModelsNuGet
dotnet add package Spillgebees.NeTEx.Models.V1_3_1

Each NeTEx version package contains three sub-namespaces:

Sub-namespaceXML NamespaceDescription
.NeTExhttp://www.netex.org.uk/netexNeTEx types
.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.NeTEx.Models.V1_3_1.NeTEx;vardelivery=newPublicationDeliveryStructure{PublicationTimestamp=DateTimeOffset.UtcNow,ParticipantRef="my-data-provider",Description=newMultilingualString{Value="Stop places export"},};varserializer=newXmlSerializer(typeof(PublicationDeliveryStructure));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,delivery);// <?xml version="1.0" encoding="utf-8"?>// <PublicationDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <PublicationTimestamp>2026-02-13T12:00:00+00:00</PublicationTimestamp>// <ParticipantRef>my-data-provider</ParticipantRef>// <Description>Stop places export</Description>// </PublicationDelivery>

SIRI

Versions correspond to tags in the SIRI-CEN/SIRI GitHub repository.

SIRI versionPackageNuGet
v2.1Spillgebees.SIRI.Models.V2_1NuGet
v2.2Spillgebees.SIRI.Models.V2_2NuGet
All versionsSpillgebees.SIRI.ModelsNuGet
dotnet add package Spillgebees.SIRI.Models.V2_2

Each SIRI version package contains seven sub-namespaces:

Sub-namespaceXML NamespaceDescription
.SIRIhttp://www.siri.org.uk/siriSIRI types
.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
.W3http://www.w3.org/XML/1998/namespaceW3 types
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.SIRI.Models.V2_2.SIRI;varsiri=newSiri{ServiceDelivery=newServiceDelivery{ResponseTimestamp=DateTimeOffset.UtcNow,},};varserializer=newXmlSerializer(typeof(Siri));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,siri);// <?xml version="1.0" encoding="utf-8"?>// <Siri xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <ServiceDelivery>// <ResponseTimestamp>2026-02-13T12:00:00+00:00</ResponseTimestamp>// </ServiceDelivery>// </Siri>

Building from source

The generated bindings are not committed to the repository, they are generated at build time. To build locally:

dotnet build Spillgebees.Transmodel.slnx --configuration Release
dotnet test --solution Spillgebees.Transmodel.slnx --configuration Release

The build downloads the XSD schemas from GitHub, generates the XML bindings, and compiles them. Downloaded schemas are cached in local app data so subsequent builds don't require network access.

Use dotnet clean to remove the generated files and trigger a fresh generation on the next build.

Supported frameworks

  • .NET 10.0

License

This project is licensed under the European Union Public Licence v. 1.2 (EUPL-1.2).

The NeTEx schemas are licensed under GPL-3.0 by CEN. EUPL-1.2 is compatible with GPL-3.0 per its compatibility clause. The SIRI schemas are published by CEN on the SIRI-CEN/SIRI repository without an explicit open-source license.

About

Strongly-typed C# XML bindings for European public transport standards (NeTEx, SIRI, ...).

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Spillgebees.Transmodel

GitHub Workflow Status (with branch)License

Strongly-typed C# XML bindings for Transmodel-based European public transport standards. Currently, covers NeTEx (Network Timetable Exchange) and SIRI (Service Interface for Real-time Information), with the flexibility to support additional Transmodel-based standards.

Generated from the official CEN XSD schemas and verified with automated tests.

Note: This project was developed with significant AI assistance. While it is functional and tested, it has not yet undergone a full manual review. Treat it as pre-production. Cntributions and feedback are welcome.

Generator tool

A CLI tool that downloads XSD schemas from the official CEN repositories and generates modern C# XML bindings with the latest features. Use it to generate bindings for any schema version, including unreleased branches or specific commits.

PackageNuGet
Spillgebees.Transmodel.GeneratorNuGet
dotnet tool install -g Spillgebees.Transmodel.Generator

NeTEx generation

transmodel-generator generate-netex --version v1.3.1 --output ./Generated --namespace MyApp.NeTEx

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.NeTEx.NeTExhttp://www.netex.org.uk/netexNeTEx types
MyApp.NeTEx.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
MyApp.NeTEx.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)

SIRI generation

transmodel-generator generate-siri --version v2.2 --output ./Generated --namespace MyApp.SIRI

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.SIRI.SIRIhttp://www.siri.org.uk/siriCore SIRI types
MyApp.SIRI.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
MyApp.SIRI.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
MyApp.SIRI.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
MyApp.SIRI.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
MyApp.SIRI.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
MyApp.SIRI.W3http://www.w3.org/XML/1998/namespaceW3 types

CLI reference

transmodel-generator generate-netex [options]
transmodel-generator generate-siri [options]
Options:
-v, --version <version> Schema version tag (default: v1.3.1 for NeTEx, v2.2 for SIRI)
--ref <ref> Git ref (branch or commit SHA), mutually exclusive with --version
-o, --output <output> Output directory for generated C# files (default: ./Generated)
-n, --namespace <namespace> Root C# namespace (default: NeTEx.Models / SIRI.Models)
--clean Delete output directory before generating
--verbose Enable verbose logging
transmodel-generator list-netex-versions List available NeTEx version tags
transmodel-generator list-siri-versions List available SIRI version tags

Pre-generated packages

If you don't need custom generation, install one of the pre-generated packages below. These are built with the same generator, tested, and published to NuGet for every release.

NeTEx

Versions correspond to tags in the NeTEx-CEN/NeTEx GitHub repository.

NeTEx versionPackageNuGet
v1.2Spillgebees.NeTEx.Models.V1_2NuGet
v1.2.2Spillgebees.NeTEx.Models.V1_2_2NuGet
v1.2.3Spillgebees.NeTEx.Models.V1_2_3NuGet
v1.3.0Spillgebees.NeTEx.Models.V1_3_0NuGet
v1.3.1Spillgebees.NeTEx.Models.V1_3_1NuGet
All versionsSpillgebees.NeTEx.ModelsNuGet
dotnet add package Spillgebees.NeTEx.Models.V1_3_1

Each NeTEx version package contains three sub-namespaces:

Sub-namespaceXML NamespaceDescription
.NeTExhttp://www.netex.org.uk/netexNeTEx types
.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.NeTEx.Models.V1_3_1.NeTEx;vardelivery=newPublicationDeliveryStructure{PublicationTimestamp=DateTimeOffset.UtcNow,ParticipantRef="my-data-provider",Description=newMultilingualString{Value="Stop places export"},};varserializer=newXmlSerializer(typeof(PublicationDeliveryStructure));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,delivery);// <?xml version="1.0" encoding="utf-8"?>// <PublicationDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <PublicationTimestamp>2026-02-13T12:00:00+00:00</PublicationTimestamp>// <ParticipantRef>my-data-provider</ParticipantRef>// <Description>Stop places export</Description>// </PublicationDelivery>

SIRI

Versions correspond to tags in the SIRI-CEN/SIRI GitHub repository.

SIRI versionPackageNuGet
v2.1Spillgebees.SIRI.Models.V2_1NuGet
v2.2Spillgebees.SIRI.Models.V2_2NuGet
All versionsSpillgebees.SIRI.ModelsNuGet
dotnet add package Spillgebees.SIRI.Models.V2_2

Each SIRI version package contains seven sub-namespaces:

Sub-namespaceXML NamespaceDescription
.SIRIhttp://www.siri.org.uk/siriSIRI types
.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
.W3http://www.w3.org/XML/1998/namespaceW3 types
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.SIRI.Models.V2_2.SIRI;varsiri=newSiri{ServiceDelivery=newServiceDelivery{ResponseTimestamp=DateTimeOffset.UtcNow,},};varserializer=newXmlSerializer(typeof(Siri));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,siri);// <?xml version="1.0" encoding="utf-8"?>// <Siri xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <ServiceDelivery>// <ResponseTimestamp>2026-02-13T12:00:00+00:00</ResponseTimestamp>// </ServiceDelivery>// </Siri>

Building from source

The generated bindings are not committed to the repository, they are generated at build time. To build locally:

dotnet build Spillgebees.Transmodel.slnx --configuration Release
dotnet test --solution Spillgebees.Transmodel.slnx --configuration Release

The build downloads the XSD schemas from GitHub, generates the XML bindings, and compiles them. Downloaded schemas are cached in local app data so subsequent builds don't require network access.

Use dotnet clean to remove the generated files and trigger a fresh generation on the next build.

Supported frameworks

  • .NET 10.0

License

This project is licensed under the European Union Public Licence v. 1.2 (EUPL-1.2).

The NeTEx schemas are licensed under GPL-3.0 by CEN. EUPL-1.2 is compatible with GPL-3.0 per its compatibility clause. The SIRI schemas are published by CEN on the SIRI-CEN/SIRI repository without an explicit open-source license.

About

Strongly-typed C# XML bindings for European public transport standards (NeTEx, SIRI, ...).

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Spillgebees.Transmodel

GitHub Workflow Status (with branch)License

Strongly-typed C# XML bindings for Transmodel-based European public transport standards. Currently, covers NeTEx (Network Timetable Exchange) and SIRI (Service Interface for Real-time Information), with the flexibility to support additional Transmodel-based standards.

Generated from the official CEN XSD schemas and verified with automated tests.

Note: This project was developed with significant AI assistance. While it is functional and tested, it has not yet undergone a full manual review. Treat it as pre-production. Cntributions and feedback are welcome.

Generator tool

A CLI tool that downloads XSD schemas from the official CEN repositories and generates modern C# XML bindings with the latest features. Use it to generate bindings for any schema version, including unreleased branches or specific commits.

PackageNuGet
Spillgebees.Transmodel.GeneratorNuGet
dotnet tool install -g Spillgebees.Transmodel.Generator

NeTEx generation

transmodel-generator generate-netex --version v1.3.1 --output ./Generated --namespace MyApp.NeTEx

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.NeTEx.NeTExhttp://www.netex.org.uk/netexNeTEx types
MyApp.NeTEx.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
MyApp.NeTEx.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)

SIRI generation

transmodel-generator generate-siri --version v2.2 --output ./Generated --namespace MyApp.SIRI

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.SIRI.SIRIhttp://www.siri.org.uk/siriCore SIRI types
MyApp.SIRI.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
MyApp.SIRI.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
MyApp.SIRI.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
MyApp.SIRI.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
MyApp.SIRI.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
MyApp.SIRI.W3http://www.w3.org/XML/1998/namespaceW3 types

CLI reference

transmodel-generator generate-netex [options]
transmodel-generator generate-siri [options]
Options:
-v, --version <version> Schema version tag (default: v1.3.1 for NeTEx, v2.2 for SIRI)
--ref <ref> Git ref (branch or commit SHA), mutually exclusive with --version
-o, --output <output> Output directory for generated C# files (default: ./Generated)
-n, --namespace <namespace> Root C# namespace (default: NeTEx.Models / SIRI.Models)
--clean Delete output directory before generating
--verbose Enable verbose logging
transmodel-generator list-netex-versions List available NeTEx version tags
transmodel-generator list-siri-versions List available SIRI version tags

Pre-generated packages

If you don't need custom generation, install one of the pre-generated packages below. These are built with the same generator, tested, and published to NuGet for every release.

NeTEx

Versions correspond to tags in the NeTEx-CEN/NeTEx GitHub repository.

NeTEx versionPackageNuGet
v1.2Spillgebees.NeTEx.Models.V1_2NuGet
v1.2.2Spillgebees.NeTEx.Models.V1_2_2NuGet
v1.2.3Spillgebees.NeTEx.Models.V1_2_3NuGet
v1.3.0Spillgebees.NeTEx.Models.V1_3_0NuGet
v1.3.1Spillgebees.NeTEx.Models.V1_3_1NuGet
All versionsSpillgebees.NeTEx.ModelsNuGet
dotnet add package Spillgebees.NeTEx.Models.V1_3_1

Each NeTEx version package contains three sub-namespaces:

Sub-namespaceXML NamespaceDescription
.NeTExhttp://www.netex.org.uk/netexNeTEx types
.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.NeTEx.Models.V1_3_1.NeTEx;vardelivery=newPublicationDeliveryStructure{PublicationTimestamp=DateTimeOffset.UtcNow,ParticipantRef="my-data-provider",Description=newMultilingualString{Value="Stop places export"},};varserializer=newXmlSerializer(typeof(PublicationDeliveryStructure));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,delivery);// <?xml version="1.0" encoding="utf-8"?>// <PublicationDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <PublicationTimestamp>2026-02-13T12:00:00+00:00</PublicationTimestamp>// <ParticipantRef>my-data-provider</ParticipantRef>// <Description>Stop places export</Description>// </PublicationDelivery>

SIRI

Versions correspond to tags in the SIRI-CEN/SIRI GitHub repository.

SIRI versionPackageNuGet
v2.1Spillgebees.SIRI.Models.V2_1NuGet
v2.2Spillgebees.SIRI.Models.V2_2NuGet
All versionsSpillgebees.SIRI.ModelsNuGet
dotnet add package Spillgebees.SIRI.Models.V2_2

Each SIRI version package contains seven sub-namespaces:

Sub-namespaceXML NamespaceDescription
.SIRIhttp://www.siri.org.uk/siriSIRI types
.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
.W3http://www.w3.org/XML/1998/namespaceW3 types
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.SIRI.Models.V2_2.SIRI;varsiri=newSiri{ServiceDelivery=newServiceDelivery{ResponseTimestamp=DateTimeOffset.UtcNow,},};varserializer=newXmlSerializer(typeof(Siri));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,siri);// <?xml version="1.0" encoding="utf-8"?>// <Siri xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <ServiceDelivery>// <ResponseTimestamp>2026-02-13T12:00:00+00:00</ResponseTimestamp>// </ServiceDelivery>// </Siri>

Building from source

The generated bindings are not committed to the repository, they are generated at build time. To build locally:

dotnet build Spillgebees.Transmodel.slnx --configuration Release
dotnet test --solution Spillgebees.Transmodel.slnx --configuration Release

The build downloads the XSD schemas from GitHub, generates the XML bindings, and compiles them. Downloaded schemas are cached in local app data so subsequent builds don't require network access.

Use dotnet clean to remove the generated files and trigger a fresh generation on the next build.

Supported frameworks

  • .NET 10.0

License

This project is licensed under the European Union Public Licence v. 1.2 (EUPL-1.2).

The NeTEx schemas are licensed under GPL-3.0 by CEN. EUPL-1.2 is compatible with GPL-3.0 per its compatibility clause. The SIRI schemas are published by CEN on the SIRI-CEN/SIRI repository without an explicit open-source license.

About

Strongly-typed C# XML bindings for European public transport standards (NeTEx, SIRI, ...).

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Spillgebees.Transmodel

GitHub Workflow Status (with branch)License

Strongly-typed C# XML bindings for Transmodel-based European public transport standards. Currently, covers NeTEx (Network Timetable Exchange) and SIRI (Service Interface for Real-time Information), with the flexibility to support additional Transmodel-based standards.

Generated from the official CEN XSD schemas and verified with automated tests.

Note: This project was developed with significant AI assistance. While it is functional and tested, it has not yet undergone a full manual review. Treat it as pre-production. Cntributions and feedback are welcome.

Generator tool

A CLI tool that downloads XSD schemas from the official CEN repositories and generates modern C# XML bindings with the latest features. Use it to generate bindings for any schema version, including unreleased branches or specific commits.

PackageNuGet
Spillgebees.Transmodel.GeneratorNuGet
dotnet tool install -g Spillgebees.Transmodel.Generator

NeTEx generation

transmodel-generator generate-netex --version v1.3.1 --output ./Generated --namespace MyApp.NeTEx

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.NeTEx.NeTExhttp://www.netex.org.uk/netexNeTEx types
MyApp.NeTEx.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
MyApp.NeTEx.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)

SIRI generation

transmodel-generator generate-siri --version v2.2 --output ./Generated --namespace MyApp.SIRI

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.SIRI.SIRIhttp://www.siri.org.uk/siriCore SIRI types
MyApp.SIRI.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
MyApp.SIRI.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
MyApp.SIRI.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
MyApp.SIRI.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
MyApp.SIRI.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
MyApp.SIRI.W3http://www.w3.org/XML/1998/namespaceW3 types

CLI reference

transmodel-generator generate-netex [options]
transmodel-generator generate-siri [options]
Options:
-v, --version <version> Schema version tag (default: v1.3.1 for NeTEx, v2.2 for SIRI)
--ref <ref> Git ref (branch or commit SHA), mutually exclusive with --version
-o, --output <output> Output directory for generated C# files (default: ./Generated)
-n, --namespace <namespace> Root C# namespace (default: NeTEx.Models / SIRI.Models)
--clean Delete output directory before generating
--verbose Enable verbose logging
transmodel-generator list-netex-versions List available NeTEx version tags
transmodel-generator list-siri-versions List available SIRI version tags

Pre-generated packages

If you don't need custom generation, install one of the pre-generated packages below. These are built with the same generator, tested, and published to NuGet for every release.

NeTEx

Versions correspond to tags in the NeTEx-CEN/NeTEx GitHub repository.

NeTEx versionPackageNuGet
v1.2Spillgebees.NeTEx.Models.V1_2NuGet
v1.2.2Spillgebees.NeTEx.Models.V1_2_2NuGet
v1.2.3Spillgebees.NeTEx.Models.V1_2_3NuGet
v1.3.0Spillgebees.NeTEx.Models.V1_3_0NuGet
v1.3.1Spillgebees.NeTEx.Models.V1_3_1NuGet
All versionsSpillgebees.NeTEx.ModelsNuGet
dotnet add package Spillgebees.NeTEx.Models.V1_3_1

Each NeTEx version package contains three sub-namespaces:

Sub-namespaceXML NamespaceDescription
.NeTExhttp://www.netex.org.uk/netexNeTEx types
.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.NeTEx.Models.V1_3_1.NeTEx;vardelivery=newPublicationDeliveryStructure{PublicationTimestamp=DateTimeOffset.UtcNow,ParticipantRef="my-data-provider",Description=newMultilingualString{Value="Stop places export"},};varserializer=newXmlSerializer(typeof(PublicationDeliveryStructure));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,delivery);// <?xml version="1.0" encoding="utf-8"?>// <PublicationDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <PublicationTimestamp>2026-02-13T12:00:00+00:00</PublicationTimestamp>// <ParticipantRef>my-data-provider</ParticipantRef>// <Description>Stop places export</Description>// </PublicationDelivery>

SIRI

Versions correspond to tags in the SIRI-CEN/SIRI GitHub repository.

SIRI versionPackageNuGet
v2.1Spillgebees.SIRI.Models.V2_1NuGet
v2.2Spillgebees.SIRI.Models.V2_2NuGet
All versionsSpillgebees.SIRI.ModelsNuGet
dotnet add package Spillgebees.SIRI.Models.V2_2

Each SIRI version package contains seven sub-namespaces:

Sub-namespaceXML NamespaceDescription
.SIRIhttp://www.siri.org.uk/siriSIRI types
.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
.W3http://www.w3.org/XML/1998/namespaceW3 types
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.SIRI.Models.V2_2.SIRI;varsiri=newSiri{ServiceDelivery=newServiceDelivery{ResponseTimestamp=DateTimeOffset.UtcNow,},};varserializer=newXmlSerializer(typeof(Siri));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,siri);// <?xml version="1.0" encoding="utf-8"?>// <Siri xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <ServiceDelivery>// <ResponseTimestamp>2026-02-13T12:00:00+00:00</ResponseTimestamp>// </ServiceDelivery>// </Siri>

Building from source

The generated bindings are not committed to the repository, they are generated at build time. To build locally:

dotnet build Spillgebees.Transmodel.slnx --configuration Release
dotnet test --solution Spillgebees.Transmodel.slnx --configuration Release

The build downloads the XSD schemas from GitHub, generates the XML bindings, and compiles them. Downloaded schemas are cached in local app data so subsequent builds don't require network access.

Use dotnet clean to remove the generated files and trigger a fresh generation on the next build.

Supported frameworks

  • .NET 10.0

License

This project is licensed under the European Union Public Licence v. 1.2 (EUPL-1.2).

The NeTEx schemas are licensed under GPL-3.0 by CEN. EUPL-1.2 is compatible with GPL-3.0 per its compatibility clause. The SIRI schemas are published by CEN on the SIRI-CEN/SIRI repository without an explicit open-source license.

About

Strongly-typed C# XML bindings for European public transport standards (NeTEx, SIRI, ...).

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Spillgebees.Transmodel

GitHub Workflow Status (with branch)License

Strongly-typed C# XML bindings for Transmodel-based European public transport standards. Currently, covers NeTEx (Network Timetable Exchange) and SIRI (Service Interface for Real-time Information), with the flexibility to support additional Transmodel-based standards.

Generated from the official CEN XSD schemas and verified with automated tests.

Note: This project was developed with significant AI assistance. While it is functional and tested, it has not yet undergone a full manual review. Treat it as pre-production. Cntributions and feedback are welcome.

Generator tool

A CLI tool that downloads XSD schemas from the official CEN repositories and generates modern C# XML bindings with the latest features. Use it to generate bindings for any schema version, including unreleased branches or specific commits.

PackageNuGet
Spillgebees.Transmodel.GeneratorNuGet
dotnet tool install -g Spillgebees.Transmodel.Generator

NeTEx generation

transmodel-generator generate-netex --version v1.3.1 --output ./Generated --namespace MyApp.NeTEx

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.NeTEx.NeTExhttp://www.netex.org.uk/netexNeTEx types
MyApp.NeTEx.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
MyApp.NeTEx.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)

SIRI generation

transmodel-generator generate-siri --version v2.2 --output ./Generated --namespace MyApp.SIRI

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.SIRI.SIRIhttp://www.siri.org.uk/siriCore SIRI types
MyApp.SIRI.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
MyApp.SIRI.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
MyApp.SIRI.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
MyApp.SIRI.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
MyApp.SIRI.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
MyApp.SIRI.W3http://www.w3.org/XML/1998/namespaceW3 types

CLI reference

transmodel-generator generate-netex [options]
transmodel-generator generate-siri [options]
Options:
-v, --version <version> Schema version tag (default: v1.3.1 for NeTEx, v2.2 for SIRI)
--ref <ref> Git ref (branch or commit SHA), mutually exclusive with --version
-o, --output <output> Output directory for generated C# files (default: ./Generated)
-n, --namespace <namespace> Root C# namespace (default: NeTEx.Models / SIRI.Models)
--clean Delete output directory before generating
--verbose Enable verbose logging
transmodel-generator list-netex-versions List available NeTEx version tags
transmodel-generator list-siri-versions List available SIRI version tags

Pre-generated packages

If you don't need custom generation, install one of the pre-generated packages below. These are built with the same generator, tested, and published to NuGet for every release.

NeTEx

Versions correspond to tags in the NeTEx-CEN/NeTEx GitHub repository.

NeTEx versionPackageNuGet
v1.2Spillgebees.NeTEx.Models.V1_2NuGet
v1.2.2Spillgebees.NeTEx.Models.V1_2_2NuGet
v1.2.3Spillgebees.NeTEx.Models.V1_2_3NuGet
v1.3.0Spillgebees.NeTEx.Models.V1_3_0NuGet
v1.3.1Spillgebees.NeTEx.Models.V1_3_1NuGet
All versionsSpillgebees.NeTEx.ModelsNuGet
dotnet add package Spillgebees.NeTEx.Models.V1_3_1

Each NeTEx version package contains three sub-namespaces:

Sub-namespaceXML NamespaceDescription
.NeTExhttp://www.netex.org.uk/netexNeTEx types
.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.NeTEx.Models.V1_3_1.NeTEx;vardelivery=newPublicationDeliveryStructure{PublicationTimestamp=DateTimeOffset.UtcNow,ParticipantRef="my-data-provider",Description=newMultilingualString{Value="Stop places export"},};varserializer=newXmlSerializer(typeof(PublicationDeliveryStructure));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,delivery);// <?xml version="1.0" encoding="utf-8"?>// <PublicationDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <PublicationTimestamp>2026-02-13T12:00:00+00:00</PublicationTimestamp>// <ParticipantRef>my-data-provider</ParticipantRef>// <Description>Stop places export</Description>// </PublicationDelivery>

SIRI

Versions correspond to tags in the SIRI-CEN/SIRI GitHub repository.

SIRI versionPackageNuGet
v2.1Spillgebees.SIRI.Models.V2_1NuGet
v2.2Spillgebees.SIRI.Models.V2_2NuGet
All versionsSpillgebees.SIRI.ModelsNuGet
dotnet add package Spillgebees.SIRI.Models.V2_2

Each SIRI version package contains seven sub-namespaces:

Sub-namespaceXML NamespaceDescription
.SIRIhttp://www.siri.org.uk/siriSIRI types
.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
.W3http://www.w3.org/XML/1998/namespaceW3 types
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.SIRI.Models.V2_2.SIRI;varsiri=newSiri{ServiceDelivery=newServiceDelivery{ResponseTimestamp=DateTimeOffset.UtcNow,},};varserializer=newXmlSerializer(typeof(Siri));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,siri);// <?xml version="1.0" encoding="utf-8"?>// <Siri xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <ServiceDelivery>// <ResponseTimestamp>2026-02-13T12:00:00+00:00</ResponseTimestamp>// </ServiceDelivery>// </Siri>

Building from source

The generated bindings are not committed to the repository, they are generated at build time. To build locally:

dotnet build Spillgebees.Transmodel.slnx --configuration Release
dotnet test --solution Spillgebees.Transmodel.slnx --configuration Release

The build downloads the XSD schemas from GitHub, generates the XML bindings, and compiles them. Downloaded schemas are cached in local app data so subsequent builds don't require network access.

Use dotnet clean to remove the generated files and trigger a fresh generation on the next build.

Supported frameworks

  • .NET 10.0

License

This project is licensed under the European Union Public Licence v. 1.2 (EUPL-1.2).

The NeTEx schemas are licensed under GPL-3.0 by CEN. EUPL-1.2 is compatible with GPL-3.0 per its compatibility clause. The SIRI schemas are published by CEN on the SIRI-CEN/SIRI repository without an explicit open-source license.

About

Strongly-typed C# XML bindings for European public transport standards (NeTEx, SIRI, ...).

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Spillgebees.Transmodel

GitHub Workflow Status (with branch)License

Strongly-typed C# XML bindings for Transmodel-based European public transport standards. Currently, covers NeTEx (Network Timetable Exchange) and SIRI (Service Interface for Real-time Information), with the flexibility to support additional Transmodel-based standards.

Generated from the official CEN XSD schemas and verified with automated tests.

Note: This project was developed with significant AI assistance. While it is functional and tested, it has not yet undergone a full manual review. Treat it as pre-production. Cntributions and feedback are welcome.

Generator tool

A CLI tool that downloads XSD schemas from the official CEN repositories and generates modern C# XML bindings with the latest features. Use it to generate bindings for any schema version, including unreleased branches or specific commits.

PackageNuGet
Spillgebees.Transmodel.GeneratorNuGet
dotnet tool install -g Spillgebees.Transmodel.Generator

NeTEx generation

transmodel-generator generate-netex --version v1.3.1 --output ./Generated --namespace MyApp.NeTEx

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.NeTEx.NeTExhttp://www.netex.org.uk/netexNeTEx types
MyApp.NeTEx.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
MyApp.NeTEx.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)

SIRI generation

transmodel-generator generate-siri --version v2.2 --output ./Generated --namespace MyApp.SIRI

Generates XML bindings with the following sub-namespaces:

Sub-namespaceXML NamespaceDescription
MyApp.SIRI.SIRIhttp://www.siri.org.uk/siriCore SIRI types
MyApp.SIRI.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
MyApp.SIRI.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
MyApp.SIRI.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
MyApp.SIRI.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
MyApp.SIRI.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
MyApp.SIRI.W3http://www.w3.org/XML/1998/namespaceW3 types

CLI reference

transmodel-generator generate-netex [options]
transmodel-generator generate-siri [options]
Options:
-v, --version <version> Schema version tag (default: v1.3.1 for NeTEx, v2.2 for SIRI)
--ref <ref> Git ref (branch or commit SHA), mutually exclusive with --version
-o, --output <output> Output directory for generated C# files (default: ./Generated)
-n, --namespace <namespace> Root C# namespace (default: NeTEx.Models / SIRI.Models)
--clean Delete output directory before generating
--verbose Enable verbose logging
transmodel-generator list-netex-versions List available NeTEx version tags
transmodel-generator list-siri-versions List available SIRI version tags

Pre-generated packages

If you don't need custom generation, install one of the pre-generated packages below. These are built with the same generator, tested, and published to NuGet for every release.

NeTEx

Versions correspond to tags in the NeTEx-CEN/NeTEx GitHub repository.

NeTEx versionPackageNuGet
v1.2Spillgebees.NeTEx.Models.V1_2NuGet
v1.2.2Spillgebees.NeTEx.Models.V1_2_2NuGet
v1.2.3Spillgebees.NeTEx.Models.V1_2_3NuGet
v1.3.0Spillgebees.NeTEx.Models.V1_3_0NuGet
v1.3.1Spillgebees.NeTEx.Models.V1_3_1NuGet
All versionsSpillgebees.NeTEx.ModelsNuGet
dotnet add package Spillgebees.NeTEx.Models.V1_3_1

Each NeTEx version package contains three sub-namespaces:

Sub-namespaceXML NamespaceDescription
.NeTExhttp://www.netex.org.uk/netexNeTEx types
.SIRIhttp://www.siri.org.uk/siriSIRI types (subset bundled with NeTEx)
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.NeTEx.Models.V1_3_1.NeTEx;vardelivery=newPublicationDeliveryStructure{PublicationTimestamp=DateTimeOffset.UtcNow,ParticipantRef="my-data-provider",Description=newMultilingualString{Value="Stop places export"},};varserializer=newXmlSerializer(typeof(PublicationDeliveryStructure));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,delivery);// <?xml version="1.0" encoding="utf-8"?>// <PublicationDelivery xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <PublicationTimestamp>2026-02-13T12:00:00+00:00</PublicationTimestamp>// <ParticipantRef>my-data-provider</ParticipantRef>// <Description>Stop places export</Description>// </PublicationDelivery>

SIRI

Versions correspond to tags in the SIRI-CEN/SIRI GitHub repository.

SIRI versionPackageNuGet
v2.1Spillgebees.SIRI.Models.V2_1NuGet
v2.2Spillgebees.SIRI.Models.V2_2NuGet
All versionsSpillgebees.SIRI.ModelsNuGet
dotnet add package Spillgebees.SIRI.Models.V2_2

Each SIRI version package contains seven sub-namespaces:

Sub-namespaceXML NamespaceDescription
.SIRIhttp://www.siri.org.uk/siriSIRI types
.IFOPThttp://www.ifopt.org.uk/ifoptIFOPT types
.ACSBhttp://www.ifopt.org.uk/acsbAccessibility types
.DATEX2http://datex2.eu/schema/2_0RC1/2_0DATEX2 types
.WSDLhttp://wsdl.siri.org.ukWSDL/SOAP types
.GMLhttp://www.opengis.net/gml/3.2GML types (geographic markup)
.W3http://www.w3.org/XML/1998/namespaceW3 types
usingSystem.Text;usingSystem.Xml;usingSystem.Xml.Serialization;usingSpillgebees.SIRI.Models.V2_2.SIRI;varsiri=newSiri{ServiceDelivery=newServiceDelivery{ResponseTimestamp=DateTimeOffset.UtcNow,},};varserializer=newXmlSerializer(typeof(Siri));usingvarstream=newMemoryStream();usingvarxmlWriter=XmlWriter.Create(stream,newXmlWriterSettings{Encoding=newUTF8Encoding(encoderShouldEmitUTF8Identifier:false),Indent=true,});serializer.Serialize(xmlWriter,siri);// <?xml version="1.0" encoding="utf-8"?>// <Siri xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>// <ServiceDelivery>// <ResponseTimestamp>2026-02-13T12:00:00+00:00</ResponseTimestamp>// </ServiceDelivery>// </Siri>

Building from source

The generated bindings are not committed to the repository, they are generated at build time. To build locally:

dotnet build Spillgebees.Transmodel.slnx --configuration Release
dotnet test --solution Spillgebees.Transmodel.slnx --configuration Release

The build downloads the XSD schemas from GitHub, generates the XML bindings, and compiles them. Downloaded schemas are cached in local app data so subsequent builds don't require network access.

Use dotnet clean to remove the generated files and trigger a fresh generation on the next build.

Supported frameworks

  • .NET 10.0

License

This project is licensed under the European Union Public Licence v. 1.2 (EUPL-1.2).

The NeTEx schemas are licensed under GPL-3.0 by CEN. EUPL-1.2 is compatible with GPL-3.0 per its compatibility clause. The SIRI schemas are published by CEN on the SIRI-CEN/SIRI repository without an explicit open-source license.

About

Strongly-typed C# XML bindings for European public transport standards (NeTEx, SIRI, ...).

Topics

Resources

Stars

3 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages