OpenTraceability 1.2.2-beta39

This is a prerelease version of OpenTraceability.
There is a newer version of this package available.
See the version list below for details.
dotnet add package OpenTraceability --version 1.2.2-beta39
                    
NuGet\Install-Package OpenTraceability -Version 1.2.2-beta39
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="OpenTraceability" Version="1.2.2-beta39" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="OpenTraceability" Version="1.2.2-beta39" />
                    
Directory.Packages.props
<PackageReference Include="OpenTraceability" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add OpenTraceability --version 1.2.2-beta39
                    
#r "nuget: OpenTraceability, 1.2.2-beta39"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package OpenTraceability@1.2.2-beta39
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=OpenTraceability&version=1.2.2-beta39&prerelease
                    
Install as a Cake Addin
#tool nuget:?package=OpenTraceability&version=1.2.2-beta39&prerelease
                    
Install as a Cake Tool

Open Traceability (C#)

This is an open-source library for handling traceability data in .NET using C#.

Setup

Before you can use the library you need to make sure to call the Setup method.

If you are just using the core library, you should call:

OpenTraceability.Setup.Initialize();

However, if you are using an extension library such as:

  • OpenTraceability.GDST
  • OpenTraceability.MSC

Then you just need to call the setup method for that library such as:

  • OpenTraceability.GDST.Setup.Initialize();
  • OpenTraceability.MSC.Setup.Initialize();

And that will initialize everything you need.

Models

We have C# models that represent the various data objects in EPCIS including events, documents, and master data. Feel free to explore them.

This library was designed so that it could easily be extended to support many new CTEs/KDEs. It was also designed so that even without an extension library, the core library can still receive CTEs/KDEs from unknown extensions and namespaces and serialize/deserialize the data without losing any information.

More information on extensions can be found in the documentation later on. (coming soon)

EPCIS Query Document / EPCIS Document

These two objects inherit from the same base class EPCISBaseDocument and represent the two types of documents in EPCIS. They are used to represent the XML and JSON-LD versions of the documents. The Events and Master Data are stored in the EPCISBaseDocument.Events and EPCISBaseDocument.MasterData properties respectively.

It's important to note that the EPCISBaseDocument.EPCISVersion property is used to determine the version of the document. This is important because when mapping from the models into the XML or JSON-LD formats, the version is used to determine which format to use. If you are trying to map into EPCIS XML 2.0 and not EPCIS XML 1.2, then you need to make sure that the EPCISBaseDocument.Version property is set to EPCISVersion.V2.

EPCIS Document Header

The XML format for EPCIS 1.2 and 2.0 require a Standard Business Document Header (SBDH). This is represented by the StandardBusinessDocumentHeader class. When converting from EPCIS JSON-LD into XML, you need to make sure to set this if check schema is enabled. Otherwise you will fail the schema validation.

You can use StandardBusinessDocumentHeader.DummyHeader to get a dummy header that you can use to pass schema validation.

Mapping

We support mapping between EPCIS 1.2 XML, EPCIS 2.0 XML, and EPCIS 2.0 JSON-LD. Our mappers are thread-safe and are accessible from the OpenTraceability.Mappers.OpenTraceabilityMappers static object.

Reading EPCIS 1.2 XML

// You can read an XML string representing an EPCIS 1.2 Query Document in XML format.
EPCISQueryDocument doc = OpenTraceabilityMappers.EPCISQueryDocument.XML.Map(queryDocXmlStr);
// You can read an XML string representing an EPCIS 1.2 Document in XML format.
EPCISDocument doc = OpenTraceabilityMappers.EPCISDocument.XML.Map(docXmlStr);

Reading EPCIS 2.0 XML

This is done the same way as the 1.2 XML. It auto-detects the version and maps it to the correct object.

// You can read an XML string representing an EPCIS 2.0 Query Document in XML format.
EPCISQueryDocument doc = OpenTraceabilityMappers.EPCISQueryDocument.XML.Map(queryDocXmlStr);
// You can read an XML string representing an EPCIS 2.0 Document in XML format.
EPCISDocument doc = OpenTraceabilityMappers.EPCISDocument.XML.Map(docXmlStr);

Reading EPCIS 2.0 JSON-LD

// You can read an XML string representing an EPCIS 2.0 Query Document in JSON-LD format.
EPCISQueryDocument doc = OpenTraceabilityMappers.EPCISQueryDocument.JSON.Map(queryDocXmlStr);
// You can read an XML string representing an EPCIS 2.0 Document in JSON-LD format.
EPCISDocument doc = OpenTraceabilityMappers.EPCISDocument.JSON.Map(docXmlStr);

Convert EPCIS 1.2 XML to EPCIS 2.0 XML

EPCISQueryDocument doc = OpenTraceabilityMappers.EPCISQueryDocument.XML.Map(queryDocXmlStr_1_2);

// make sure you set the version to 2.0
doc.EPCISVersion = EPCISVersion.V2;

string queryDocXmlStr_2_0 = OpenTraceabilityMappers.EPCISQueryDocument.XML.Map(doc);

Querying for Data

We support querying traceability and master data using a very specific flavor of communication protocols from GS1.

  • We support querying for event data using the GET - /events endpoint on the EPCIS 2.0 Query Interface.
  • We support resolving master data from a GS1 Digital Link Resolver using the GS1 Web Vocab JSON-LD format.

EPCIS Query Interface

The first interface that can be queried is for events from an EPCIS 2.0 Query Interface at the GET - /events endpoint. This is done using the EPCISTraceabilityResolver class.

In order to use this, you need:

  • EPCISQueryInterfaceOptions

    • URL
    • Version
    • Format
  • EPCISQueryParameters

    • Here you can define one or more parameters for filtering the desired results.
using HttpClient = new HttpClient();

EPCISQueryInterfaceOptions options = new EPCISQueryInterfaceOptions()
{
    URL = new Uri(url),
    Format = _format,
    Version = _version,
    EnableStackTrace = true
};

EPC epc = new EPC("urn:epc:id:sgtin:0614141.107346.2019");
EPCISQueryParameters parameters = new EPCISQueryParameters(epc);

return await EPCISTraceabilityResolver.QueryEvents(options, parameters, client);

You can also use the trace-back feature to automatically trace-back the EPC.

using HttpClient = new HttpClient();

EPCISQueryInterfaceOptions options = new EPCISQueryInterfaceOptions()
{
    URL = new Uri(url),
    Format = _format,
    Version = _version,
    EnableStackTrace = true
};

EPC epc = new EPC("urn:epc:id:sgtin:0614141.107346.2019");

return await EPCISTraceabilityResolver.Traceback(options, epc, client);

You can also resolve master data from a GS1 Digital Link resolver with the MasterDataResolver class. This class takes in a DigitalLinkQueryOptions object that contains the URL of the resolver and also an EPCISBaseDocument and will search the EPCISBaseDocument for any master data that is not in the document but referenced in the events, and try and resolve it and add it to the document.

DigitalLinkQueryOptions options = new DigitalLinkQueryOptions()
{
	URL = new Uri(url),
	EnableStackTrace = true
};

await MasterDataResolver.ResolveMasterData(options, doc, client);

Finally

You can always look in our unit tests for more examples of how to use the library.

Product Compatible and additional computed target framework versions.
.NET net7.0 is compatible.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 was computed.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on OpenTraceability:

Package Downloads
OpenTraceability.GDST

Open source libraries for working with EPCIS in C# with extensions for GDST.

OpenTraceability.TestServerPackage

A packaged version of a test server that can be deployed and used prop up a dummy EPCIS/Digital Link resolver..

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.5.80 110 10/10/2025
1.5.79 104 10/10/2025
1.5.78 110 10/10/2025
1.4.75 4,295 4/14/2025
1.4.72 508 4/1/2025
1.4.71 1,558 1/30/2025
1.4.69 1,612 12/18/2024
1.4.68 264 12/13/2024
1.4.67 351 12/5/2024
1.4.66 2,478 10/5/2024
1.4.64 189 10/4/2024
1.4.63 203 10/4/2024
1.4.62 206 10/3/2024
1.4.61 1,016 7/30/2024
1.4.60 201 7/26/2024
1.4.59 1,701 6/25/2024
1.4.58 1,093 5/31/2024
1.4.57 424 5/22/2024
1.4.56 1,418 4/17/2024
1.3.55 366 4/15/2024
1.3.54 767 2/6/2024
1.3.53 409 2/4/2024
1.2.14 345 2/2/2024
1.2.13 337 2/2/2024
1.2.12 1,163 11/29/2023
1.2.11 791 7/14/2023
1.2.10 653 7/10/2023
1.2.9 620 7/10/2023
1.2.8 593 7/7/2023
1.2.7 727 7/6/2023
1.2.7-beta86 568 7/6/2023
1.2.6 555 7/5/2023
1.2.6-beta85 551 7/5/2023
1.2.5 632 6/29/2023
1.2.5-beta84 537 7/5/2023
1.2.5-beta83 630 6/29/2023
1.2.4 640 6/28/2023
1.2.4-beta82 525 6/29/2023
1.2.4-beta80 536 6/29/2023
1.2.4-beta79 577 6/28/2023
1.2.4-beta78 623 6/28/2023
1.2.4-beta77 556 6/28/2023
1.2.4-beta76 592 6/28/2023
1.2.4-beta75 604 6/28/2023
1.2.4-beta74 573 6/28/2023
1.2.4-beta73 572 6/28/2023
1.2.4-beta72 530 6/28/2023
1.2.4-beta71 551 6/28/2023
1.2.4-beta70 547 6/28/2023
1.2.4-beta69 561 6/28/2023
1.2.4-beta68 546 6/28/2023
1.2.4-beta67 624 6/28/2023
1.2.4-beta66 635 6/28/2023
1.2.4-beta65 525 6/28/2023
1.2.4-beta64 595 6/28/2023
1.2.4-beta63 617 6/28/2023
1.2.4-beta62 594 6/28/2023
1.2.4-beta61 598 6/28/2023
1.2.4-beta60 650 6/28/2023
1.2.4-beta59 563 6/28/2023
1.2.4-beta58 627 6/28/2023
1.2.4-beta57 552 6/28/2023
1.2.4-beta56 613 6/28/2023
1.2.4-beta55 611 6/28/2023
1.2.4-beta54 529 6/28/2023
1.2.3 728 6/15/2023
1.2.2 667 6/13/2023
1.2.2-beta53 562 6/28/2023
1.2.2-beta52 603 6/28/2023
1.2.2-beta51 545 6/28/2023
1.2.2-beta50 584 6/28/2023
1.2.2-beta49 558 6/28/2023
1.2.2-beta48 622 6/28/2023
1.2.2-beta47 589 6/28/2023
1.2.2-beta46 611 6/28/2023
1.2.2-beta45 618 6/28/2023
1.2.2-beta44 587 6/28/2023
1.2.2-beta43 577 6/23/2023
1.2.2-beta42 605 6/23/2023
1.2.2-beta41 604 6/23/2023
1.2.2-beta40 602 6/23/2023
1.2.2-beta39 611 6/23/2023
1.2.2-beta38 637 6/23/2023
1.2.2-beta37 630 6/13/2023
1.2.1 717 5/23/2023
1.2.1-beta36 603 6/13/2023
1.2.1-beta35 565 5/23/2023
1.2.0 639 5/23/2023
1.2.0-beta34 582 5/23/2023
1.2.0-beta33 539 5/23/2023
1.1.9 674 5/12/2023
1.1.9-beta32 611 5/12/2023
1.1.8 678 5/12/2023
1.1.8-beta31 611 5/12/2023
1.1.7 610 5/12/2023
1.1.7-beta30 561 5/12/2023
1.1.6 569 5/8/2023
1.1.6-beta29 541 5/8/2023
1.1.5 598 5/8/2023
1.1.5-beta28 580 5/8/2023
1.1.5-beta27 610 5/8/2023
1.1.4 677 5/8/2023
1.1.4-beta26 569 5/8/2023
1.1.3 610 5/7/2023
1.1.3-beta25 560 5/8/2023
1.1.3-beta24 546 5/7/2023
1.1.2 605 5/5/2023
1.1.2-beta23 567 5/7/2023
1.1.2-beta22 521 5/5/2023
1.1.1 582 5/4/2023
1.1.1-beta20 559 5/4/2023
1.1.0 609 5/4/2023
1.1.0-beta19 556 5/4/2023
1.0.8 654 5/4/2023
1.0.8-beta18 557 5/4/2023
1.0.8-beta17 498 5/4/2023
1.0.7 648 5/3/2023
1.0.7-beta14 569 5/3/2023
1.0.6 632 5/3/2023
1.0.6-beta13 514 5/3/2023
1.0.5 614 5/3/2023
1.0.5-beta12 570 5/3/2023
1.0.5-beta11 531 5/3/2023
1.0.4 609 5/3/2023
1.0.4-beta9 505 5/3/2023
1.0.4-beta10 529 5/3/2023
1.0.2 682 5/3/2023
1.0.2-beta8 594 5/3/2023
1.0.1 628 5/3/2023
1.0.0 651 4/20/2023
1.0.0-beta9 540 4/20/2023
1.0.0-beta5 520 4/30/2023
1.0.0-beta4 546 4/20/2023
1.0.0-beta1 481 4/20/2023
1.0.0-beta 465 4/20/2023