Microsoft.SmartPlaces.Facilities.OntologyMapper 0.8.3-preview

Prefix Reserved
This is a prerelease version of Microsoft.SmartPlaces.Facilities.OntologyMapper.
dotnet add package Microsoft.SmartPlaces.Facilities.OntologyMapper --version 0.8.3-preview                
NuGet\Install-Package Microsoft.SmartPlaces.Facilities.OntologyMapper -Version 0.8.3-preview                
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="Microsoft.SmartPlaces.Facilities.OntologyMapper" Version="0.8.3-preview" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Microsoft.SmartPlaces.Facilities.OntologyMapper --version 0.8.3-preview                
#r "nuget: Microsoft.SmartPlaces.Facilities.OntologyMapper, 0.8.3-preview"                
#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.
// Install Microsoft.SmartPlaces.Facilities.OntologyMapper as a Cake Addin
#addin nuget:?package=Microsoft.SmartPlaces.Facilities.OntologyMapper&version=0.8.3-preview&prerelease

// Install Microsoft.SmartPlaces.Facilities.OntologyMapper as a Cake Tool
#tool nuget:?package=Microsoft.SmartPlaces.Facilities.OntologyMapper&version=0.8.3-preview&prerelease                

Ontology Mapper

Motivation and purpose

The OntologyMapper allows developers to define conversion processes from one DTDL-based Ontology to a different DTDL-based Ontology.

This may be needed in cases where cloning a topology which uses a propriety ontology, and converting to an open standard ontology such as RealEstateCore.

These conversion rules are defined in a series of Mappings files here in the repo which are embedded in the assembly to make versioning easier.

The key is that these files describe exceptions only. If the source DTMI and Target DTMI are identical, nothing needs to appear for the mapping between the two. Thus, if an source and target use the same ontology and version, the mapping file will have very little content.

This library provides helpers useful for mapping one Digital Twins Definition Language (DTDL) model to a different DTDL model. It defines a set of classes which allow the following types to be mapped:

  1. Interfaces
  2. Relationships
  3. Property Projections
  4. Backfilling of Properties
  5. Object Transformations

A json file can be created with collections of these types of mappings, and then that can be used in a process which uses one DTDL ontology as an input and outputs a different DTDL ontology.

File Sections

The header section is for informational purposes designating the source and destination DTDLs. This is to provide an at-a-glance summary of what DTDLs this file maps.

Input Ontologies

A collection of what ontologies make up the input source for the conversion

Field Description
Name The name of the ontology
Version The version of the ontology
DtdlVersion Which version of the DTDL language is currently in use for this provider

Output Ontologies

A collection of what ontologies make up the output source for the conversion

Field Description
Name The name of the ontology
Version The version of the ontology
DtdlVersion Which version of the DTDL language is currently in use for this provider

NamespaceRemaps

A collection of mappings from one namespace name to another namespace name. This is used after the explicit InterfaceRemaps to execute a simple search and replace of a string in an input model to convert it to an output model. That is, in those cases where the input model interface name is exactly the same as the output model interface name, but the namespace is different, then the input model''s namespace will be replaced by the NamespaceRemap's output namespace.

Field Description
InputNamespace The string to search for in the input dtmi
OutputNamespace The replacement string

InterfaceRemaps

A collection of mappings from one interface name to another interface name. It is suggested that you only need to list mappings where the input DTMI is not the same as the output DTMI. Systems should assume that if a DTMI is not listed in the mappings, that the output DTMI will be the same as the input DTMI.

Field Description
InputDtmi The name of the input DTMI
OutputDtmi The name of the output DTMI

RelationshipRemaps

A collection of mappings from one relationship name to another relationship name. It is suggested that you only need to list mappings where the input relationship is not the same as the output relationship. Systems should assume that if a relationship is not listed in the mappings, that the output relationship will be the same as the input relationship.

Field Description
InputDtmi The name of the input relationship
OutputDtmi The name of the output relationship
ReverseRelationshipDirection The relationship direction can be reversed so that if the original relationship is from source to target, the new relationship will be from target to source

PropertyProjections

A collection of mappings from one property name to another property name. It is suggested that you only need to list mappings where the input property is not the same as the output property. Systems should assume that if a property is not listed in the mappings, that the output property will be the same as the input property.

Field Description
OutputDtmiFilter A regex filter which allows filtering so that the mapping is only applied to output property names which match the filter. ".*" to apply to all output properties
OutputPropertyName The name of the output property to assign the input property to
InputPropertyNames A collection of names of the input property to assign to the output property. Can only specify multiple input properties if the output property is a collection
IsOutputPropertyCollection A flag which indicates whether or not the output property is a collection or not. This allows an input property which is not a collection to be assigned as an element in the output collection.
Priority If there are multiple projections for a single output property based on different DtmiFilters, priority is taken into account in ascending order

FillProperties

A collection of mappings from one or more property names to another property name so that if the output property is a required value and the input fields might be empty, that alternative fields can be used to populate the output field. It is suggested that you only need to list mappings where the input property is not the same as the output property. Systems should assume that if a property is not listed in the mappings, that the output property will be the same as the input property. Implementations should respect the order in which the input properties are specified so that the first non-empty valued input property is assigned to the output property

Field Description
OutputDtmiFilter A regex filter which allows filtering so that the mapping is only applied to output property names which match the filter. ".*" to apply to all output properties
OutputPropertyName The name of the output property to assign the input property to
InputPropertyNames A collection of names of the input property to assign to the output property. Can only specify multiple input properties if the output property is a collection
Priority If there are multiple fillproperties for a single output property based on different DtmiFilters, priority is taken into account in ascending order

ObjectTransformations

In some cases, a property of the input model contains an object where one of the properties of that object needs to be put into a different field in the target model. A declaration can be made to map the input field to the appropriate output field.

Field Description
OutputDtmiFilter A regex filter which allows filtering so that the mapping is only applied to output property names which match the filter. ".*" to apply to all output properties
OutputPropertyName The name of the output property to assign the input property to
InputProperty The input property to use as the parent of the InputPropertyName
InputPropertyName The names of the input property to assign to the output property
Priority If there are multiple object transformations for a single output property based on different DtmiFilters, priority is taken into account in ascending order

Sample File

  "Header": {
    "InputOntologies": [
      {
        "Name": "input-ontology-name",
        "Version": "1.0",
        "DtdlVersion": "v2"
      }
    ],
    "OutputOntologies": [
      {
        "Name": "output-ontology-name",
        "Version": "2.0",
        "DtdlVersion": "v3"
      }
    ]
  },
  "NamespaceRemaps": [
    {
      "InputDtmi": "dtmi:source-namespace:",
      "OutputDtmi": "dtmi:target-namespace:"
    },
  ],
  "InterfaceRemaps": [
    {
      "InputDtmi": "dtmi:source-namespace:source-interface-name;1",
      "OutputDtmi": "dtmi:target-namespace:target-interface;1"
    },
  ],
  "RelationshipRemaps": [
    {
      "InputRelationship": "source-relationship-name",
      "OutputRelationship": "target-relationship-name"
      "ReverseRelationshipDirection": true | false
    }
  ],
  "PropertyProjections": [
    {
      "OutputDtmiFilter": ".*",
      "OutputPropertyName": "output-property-name",
      "InputPropertyNames": [ "input-property-name1", "input-property-name2" ],
      "IsOutputPropertyCollection": true
    },
    {
      "OutputDtmiFilter": "\w*Space\w*",
      "OutputPropertyName": "output-property-name",
      "InputPropertyNames": [ "input-property-name2" ],
      "IsOutputPropertyCollection": true
    }

  ],
  "FillProperties": [
    {
      "OutputDtmiFilter": ".*",
      "OutputPropertyName": "output-property-name",
      "InputPropertyNames": [ "input-property-name1, input-property-name2" ]
    },
    {
      "OutputDtmiFilter": "\w*Space\w*",
      "OutputPropertyName": "output-property-name",
      "InputPropertyNames": [ "input-property-name2, input-property-name1" ]
    }
  ],
  "ObjectTransformations" : [
    {
      inputProperty: unit
      inputPropertyName: id
      outputDtmiFilter: *. 
      outputProperty: flatunit
      priority: 1
    }  
  ]
}
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 is compatible.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  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 is compatible.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 is compatible.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos 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 Microsoft.SmartPlaces.Facilities.OntologyMapper:

Package Downloads
Microsoft.SmartPlaces.Facilities.IngestionManager

This is library injects data from one DTDL based graph, then converts and inserts the data into another DTDL base graph.

Microsoft.SmartPlaces.Facilities.OntologyMapper.Mapped

Support for converting from one Mapped Ontology to a different DTDL Based Ontology

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
0.8.3-preview 57 9/5/2024
0.8.2-preview 84 9/4/2024
0.8.1-preview 120 2/3/2024
0.8.0-preview 910 1/31/2024
0.7.5-preview 499 6/29/2023
0.7.2-preview 842 5/3/2023
0.7.1-preview 427 3/7/2023
0.7.0-preview 493 2/17/2023
0.6.8-preview 653 12/2/2022
0.6.7-preview 191 12/2/2022
0.6.6-preview 173 11/30/2022
0.6.5-preview 285 11/3/2022
0.6.4-preview 234 10/26/2022
0.6.3-preview 105 10/21/2022
0.6.2-preview 204 10/20/2022
0.6.1-preview 177 10/13/2022
0.6.0-preview 314 9/29/2022
0.5.1-preview 178 9/27/2022
0.5.0-preview 131 9/27/2022
0.4.1-preview 175 9/26/2022
0.4.0-preview 198 9/23/2022
0.3.1-preview 146 9/22/2022