├── .gitignore ├── .vscode ├── extensions.json └── settings.json ├── Assets └── images │ ├── 01_Festo in ADT.jpg │ ├── 01_Festo linked in ADT.jpg │ ├── 01_Festo_RCMLabelingProp.jpg │ ├── 02BoschAnd15Siemens v2.jpg │ ├── 02BoschAnd15Siemens.jpg │ ├── 07PhoenixAnd15Siemens.jpg │ ├── AssetHierarchyAndProcessFlow sample.jpg │ ├── Figure_10.png │ ├── Figure_1_Implemented_AAS_Metamodel_and_Submodels.png │ ├── Figure_2_Asset_Administration_Shell_meta_model_graph.png │ ├── Figure_3_Sample_properties_of_submodel_Nameplate.png │ ├── Figure_4_Sample_from_the_Industrie_40_documentation.png │ ├── Figure_5_Twin_graph_from_the_first_sample.png │ ├── Figure_6_Second_sample_from_the_Industrie_40_documentation_with_Hilscher.png │ ├── Figure_7_Hilscher_netIOT_Edge_Gateway_submodels.png │ ├── Figure_8_Twin_graph_from_the_second_sample.png │ ├── Figure_9.png │ ├── HighlevelArchitecture.jpg │ ├── Submodel Identification of Siemens S7.jpg │ ├── SubmodelInAASCloud.jpg │ └── ZoomedInOnSubmodels.jpg ├── CODE_OF_CONDUCT.md ├── Documentation └── GraphQuerying.md ├── LICENSE ├── Ontology ├── dataspecification │ ├── DataSpecification.json │ ├── DataSpecificationContent.json │ ├── DataSpecificationIEC61360.json │ ├── DataSpecificationPhysicalUnit.json │ ├── ValueList.json │ └── ValueReferencePair.json ├── ext │ ├── AssetInfoShort.json │ ├── BooleanProperty.json │ ├── DateProperty.json │ ├── DateTimeProperty.json │ ├── DoubleProperty.json │ ├── DurationProperty.json │ ├── FloatProperty.json │ ├── IntegerProperty.json │ ├── LongProperty.json │ ├── StringProperty.json │ ├── Tags.json │ └── TimeProperty.json └── metamodel │ ├── AdministrationInformation.json │ ├── AnnotatedRelationshipElement.json │ ├── AssetAdministrationShell.json │ ├── AssetInformation.json │ ├── AssetKind.json │ ├── BasicEventElement.json │ ├── Blob.json │ ├── Capability.json │ ├── ConceptDescription.json │ ├── DataElement.json │ ├── Entity.json │ ├── Environment.json │ ├── EventElement.json │ ├── EventMessage.json │ ├── EventPayload.json │ ├── Extension.json │ ├── File.json │ ├── HasDataSpecification.json │ ├── HasExtensions.json │ ├── HasKind.json │ ├── HasSemantics.json │ ├── Identifiable.json │ ├── Key.json │ ├── LangStringSet.json │ ├── MultiLanguageProperty.json │ ├── Operation.json │ ├── OperationVariable.json │ ├── Property.json │ ├── Qualifiable.json │ ├── Qualifier.json │ ├── README.md │ ├── Range.json │ ├── Referable.json │ ├── Reference.json │ ├── ReferenceElement.json │ ├── RelationshipElement.json │ ├── Resource.json │ ├── SpecificAssetId.json │ ├── Submodel.json │ ├── SubmodelElement.json │ ├── SubmodelElementCollection.json │ ├── SubmodelElementList.json │ └── security │ ├── AccessControl.json │ ├── AccessControlPolicyPoints.json │ ├── AccessPermissionRule.json │ ├── Formula.json │ ├── ObjectAttributes.json │ ├── Permission.json │ ├── PermissionsPerObject.json │ ├── Security.json │ └── SubjectAttributes.json ├── README.md ├── SECURITY.md ├── Sample ├── 01_Festo ADTExplorer Export.json ├── 02BoschAnd15Siemens ADT Explorer Export.json ├── 02_Bosch ADTExplorer Export.json ├── 07_PhoenixContact ADTExplorer Export.json ├── 08_SchneiderElectric ADTExplorer Export.json ├── 15_Siemens ADTExplorer Export.json ├── README.md └── Std AAS Samples (8) ADT Explorer Export.json ├── Tools ├── ClientApp │ ├── .gitignore │ └── AASClientApp │ │ ├── AASClientApp.csproj │ │ ├── AASClientApp.sln │ │ ├── GeneralInformation_COPY.json │ │ ├── Program.cs │ │ └── technicaldata.json ├── Packaging │ └── aasontology.nuspec ├── README.md ├── Scripts │ ├── ADTQueries │ │ ├── queryForAllShells.ps1 │ │ ├── queryForAllShellsDTIds.ps1 │ │ ├── queryForAllShellsIdShorts.ps1 │ │ └── queryForAllSubmodelsOfShell.ps1 │ └── uploadAllModels.ps1 ├── aasontologyanalyzer │ ├── .gitignore │ ├── .vscode │ │ ├── launch.json │ │ └── tasks.json │ ├── Program.cs │ └── aasontologyanalyzer.csproj └── blazorsampleapp │ ├── .gitattributes │ ├── .gitignore │ ├── .vscode │ ├── extensions.json │ ├── launch.json │ ├── settings.json │ └── tasks.json │ ├── Api │ ├── .gitignore │ ├── Api.csproj │ ├── Properties │ │ ├── launchSettings.json │ │ ├── serviceDependencies.json │ │ └── serviceDependencies.local.json │ ├── WeatherForecastFunction.cs │ └── host.json │ ├── Client │ ├── App.razor │ ├── Client.csproj │ ├── Pages │ │ ├── Counter.razor │ │ ├── FetchData.razor │ │ ├── Index.razor │ │ └── TechnicalData.razor │ ├── Program.cs │ ├── Properties │ │ └── launchSettings.json │ ├── Shared │ │ ├── MainLayout.razor │ │ ├── NavMenu.razor │ │ └── SurveyPrompt.razor │ ├── _Imports.razor │ ├── staticwebapp.config.json │ └── wwwroot │ │ ├── appsettings.Development.json │ │ ├── css │ │ ├── app.css │ │ ├── bootstrap │ │ │ ├── bootstrap.min.css │ │ │ └── bootstrap.min.css.map │ │ └── open-iconic │ │ │ ├── FONT-LICENSE │ │ │ ├── ICON-LICENSE │ │ │ ├── README.md │ │ │ └── font │ │ │ ├── css │ │ │ └── open-iconic-bootstrap.min.css │ │ │ └── fonts │ │ │ ├── open-iconic.eot │ │ │ ├── open-iconic.otf │ │ │ ├── open-iconic.svg │ │ │ ├── open-iconic.ttf │ │ │ └── open-iconic.woff │ │ ├── favicon.ico │ │ └── index.html │ ├── README.md │ ├── Shared │ ├── Shared.csproj │ └── WeatherForecast.cs │ └── blazor-basic-swa.sln └── Work └── submodels ├── README.md └── technicaldata ├── FurtherInformation.json ├── GeneralInformation.json ├── ProductClassificationItem ├── ProductClassifications.json ├── README.md └── TechnicalProperties /.gitignore: -------------------------------------------------------------------------------- 1 | Tools/Packaging/Azure.DigitalTwins.Ontologies.AAS.3.0.0-rc02.nupkg 2 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "vsciot-vscode.vscode-dtdl" 4 | ] 5 | } -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": [ 3 | "digitaltwins", 4 | "dtdl", 5 | "dtmi" 6 | ] 7 | } -------------------------------------------------------------------------------- /Assets/images/01_Festo in ADT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/01_Festo in ADT.jpg -------------------------------------------------------------------------------- /Assets/images/01_Festo linked in ADT.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/01_Festo linked in ADT.jpg -------------------------------------------------------------------------------- /Assets/images/01_Festo_RCMLabelingProp.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/01_Festo_RCMLabelingProp.jpg -------------------------------------------------------------------------------- /Assets/images/02BoschAnd15Siemens v2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/02BoschAnd15Siemens v2.jpg -------------------------------------------------------------------------------- /Assets/images/02BoschAnd15Siemens.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/02BoschAnd15Siemens.jpg -------------------------------------------------------------------------------- /Assets/images/07PhoenixAnd15Siemens.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/07PhoenixAnd15Siemens.jpg -------------------------------------------------------------------------------- /Assets/images/AssetHierarchyAndProcessFlow sample.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/AssetHierarchyAndProcessFlow sample.jpg -------------------------------------------------------------------------------- /Assets/images/Figure_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/Figure_10.png -------------------------------------------------------------------------------- /Assets/images/Figure_1_Implemented_AAS_Metamodel_and_Submodels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/Figure_1_Implemented_AAS_Metamodel_and_Submodels.png -------------------------------------------------------------------------------- /Assets/images/Figure_2_Asset_Administration_Shell_meta_model_graph.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/Figure_2_Asset_Administration_Shell_meta_model_graph.png -------------------------------------------------------------------------------- /Assets/images/Figure_3_Sample_properties_of_submodel_Nameplate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/Figure_3_Sample_properties_of_submodel_Nameplate.png -------------------------------------------------------------------------------- /Assets/images/Figure_4_Sample_from_the_Industrie_40_documentation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/Figure_4_Sample_from_the_Industrie_40_documentation.png -------------------------------------------------------------------------------- /Assets/images/Figure_5_Twin_graph_from_the_first_sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/Figure_5_Twin_graph_from_the_first_sample.png -------------------------------------------------------------------------------- /Assets/images/Figure_6_Second_sample_from_the_Industrie_40_documentation_with_Hilscher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/Figure_6_Second_sample_from_the_Industrie_40_documentation_with_Hilscher.png -------------------------------------------------------------------------------- /Assets/images/Figure_7_Hilscher_netIOT_Edge_Gateway_submodels.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/Figure_7_Hilscher_netIOT_Edge_Gateway_submodels.png -------------------------------------------------------------------------------- /Assets/images/Figure_8_Twin_graph_from_the_second_sample.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/Figure_8_Twin_graph_from_the_second_sample.png -------------------------------------------------------------------------------- /Assets/images/Figure_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/Figure_9.png -------------------------------------------------------------------------------- /Assets/images/HighlevelArchitecture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/HighlevelArchitecture.jpg -------------------------------------------------------------------------------- /Assets/images/Submodel Identification of Siemens S7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/Submodel Identification of Siemens S7.jpg -------------------------------------------------------------------------------- /Assets/images/SubmodelInAASCloud.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/SubmodelInAASCloud.jpg -------------------------------------------------------------------------------- /Assets/images/ZoomedInOnSubmodels.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Assets/images/ZoomedInOnSubmodels.jpg -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Microsoft Open Source Code of Conduct 2 | 3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). 4 | 5 | Resources: 6 | 7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) 8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) 9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns 10 | -------------------------------------------------------------------------------- /Documentation/GraphQuerying.md: -------------------------------------------------------------------------------- 1 | # Querying the Azure Digital Twins graph 2 | 3 | > **_NOTE:_** All queries shown below are based on the ['Standard AAS Samples'](../Sample/Std%20AAS%20Samples%20(8)%20ADT%20Explorer%20Export.json) sample. Just create a new Azure Digital Twin instance and import the file with ADT Explorer. 4 | 5 | Using the Asset Administration shell Metamodel ontology to model assets in Azure Digital Twins can lead to quite complex graphs. E.g. the standard sample ['01_Festo'](https://admin-shell-io.com/samples/aasx/01_Festo.aasx) looks like the following in 6 | [Azure Digital Twins Explorer](https://docs.microsoft.com/en-us/samples/azure-samples/digital-twins-explorer/digital-twins-explorer/): 7 | 8 | ## Finding AAS referable twins 9 | 10 | ![](../Assets/images/01_Festo%20in%20ADT.jpg) 11 | 12 | To find an AAS Referable in the graph, a list of keys (one global followed by local ones) is used. E.g. for finding the boolean Property 'RCMLabelingPresent' in the 01_Festo sample the keylist looks like: 13 | 14 | ```xml 15 | 16 | smart.festo.com/demo/aas/1/1/454576463545648365874 17 | Nameplate 18 | Marking_RCM 19 | RCMLabelingPresent 20 | 21 | ``` 22 | 23 | Using the [ADT Query language](https://docs.microsoft.com/en-us/azure/digital-twins/concepts-query-language) the following two queries have to be used to find the according twin in the graph: 24 | 25 | 1. Find Identifiable twin 26 | 27 | ```sql 28 | SELECT * FROM digitaltwins WHERE IS_OF_MODEL('dtmi:digitaltwins:aas:Identifiable;1') 29 | AND id = 'smart.festo.com/demo/aas/1/1/454576463545648365874' 30 | ``` 31 | 32 | 2. Find referable twin with the Identifiable twin Id (from first query) 33 | 34 | ```sql 35 | SELECT referable3 FROM DIGITALTWINS MATCH(identifiable)-[]->(referable1)-[]->(referable2)-[]->(referable3) 36 | WHERE identifiable.$dtId = 'Shell_9359cf0b-9765-4a8a-9ac5-de196948114d' 37 | AND referable1.idShort = 'Nameplate' AND IS_OF_MODEL(referable1, 'dtmi:digitaltwins:aas:Submodel;1') 38 | AND referable2.idShort = 'Marking_RCM' AND IS_OF_MODEL(referable2, 'dtmi:digitaltwins:aas:SubmodelElementCollection;1') 39 | AND referable3.idShort = 'RCMLabelingPresent' AND IS_OF_MODEL(referable3, 'dtmi:digitaltwins:aas:Property;1') 40 | ``` 41 | 42 | The second query will return Property twin: 43 | 44 | ![](../Assets/images/01_Festo_RCMLabelingProp.jpg) 45 | 46 | ## AAS Shell queries 47 | 48 | The following screenshot from [Azure Digital Twin Explorer](https://docs.microsoft.com/en-us/samples/azure-samples/digital-twins-explorer/digital-twins-explorer/) shows the twins of the 49 | AAS sample ['02_Bosch'](https://admin-shell-io.com/samples/aasx/02_Bosch.aasx) and 50 | ['15_Siemens'](https://admin-shell-io.com/samples/aasx/15_Siemens.aasx) (Available for import in ADT Explorer here). 51 | 52 | ![](../Assets/images/02BoschAnd15Siemens.jpg) 53 | 54 | ### Finding all AAS shell 55 | 56 | ```sql 57 | SELECT * FROM DIGITALTWINS WHERE IS_OF_MODEL('dtmi:digitaltwins:aas:AssetAdministrationShell;1') 58 | ``` 59 | 60 | shows the following json output (see [Powershell script with Azure Command line](../Tools/Scripts/ADTQueries/queryForAllShells.ps1)) 61 | 62 | ```json 63 | { 64 | "result": [ 65 | { 66 | "$dtId": "Shell_9e0a3ed7-fd9a-4b8b-a203-740e5ca6c76d", 67 | "$etag": "W/\"728dba1d-7345-4639-831e-f730ed8c353f\"", 68 | "$metadata": { 69 | "$model": "dtmi:digitaltwins:aas:AssetAdministrationShell;1", 70 | "category": { 71 | "lastUpdateTime": "2022-02-07T11:21:10.3018225Z" 72 | }, 73 | "idShort": { 74 | "lastUpdateTime": "2022-02-07T11:21:10.3018225Z" 75 | } 76 | }, 77 | "administration": { 78 | "$metadata": { 79 | "revision": { 80 | "lastUpdateTime": "2022-02-07T11:21:10.3018225Z" 81 | }, 82 | "version": { 83 | "lastUpdateTime": "2022-02-07T11:21:10.3018225Z" 84 | } 85 | }, 86 | "revision": "0", 87 | "version": "1" 88 | }, 89 | "category": "CONSTANT", 90 | "idShort": "Siemens_S7_CPU1515", 91 | "identification": { 92 | "$metadata": { 93 | "id": { 94 | "lastUpdateTime": "2022-02-07T11:21:10.3018225Z" 95 | }, 96 | "idType": { 97 | "lastUpdateTime": "2022-02-07T11:21:10.3018225Z" 98 | } 99 | }, 100 | "id": "www.company.com/demo/aas/1234554842136874684321", 101 | "idType": "IRI" 102 | } 103 | }, 104 | { 105 | "$dtId": "Shell_3977bb3f-f4ce-4877-a64a-c8edc4330898", 106 | "$etag": "W/\"cebeacfc-c5e2-4e13-bff2-381ad7a87965\"", 107 | "$metadata": { 108 | "$model": "dtmi:digitaltwins:aas:AssetAdministrationShell;1", 109 | "idShort": { 110 | "lastUpdateTime": "2022-02-08T07:10:12.2854332Z" 111 | } 112 | }, 113 | "administration": { 114 | "$metadata": {} 115 | }, 116 | "idShort": "Bosch_NexoPistolGripNutrunner", 117 | "identification": { 118 | "$metadata": { 119 | "id": { 120 | "lastUpdateTime": "2022-02-08T07:10:12.2854332Z" 121 | }, 122 | "idType": { 123 | "lastUpdateTime": "2022-02-08T07:10:12.2854332Z" 124 | } 125 | }, 126 | "id": "http://boschrexroth.com/shells/0608842005/917004878", 127 | "idType": "IRI" 128 | } 129 | } 130 | ] 131 | } 132 | ``` 133 | 134 | ### Retrieving the 'idShort' local identifiers of all AAS shells 135 | 136 | ```sql 137 | SELECT idShort FROM DIGITALTWINS WHERE IS_OF_MODEL('dtmi:digitaltwins:aas:AssetAdministrationShell;1') 138 | ``` 139 | 140 | shows the following json output (see [Powershell script with Azure Command line](../Tools/Scripts/ADTQueries/queryForAllShellsIdShorts.ps1)) 141 | 142 | ```json 143 | { 144 | "result": [ 145 | { 146 | "idShort": "Siemens_S7_CPU1515" 147 | }, 148 | { 149 | "idShort": "Bosch_NexoPistolGripNutrunner" 150 | } 151 | ] 152 | } 153 | ``` 154 | 155 | ### Retrieving all submodels of an AAS shell (in sample for the Siemens AAS) 156 | 157 | ```sql 158 | SELECT submodel FROM DIGITALTWINS 159 | MATCH (shell)-[:submodel]->(submodel) 160 | WHERE IS_OF_MODEL(shell, 'dtmi:digitaltwins:aas:AssetAdministrationShell;1') 161 | AND shell.$dtId = 'Shell_9e0a3ed7-fd9a-4b8b-a203-740e5ca6c76d' 162 | ``` 163 | 164 | shows the following json output (see [Powershell script with Azure Command line](../Tools/Scripts/ADTQueries/queryForAllSubmodelsOfShell.ps1)) and projected on 'idShort' 165 | 166 | ```json 167 | [ 168 | "Nameplate", 169 | "Identification", 170 | "Service", 171 | "Document" 172 | ] 173 | ``` 174 | 175 | ### Retrieving all Submodel elements of an AAS shell (in sample for the Siemens AAS) 176 | 177 | ```sql 178 | SELECT submodelElement FROM DIGITALTWINS 179 | MATCH (shell)-[:submodel]->(submodel)-[:submodelElement]->(submodelElement) 180 | WHERE IS_OF_MODEL(shell, 'dtmi:digitaltwins:aas:AssetAdministrationShell;1') 181 | AND shell.$dtId = 'Shell_9e0a3ed7-fd9a-4b8b-a203-740e5ca6c76d' 182 | AND IS_OF_MODEL(submodel, 'dtmi:digitaltwins:aas:Submodel;1') 183 | AND IS_OF_MODEL(submodelElement, 'dtmi:digitaltwins:aas:SubmodelElement;1') 184 | ``` 185 | 186 | ### Getting the number of AAS in the graph 187 | ```sql 188 | SELECT COUNT() FROM digitaltwins WHERE IS_OF_MODEL('dtmi:digitaltwins:aas:AssetAdministrationShell;1') 189 | ``` 190 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Jürgen Mayrbäurl 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Ontology/dataspecification/DataSpecification.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:DataSpecification;1", 4 | "@type": "Interface", 5 | "displayName": "Data specification", 6 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 7 | "contents": [ 8 | { 9 | "@type": "Component", 10 | "name": "administration", 11 | "displayName": "Administration", 12 | "description": "Administrative information of an identifiable element.", 13 | "schema": "dtmi:digitaltwins:aas:AdministrationInformation;1" 14 | }, 15 | { 16 | "@type": "Property", 17 | "name": "id", 18 | "displayName": "Id", 19 | "description": "The globally unique identification of the element.", 20 | "comment": "Mandatory", 21 | "schema": "string", 22 | "writable": true 23 | }, 24 | { 25 | "@type": "Relationship", 26 | "name": "hasContent", 27 | "writable": true, 28 | "maxMultiplicity": 1, 29 | "target": "dtmi:digitaltwins:aas:DataSpecificationContent;1" 30 | }, 31 | { 32 | "@type": "Component", 33 | "name": "description", 34 | "displayName": "Description", 35 | "description": "Description or comments on the element. The description can be provided in several languages.", 36 | "schema": "dtmi:digitaltwins:aas:LangStringSet;1" 37 | } 38 | ] 39 | } -------------------------------------------------------------------------------- /Ontology/dataspecification/DataSpecificationContent.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:DataSpecificationContent;1", 4 | "@type": "Interface", 5 | "displayName": "Data specification content", 6 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02" 7 | } -------------------------------------------------------------------------------- /Ontology/dataspecification/DataSpecificationPhysicalUnit.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:DataSpecificationPhysicalUnit;1", 4 | "@type": "Interface", 5 | "displayName": "DataSpecificationPhysicalUnit", 6 | "description": "Content of data specification template for concept descriptions for physical units conformant to IEC 61360.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "extends": [ 9 | "dtmi:digitaltwins:aas:DataSpecificationContent;1" 10 | ], 11 | "contents": [ 12 | { 13 | "@type": "Property", 14 | "name": "unitName", 15 | "displayName": "Unit name", 16 | "description": "Name of the physical unit", 17 | "comment": "Mandatory", 18 | "schema": "string", 19 | "writable": true 20 | }, 21 | { 22 | "@type": "Property", 23 | "name": "unitSymbol", 24 | "displayName": "Unit symbol", 25 | "description": "Symbol for the physical unit", 26 | "comment": "Mandatory", 27 | "schema": "string", 28 | "writable": true 29 | }, 30 | { 31 | "@type": "Component", 32 | "name": "definition", 33 | "displayName": "Definition", 34 | "description": "Definition in different languages", 35 | "comment": "Mandatory", 36 | "schema": "dtmi:digitaltwins:aas:LangStringSet;1" 37 | }, 38 | { 39 | "@type": "Property", 40 | "name": "siNotation", 41 | "displayName": "Notation of SI", 42 | "description": "Notation of SI physical unit", 43 | "comment": "Optional", 44 | "schema": "string", 45 | "writable": true 46 | }, 47 | { 48 | "@type": "Property", 49 | "name": "siName", 50 | "displayName": "Name of SI", 51 | "description": "Name of SI physical unit", 52 | "comment": "Optional", 53 | "schema": "string", 54 | "writable": true 55 | }, 56 | { 57 | "@type": "Property", 58 | "name": "dinNotation", 59 | "displayName": "DIN notation", 60 | "description": "Notation of physical unit conformant to DIN", 61 | "comment": "Optional", 62 | "schema": "string", 63 | "writable": true 64 | }, 65 | { 66 | "@type": "Property", 67 | "name": "eceName", 68 | "displayName": "ECE name", 69 | "description": "Name of physical unit conformant to ECE", 70 | "comment": "Optional", 71 | "schema": "string", 72 | "writable": true 73 | }, 74 | { 75 | "@type": "Property", 76 | "name": "eceCode", 77 | "displayName": "ECE code", 78 | "description": "Code of physical unit conformant to ECE", 79 | "comment": "Optional", 80 | "schema": "string", 81 | "writable": true 82 | }, 83 | { 84 | "@type": "Property", 85 | "name": "nistName", 86 | "displayName": "NIST name", 87 | "description": "Name of NIST physical unit", 88 | "comment": "Optional", 89 | "schema": "string", 90 | "writable": true 91 | }, 92 | { 93 | "@type": "Property", 94 | "name": "sourceOfDefinition", 95 | "displayName": "Source of definition", 96 | "description": "Source of definition", 97 | "comment": "Optional", 98 | "schema": "string", 99 | "writable": true 100 | }, 101 | { 102 | "@type": "Property", 103 | "name": "conversionFactor", 104 | "displayName": "Conversion factor", 105 | "comment": "Optional", 106 | "schema": "string", 107 | "writable": true 108 | }, 109 | { 110 | "@type": "Property", 111 | "name": "registrationAuthorityId", 112 | "displayName": "Registration authority ID", 113 | "comment": "Optional", 114 | "schema": "string", 115 | "writable": true 116 | }, 117 | { 118 | "@type": "Property", 119 | "name": "supplier", 120 | "displayName": "Supplier", 121 | "comment": "Optional", 122 | "schema": "string", 123 | "writable": true 124 | } 125 | ] 126 | } -------------------------------------------------------------------------------- /Ontology/dataspecification/ValueList.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ValueList;1", 4 | "@type": "Interface", 5 | "displayName": "Value List", 6 | "description": "A set of value reference pairs.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "valueReferencePair", 12 | "displayName": "Value Reference Pair", 13 | "description": "A pair of a value together with its global unique ID.", 14 | "writable": true, 15 | "target": "dtmi:digitaltwins:aas:ValueReferencePair;1" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /Ontology/dataspecification/ValueReferencePair.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ValueReferencePair;1", 4 | "@type": "Interface", 5 | "displayName": "Value Reference Pair", 6 | "description": "A value reference pair within a value list. Each value has a global unique id defining its semantic", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name": "value", 12 | "displayName": "Value", 13 | "description": "the value of the referenced concept definition of the value in valueId.", 14 | "writable": true, 15 | "schema": "string" 16 | }, 17 | { 18 | "@type": "Relationship", 19 | "name": "valueId", 20 | "displayName": "Value Id", 21 | "description": "Global unique id of the value. ", 22 | "maxMultiplicity": 1, 23 | "writable": true, 24 | "target": "dtmi:digitaltwins:aas:Reference;1" 25 | }, 26 | { 27 | "@type": "Property", 28 | "name": "valueIdValue", 29 | "displayName": "Value Id value", 30 | "description": "String serialized value id value according to Spec 9.2.3 Serialization of Values of Type “Reference”", 31 | "comment": "Not part of the AAS Spec. Use alternatively for 'valueId'", 32 | "schema": "string", 33 | "writable": true 34 | } 35 | ] 36 | } -------------------------------------------------------------------------------- /Ontology/ext/AssetInfoShort.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:AssetInfoShort;1", 4 | "@type": "Interface", 5 | "displayName": "Asset information", 6 | "description": "In AssetInformation identifying meta data of the asset that is represented by an AAS is defined. The asset may either represent an asset type or an asset instance.", 7 | "comment": "Not part of the Platform Industrie 4.0 Asset Administration Shell Standard. Used as component to denormalize and optimize the DTDL model", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name": "assetKind", 12 | "displayName": "asset kind", 13 | "writable": true, 14 | "schema": { 15 | "@type": "Enum", 16 | "valueSchema": "string", 17 | "enumValues": [ 18 | { 19 | "name": "Type", 20 | "enumValue": "Type", 21 | "description": "hardware or software element which specifies the common attributes shared by all instances of the type[SOURCE: IEC TR 62390:2005-01, 3.1.25]" 22 | }, 23 | { 24 | "name": "Instance", 25 | "enumValue": "Instance", 26 | "description": "concrete, clearly identifiable component of a certain type" 27 | } 28 | ] 29 | } 30 | }, 31 | { 32 | "@type": "Property", 33 | "name": "globalAssetId", 34 | "displayName": "Global Asset Id value", 35 | "description": "String serialized Global asset id value according to Spec 9.2.3 Serialization of Values of Type “Reference”", 36 | "schema": "string", 37 | "writable": true 38 | }, 39 | { 40 | "@type": "Property", 41 | "name": "specificAssetId", 42 | "displayName": "Specific asset Id values", 43 | "description": "Comma separated list of specific asset id values. Name of specific asset id in parentheses. E.g (Serial number)123456798, (FID)SS928734", 44 | "schema": "string", 45 | "writable": true 46 | }, 47 | { 48 | "@type": "Property", 49 | "name": "defaultThumbnailpath", 50 | "displayName": "Default thumbnail path", 51 | "description": "Path and name of the resource (with file extension). The path can be absolute or relative.", 52 | "schema": "string", 53 | "writable": true 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Ontology/ext/BooleanProperty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:BooleanProperty;1", 4 | "@type": "Interface", 5 | "displayName": "Boolean property", 6 | "description": "Extension of AAS Property model for Boolean primitive schema of DTDL", 7 | "comment": "Not part of the AAS meta model. Enables querying with primitive schemas for Properties", 8 | "extends": ["dtmi:digitaltwins:aas:Property;1"], 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "booleanValue", 13 | "displayName": "Boolean value", 14 | "description": "Value as boolean", 15 | "schema": "boolean", 16 | "writable": true 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Ontology/ext/DateProperty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:DateProperty;1", 4 | "@type": "Interface", 5 | "displayName": "Date property", 6 | "description": "Extension of AAS Property model for Date primitive schema of DTDL", 7 | "comment": "Not part of the AAS meta model. Enables querying with primitive schemas for Properties", 8 | "extends": ["dtmi:digitaltwins:aas:Property;1"], 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "dateValue", 13 | "displayName": "Date value", 14 | "description": "Value as date - A full-date as defined in section 5.6 of RFC 3339", 15 | "schema": "date", 16 | "writable": true 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Ontology/ext/DateTimeProperty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:DateTimeProperty;1", 4 | "@type": "Interface", 5 | "displayName": "DateTime property", 6 | "description": "Extension of AAS Property model for DateTime primitive schema of DTDL", 7 | "comment": "Not part of the AAS meta model. Enables querying with primitive schemas for Properties", 8 | "extends": ["dtmi:digitaltwins:aas:Property;1"], 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "dateTimeValue", 13 | "displayName": "DateTime value", 14 | "description": "Value as dateTime - A date-time as defined in RFC 3339", 15 | "schema": "dateTime", 16 | "writable": true 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Ontology/ext/DoubleProperty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:DoubleProperty;1", 4 | "@type": "Interface", 5 | "displayName": "Double property", 6 | "description": "Extension of AAS Property model for Double primitive schema of DTDL", 7 | "comment": "Not part of the AAS meta model. Enables querying with primitive schemas for Properties", 8 | "extends": ["dtmi:digitaltwins:aas:Property;1"], 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "doubleValue", 13 | "displayName": "Double value", 14 | "description": "Value as double - An IEEE 8-byte floating point", 15 | "schema": "double", 16 | "writable": true 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Ontology/ext/DurationProperty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:DurationProperty;1", 4 | "@type": "Interface", 5 | "displayName": "Duration property", 6 | "description": "Extension of AAS Property model for Duration primitive schema of DTDL", 7 | "comment": "Not part of the AAS meta model. Enables querying with primitive schemas for Properties", 8 | "extends": ["dtmi:digitaltwins:aas:Property;1"], 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "durationValue", 13 | "displayName": "Duration value", 14 | "description": "Value as duration - A duration in ISO 8601 format", 15 | "schema": "duration", 16 | "writable": true 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Ontology/ext/FloatProperty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:FloatProperty;1", 4 | "@type": "Interface", 5 | "displayName": "Float property", 6 | "description": "Extension of AAS Property model for Float primitive schema of DTDL", 7 | "comment": "Not part of the AAS meta model. Enables querying with primitive schemas for Properties", 8 | "extends": ["dtmi:digitaltwins:aas:Property;1"], 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "floatValue", 13 | "displayName": "Float value", 14 | "description": "Value as float - An IEEE 4-byte floating point", 15 | "schema": "float", 16 | "writable": true 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Ontology/ext/IntegerProperty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:IntegerProperty;1", 4 | "@type": "Interface", 5 | "displayName": "Integer property", 6 | "description": "Extension of AAS Property model for Integer primitive schema of DTDL", 7 | "comment": "Not part of the AAS meta model. Enables querying with primitive schemas for Properties", 8 | "extends": ["dtmi:digitaltwins:aas:Property;1"], 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "intValue", 13 | "displayName": "Integer value", 14 | "description": "Value as int - A signed 4-byte integer", 15 | "schema": "integer", 16 | "writable": true 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Ontology/ext/LongProperty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:LongProperty;1", 4 | "@type": "Interface", 5 | "displayName": "Long integer property", 6 | "description": "Extension of AAS Property model for Long primitive schema of DTDL", 7 | "comment": "Not part of the AAS meta model. Enables querying with primitive schemas for Properties", 8 | "extends": ["dtmi:digitaltwins:aas:Property;1"], 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "longValue", 13 | "displayName": "Long value", 14 | "description": "Value as long - A signed 8-byte integer", 15 | "schema": "long", 16 | "writable": true 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Ontology/ext/StringProperty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:StringProperty;1", 4 | "@type": "Interface", 5 | "displayName": "String property", 6 | "description": "Extension of AAS Property model for String primitive schema of DTDL", 7 | "comment": "Not part of the AAS meta model. Enables querying with primitive schemas for Properties", 8 | "extends": ["dtmi:digitaltwins:aas:Property;1"] 9 | } -------------------------------------------------------------------------------- /Ontology/ext/Tags.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:Tags;1", 4 | "@type": "Interface", 5 | "displayName": "Tags", 6 | "description": "You can use the concept of tags to further identify and categorize your digital twins", 7 | "comment": "Not part of the AAS meta model. Makes querying easier. See https://docs.microsoft.com/en-us/azure/digital-twins/how-to-use-tags", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name": "markers", 12 | "description": "A marker tag is a simple string that is used to mark or categorize a digital twin, such as 'blue' or 'red'. This string is the tag's name, and marker tags have no meaningful value—the tag is significant just by its presence (or absence).", 13 | "schema": { 14 | "@type": "Map", 15 | "mapKey": { 16 | "name": "tagName", 17 | "schema": "string" 18 | }, 19 | "mapValue": { 20 | "name": "tagValue", 21 | "schema": "boolean" 22 | } 23 | }, 24 | "writable": true 25 | }, 26 | { 27 | "@type": "Property", 28 | "name": "values", 29 | "description": "A value tag is a key-value pair that is used to give each tag a value, such as 'color': 'blue' or 'color': 'red'. Once a value tag is created, it can also be used as a marker tag by ignoring the tag's value.", 30 | "schema": { 31 | "@type": "Map", 32 | "mapKey": { 33 | "name": "tagName", 34 | "schema": "string" 35 | }, 36 | "mapValue": { 37 | "name": "tagValue", 38 | "schema": "string" 39 | } 40 | }, 41 | "writable": true 42 | } 43 | ] 44 | } -------------------------------------------------------------------------------- /Ontology/ext/TimeProperty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ext:TimeProperty;1", 4 | "@type": "Interface", 5 | "displayName": "Time property", 6 | "description": "Extension of AAS Property model for Time primitive schema of DTDL", 7 | "comment": "Not part of the AAS meta model. Enables querying with primitive schemas for Properties", 8 | "extends": ["dtmi:digitaltwins:aas:Property;1"], 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "timeValue", 13 | "displayName": "Time value", 14 | "description": "Value as time - A full-time as defined in section 5.6 of RFC 3339", 15 | "schema": "time", 16 | "writable": true 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Ontology/metamodel/AdministrationInformation.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:AdministrationInformation;1", 4 | "@type": "Interface", 5 | "displayName": "Administration Information", 6 | "description": "Administrative metainformation for an element like version information.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name": "version", 12 | "writable": true, 13 | "description": "Version of the element.", 14 | "displayName": "Version", 15 | "schema": "string" 16 | }, 17 | { 18 | "@type": "Property", 19 | "name": "revision", 20 | "writable": true, 21 | "description": "Revision of the element.", 22 | "displayName": "Revision", 23 | "schema": "string" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /Ontology/metamodel/AnnotatedRelationshipElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:AnnotatedRelationshipElement;1", 4 | "@type": "Interface", 5 | "displayName": "Annotated Relationship Element", 6 | "description": "An annotated relationship element is a relationship element that can be annotated with additional data elements.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "extends": [ 9 | "dtmi:digitaltwins:aas:RelationshipElement;1" 10 | ], 11 | "contents": [ 12 | { 13 | "@type": "Relationship", 14 | "name": "annotation", 15 | "displayName": "Annotation", 16 | "description": "A reference to a data element that represents an annotation that holds for the relationship between the two elements.", 17 | "writable": true, 18 | "target": "dtmi:digitaltwins:aas:DataElement;1" 19 | } 20 | ] 21 | } -------------------------------------------------------------------------------- /Ontology/metamodel/AssetAdministrationShell.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:AssetAdministrationShell;1", 4 | "@type": "Interface", 5 | "displayName": "Asset Administration Shell", 6 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 7 | "extends": [ 8 | "dtmi:digitaltwins:aas:Identifiable;1", 9 | "dtmi:digitaltwins:aas:HasDataSpecification;1" 10 | ], 11 | "contents": [ 12 | { 13 | "@type": "Relationship", 14 | "name": "derivedFrom", 15 | "description": "The reference to the AAS the AAS was derived from.", 16 | "minMultiplicity": 0, 17 | "maxMultiplicity": 1, 18 | "writable": true, 19 | "displayName": "derived from", 20 | "target": "dtmi:digitaltwins:aas:AssetAdministrationShell;1" 21 | }, 22 | { 23 | "@type": "Relationship", 24 | "name": "assetInformation", 25 | "displayName": "described by", 26 | "description": "Meta information about the asset the AAS is representing", 27 | "writable": true, 28 | "maxMultiplicity": 1, 29 | "target": "dtmi:digitaltwins:aas:AssetInformation;1" 30 | }, 31 | { 32 | "@type": "Component", 33 | "name": "assetInformationShort", 34 | "displayName": "Asset information", 35 | "description": "Meta information about the asset the AAS is representing", 36 | "comment": "Optional. Short version of the entity based version", 37 | "schema": "dtmi:digitaltwins:aas:ext:AssetInfoShort;1" 38 | }, 39 | { 40 | "@type": "Relationship", 41 | "name": "submodel", 42 | "displayName": "Submodel", 43 | "description": "Reference to a submodel of the AAS. A submodel is a description of an aspect of the asset the AAS is representing. The asset of an AAS is typically described by one or more submodels. Temporarily no submodel might be assigned to the AAS.", 44 | "writable": true, 45 | "target": "dtmi:digitaltwins:aas:Submodel;1" 46 | } 47 | ] 48 | } -------------------------------------------------------------------------------- /Ontology/metamodel/AssetInformation.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:AssetInformation;1", 4 | "@type": "Interface", 5 | "displayName": "Asset information", 6 | "description": "In AssetInformation identifying meta data of the asset that is represented by an AAS is defined. The asset may either represent an asset type or an asset instance.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Component", 11 | "name": "assetKind", 12 | "displayName": "Asset kind", 13 | "description": "Denotes whether the Asset is of kind “Type” or “Instance”.", 14 | "schema": "dtmi:digitaltwins:aas:AssetKind;1" 15 | }, 16 | { 17 | "@type": "Property", 18 | "name": "globalAssetIdValue", 19 | "displayName": "Global Asset Id value", 20 | "description": "String serialized Global asset id value according to Spec 9.2.3 Serialization of Values of Type “Reference”", 21 | "comment": "Not part of the AAS Spec. Use alternatively for 'globalAssetId'", 22 | "schema": "string", 23 | "writable": true 24 | }, 25 | { 26 | "@type": "Relationship", 27 | "name": "globalAssetId", 28 | "description": "Reference to either an Asset object or a global reference to the asset the AAS is representing.", 29 | "writable": true, 30 | "displayName": "Global Asset Id", 31 | "maxMultiplicity": 1, 32 | "target": "dtmi:digitaltwins:aas:Reference;1" 33 | }, 34 | { 35 | "@type": "Property", 36 | "name": "specificAssetIdValues", 37 | "displayName": "Specific asset Id values", 38 | "description": "Comma separated list of specific asset id values. Name of specific asset id in parentheses. E.g (Serial number)123456798, (FID)SS928734", 39 | "comment": "Not part of the AAS Spec. Use alternatively for 'specificAssetId'", 40 | "schema": "string", 41 | "writable": true 42 | }, 43 | { 44 | "@type": "Relationship", 45 | "name": "specificAssetId", 46 | "displayName": "specified by", 47 | "description": "Additional domain specific specific, typically proprietary Identifier for the asset like e.g. serial number etc", 48 | "writable": true, 49 | "target": "dtmi:digitaltwins:aas:SpecificAssetId;1" 50 | }, 51 | { 52 | "@type": "Relationship", 53 | "name": "defaultThumbnail", 54 | "displayName": "Default thumbnail", 55 | "description": "Thumbnail of the asset represented by the asset administration shell. Used as default.", 56 | "writable": true, 57 | "minMultiplicity": 0, 58 | "maxMultiplicity": 1, 59 | "target": "dtmi:digitaltwins:aas:Resource;1" 60 | } 61 | ] 62 | } 63 | -------------------------------------------------------------------------------- /Ontology/metamodel/AssetKind.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:AssetKind;1", 4 | "@type": "Interface", 5 | "displayName": "Asset kind", 6 | "description": "Enumeration for denoting whether an element is a type or an instance. To be used as component in other interfaces", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name" : "assetKind", 12 | "displayName": "asset kind", 13 | "writable": true, 14 | "schema": { 15 | "@type": "Enum", 16 | "valueSchema": "string", 17 | "enumValues": [ 18 | { 19 | "name": "Type", 20 | "enumValue": "Type", 21 | "description": "hardware or software element which specifies the common attributes shared by all instances of the type[SOURCE: IEC TR 62390:2005-01, 3.1.25]" 22 | }, 23 | { 24 | "name": "Instance", 25 | "enumValue": "Instance", 26 | "description": "concrete, clearly identifiable component of a certain type" 27 | } 28 | ] 29 | } 30 | } 31 | ] 32 | } -------------------------------------------------------------------------------- /Ontology/metamodel/BasicEventElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:BasicEventElement;1", 4 | "@type": "Interface", 5 | "displayName": "Basic Event Element", 6 | "description": "A basic event element.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "extends": [ 9 | "dtmi:digitaltwins:aas:EventElement;1" 10 | ], 11 | "contents": [ 12 | { 13 | "@type": "Relationship", 14 | "name": "observed", 15 | "displayName": "Observed", 16 | "description": "Reference to the Referable, which defines the scope of the event. Can be AAS, Submodel or SubmodelElement. Reference to a referable, e.g. a data element or a submodel, that is being observed.", 17 | "comment": "Mandatory", 18 | "writable": true, 19 | "maxMultiplicity": 1, 20 | "target": "dtmi:digitaltwins:aas:Referable;1" 21 | }, 22 | { 23 | "@type": "Property", 24 | "name": "direction", 25 | "displayName": "Direction", 26 | "description": "Direction of event", 27 | "writable": true, 28 | "schema": { 29 | "@type": "Enum", 30 | "valueSchema": "string", 31 | "enumValues": [ 32 | { 33 | "name": "Input", 34 | "enumValue": "input", 35 | "description": "Input direction" 36 | }, 37 | { 38 | "name": "Output", 39 | "enumValue": "output", 40 | "description": "Output direction" 41 | } 42 | ] 43 | } 44 | }, 45 | { 46 | "@type": "Property", 47 | "name": "state", 48 | "displayName": "State", 49 | "description": "State of the event", 50 | "writable": true, 51 | "schema": { 52 | "@type": "Enum", 53 | "valueSchema": "string", 54 | "enumValues": [ 55 | { 56 | "name": "On", 57 | "enumValue": "on", 58 | "description": "Event is on" 59 | }, 60 | { 61 | "name": "Off", 62 | "enumValue": "off", 63 | "description": "Event is off" 64 | } 65 | ] 66 | } 67 | }, 68 | { 69 | "@type": "Property", 70 | "name": "messageTopic", 71 | "displayName": "Message topic", 72 | "description": "Information for the outer message infrastructure for scheduling the event to the respective communication channel. ", 73 | "schema": "string", 74 | "writable": true 75 | }, 76 | { 77 | "@type": "Relationship", 78 | "name": "messageBroker", 79 | "displayName": "Message broker", 80 | "description": "Information, which outer message infrastructure shall handle messages for the EventElement. Refers to a Submodel,SubmodelElementList, SubmodelElementCollection or Entity, which contains DataElements describing the proprietary specification for the message broker.Note: for different message infrastructure, e.g. OPC UA or MQTT or AMQP, this proprietary specification could be standardized by having respective Submodels.", 81 | "target": "dtmi:digitaltwins:aas:Referable;1", 82 | "writable": true, 83 | "maxMultiplicity": 1 84 | }, 85 | { 86 | "@type": "Property", 87 | "name": "lastUpdate", 88 | "displayName": "Last updated at", 89 | "description": "Timestamp in UTC, when the last event was received (input direction) or sent (output direction).", 90 | "writable": true, 91 | "schema": "dateTime" 92 | }, 93 | { 94 | "@type": "Property", 95 | "name": "minInterval", 96 | "displayName": "Minimum interval", 97 | "description": "For input direction, reports on the maximum frequency, the software entity behind the respective Referable can handle input events. For output events, specifies the maximum frequency of outputting this event to an outer infrastructure. Might be not specified, that is, there is no minimum interval", 98 | "writable": true, 99 | "schema": "dateTime" 100 | }, 101 | { 102 | "@type": "Property", 103 | "name": "maxInterval", 104 | "displayName": "Maximum interval", 105 | "description": "For input direction: not applicable. For output direction: maximum interval in time, the respective Referable shall send an update of the status of the event, even if no other trigger condition for the event was not met. Might be not specified, that is, there is no maximum interval.", 106 | "writable": true, 107 | "schema": "dateTime" 108 | } 109 | ] 110 | } -------------------------------------------------------------------------------- /Ontology/metamodel/Blob.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Blob;1", 4 | "@type": "Interface", 5 | "displayName": "Blob", 6 | "description": "Blob Data Element", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "extends": "dtmi:digitaltwins:aas:DataElement;1", 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "value", 13 | "displayName": "value", 14 | "description": "Blob Type.", 15 | "schema": "string", 16 | "writable": true 17 | }, 18 | { 19 | "@type": "Property", 20 | "name": "mimeType", 21 | "displayName": "mimeType", 22 | "description": "mimeType", 23 | "schema": "string", 24 | "writable": true 25 | } 26 | ] 27 | } 28 | -------------------------------------------------------------------------------- /Ontology/metamodel/Capability.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Capability;1", 4 | "@type": "Interface", 5 | "displayName": "Capability", 6 | "description": "A capability is the implementation-independent description of the potential of an asset to achieve a certain effect in the physical or virtual world. ", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "extends": [ 9 | "dtmi:digitaltwins:aas:SubmodelElement;1" 10 | ] 11 | } -------------------------------------------------------------------------------- /Ontology/metamodel/ConceptDescription.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ConceptDescription;1", 4 | "@type": "Interface", 5 | "displayName": "Concept Description", 6 | "description": "The semantics of a property or other elements that may have a semantic description is defined by a concept description. The description of the concept should follow a standardized schema (realized as data specificationtemplate).", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "extends": [ 9 | "dtmi:digitaltwins:aas:Identifiable;1", 10 | "dtmi:digitaltwins:aas:HasDataSpecification;1" 11 | ], 12 | "contents": [ 13 | { 14 | "@type": "Relationship", 15 | "name": "isCaseOf", 16 | "displayName": "Is case of", 17 | "description": "Reference to an external definition the concept is compatible to or was derived from.", 18 | "writable": true, 19 | "target": "dtmi:digitaltwins:aas:Reference;1" 20 | } 21 | ] 22 | } -------------------------------------------------------------------------------- /Ontology/metamodel/DataElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:DataElement;1", 4 | "@type": "Interface", 5 | "displayName": "Data element", 6 | "description": "A data element is a submodel element that is not further composed out of other submodel elements. A data element is a submodel element that has a value. The type of value differs for different subtypes of data elements.", 7 | "extends": ["dtmi:digitaltwins:aas:SubmodelElement;1"], 8 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02" 9 | } 10 | -------------------------------------------------------------------------------- /Ontology/metamodel/Entity.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Entity;1", 4 | "@type": "Interface", 5 | "displayName": "Entity", 6 | "description": "An entity is a submodel element that is used to model entities", 7 | "extends": ["dtmi:digitaltwins:aas:SubmodelElement;1"], 8 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 9 | "contents": [ 10 | { 11 | "@type": "Relationship", 12 | "name": "statement", 13 | "displayName": "applicable statement", 14 | "description": "Describes statements applicable to the entity by a set of submodel elements, typically with a qualified value.", 15 | "writable": true, 16 | "target": "dtmi:digitaltwins:aas:SubmodelElement;1" 17 | }, 18 | { 19 | "@type": "Property", 20 | "name": "entityType", 21 | "displayName": "Entity type", 22 | "description": "Describes whether the entity is a comanaged entity or a self-managed entity.", 23 | "writable": true, 24 | "comment": "AAS type: EntityType - Mandatory", 25 | "schema": { 26 | "@type": "Enum", 27 | "valueSchema": "string", 28 | "enumValues": [ 29 | { 30 | "name": "CoManagedEntity", 31 | "enumValue": "CoManagedEntity", 32 | "displayName": "Co managed entity", 33 | "description": "For co-managed entities there is no separate AAS. Co-managed entities need to be part of a self-managed entity." 34 | }, 35 | { 36 | "name": "SelfManagedEntity", 37 | "enumValue": "SelfManagedEntity", 38 | "displayName": "self managed entity", 39 | "description": "Self-Managed Entities have their own AAS but can be part of the bill of material of a composite self-managed entity." 40 | } 41 | ] 42 | } 43 | }, 44 | { 45 | "@type": "Relationship", 46 | "name": "globalAssetId", 47 | "description": "Reference to the asset the entity is representing.", 48 | "writable": true, 49 | "displayName": "Global Asset Id", 50 | "maxMultiplicity": 1, 51 | "target": "dtmi:digitaltwins:aas:Reference;1" 52 | }, 53 | { 54 | "@type": "Relationship", 55 | "name": "specificAssetId", 56 | "displayName": "specified by", 57 | "description": "Additional domain specific specific, typically proprietary Identifier for the asset like e.g. serial number etc", 58 | "writable": true, 59 | "target": "dtmi:digitaltwins:aas:SpecificAssetId;1" 60 | } 61 | ] 62 | } 63 | -------------------------------------------------------------------------------- /Ontology/metamodel/Environment.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Environment;1", 4 | "@type": "Interface", 5 | "displayName": "Environment", 6 | "description": "Container for the sets of different identifiables. ", 7 | "extends": ["dtmi:digitaltwins:aas:Reference;1"], 8 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 9 | "contents": [ 10 | { 11 | "@type": "Relationship", 12 | "name": "assetAdministrationShell", 13 | "displayName": "contains shell", 14 | "description": "Asset administration shell", 15 | "target": "dtmi:digitaltwins:aas:AssetAdministrationShell;1", 16 | "writable": true 17 | }, 18 | { 19 | "@type": "Relationship", 20 | "name": "submodel", 21 | "displayName": "contains submodel", 22 | "description": "Submodel", 23 | "target": "dtmi:digitaltwins:aas:Submodel;1", 24 | "writable": true 25 | }, 26 | { 27 | "@type": "Relationship", 28 | "name": "conceptDescription", 29 | "displayName": "contains concept description", 30 | "description": "Concept description", 31 | "target": "dtmi:digitaltwins:aas:ConceptDescription;1", 32 | "writable": true 33 | } 34 | ] 35 | } -------------------------------------------------------------------------------- /Ontology/metamodel/EventElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:EventElement;1", 4 | "@type": "Interface", 5 | "displayName": "Event element", 6 | "description": "An event element", 7 | "extends": ["dtmi:digitaltwins:aas:SubmodelElement;1"], 8 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02" 9 | } -------------------------------------------------------------------------------- /Ontology/metamodel/EventMessage.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:EventMessage;1", 4 | "@type": "Interface", 5 | "displayName": "Event Message", 6 | "description": "Defines the necessary information of an event instance sent out or received", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "source", 12 | "displayName": "Source", 13 | "description": "Reference to the source EventElement, including identification of AAS, Submodel, SubmodelElements.", 14 | "writable": true, 15 | "maxMultiplicity": 1, 16 | "target": "dtmi:digitaltwins:aas:Reference;1" 17 | }, 18 | { 19 | "@type": "Relationship", 20 | "name": "sourceSemanticId", 21 | "displayName": "Source Semantic Id", 22 | "description": "semanticId of the source EventElement, if available", 23 | "writable": true, 24 | "maxMultiplicity": 1, 25 | "target": "dtmi:digitaltwins:aas:Reference;1" 26 | }, 27 | { 28 | "@type": "Relationship", 29 | "name": "observableReference", 30 | "displayName": "Observable Reference", 31 | "description": "Reference to the Referable, which defines the scope of the event. Can be AAS, Submodel, SubmodelElementCollection or SubmodelElement.", 32 | "writable": true, 33 | "maxMultiplicity": 1, 34 | "target": "dtmi:digitaltwins:aas:Reference;1" 35 | }, 36 | { 37 | "@type": "Relationship", 38 | "name": "observableSemanticId", 39 | "displayName": "Observable Semantic Id", 40 | "description": "semanticId of the Referable, which defines the scope of the event, if available. See above", 41 | "writable": true, 42 | "maxMultiplicity": 1, 43 | "target": "dtmi:digitaltwins:aas:Reference;1" 44 | }, 45 | { 46 | "@type": "Property", 47 | "name": "topic", 48 | "displayName": "Topic", 49 | "description": "Information for the outer message infrastructure for scheduling the event to the respective communication channel.", 50 | "writable": true, 51 | "schema": "string" 52 | }, 53 | { 54 | "@type": "Property", 55 | "name": "subject", 56 | "displayName": "Subject", 57 | "description": "ABAC-Subject, who/ which initiated the creation", 58 | "writable": true, 59 | "schema": "string" 60 | }, 61 | { 62 | "@type": "Property", 63 | "name": "timestamp", 64 | "displayName": "Timestamp", 65 | "description": "Timestamp in UTC, when this event was triggered.", 66 | "writable": true, 67 | "schema": "string" 68 | }, 69 | { 70 | "@type": "Property", 71 | "name": "payload", 72 | "displayName": "Payload", 73 | "description": "Event specific payload. Detailed in annex.", 74 | "writable": true, 75 | "schema": "string" 76 | } 77 | ] 78 | } -------------------------------------------------------------------------------- /Ontology/metamodel/EventPayload.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:EventPayload;1", 4 | "@type": "Interface", 5 | "displayName": "Event payload", 6 | "description": "Defines the necessary information of an event instance sent out or received", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "source", 12 | "description": "Reference to the source event element, including identification of AAS, Submodel, SubmodelElements.", 13 | "target": "dtmi:digitaltwins:aas:Referable;1", 14 | "maxMultiplicity": 1, 15 | "writable": true 16 | }, 17 | { 18 | "@type": "Relationship", 19 | "name": "sourceSemanticId", 20 | "displayName": "Source semantic Id", 21 | "description": "semanticId of the source event element, if available", 22 | "target": "dtmi:digitaltwins:aas:Reference;1", 23 | "maxMultiplicity": 1, 24 | "writable": true 25 | }, 26 | { 27 | "@type": "Relationship", 28 | "name": "observableReference", 29 | "displayName": "Observable reference", 30 | "description": "Reference to the referable, which defines the scope of the event. Can be AssetAdministrationShell, Submodel or SubmodelElement.", 31 | "target": "dtmi:digitaltwins:aas:Referable;1", 32 | "maxMultiplicity": 1, 33 | "writable": true 34 | }, 35 | { 36 | "@type": "Relationship", 37 | "name": "observableSemanticId", 38 | "displayName": "Observable semantic Id", 39 | "description": "semanticId of the referable which defines the scope of the event, if available. It is recommended to use a global reference", 40 | "target": "dtmi:digitaltwins:aas:Reference;1", 41 | "maxMultiplicity": 1, 42 | "writable": true 43 | }, 44 | { 45 | "@type": "Property", 46 | "name": "topic", 47 | "displayName": "Topic", 48 | "description": "Information for the outer message infrastructure for scheduling the event to the respective communication channel. ", 49 | "schema": "string", 50 | "writable": true 51 | }, 52 | { 53 | "@type": "Relationship", 54 | "name": "subjectId", 55 | "displayName": "Subject Id", 56 | "description": "Subject, who/which initiated the creation.", 57 | "target": "dtmi:digitaltwins:aas:Reference;1", 58 | "maxMultiplicity": 1, 59 | "writable": true 60 | }, 61 | { 62 | "@type": "Property", 63 | "name": "timestamp", 64 | "displayName": "Timestamp", 65 | "description": "Timestamp in UTC, when this event was triggered.", 66 | "schema": "dateTime", 67 | "writable": true 68 | }, 69 | { 70 | "@type": "Property", 71 | "name": "payload", 72 | "displayName": "Payload", 73 | "description": "Event specific payload. ", 74 | "schema": "string", 75 | "writable": true 76 | } 77 | ] 78 | } -------------------------------------------------------------------------------- /Ontology/metamodel/Extension.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Extension;1", 4 | "@type": "Interface", 5 | "displayName": "Extension", 6 | "description": "Single extension of an element", 7 | "extends": ["dtmi:digitaltwins:aas:HasSemantics;1"], 8 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "name", 13 | "description": "An extension of the element. Constraint AASd-077: The name of an extension within HasExtensions needs to be unique.", 14 | "schema": "string" 15 | }, 16 | { 17 | "@type": "Property", 18 | "name": "valueType", 19 | "description": "Type of the value of the extension.", 20 | "schema": "string", 21 | "writable": true 22 | }, 23 | { 24 | "@type": "Property", 25 | "name": "value", 26 | "description": "Value of the extension", 27 | "displayName": "Value", 28 | "schema": "string", 29 | "writable": true 30 | }, 31 | { 32 | "@type": "Relationship", 33 | "name": "refersTo", 34 | "description": "Reference to an element the extension refers to.", 35 | "displayName": "Refers to", 36 | "comment": "Type ModelReference according to specification", 37 | "target": "dtmi:digitaltwins:aas:Referable;1", 38 | "writable": true 39 | } 40 | ] 41 | } -------------------------------------------------------------------------------- /Ontology/metamodel/File.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:File;1", 4 | "@type": "Interface", 5 | "displayName": "File", 6 | "description": "A File is a data element that represents an address to a file. The value is an URI that can represent an absolute or relative path.", 7 | "extends": ["dtmi:digitaltwins:aas:DataElement;1"], 8 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name" : "value", 13 | "displayName": "Value", 14 | "description": "Path and name of the referenced file (with file extension). The path can be absolute or relative.", 15 | "writable": true, 16 | "schema": "string" 17 | }, 18 | { 19 | "@type": "Property", 20 | "name": "contentType", 21 | "description": "Content type of the content of the file.", 22 | "schema": "string" 23 | } 24 | ] 25 | } 26 | -------------------------------------------------------------------------------- /Ontology/metamodel/HasDataSpecification.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:HasDataSpecification;1", 4 | "@type": "Interface", 5 | "displayName": "Has Data specification", 6 | "description": "Element that can be extended by using data specification templates. A data specification template defines a named set of additional attributes an element may or shall have. The data specifications used are explicitly specified with their global id.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "dataSpecification", 12 | "displayName": "Data specification template reference", 13 | "description": "Global reference to the data specification template used by the element", 14 | "comment": "Global reference", 15 | "writable": true, 16 | "target": "dtmi:digitaltwins:aas:Reference;1" 17 | }, 18 | { 19 | "@type": "Property", 20 | "name": "dataSpecificationTemplateGlobalRefValue", 21 | "description": "String serialized data specification template value according to Spec 9.2.3 Serialization of Values of Type “Reference”", 22 | "comment": "Not part of the AAS Spec. Use alternatively for 'dataSpecification'", 23 | "schema": "string", 24 | "displayName": "Data specification template reference value", 25 | "writable": true 26 | }, 27 | { 28 | "@type": "Relationship", 29 | "name": "dataSpecificationRef", 30 | "displayName": "Data specification template", 31 | "description": "Data specification template used by the element", 32 | "comment": "Not part of the AAS Spec. Use to link to a DataSpecification twin in the graph", 33 | "target": "dtmi:digitaltwins:aas:DataSpecification;1", 34 | "writable": true 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /Ontology/metamodel/HasExtensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:HasExtensions;1", 4 | "@type": "Interface", 5 | "displayName": "Has Extensions", 6 | "description": "Element that can be extended by proprietary extensions. Abstract interface", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "extensions", 12 | "displayName": "extended by", 13 | "writable": true, 14 | "description": "An extension of the element.", 15 | "target": "dtmi:digitaltwins:aas:Extension;1" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /Ontology/metamodel/HasKind.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:HasKind;1", 4 | "@type": "Interface", 5 | "displayName": "Has Kind", 6 | "description": "An element with a kind is an element that can either represent a template or an instance.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name": "kind", 12 | "displayName": "Kind", 13 | "description": "Kind of the element: either type or instance", 14 | "writable": true, 15 | "schema": { 16 | "@type": "Enum", 17 | "valueSchema": "string", 18 | "enumValues": [ 19 | { 20 | "name": "Template", 21 | "enumValue": "Template", 22 | "description": "Software element which specifies the common attributes shared by all instances of the template." 23 | }, 24 | { 25 | "name": "Instance", 26 | "enumValue": "Instance", 27 | "description": "Concrete, clearly identifiable component of a certain template." 28 | } 29 | ] 30 | } 31 | } 32 | ] 33 | } -------------------------------------------------------------------------------- /Ontology/metamodel/HasSemantics.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:HasSemantics;1", 4 | "@type": "Interface", 5 | "displayName": "Has Semantics", 6 | "description": "Element that can have a semantic definition. Abstract interface", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "semanticId", 12 | "displayName": "Semantic Id", 13 | "description": "Identifier of the semantic definition of the element. It is called semantic id of the element.", 14 | "target": "dtmi:digitaltwins:aas:Reference;1", 15 | "writable": true, 16 | "maxMultiplicity": 1, 17 | "comment": "Kind: aggregation, Cardinality: 0..1" 18 | }, 19 | { 20 | "@type": "Property", 21 | "name": "semanticIdValue", 22 | "displayName": "Semantic Id value", 23 | "description": "String serialized semantic id value according to Spec 9.2.3 Serialization of Values of Type “Reference”", 24 | "comment": "Not part of the AAS Spec. Use alternatively for 'semanticId'", 25 | "schema": "string", 26 | "writable": true 27 | }, 28 | { 29 | "@type": "Relationship", 30 | "name": "supplementalSemanticId", 31 | "displayName": "Supplemental semantic Id", 32 | "description": "Identifier of a supplemental semantic definition of the element. It is called supplemental semantic ID of the element.", 33 | "target": "dtmi:digitaltwins:aas:Reference;1", 34 | "writable": true 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /Ontology/metamodel/Identifiable.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Identifiable;1", 4 | "@type": "Interface", 5 | "displayName": "Identifiable", 6 | "description": "An identifiable element is a referable with a globally unique identifier (Identifier). To reference an identifiable only the global id (identification/id) shall be used because the idShort is not unique for an identifiable. Identifiables may have administrative information like version etc", 7 | "extends": ["dtmi:digitaltwins:aas:Referable;1"], 8 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 9 | "contents": [ 10 | { 11 | "@type": "Component", 12 | "name": "administration", 13 | "displayName": "Administration", 14 | "description": "Administrative information of an identifiable element.", 15 | "schema": "dtmi:digitaltwins:aas:AdministrationInformation;1" 16 | }, 17 | { 18 | "@type": "Property", 19 | "name": "id", 20 | "displayName": "Id", 21 | "description": "The globally unique identification of the element.", 22 | "comment": "Mandatory", 23 | "schema": "string", 24 | "writable": true 25 | } 26 | ] 27 | } -------------------------------------------------------------------------------- /Ontology/metamodel/LangStringSet.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:LangStringSet;1", 4 | "@type": "Interface", 5 | "displayName": "Language String Set", 6 | "description": "A set of strings, each annotated by the language of the string. The meaning of the string in each language shall be the same.", 7 | "comment": "Defined as Data type in AAS metamodel and should be used as Component in Models like MultiLanguageProperty. According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name": "langString", 12 | "description": "A set of strings, each annotated by the language of the string. The meaning of the stringin each language shall be the same.", 13 | "schema": { 14 | "@type": "Map", 15 | "mapKey": { 16 | "name": "iso2Code", 17 | "description": "ISO 3166-1 alpha-2 codes are two-letter country codes defined in ISO 3166-1, part of the ISO 3166 standard", 18 | "schema": "string" 19 | }, 20 | "mapValue": { 21 | "name": "langSpecString", 22 | "description": "A string in a specified language", 23 | "schema": "string" 24 | } 25 | }, 26 | "writable": true 27 | } 28 | ] 29 | } -------------------------------------------------------------------------------- /Ontology/metamodel/MultiLanguageProperty.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:MultiLanguageProperty;1", 4 | "@type": "Interface", 5 | "displayName": "Multi language property", 6 | "extends": [ 7 | "dtmi:digitaltwins:aas:DataElement;1" 8 | ], 9 | "comment": "A property is a data element that has a multi-language value", 10 | "contents": [ 11 | { 12 | "@type": "Component", 13 | "name": "value", 14 | "displayName": "Value", 15 | "description": "The value of the property instance.", 16 | "comment": "AAS type: LangStringSet", 17 | "schema": "dtmi:digitaltwins:aas:LangStringSet;1" 18 | }, 19 | { 20 | "@type": "Relationship", 21 | "name": "valueId", 22 | "displayName": "Value Id", 23 | "description": "Reference to the global unique id of a coded value.", 24 | "comment": "AAS type: Reference", 25 | "writable": true, 26 | "maxMultiplicity": 1, 27 | "target": "dtmi:digitaltwins:aas:Reference;1" 28 | } 29 | ] 30 | } -------------------------------------------------------------------------------- /Ontology/metamodel/Operation.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Operation;1", 4 | "@type": "Interface", 5 | "displayName": "Operation", 6 | "description": "An operation is a submodel element with input and output variables", 7 | "extends": ["dtmi:digitaltwins:aas:SubmodelElement;1"], 8 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 9 | "contents": [ 10 | { 11 | "@type": "Relationship", 12 | "name": "inputVariable", 13 | "displayName": "Input variable", 14 | "description": "Input parameter of the operation.", 15 | "writable": true, 16 | "target": "dtmi:digitaltwins:aas:OperationVariable;1" 17 | }, 18 | { 19 | "@type": "Relationship", 20 | "name": "outputVariable", 21 | "displayName": "Output variable", 22 | "description": "Output parameter of the operation.", 23 | "writable": true, 24 | "target": "dtmi:digitaltwins:aas:OperationVariable;1" 25 | }, 26 | { 27 | "@type": "Relationship", 28 | "name": "inoutputVariable", 29 | "displayName": "Input and output variable", 30 | "description": "Parameter that is input and output of the operation.", 31 | "writable": true, 32 | "target": "dtmi:digitaltwins:aas:OperationVariable;1" 33 | } 34 | ] 35 | } -------------------------------------------------------------------------------- /Ontology/metamodel/OperationVariable.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:OperationVariable;1", 4 | "@type": "Interface", 5 | "displayName": "Operation variable", 6 | "description": "An operation variable is a submodel element that is used as input or output variable of an operation", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "value", 12 | "displayName": "Value", 13 | "description": "Describes the needed argument for an operation via a submodel element of kind=Template.", 14 | "writable": true, 15 | "maxMultiplicity": 1, 16 | "target": "dtmi:digitaltwins:aas:SubmodelElement;1" 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Ontology/metamodel/Property.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Property;1", 4 | "@type": "Interface", 5 | "displayName": "Property", 6 | "description": "A property is a data element that has a single value.", 7 | "extends": [ 8 | "dtmi:digitaltwins:aas:DataElement;1" 9 | ], 10 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 11 | "contents": [ 12 | { 13 | "@type": "Property", 14 | "name": "valueType", 15 | "displayName": "Value type", 16 | "description": "Data type of the value", 17 | "writable": true, 18 | "comment": "AAS type: DataTypeDefXsd - Mandatory", 19 | "schema": "string" 20 | }, 21 | { 22 | "@type": "Property", 23 | "name": "value", 24 | "displayName": "Value", 25 | "description": "The value of the property instance.", 26 | "writable": true, 27 | "comment": "AAS type: ValueDataType", 28 | "schema": "string" 29 | }, 30 | { 31 | "@type": "Relationship", 32 | "name": "valueId", 33 | "displayName": "Value Id", 34 | "description": "Reference to the global unique id of a coded value.", 35 | "comment": "AAS type: Reference", 36 | "maxMultiplicity": 1, 37 | "target": "dtmi:digitaltwins:aas:Reference;1" 38 | } 39 | ] 40 | } -------------------------------------------------------------------------------- /Ontology/metamodel/Qualifiable.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Qualifiable;1", 4 | "@type": "Interface", 5 | "displayName": "Qualifiable", 6 | "description": "The value of a qualifiable element may be further qualified by one or more qualifiers or complex formulas.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "qualifier", 12 | "displayName": "qualifier", 13 | "description": "Additional qualification of a qualifiable element.", 14 | "writable": true, 15 | "target": "dtmi:digitaltwins:aas:Qualifier;1" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /Ontology/metamodel/Qualifier.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Qualifier;1", 4 | "@type": "Interface", 5 | "displayName": "Qualifier", 6 | "description": "A qualifier is a type-value-pair that makes additional statements w.r.t. the value of the element.", 7 | "extends": ["dtmi:digitaltwins:aas:HasSemantics;1"], 8 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "kind", 13 | "displayName": "Kind", 14 | "description": "The qualifier kind describes the kind of the qualifier that is applied to the element. Default: ConceptQualifier", 15 | "writable": true, 16 | "schema": { 17 | "@type": "Enum", 18 | "valueSchema": "string", 19 | "enumValues": [ 20 | { 21 | "name": "ValueQualifier", 22 | "enumValue": "ValueQualifier", 23 | "description": "qualifies the value of the element and can change during run-time Value qualifiers are only applicable to elements with kind=„Instance”" 24 | }, 25 | { 26 | "name": "ConceptQualifier", 27 | "enumValue": "ConceptQualifier", 28 | "description": "qualifies the semantic definition the element is referring to (HasSemantics/semanticId)" 29 | }, 30 | { 31 | "name": "TemplateQualifier", 32 | "enumValue": "TemplateQualifier", 33 | "description": "qualifies the elements within a specific submodel on concept level. Template qualifiers are only applicable to elements with kind=„Template”" 34 | } 35 | ] 36 | } 37 | }, 38 | { 39 | "@type": "Property", 40 | "name": "type", 41 | "displayName": "Qualifier type", 42 | "description": "The qualifier type describes the type of the qualifier that is applied to the element.", 43 | "comment": "AAS type: QualifierType - Mandatory", 44 | "writable": true, 45 | "schema": "string" 46 | }, 47 | { 48 | "@type": "Property", 49 | "name": "valueType", 50 | "displayName": "Value type", 51 | "description": "Data type of the qualifier value.", 52 | "comment": "AAS type: DataTypeDefXsd - Mandatory", 53 | "writable": true, 54 | "schema": "string" 55 | }, 56 | { 57 | "@type": "Property", 58 | "name": "value", 59 | "displayName": "Value", 60 | "description": "The qualifier value is the value of the qualifier", 61 | "comment": "AAS type: ValueDataType", 62 | "writable": true, 63 | "schema": "string" 64 | }, 65 | { 66 | "@type": "Relationship", 67 | "name": "valueId", 68 | "displayName": "Value Id", 69 | "description": "Reference to the global unique id of a coded value.", 70 | "comment": "AAS type: Reference", 71 | "writable": true, 72 | "maxMultiplicity": 1, 73 | "target": "dtmi:digitaltwins:aas:Reference;1" 74 | } 75 | ] 76 | } -------------------------------------------------------------------------------- /Ontology/metamodel/README.md: -------------------------------------------------------------------------------- 1 | # opendigitaltwins-assetadminstrationshell metamodel -------------------------------------------------------------------------------- /Ontology/metamodel/Range.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Range;1", 4 | "@type": "Interface", 5 | "displayName": "Range", 6 | "description": "A range data element is a data element that defines a range with min and max.", 7 | "extends": [ 8 | "dtmi:digitaltwins:aas:DataElement;1" 9 | ], 10 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 11 | "contents": [ 12 | { 13 | "@type": "Property", 14 | "name": "valueType", 15 | "displayName": "Value type", 16 | "description": "Data type of the min und max", 17 | "writable": true, 18 | "comment": "AAS type: DataTypeDefXsd - Mandatory", 19 | "schema": "string" 20 | }, 21 | { 22 | "@type": "Property", 23 | "name": "min", 24 | "displayName": "Minimum", 25 | "description": "The minimum value of the range", 26 | "writable": true, 27 | "comment": "AAS type: ValueDataType", 28 | "schema": "string" 29 | }, 30 | { 31 | "@type": "Property", 32 | "name": "max", 33 | "displayName": "Maximum", 34 | "description": "The maximum value of the range", 35 | "writable": true, 36 | "comment": "AAS type: ValueDataType", 37 | "schema": "string" 38 | } 39 | ] 40 | } -------------------------------------------------------------------------------- /Ontology/metamodel/Referable.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Referable;1", 4 | "@type": "Interface", 5 | "displayName": "Referable", 6 | "description": "An element that is referable by its idShort. This id is not globally unique. This id is unique within the name space of the element.", 7 | "extends": ["dtmi:digitaltwins:aas:HasExtensions;1"], 8 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 9 | "contents": [ 10 | { 11 | "@type": "Property", 12 | "name": "idShort", 13 | "description": "In case of identifiables this attribute is a short name of the element. In case of referable this id is an identifying string of the element within its name space.", 14 | "comment": "Optional", 15 | "schema": "string" 16 | }, 17 | { 18 | "@type": "Component", 19 | "name": "displayName", 20 | "displayName": "Display name", 21 | "description": "Display name. Can be provided in several languages.", 22 | "schema": "dtmi:digitaltwins:aas:LangStringSet;1" 23 | }, 24 | { 25 | "@type": "Property", 26 | "name": "category", 27 | "displayName": "Category", 28 | "description": "The category is a value that gives further meta information w.r.t. to the class of the element. It affects the expected existence of attributes and the applicability of constraints.", 29 | "writable": true, 30 | "schema": "string" 31 | }, 32 | { 33 | "@type": "Component", 34 | "name": "description", 35 | "displayName": "Description", 36 | "description": "Description or comments on the element. The description can be provided in several languages.", 37 | "schema": "dtmi:digitaltwins:aas:LangStringSet;1" 38 | }, 39 | { 40 | "@type": "Property", 41 | "name": "checksum", 42 | "displayName": "Checksum", 43 | "description": "Checksum to be used to determine if an Referable (including its aggregated child elements) has changed.The checksum is calculated by the user’s tool environment. The checksum has no semantic meaning for an Asset Administration Shell model and there is no requirement for Asset Administration Shell tools to manage the checksum.", 44 | "writable": true, 45 | "schema": "string" 46 | }, 47 | { 48 | "@type": "Component", 49 | "name": "tags", 50 | "schema": "dtmi:digitaltwins:aas:ext:Tags;1", 51 | "comment": "Not part of the AAS meta model. Makes querying easier. See https://docs.microsoft.com/en-us/azure/digital-twins/how-to-use-tags" 52 | } 53 | ] 54 | } -------------------------------------------------------------------------------- /Ontology/metamodel/Reference.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Reference;1", 4 | "@type": "Interface", 5 | "displayName": "Reference", 6 | "description": "Reference to either a model element of the same or another AAs or to an external entity. A reference is an ordered list of keys, each key referencing an element. The complete list of keys may for example be concatenated to a path that then gives unique access to an element or entity.", 7 | "comment": "Since DTDLv2 doesn't support arrays for properties, multiple key components, actually 8, are used here. According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name": "type", 12 | "displayName": "Type", 13 | "description": "Type of the reference. Denotes, whether reference is a global reference or a model reference.", 14 | "schema": { 15 | "@type": "Enum", 16 | "valueSchema": "string", 17 | "enumValues": [ 18 | { 19 | "name": "GlobalReference", 20 | "enumValue": "GlobalReference", 21 | "description": "A global reference is a reference to an external entity." 22 | }, 23 | { 24 | "name": "ModelReference", 25 | "enumValue": "ModelReference", 26 | "description": "A model reference is an ordered list of keys, each key referencing an element. The complete list of keys may for example be concatenated to a path that then gives unique access to an element" 27 | } 28 | ] 29 | } 30 | }, 31 | { 32 | "@type": "Relationship", 33 | "name": "referredSemanticId", 34 | "displayName": "Referred semantic Id", 35 | "description": "SemanticId of the referenced model element (Reference/type=ModelReference). For global references there typically is no semantic ID. It is recommended to use a global reference", 36 | "target": "dtmi:digitaltwins:aas:Reference;1", 37 | "maxMultiplicity": 1, 38 | "writable": true 39 | }, 40 | { 41 | "@type": "Relationship", 42 | "name": "referredElement", 43 | "comment": "Optional. Can be used to link to a Referable inside the same DT graph", 44 | "writable": true, 45 | "minMultiplicity": 0, 46 | "target": "dtmi:digitaltwins:aas:Referable;1" 47 | }, 48 | { 49 | "@type": "Component", 50 | "name": "key1", 51 | "description": "First key. Unique reference in its namespace.", 52 | "schema": "dtmi:digitaltwins:aas:Key;1" 53 | }, 54 | { 55 | "@type": "Component", 56 | "name": "key2", 57 | "description": "Second key. Unique reference in its namespace.", 58 | "schema": "dtmi:digitaltwins:aas:Key;1" 59 | }, 60 | { 61 | "@type": "Component", 62 | "name": "key3", 63 | "description": "Third key. Unique reference in its namespace.", 64 | "schema": "dtmi:digitaltwins:aas:Key;1" 65 | }, 66 | { 67 | "@type": "Component", 68 | "name": "key4", 69 | "description": "Fourth key. Unique reference in its namespace.", 70 | "schema": "dtmi:digitaltwins:aas:Key;1" 71 | }, 72 | { 73 | "@type": "Component", 74 | "name": "key5", 75 | "description": "Fifth key. Unique reference in its namespace.", 76 | "schema": "dtmi:digitaltwins:aas:Key;1" 77 | }, 78 | { 79 | "@type": "Component", 80 | "name": "key6", 81 | "description": "Fifth key. Unique reference in its namespace.", 82 | "schema": "dtmi:digitaltwins:aas:Key;1" 83 | }, 84 | { 85 | "@type": "Component", 86 | "name": "key7", 87 | "description": "Fifth key. Unique reference in its namespace.", 88 | "schema": "dtmi:digitaltwins:aas:Key;1" 89 | }, 90 | { 91 | "@type": "Component", 92 | "name": "key8", 93 | "description": "Fifth key. Unique reference in its namespace.", 94 | "schema": "dtmi:digitaltwins:aas:Key;1" 95 | } 96 | ] 97 | } -------------------------------------------------------------------------------- /Ontology/metamodel/ReferenceElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ReferenceElement;1", 4 | "@type": "Interface", 5 | "displayName": "Reference Element", 6 | "description": "A reference element is a data element that defines a logical reference to another element within the same or another AAS or a reference to an external object or entity.", 7 | "comment": "Since DTDLv2 doesn't support Components cascading, the complete contents of the Reference model is embedded in this model", 8 | "extends": [ 9 | "dtmi:digitaltwins:aas:DataElement;1" 10 | ], 11 | "contents": [ 12 | { 13 | "@type": "Relationship", 14 | "name": "referredElement", 15 | "comment": "Optional. Can be used to link to a Referable inside the same DT graph", 16 | "writable": true, 17 | "minMultiplicity": 0, 18 | "target": "dtmi:digitaltwins:aas:Referable;1" 19 | }, 20 | { 21 | "@type": "Component", 22 | "name": "key1", 23 | "description": "First key. Unique reference in its namespace.", 24 | "schema": "dtmi:digitaltwins:aas:Key;1" 25 | }, 26 | { 27 | "@type": "Component", 28 | "name": "key2", 29 | "description": "Second key. Unique reference in its namespace.", 30 | "schema": "dtmi:digitaltwins:aas:Key;1" 31 | }, 32 | { 33 | "@type": "Component", 34 | "name": "key3", 35 | "description": "Third key. Unique reference in its namespace.", 36 | "schema": "dtmi:digitaltwins:aas:Key;1" 37 | }, 38 | { 39 | "@type": "Component", 40 | "name": "key4", 41 | "description": "Fourth key. Unique reference in its namespace.", 42 | "schema": "dtmi:digitaltwins:aas:Key;1" 43 | }, 44 | { 45 | "@type": "Component", 46 | "name": "key5", 47 | "description": "Fifth key. Unique reference in its namespace.", 48 | "schema": "dtmi:digitaltwins:aas:Key;1" 49 | }, 50 | { 51 | "@type": "Component", 52 | "name": "key6", 53 | "description": "Fifth key. Unique reference in its namespace.", 54 | "schema": "dtmi:digitaltwins:aas:Key;1" 55 | }, 56 | { 57 | "@type": "Component", 58 | "name": "key7", 59 | "description": "Fifth key. Unique reference in its namespace.", 60 | "schema": "dtmi:digitaltwins:aas:Key;1" 61 | }, 62 | { 63 | "@type": "Component", 64 | "name": "key8", 65 | "description": "Fifth key. Unique reference in its namespace.", 66 | "schema": "dtmi:digitaltwins:aas:Key;1" 67 | } 68 | ] 69 | } -------------------------------------------------------------------------------- /Ontology/metamodel/RelationshipElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:RelationshipElement;1", 4 | "@type": "Interface", 5 | "displayName": "Relationship Element", 6 | "description": "A relationship element is used to define a relationship between two referable elements", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "extends": [ 9 | "dtmi:digitaltwins:aas:SubmodelElement;1" 10 | ], 11 | "contents": [ 12 | { 13 | "@type": "Relationship", 14 | "name": "first", 15 | "description": "Reference to the first element in the relationship taking the role of the subject.", 16 | "comment": "AAS type: Reference - Mandatory", 17 | "maxMultiplicity": 1, 18 | "writable": true, 19 | "target": "dtmi:digitaltwins:aas:Reference;1" 20 | }, 21 | { 22 | "@type": "Relationship", 23 | "name": "firstModelRef", 24 | "description": "Direct model reference to the first element in the relationship taking the role of the subject.", 25 | "comment": "Optional - To simplify graph by avoiding additional node and relationship", 26 | "maxMultiplicity": 1, 27 | "writable": true, 28 | "target": "dtmi:digitaltwins:aas:Referable;1" 29 | }, 30 | { 31 | "@type": "Relationship", 32 | "name": "second", 33 | "description": "Reference to the second element in the relationship taking the role of the subject.", 34 | "comment": "AAS type: Reference - Mandatory", 35 | "maxMultiplicity": 1, 36 | "writable": true, 37 | "target": "dtmi:digitaltwins:aas:Reference;1" 38 | }, 39 | { 40 | "@type": "Relationship", 41 | "name": "secondModelRef", 42 | "description": "Direct model reference to the second element in the relationship taking the role of the subject.", 43 | "comment": "Optional - To simplify graph by avoiding additional node and relationship", 44 | "maxMultiplicity": 1, 45 | "writable": true, 46 | "target": "dtmi:digitaltwins:aas:Referable;1" 47 | } 48 | ] 49 | } -------------------------------------------------------------------------------- /Ontology/metamodel/Resource.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Resource;1", 4 | "@type": "Interface", 5 | "displayName": "Resource", 6 | "description": "Resource represents an address to a file (a locator). The value is an URI that can represent an absolute or relative path.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name": "path", 12 | "displayName": "Path", 13 | "description": "Path and name of the resource (with file extension). The path can be absolute or relative.", 14 | "schema": "string", 15 | "writable": true 16 | }, 17 | { 18 | "@type": "Property", 19 | "name": "contentType", 20 | "displayName": "Content type", 21 | "description": "Content type of the content of the file. The content type states which file extensions the file can have.", 22 | "schema": "string", 23 | "writable": true 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /Ontology/metamodel/SpecificAssetId.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:SpecificAssetId;1", 4 | "@type": "Interface", 5 | "displayName": "Specific asset Id", 6 | "extends": [ 7 | "dtmi:digitaltwins:aas:HasSemantics;1" 8 | ], 9 | "description": "A specific asset ID describes a generic supplementary identifying attribute of the asset. The specific asset ID is not necessarily globally unique.", 10 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 11 | "contents": [ 12 | { 13 | "@type": "Property", 14 | "name": "name", 15 | "displayName": "Name", 16 | "writable": true, 17 | "schema": "string", 18 | "description": "Name of the identifier" 19 | }, 20 | { 21 | "@type": "Property", 22 | "name": "value", 23 | "displayName": "Value", 24 | "writable": true, 25 | "schema": "string", 26 | "description": "The value of the identifier with the corresponding name." 27 | }, 28 | { 29 | "@type": "Relationship", 30 | "name": "externalSubjectId", 31 | "displayName": "External subject Id", 32 | "description": "The (external) subject the specific asset id belongs to or has meaning to", 33 | "writable": true, 34 | "maxMultiplicity": 1, 35 | "target": "dtmi:digitaltwins:aas:Reference;1" 36 | } 37 | ] 38 | } -------------------------------------------------------------------------------- /Ontology/metamodel/Submodel.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Submodel;1", 4 | "@type": "Interface", 5 | "displayName": "Submodel", 6 | "extends": [ 7 | "dtmi:digitaltwins:aas:Identifiable;1", 8 | "dtmi:digitaltwins:aas:Qualifiable;1" 9 | ], 10 | "comment": "Attention: Due to DTDL v2 limitations of max 2 extends for an interface, the remaining 3 superinterfaces from the AAS specification were inlined", 11 | "contents": [ 12 | { 13 | "@type": "Relationship", 14 | "name": "submodelElement", 15 | "displayName": "contains", 16 | "description": "A submodel consists of zero or more submodel elements.", 17 | "target": "dtmi:digitaltwins:aas:SubmodelElement;1" 18 | }, 19 | { 20 | "@type": "Component", 21 | "name": "kind", 22 | "schema": "dtmi:digitaltwins:aas:HasKind;1", 23 | "description": "An element with a kind is an element that can either represent a template or an instance.", 24 | "comment": "Attention: Inlined from interface HasKind to reduce number of extended interfaces" 25 | }, 26 | { 27 | "@type": "Relationship", 28 | "name": "semanticId", 29 | "displayName": "Semantic Id", 30 | "description": "Identifier of the semantic definition of the element. It is called semantic id of the element.", 31 | "target": "dtmi:digitaltwins:aas:Reference;1", 32 | "writable": true, 33 | "maxMultiplicity": 1, 34 | "comment": "Kind: aggregation, Cardinality: 0..1 Attention: Inlined from interface HasSemantics to reduce number of extended interfaces" 35 | }, 36 | { 37 | "@type": "Property", 38 | "name": "semanticIdValue", 39 | "displayName": "Semantic Id value", 40 | "description": "String serialized semantic id value according to Spec 9.2.3 Serialization of Values of Type “Reference”", 41 | "comment": "Not part of the AAS Spec. Use alternatively for 'semanticId'", 42 | "schema": "string", 43 | "writable": true 44 | }, 45 | { 46 | "@type": "Relationship", 47 | "name": "supplementalSemanticId", 48 | "displayName": "Supplemental semantic Id", 49 | "description": "Identifier of a supplemental semantic definition of the element. It is called supplemental semantic ID of the element.", 50 | "target": "dtmi:digitaltwins:aas:Reference;1", 51 | "writable": true, 52 | "comment": "Inlined from interface HasSemantics to reduce number of extended interfaces" 53 | }, 54 | { 55 | "@type": "Relationship", 56 | "name": "dataSpecification", 57 | "displayName": "Data specification template reference", 58 | "description": "Global reference to the data specification template used by the element", 59 | "comment": "Global reference. Attention: Inlined from interface HasDataSpecification to reduce number of extended interfaces", 60 | "writable": true, 61 | "target": "dtmi:digitaltwins:aas:Reference;1" 62 | }, 63 | { 64 | "@type": "Property", 65 | "name": "dataSpecificationTemplateGlobalRefValue", 66 | "description": "String serialized data specification template value according to Spec 9.2.3 Serialization of Values of Type “Reference”", 67 | "comment": "Not part of the AAS Spec. Use alternatively for 'dataSpecification'", 68 | "schema": "string", 69 | "displayName": "Data specification template reference value", 70 | "writable": true 71 | }, 72 | { 73 | "@type": "Relationship", 74 | "name": "dataSpecificationRef", 75 | "displayName": "Data specification template", 76 | "description": "Data specification template used by the element", 77 | "comment": "Not part of the AAS Spec. Use to link to a DataSpecification twin in the graph", 78 | "target": "dtmi:digitaltwins:aas:DataSpecification;1", 79 | "writable": true 80 | } 81 | ] 82 | } -------------------------------------------------------------------------------- /Ontology/metamodel/SubmodelElement.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:SubmodelElement;1", 4 | "@type": "Interface", 5 | "displayName": "SubmodelElement", 6 | "extends": [ 7 | "dtmi:digitaltwins:aas:Referable;1", 8 | "dtmi:digitaltwins:aas:Qualifiable;1" 9 | ], 10 | "comment": "Attention: Due to DTDL v2 limitations of max 2 extends for an interface, the remaining 3 superinterfaces from the AAS specification were inlined", 11 | "contents": [ 12 | { 13 | "@type": "Component", 14 | "name": "kind", 15 | "schema": "dtmi:digitaltwins:aas:HasKind;1", 16 | "description": "An element with a kind is an element that can either represent a template or an instance.", 17 | "comment": "Attention: Inlined from interface HasKind to reduce number of extended interfaces" 18 | }, 19 | { 20 | "@type": "Relationship", 21 | "name": "semanticId", 22 | "displayName": "Semantic Id", 23 | "description": "Identifier of the semantic definition of the element. It is called semantic id of the element.", 24 | "target": "dtmi:digitaltwins:aas:Reference;1", 25 | "writable": true, 26 | "maxMultiplicity": 1, 27 | "comment": "Kind: aggregation, Cardinality: 0..1 Attention: Inlined from interface HasSemantics to reduce number of extended interfaces" 28 | }, 29 | { 30 | "@type": "Property", 31 | "name": "semanticIdValue", 32 | "displayName": "Semantic Id value", 33 | "description": "String serialized semantic id value according to Spec 9.2.3 Serialization of Values of Type “Reference”", 34 | "comment": "Not part of the AAS Spec. Use alternatively for 'semanticId'", 35 | "schema": "string", 36 | "writable": true 37 | }, 38 | { 39 | "@type": "Relationship", 40 | "name": "supplementalSemanticId", 41 | "displayName": "Supplemental semantic Id", 42 | "description": "Identifier of a supplemental semantic definition of the element. It is called supplemental semantic ID of the element.", 43 | "target": "dtmi:digitaltwins:aas:Reference;1", 44 | "writable": true, 45 | "comment": "Inlined from interface HasSemantics to reduce number of extended interfaces" 46 | }, 47 | { 48 | "@type": "Relationship", 49 | "name": "dataSpecification", 50 | "displayName": "Data specification template reference", 51 | "description": "Global reference to the data specification template used by the element", 52 | "comment": "Global reference. Attention: Inlined from interface HasDataSpecification to reduce number of extended interfaces", 53 | "writable": true, 54 | "target": "dtmi:digitaltwins:aas:Reference;1" 55 | }, 56 | { 57 | "@type": "Property", 58 | "name": "dataSpecificationTemplateGlobalRefValue", 59 | "description": "String serialized data specification template value according to Spec 9.2.3 Serialization of Values of Type “Reference”", 60 | "comment": "Not part of the AAS Spec. Use alternatively for 'dataSpecification'", 61 | "schema": "string", 62 | "displayName": "Data specification template reference value", 63 | "writable": true 64 | }, 65 | { 66 | "@type": "Relationship", 67 | "name": "dataSpecificationRef", 68 | "displayName": "Data specification template", 69 | "description": "Data specification template used by the element", 70 | "comment": "Not part of the AAS Spec. Use to link to a DataSpecification twin in the graph", 71 | "target": "dtmi:digitaltwins:aas:DataSpecification;1", 72 | "writable": true 73 | } 74 | ] 75 | } -------------------------------------------------------------------------------- /Ontology/metamodel/SubmodelElementCollection.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:SubmodelElementCollection;1", 4 | "@type": "Interface", 5 | "displayName": "Submodel Element Collection", 6 | "extends": ["dtmi:digitaltwins:aas:SubmodelElement;1"], 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "value", 12 | "displayName": "contains", 13 | "description": "Submodel element contained in the collection.", 14 | "target": "dtmi:digitaltwins:aas:SubmodelElement;1" 15 | } 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /Ontology/metamodel/security/AccessControl.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:AccessControl;1", 4 | "@type": "Interface", 5 | "displayName": "AccessControl", 6 | "description": "Access Control defines the local access control policy administration point.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "accessPermissionRule", 12 | "displayName": "Access Permission Rule", 13 | "description": "Access permission rules of the AAS describing the rights assigned to", 14 | "target": "dtmi:digitaltwins:aas:AccessPermissionRule;1", 15 | "writable": true 16 | }, 17 | { 18 | "@type": "Relationship", 19 | "name": "selectableSubjectAttributes", 20 | "displayName": "selectableSubjectAttributes", 21 | "description": "authenticated subjects that are configured for the AAS. They are selectable by the access permission rules to assign permissions to the subjects", 22 | "target": "dtmi:digitaltwins:aas:Submodel;1", 23 | "minMultiplicity": 0, 24 | "maxMultiplicity": 1 25 | }, 26 | { 27 | "@type": "Relationship", 28 | "name": "defaultSubjectAttributes", 29 | "displayName": "defaultSubjectAttributes", 30 | "comment": "mandatory", 31 | "description": "Reference to a submodel defining the default subjects’ attributes for the AAS that can be used to describe access permission rules", 32 | "target": "dtmi:digitaltwins:aas:Submodel;1", 33 | "maxMultiplicity": 1 34 | }, 35 | { 36 | "@type": "Relationship", 37 | "name": "selectablePermissions", 38 | "displayName": "selectablePermissions", 39 | "comment": "mandatory", 40 | "description": "Reference to a submodel defining which permissions can be assigned to the subjects", 41 | "target": "dtmi:digitaltwins:aas:Submodel;1", 42 | "minMultiplicity": 0, 43 | "maxMultiplicity": 1 44 | }, 45 | { 46 | "@type": "Relationship", 47 | "name": "defaultPermissions", 48 | "displayName": "defaultPermissions", 49 | "comment": "mandatory", 50 | "description": "Reference to a submodel defining which permissions can be assigned to the subjects", 51 | "target": "dtmi:digitaltwins:aas:Submodel;1", 52 | "minMultiplicity": 0, 53 | "maxMultiplicity": 1 54 | }, 55 | { 56 | "@type": "Relationship", 57 | "name": "selectableEnvironmentAttributes", 58 | "displayName": "selectableEnvironmentAttributes", 59 | "description": "Reference to a submodel defining which environment attributes can be accessed via the permission rules defined for the AAS, i.e. attributes that are not describing the asset itself.", 60 | "target": "dtmi:digitaltwins:aas:Submodel;1", 61 | "minMultiplicity": 0, 62 | "maxMultiplicity": 1 63 | }, 64 | { 65 | "@type": "Relationship", 66 | "name": "defaultEnvironmentAttributes", 67 | "displayName": "defaultEnvironmentAttributes", 68 | "description": " Reference to a submodel defining default environment attributes, i.e. attributes that are not describing the asset itself.", 69 | "target": "dtmi:digitaltwins:aas:Submodel;1", 70 | "minMultiplicity": 0, 71 | "maxMultiplicity": 1 72 | } 73 | ] 74 | } -------------------------------------------------------------------------------- /Ontology/metamodel/security/AccessControlPolicyPoints.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:AccessControlPolicyPoints;1", 4 | "@type": "Interface", 5 | "displayName": "AccessControlPolicyPoints", 6 | "description": "Container for access control policy points.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "policyAdministrationPoint", 12 | "displayName": "Policy administration Point", 13 | "comment": "mandatory", 14 | "description": "The access control administration policy point of the AAS.", 15 | "target": "dtmi:digitaltwins:aas:AccessControl;1", 16 | "writable": true, 17 | "maxMultiplicity": 1 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /Ontology/metamodel/security/AccessPermissionRule.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:AccessPermissionRule;1", 4 | "@type": "Interface", 5 | "displayName": "Access Permission Rule", 6 | "description": "Table that defines access permissions per authenticated subject for a set of objects (referable elements).", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "targetSubjectAttributes", 12 | "displayName": "Target Subject Attributes", 13 | "description": "Target subject attributes that need to be fulfilled by the accessing subject to get the permissions defined by this rule.", 14 | "target": "dtmi:digitaltwins:aas:SubjectAttributes;1", 15 | "maxMultiplicity": 1, 16 | "comment": "mandatory", 17 | "writable": true 18 | }, 19 | { 20 | "@type": "Relationship", 21 | "name": "permissionsPerObject", 22 | "displayName": "Permissions Per Object", 23 | "description": "Target subject attributes that need to be fulfilled by the accessing subject to get the permissions defined by this rule.", 24 | "target": "dtmi:digitaltwins:aas:PermissionsPerObject;1", 25 | "writable": true 26 | }, 27 | { 28 | "@type": "Relationship", 29 | "name": "constraint", 30 | "displayName": "Constraint", 31 | "description": "Constraint that needs to be validated to true so that access permission rule holds.", 32 | "target": "dtmi:digitaltwins:aas:Formula;1", 33 | "writable": true, 34 | "maxMultiplicity": 1 35 | } 36 | ] 37 | } -------------------------------------------------------------------------------- /Ontology/metamodel/security/Formula.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Formula;1", 4 | "@type": "Interface", 5 | "displayName": "Formula", 6 | "description": "A formula is used to describe constraints by a logical expression.", 7 | "comment": "Abstract. According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02" 8 | } -------------------------------------------------------------------------------- /Ontology/metamodel/security/ObjectAttributes.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:ObjectAttributes;1", 4 | "@type": "Interface", 5 | "displayName": "Object Attributes", 6 | "description": "A set of data elements that describe object attributes. These attributes need to refer to a data element within an existing submodel", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "objectAttribute", 12 | "displayName": "Object Attribute", 13 | "description": "Reference to a data element that further classifies an object.", 14 | "target": "dtmi:digitaltwins:aas:DataElement;1", 15 | "writable": true 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /Ontology/metamodel/security/Permission.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Permission;1", 4 | "@type": "Interface", 5 | "displayName": "Permission", 6 | "description": "Description of a single permission.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "permission", 12 | "displayName": "Permission", 13 | "comment": "mandatory", 14 | "description": "Reference to a property that defines the semantics of the permission", 15 | "target": "dtmi:digitaltwins:aas:Property;1", 16 | "maxMultiplicity": 1, 17 | "writable": true 18 | }, 19 | { 20 | "@type": "Property", 21 | "name": "kindOfPermission", 22 | "displayName": "kind of permission", 23 | "comment": "mandatory", 24 | "description": "Description of the kind of permission. Possible kind of permission also include the denial of the permission.", 25 | "writable": true, 26 | "schema": { 27 | "@type": "Enum", 28 | "valueSchema": "string", 29 | "enumValues": [ 30 | { 31 | "name": "Allow", 32 | "displayName": "Allow", 33 | "description": "Allow the permission given to the subject.", 34 | "enumValue": "Allow" 35 | }, 36 | { 37 | "name": "Deny", 38 | "displayName": "Deny", 39 | "description": "Explicitly deny the permission given to the subject.", 40 | "enumValue": "Deny" 41 | }, 42 | { 43 | "name": "NotApplicable", 44 | "displayName": "Not applicable", 45 | "description": "The permission is not applicable to the subject.", 46 | "enumValue": "NotApplicable" 47 | }, 48 | { 49 | "name": "Undefined", 50 | "displayName": "Deny", 51 | "description": "Explicitly deny the permission given to the subject.", 52 | "enumValue": "Undefined" 53 | } 54 | ] 55 | } 56 | } 57 | ] 58 | } -------------------------------------------------------------------------------- /Ontology/metamodel/security/PermissionsPerObject.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:PermissionsPerObject;1", 4 | "@type": "Interface", 5 | "displayName": "Permissions per Object", 6 | "description": "Table that defines access permissions for a specified object. The object is any referable element in the AAS. Additionally, object attributes can be defined that further specify the kind of object the permissions apply to", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "object", 12 | "displayName": "Object", 13 | "description": "Element to which permission shall be assigned.", 14 | "target": "dtmi:digitaltwins:aas:Referable;1", 15 | "maxMultiplicity": 1, 16 | "writable": true 17 | }, 18 | { 19 | "@type": "Relationship", 20 | "name": "targetObjectAttributes", 21 | "displayName": "Target Object Attributes", 22 | "description": "Target object attributes that need to be fulfilled so that the access permissions apply to the accessing subject.", 23 | "target": "dtmi:digitaltwins:aas:ObjectAttributes;1", 24 | "maxMultiplicity": 1, 25 | "writable": true 26 | }, 27 | { 28 | "@type": "Relationship", 29 | "name": "permission", 30 | "displayName": "Permission", 31 | "description": "Permissions assigned to the object. ", 32 | "target": "dtmi:digitaltwins:aas:Permission;1", 33 | "writable": true 34 | } 35 | ] 36 | } -------------------------------------------------------------------------------- /Ontology/metamodel/security/Security.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:Security;1", 4 | "@type": "Interface", 5 | "displayName": "Security", 6 | "description": "Container for security relevant information of the AAS.", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "accessControlPolicyPoints", 12 | "displayName": "Access Control Policy Points", 13 | "description": "Access control policy points of the AAS.", 14 | "target": "dtmi:digitaltwins:aas:AccessControlPolicyPoints;1", 15 | "maxMultiplicity": 1, 16 | "writable": true 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /Ontology/metamodel/security/SubjectAttributes.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:SubjectAttributes;1", 4 | "@type": "Interface", 5 | "displayName": "Subject Attributes", 6 | "description": "A set of data elements that further classifies a specific subject", 7 | "comment": "According Platform Industrie 4.0. Details of Asset Administration Shell (Version 3.0) Part 1 Release Candidate 02", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "subjectAttribute", 12 | "displayName": "Subject Attribute", 13 | "comment": "mandatory", 14 | "description": "A data element that further classifies a specific subject.", 15 | "target": "dtmi:digitaltwins:aas:DataElement;1", 16 | "writable": true 17 | } 18 | ] 19 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Open Digital Twins ontology for the Industrie 4.0 Asset Administration Shell 2 | 3 | The [Industrie 4.0 Asset Administration Shell (AAS)](https://www.plattform-i40.de/IP/Redaktion/EN/Downloads/Publikation/Asset_Administration_Shell_Reading_Guide.html) is an open standard for the exchange of information between partners in the manufacturing value chain. The Asset Administration Shell (AAS) is the digital representation of an asset. We also call it a “digital twin”. The AAS consists of a number of submodels in which all the information and functionalities of a given asset – including its features, characteristics, properties, statuses, parameters, measurement data and capabilities – can be described. 4 | 5 | Microsoft has defined an open standard for describing models of device and logical digital twins, the [Digital Twin Definition Language (DTDL)](https://github.com/Azure/opendigitaltwins-dtdl/blob/master/DTDL/v2/dtdlv2.md). This effort has been brought into the Digital Twin Consortium’s [Open Source Collaboration Acceleration](https://www.digitaltwinconsortium.org/hot-topics/open-source.htm) initiative. Ontologies for [Smart Cities](https://techcommunity.microsoft.com/t5/internet-of-things/smart-cities-ontology-for-digital-twins/ba-p/2166585), [Smart Buildings](https://techcommunity.microsoft.com/t5/internet-of-things/realestatecore-a-smart-building-ontology-for-digital-twins-is/ba-p/1914794) and [Energy Grids](https://techcommunity.microsoft.com/t5/internet-of-things/energy-grid-ontology-for-digital-twins-is-now-available/ba-p/2325134) have been published. 6 | 7 | The authors of this GitHub repository have trialed the applicability of using the AAS as a base for building an ontology for Smart Production (Discrete Manufacturing, Process Manufacturing and Automotive Production). 8 | 9 | # Implementation with DTDL v2 10 | 11 | The Asset Administration Shell is defined as a meta model. Implementing all essential models in DTDL was straightforward given the capabilities of DTDL. 12 | 13 | ![High level architecture!](Assets/images/Figure_1_Implemented_AAS_Metamodel_and_Submodels.png) 14 | 15 | Figure 1: Implemented AAS Metamodel and Submodels 16 | 17 | The DTDL JSON files all passed the [DTDL Validator](https://github.com/Azure-Samples/DTDL-Validator). When importing the models into the [Azure Digital Twin Explorer](https://github.com/Azure-Samples/digital-twins-explorer), you get the following model graph: 18 | 19 | ![High level architecture!](/Assets/images/Figure_2_Asset_Administration_Shell_meta_model_graph.png) 20 | 21 | Figure 2: Asset Administration Shell meta model graph 22 | 23 | # Extensibility through Submodels 24 | 25 | A powerful key concept of the AAS metamodel is that all relevant information is provided by submodels. Submodels can refer to other submodels. 26 | 27 | **Pro:** 28 | 29 | - This enables a high degree of independence from the entire supply chain in building and operating digital twins. 30 | 31 | - The effort to build an DTDL implementation of the meta model is low. 32 | 33 | **Con:** 34 | 35 | - The submodels have for the most part a very fixed structure. In other ontologies, these structure would have been designed in dedicated models. This implicates that there must be diligence in complying with the modeling requirements – to accomplish data integrity. 36 | 37 | The example below illustrates this challenges. For the submodel “Nameplate” ([source](https://www.plattform-i40.de/IP/Redaktion/DE/Downloads/Publikation/Submodel_Templates-Asset_Administration_Shell-digital_nameplate.pdf?__blob=publicationFile&v=2)) the properties within are fully specified. [MLP= MultiLanguageProperty]. 38 | 39 | ![High level architecture!](/Assets/images/Figure_3_Sample_properties_of_submodel_Nameplate.png) 40 | 41 | Figure 3: Sample properties of submodel "Nameplate" 42 | 43 | # Samples 44 | 45 | We implemented two samples: 46 | 47 | 1. The example from the Industrie 4.0 “From idea to implementation” on page 36/37 where “Nameplate” was still referred to as “Identification”. 48 | 49 | ![High level architecture!](/Assets/images/Figure_4_Sample_from_the_Industrie_40_documentation.png) 50 | 51 | Figure 4 Sample from the Industrie 4.0 documentation 52 | 53 | ![High level architecture!](/Assets/images/Figure_5_Twin_graph_from_the_first_sample.png) 54 | 55 | Figure 5 Twin graph from the first sample 56 | 57 | 2. The Hilscher Iot Edge Gateway from the set of on pages 55-57 in the same document 58 | 59 | ![High level architecture!](/Assets/images/Figure_6_Second_sample_from_the_Industrie_40_documentation_with_Hilscher.png) 60 | 61 | Figure 6 Second sample from the Industrie 4.0 documentation with Hilscher 62 | 63 | ![High level architecture!](/Assets/images/Figure_7_Hilscher_netIOT_Edge_Gateway_submodels.png) 64 | 65 | Figure 7 Hilscher netIOT Edge Gateway submodels 66 | 67 | ![High level architecture!](/Assets/images/Figure_8_Twin_graph_from_the_second_sample.png) 68 | 69 | Figure 8 Twin graph from the second sample 70 | 71 | # Example UI to Automate Twin Creation using the AAS Model 72 | 73 | ![High level architecture!](/Assets/images/Figure_9.png) 74 | 75 | Figure 9 Digital Twin Sample Client App 76 | 77 | 78 | ![High level architecture!](/Assets/images/Figure_10.png) 79 | 80 | Figure 10 New instance in ADT Explorer 81 | 82 | Since customers may have their own sub model properties, we can also generate dynamic UI based on the model properties to automate the instance creation in Azure Digital Twin. 83 | 84 | # Industrie 4.0 Resources 85 | 86 | - „Details of the Asset Administration Shell, Part 1 & 2,“ 11/2020: https://bit.ly/3phSUYB 87 | 88 | - “A short introduction to properties, submodels & Asset Administration Shells (AAS)”: https://www.plattform-i40.de/IP/Redaktion/EN/Downloads/Publikation/Hardshell-softcore_ppt.html 89 | 90 | - „What is Industrie 4.0?“: https://bit.ly/3kaRz2N 91 | 92 | - „The Asset Administration Shell: Implementing digital twins for use in Industrie 4.0, A starter kit for developers,“ 12/2019: https://bit.ly/3kZZSPl 93 | 94 | - „Details of the Administration Shell - from idea to implementation,“ 07/2019: https://bit.ly/2H8c2Hn 95 | 96 | - „Structure of the Administration Shell,“ 04/2018: https://bit.ly/34jbHdo 97 | 98 | - „What is the Asset Administration Shell from a technical perspective?“ 04/2021: https://bit.ly/3d0kvbw 99 | 100 | - „Examples of the Asset Administration Shell for Industrie 4.0 Components,“ 04/2017: https://bit.ly/2Ti9tVC 101 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | ## Security 4 | 5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). 6 | 7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://docs.microsoft.com/en-us/previous-versions/tn-archive/cc751383(v=technet.10)), please report it to us as described below. 8 | 9 | ## Reporting Security Issues 10 | 11 | **Please do not report security vulnerabilities through public GitHub issues.** 12 | 13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). 14 | 15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). 16 | 17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc). 18 | 19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: 20 | 21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) 22 | * Full paths of source file(s) related to the manifestation of the issue 23 | * The location of the affected source code (tag/branch/commit or direct URL) 24 | * Any special configuration required to reproduce the issue 25 | * Step-by-step instructions to reproduce the issue 26 | * Proof-of-concept or exploit code (if possible) 27 | * Impact of the issue, including how an attacker might exploit the issue 28 | 29 | This information will help us triage your report more quickly. 30 | 31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) page for more details about our active programs. 32 | 33 | ## Preferred Languages 34 | 35 | We prefer all communications to be in English. 36 | 37 | ## Policy 38 | 39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd). 40 | 41 | -------------------------------------------------------------------------------- /Sample/README.md: -------------------------------------------------------------------------------- 1 | # opendigitaltwins-assetadminstrationshell sample graph 2 | The JSON generates two sample AAS device graphs. 3 | Please note: Not yet according to AAS specification -------------------------------------------------------------------------------- /Tools/ClientApp/.gitignore: -------------------------------------------------------------------------------- 1 | bin 2 | obj 3 | csx 4 | .vs 5 | edge 6 | Publish 7 | 8 | *.user 9 | *.suo 10 | *.cscfg 11 | *.Cache 12 | project.lock.json 13 | 14 | /packages 15 | /TestResults 16 | 17 | /tools/NuGet.exe 18 | /App_Data 19 | /secrets 20 | /data 21 | .secrets 22 | appsettings.json 23 | local.settings.json 24 | 25 | node_modules 26 | dist 27 | 28 | # Local python packages 29 | .python_packages/ 30 | 31 | # Python Environments 32 | .env 33 | .venv 34 | env/ 35 | venv/ 36 | ENV/ 37 | env.bak/ 38 | venv.bak/ 39 | 40 | # Byte-compiled / optimized / DLL files 41 | __pycache__/ 42 | *.py[cod] 43 | *$py.class -------------------------------------------------------------------------------- /Tools/ClientApp/AASClientApp/AASClientApp.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | netcoreapp3.1 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | Always 18 | 19 | 20 | Always 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Tools/ClientApp/AASClientApp/AASClientApp.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.31702.126 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AASClientApp", "AASClientApp.csproj", "{4602FC51-6F37-4D50-86F7-4334B84AF2A4}" 7 | EndProject 8 | Global 9 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 10 | Debug|Any CPU = Debug|Any CPU 11 | Release|Any CPU = Release|Any CPU 12 | EndGlobalSection 13 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 14 | {4602FC51-6F37-4D50-86F7-4334B84AF2A4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 15 | {4602FC51-6F37-4D50-86F7-4334B84AF2A4}.Debug|Any CPU.Build.0 = Debug|Any CPU 16 | {4602FC51-6F37-4D50-86F7-4334B84AF2A4}.Release|Any CPU.ActiveCfg = Release|Any CPU 17 | {4602FC51-6F37-4D50-86F7-4334B84AF2A4}.Release|Any CPU.Build.0 = Release|Any CPU 18 | EndGlobalSection 19 | GlobalSection(SolutionProperties) = preSolution 20 | HideSolutionNode = FALSE 21 | EndGlobalSection 22 | GlobalSection(ExtensibilityGlobals) = postSolution 23 | SolutionGuid = {F59C1C08-9744-4CC5-A50F-EFF0A2CBA07C} 24 | EndGlobalSection 25 | EndGlobal 26 | -------------------------------------------------------------------------------- /Tools/ClientApp/AASClientApp/GeneralInformation_COPY.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:td:GeneralInformation;1", 4 | "@type": "Interface", 5 | "displayName": "General Information", 6 | "description": "General information, for example ordering and manufacturer information", 7 | "comment": "According Industrie 4.0 specification at https://www.zvei.org/fileadmin/user_upload/Presse_und_Medien/Publikationen/2020/Dezember/Submodel_Templates_of_the_Asset_Administration_Shell/201117_I40_ZVEI_SG2_Submodel_Spec_ZVEI_Technical_Data_Version_1_1.pdf", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name": "ManufacturerName", 12 | "writable": true, 13 | "description": "Legally valid designation of the natural or judicial body which is directly responsible for the design, production, packaging and labeling of a product in respect to its being brought into the market.", 14 | "displayName": "Manufacturer Name", 15 | "schema": "string" 16 | }, 17 | { 18 | "@type": "Property", 19 | "name": "ManufacturerProductDesignation", 20 | "writable": true, 21 | "description": "Product designation as given by the mnaufacturer. Short description of the product, product group or function (short text) in common language.", 22 | "displayName": "Manufacturer Product Designation", 23 | "schema": "string" 24 | }, 25 | { 26 | "@type": "Property", 27 | "name": "ManufacturerPartNumber", 28 | "writable": true, 29 | "description": "Unique product identifier of the manufacturer for the product type respective the type designation of the industrial equipment.", 30 | "displayName": "Manufacturer Part Number", 31 | "schema": "string" 32 | }, 33 | { 34 | "@type": "Property", 35 | "name": "ManufacturerOrderCode", 36 | "writable": true, 37 | "description": "Unique product identifier of the manufacturer sufficient to order the exact same product.", 38 | "displayName": "Manufacturer Order Code", 39 | "schema": "string" 40 | } 41 | ] 42 | } -------------------------------------------------------------------------------- /Tools/ClientApp/AASClientApp/Program.cs: -------------------------------------------------------------------------------- 1 | using Azure; 2 | using Azure.DigitalTwins.Core; 3 | using Azure.Identity; 4 | using Microsoft.Extensions.Configuration; 5 | using Newtonsoft.Json; 6 | using System; 7 | using System.Collections.Generic; 8 | using System.IO; 9 | using System.Runtime.InteropServices; 10 | using System.Threading.Tasks; 11 | 12 | namespace AASClientApp 13 | { 14 | class Program 15 | { 16 | private static DigitalTwinsClient client; 17 | 18 | static void Main(string[] args) 19 | { 20 | Uri adtInstanceUrl; 21 | try 22 | { 23 | var config = new ConfigurationBuilder() 24 | .AddJsonFile("appsettings.json", optional: false, reloadOnChange: false) 25 | .Build(); 26 | adtInstanceUrl = new Uri(config["instanceUrl"]); 27 | } 28 | catch (Exception ex) when (ex is FileNotFoundException || ex is UriFormatException) 29 | { 30 | Console.WriteLine(ex.Message); 31 | return; 32 | } 33 | 34 | var credential = new DefaultAzureCredential(); 35 | client = new DigitalTwinsClient(adtInstanceUrl, credential); 36 | Console.WriteLine("Connected"); 37 | 38 | //GetModels(client); 39 | CreateTwinWithRelationship(client); 40 | } 41 | 42 | static void CreateTwinWithRelationship(DigitalTwinsClient client) 43 | { 44 | dynamic technicaldata; 45 | using (var r = new StreamReader("technicaldata.json")) 46 | { 47 | technicaldata = JsonConvert.DeserializeObject(r.ReadToEnd()); 48 | } 49 | 50 | var twinData = new BasicDigitalTwin(); 51 | twinData.Metadata.ModelId = "dtmi:digitaltwins:aas:td:GeneralInformation;1"; 52 | twinData.Contents.Add("ManufacturerName", technicaldata.GeneralInformation.ManufacturerName.Value); 53 | twinData.Contents.Add("ManufacturerProductDesignation", technicaldata.GeneralInformation.ManufacturerProductDesignation.Value); 54 | twinData.Contents.Add("ManufacturerPartNumber", technicaldata.GeneralInformation.ManufacturerPartNumber.Value); 55 | twinData.Contents.Add("ManufacturerOrderCode", technicaldata.GeneralInformation.ManufacturerOrderCode.Value); 56 | //twinData.Id = Guid.NewGuid().ToString(); 57 | client.CreateOrReplaceDigitalTwin(technicaldata.Asset.Id.Value, twinData); 58 | Console.WriteLine("Twin Instance Created"); 59 | } 60 | 61 | static void GetModels(DigitalTwinsClient client) 62 | { 63 | try 64 | { 65 | var results = client.GetModels(new GetModelsOptions { IncludeModelDefinition = true }); 66 | foreach (var md in results) 67 | { 68 | Console.WriteLine(md.DtdlModel); 69 | } 70 | } 71 | catch (RequestFailedException e) 72 | { 73 | Console.WriteLine($"Error {e.Status}: {e.Message}"); 74 | } 75 | catch (Exception ex) 76 | { 77 | Console.WriteLine($"Error: {ex.Message}"); 78 | } 79 | } 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /Tools/ClientApp/AASClientApp/technicaldata.json: -------------------------------------------------------------------------------- 1 | { 2 | "Asset": { 3 | "Id" : "NewAsset1" 4 | }, 5 | "GeneralInformation": { 6 | "ManufacturerName": "Jomit & Co", 7 | "ManufacturerProductDesignation": "Space Elevators", 8 | "ManufacturerPartNumber": "SE001", 9 | "ManufacturerOrderCode": "J01" 10 | } 11 | } -------------------------------------------------------------------------------- /Tools/Packaging/aasontology.nuspec: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Azure.DigitalTwins.Ontologies.AAS 6 | 7 | 8 | 3.0-rc02 9 | 10 | 11 | Juergen Mayrbaeurl 12 | 13 | 17 | jmayrbaeurl 18 | 19 | 20 | https://github.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell 21 | 22 | 23 | Apache-2.0 24 | 25 | 26 | 27 | 28 | 29 | 33 | false 34 | 35 | 36 | Latest release for AAS version 3.0 37 | 38 | 42 | DTDL v2 implementation of the Industry 4.0 Asset Administration shell ontology 43 | 44 | 45 | Copyright ©2022 Microsoft Corporation 46 | 47 | 48 | azure digitaltwins dtdl manufacturing ontology 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /Tools/README.md: -------------------------------------------------------------------------------- 1 | # Tools -------------------------------------------------------------------------------- /Tools/Scripts/ADTQueries/queryForAllShells.ps1: -------------------------------------------------------------------------------- 1 | param ( 2 | [Parameter(Mandatory=$true)] 3 | [string]$dtName 4 | ) 5 | 6 | az dt twin query -n $dtName -q "SELECT * FROM DIGITALTWINS WHERE IS_OF_MODEL('dtmi:digitaltwins:aas:AssetAdministrationShell;1')" -------------------------------------------------------------------------------- /Tools/Scripts/ADTQueries/queryForAllShellsDTIds.ps1: -------------------------------------------------------------------------------- 1 | param ( 2 | [Parameter(Mandatory=$true)] 3 | [string]$dtName 4 | ) 5 | 6 | az dt twin query -n $dtName -q "SELECT T.$dtId FROM DIGITALTWINS T WHERE IS_OF_MODEL(T, 'dtmi:digitaltwins:aas:AssetAdministrationShell;1')" -------------------------------------------------------------------------------- /Tools/Scripts/ADTQueries/queryForAllShellsIdShorts.ps1: -------------------------------------------------------------------------------- 1 | param ( 2 | [Parameter(Mandatory=$true)] 3 | [string]$dtName 4 | ) 5 | 6 | az dt twin query -n $dtName -q "SELECT idShort FROM DIGITALTWINS WHERE IS_OF_MODEL('dtmi:digitaltwins:aas:AssetAdministrationShell;1')" -------------------------------------------------------------------------------- /Tools/Scripts/ADTQueries/queryForAllSubmodelsOfShell.ps1: -------------------------------------------------------------------------------- 1 | param ( 2 | [Parameter(Mandatory=$true)] 3 | [string]$dtName, 4 | [Parameter(Mandatory=$true)] 5 | [string]$shellDtId 6 | ) 7 | 8 | $queryString = "SELECT submodel FROM DIGITALTWINS MATCH (shell)-[:submodel]->(submodel) WHERE IS_OF_MODEL(shell, 'dtmi:digitaltwins:aas:AssetAdministrationShell;1') AND shell.`$dtId = '$shellDtId'" 9 | 10 | az dt twin query -n $dtName -q $queryString -o json --query "result[].submodel.idShort" -------------------------------------------------------------------------------- /Tools/Scripts/uploadAllModels.ps1: -------------------------------------------------------------------------------- 1 | param ( 2 | [Parameter(Mandatory=$true)] 3 | [string]$dtName 4 | ) 5 | 6 | az dt model create --dt-name $dtName --from-directory "..\..\Ontology\metamodel" -------------------------------------------------------------------------------- /Tools/aasontologyanalyzer/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | // Use IntelliSense to find out which attributes exist for C# debugging 6 | // Use hover for the description of the existing attributes 7 | // For further information visit https://github.com/OmniSharp/omnisharp-vscode/blob/master/debugger-launchjson.md 8 | "name": ".NET Core Launch (console)", 9 | "type": "coreclr", 10 | "request": "launch", 11 | "preLaunchTask": "build", 12 | // If you have changed target frameworks, make sure to update the program path. 13 | "program": "${workspaceFolder}/bin/Debug/netcoreapp3.1/aasontologyanalyzer.dll", 14 | "args": ["https://hack2021aasadt.api.weu.digitaltwins.azure.net"], 15 | "cwd": "${workspaceFolder}", 16 | // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console 17 | "console": "internalConsole", 18 | "stopAtEntry": false 19 | }, 20 | { 21 | "name": ".NET Core Attach", 22 | "type": "coreclr", 23 | "request": "attach" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /Tools/aasontologyanalyzer/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "build", 6 | "command": "dotnet", 7 | "type": "process", 8 | "args": [ 9 | "build", 10 | "${workspaceFolder}/aasontologyanalyzer.csproj", 11 | "/property:GenerateFullPaths=true", 12 | "/consoleloggerparameters:NoSummary" 13 | ], 14 | "problemMatcher": "$msCompile" 15 | }, 16 | { 17 | "label": "publish", 18 | "command": "dotnet", 19 | "type": "process", 20 | "args": [ 21 | "publish", 22 | "${workspaceFolder}/aasontologyanalyzer.csproj", 23 | "/property:GenerateFullPaths=true", 24 | "/consoleloggerparameters:NoSummary" 25 | ], 26 | "problemMatcher": "$msCompile" 27 | }, 28 | { 29 | "label": "watch", 30 | "command": "dotnet", 31 | "type": "process", 32 | "args": [ 33 | "watch", 34 | "run", 35 | "${workspaceFolder}/aasontologyanalyzer.csproj", 36 | "/property:GenerateFullPaths=true", 37 | "/consoleloggerparameters:NoSummary" 38 | ], 39 | "problemMatcher": "$msCompile" 40 | } 41 | ] 42 | } -------------------------------------------------------------------------------- /Tools/aasontologyanalyzer/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Threading.Tasks; 4 | using Azure; 5 | using Azure.DigitalTwins.Core; 6 | using Azure.Identity; 7 | using Newtonsoft.Json; 8 | using Newtonsoft.Json.Linq; 9 | 10 | namespace aasontologyanalyzer 11 | { 12 | class Program 13 | { 14 | static void Main(string[] args) 15 | { 16 | Console.WriteLine("AAS Ontology analyzer. Currently just finds all models with no super interfaces (extends)"); 17 | 18 | DoAnalyzeModels(args[0]).GetAwaiter().GetResult(); 19 | } 20 | 21 | static async Task DoAnalyzeModels(string adtInstanceURL) { 22 | 23 | var client = new DigitalTwinsClient(new Uri(adtInstanceURL), new DefaultAzureCredential()); 24 | 25 | List rootModels = new List(); 26 | 27 | // Get a list of the metadata of all available models; print their IDs 28 | AsyncPageable md2 = client.GetModelsAsync(new GetModelsOptions { IncludeModelDefinition = true }); 29 | await foreach (DigitalTwinsModelData md in md2) 30 | { 31 | JObject modelObj = JsonConvert.DeserializeObject(md.DtdlModel); 32 | if (modelObj != null) { 33 | var superInterfaces = modelObj["extends"]; 34 | if (superInterfaces != null) { 35 | if (superInterfaces.Type == JTokenType.Array) { 36 | if (((JArray)superInterfaces).Count == 0) 37 | rootModels.Add(md.Id); 38 | } else if (superInterfaces.Type == JTokenType.String) { 39 | if (superInterfaces.Value().Length == 0) 40 | rootModels.Add(md.Id); 41 | } 42 | } else 43 | rootModels.Add(md.Id); 44 | } 45 | } 46 | 47 | if (rootModels.Count > 0) { 48 | Console.WriteLine($"Found the following {rootModels.Count} root models"); 49 | foreach(string modelId in rootModels) { 50 | Console.WriteLine($"Type ID: {modelId}"); 51 | } 52 | } else { 53 | Console.WriteLine("Found no root models"); 54 | } 55 | } 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /Tools/aasontologyanalyzer/aasontologyanalyzer.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | netcoreapp3.1 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | [Aa][Rr][Mm]/ 24 | [Aa][Rr][Mm]64/ 25 | bld/ 26 | [Bb]in/ 27 | [Oo]bj/ 28 | [Ll]og/ 29 | 30 | # Visual Studio 2015/2017 cache/options directory 31 | .vs/ 32 | # Uncomment if you have tasks that create the project's static files in wwwroot 33 | #wwwroot/ 34 | 35 | # Visual Studio 2017 auto generated files 36 | Generated\ Files/ 37 | 38 | # MSTest test Results 39 | [Tt]est[Rr]esult*/ 40 | [Bb]uild[Ll]og.* 41 | 42 | # NUNIT 43 | *.VisualState.xml 44 | TestResult.xml 45 | 46 | # Build Results of an ATL Project 47 | [Dd]ebugPS/ 48 | [Rr]eleasePS/ 49 | dlldata.c 50 | 51 | # Benchmark Results 52 | BenchmarkDotNet.Artifacts/ 53 | 54 | # .NET Core 55 | project.lock.json 56 | project.fragment.lock.json 57 | artifacts/ 58 | 59 | # StyleCop 60 | StyleCopReport.xml 61 | 62 | # Files built by Visual Studio 63 | obj 64 | bin 65 | *_i.c 66 | *_p.c 67 | *_h.h 68 | *.ilk 69 | *.meta 70 | *.obj 71 | *.iobj 72 | *.pch 73 | *.pdb 74 | *.ipdb 75 | *.pgc 76 | *.pgd 77 | *.rsp 78 | *.sbr 79 | *.tlb 80 | *.tli 81 | *.tlh 82 | *.tmp 83 | *.tmp_proj 84 | *_wpftmp.csproj 85 | *.log 86 | *.vspscc 87 | *.vssscc 88 | .builds 89 | *.pidb 90 | *.svclog 91 | *.scc 92 | 93 | # Chutzpah Test files 94 | _Chutzpah* 95 | 96 | # Visual C++ cache files 97 | ipch/ 98 | *.aps 99 | *.ncb 100 | *.opendb 101 | *.opensdf 102 | *.sdf 103 | *.cachefile 104 | *.VC.db 105 | *.VC.VC.opendb 106 | 107 | # Visual Studio profiler 108 | *.psess 109 | *.vsp 110 | *.vspx 111 | *.sap 112 | 113 | # Visual Studio Trace Files 114 | *.e2e 115 | 116 | # TFS 2012 Local Workspace 117 | $tf/ 118 | 119 | # Guidance Automation Toolkit 120 | *.gpState 121 | 122 | # ReSharper is a .NET coding add-in 123 | _ReSharper*/ 124 | *.[Rr]e[Ss]harper 125 | *.DotSettings.user 126 | 127 | # JustCode is a .NET coding add-in 128 | .JustCode 129 | 130 | # TeamCity is a build add-in 131 | _TeamCity* 132 | 133 | # DotCover is a Code Coverage Tool 134 | *.dotCover 135 | 136 | # AxoCover is a Code Coverage Tool 137 | .axoCover/* 138 | !.axoCover/settings.json 139 | 140 | # Visual Studio code coverage results 141 | *.coverage 142 | *.coveragexml 143 | 144 | # NCrunch 145 | _NCrunch_* 146 | .*crunch*.local.xml 147 | nCrunchTemp_* 148 | 149 | # MightyMoose 150 | *.mm.* 151 | AutoTest.Net/ 152 | 153 | # Web workbench (sass) 154 | .sass-cache/ 155 | 156 | # Installshield output folder 157 | [Ee]xpress/ 158 | 159 | # DocProject is a documentation generator add-in 160 | DocProject/buildhelp/ 161 | DocProject/Help/*.HxT 162 | DocProject/Help/*.HxC 163 | DocProject/Help/*.hhc 164 | DocProject/Help/*.hhk 165 | DocProject/Help/*.hhp 166 | DocProject/Help/Html2 167 | DocProject/Help/html 168 | 169 | # Click-Once directory 170 | publish/ 171 | 172 | # Publish Web Output 173 | *.[Pp]ublish.xml 174 | *.azurePubxml 175 | # Note: Comment the next line if you want to checkin your web deploy settings, 176 | # but database connection strings (with potential passwords) will be unencrypted 177 | *.pubxml 178 | *.publishproj 179 | 180 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 181 | # checkin your Azure Web App publish settings, but sensitive information contained 182 | # in these scripts will be unencrypted 183 | PublishScripts/ 184 | 185 | # NuGet Packages 186 | *.nupkg 187 | # The packages folder can be ignored because of Package Restore 188 | **/[Pp]ackages/* 189 | # except build/, which is used as an MSBuild target. 190 | !**/[Pp]ackages/build/ 191 | # Uncomment if necessary however generally it will be regenerated when needed 192 | #!**/[Pp]ackages/repositories.config 193 | # NuGet v3's project.json files produces more ignorable files 194 | *.nuget.props 195 | *.nuget.targets 196 | 197 | # Microsoft Azure Build Output 198 | csx/ 199 | *.build.csdef 200 | 201 | # Microsoft Azure Emulator 202 | ecf/ 203 | rcf/ 204 | 205 | # Windows Store app package directories and files 206 | AppPackages/ 207 | BundleArtifacts/ 208 | Package.StoreAssociation.xml 209 | _pkginfo.txt 210 | *.appx 211 | 212 | # Visual Studio cache files 213 | # files ending in .cache can be ignored 214 | *.[Cc]ache 215 | # but keep track of directories ending in .cache 216 | !?*.[Cc]ache/ 217 | 218 | # Others 219 | ClientBin/ 220 | ~$* 221 | *~ 222 | *.dbmdl 223 | *.dbproj.schemaview 224 | *.jfm 225 | *.pfx 226 | *.publishsettings 227 | orleans.codegen.cs 228 | 229 | # Including strong name files can present a security risk 230 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 231 | #*.snk 232 | 233 | # Since there are multiple workflows, uncomment next line to ignore bower_components 234 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 235 | #bower_components/ 236 | 237 | # RIA/Silverlight projects 238 | Generated_Code/ 239 | 240 | # Backup & report files from converting an old project file 241 | # to a newer Visual Studio version. Backup files are not needed, 242 | # because we have git ;-) 243 | _UpgradeReport_Files/ 244 | Backup*/ 245 | UpgradeLog*.XML 246 | UpgradeLog*.htm 247 | ServiceFabricBackup/ 248 | *.rptproj.bak 249 | 250 | # SQL Server files 251 | *.mdf 252 | *.ldf 253 | *.ndf 254 | 255 | # Business Intelligence projects 256 | *.rdl.data 257 | *.bim.layout 258 | *.bim_*.settings 259 | *.rptproj.rsuser 260 | *- Backup*.rdl 261 | 262 | # Microsoft Fakes 263 | FakesAssemblies/ 264 | 265 | # GhostDoc plugin setting file 266 | *.GhostDoc.xml 267 | 268 | # Node.js Tools for Visual Studio 269 | .ntvs_analysis.dat 270 | node_modules/ 271 | 272 | # Visual Studio 6 build log 273 | *.plg 274 | 275 | # Visual Studio 6 workspace options file 276 | *.opt 277 | 278 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 279 | *.vbw 280 | 281 | # Visual Studio LightSwitch build output 282 | **/*.HTMLClient/GeneratedArtifacts 283 | **/*.DesktopClient/GeneratedArtifacts 284 | **/*.DesktopClient/ModelManifest.xml 285 | **/*.Server/GeneratedArtifacts 286 | **/*.Server/ModelManifest.xml 287 | _Pvt_Extensions 288 | 289 | # Paket dependency manager 290 | .paket/paket.exe 291 | paket-files/ 292 | 293 | # FAKE - F# Make 294 | .fake/ 295 | 296 | # JetBrains Rider 297 | .idea/ 298 | *.sln.iml 299 | 300 | # CodeRush personal settings 301 | .cr/personal 302 | 303 | # Python Tools for Visual Studio (PTVS) 304 | __pycache__/ 305 | *.pyc 306 | 307 | # Cake - Uncomment if you are using it 308 | # tools/** 309 | # !tools/packages.config 310 | 311 | # Tabs Studio 312 | *.tss 313 | 314 | # Telerik's JustMock configuration file 315 | *.jmconfig 316 | 317 | # BizTalk build output 318 | *.btp.cs 319 | *.btm.cs 320 | *.odx.cs 321 | *.xsd.cs 322 | 323 | # OpenCover UI analysis results 324 | OpenCover/ 325 | 326 | # Azure Stream Analytics local run output 327 | ASALocalRun/ 328 | 329 | # MSBuild Binary and Structured Log 330 | *.binlog 331 | 332 | # NVidia Nsight GPU debugger configuration file 333 | *.nvuser 334 | 335 | # MFractors (Xamarin productivity tool) working folder 336 | .mfractor/ 337 | 338 | # Local History for Visual Studio 339 | .localhistory/ 340 | 341 | # BeatPulse healthcheck temp database 342 | healthchecksdb -------------------------------------------------------------------------------- /Tools/blazorsampleapp/.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "ms-azuretools.vscode-azurefunctions", 4 | "ms-dotnettools.csharp" 5 | ] 6 | } 7 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "0.2.0", 3 | "configurations": [ 4 | { 5 | "name": "Launch and Debug Standalone Blazor WebAssembly App", 6 | "type": "blazorwasm", 7 | "request": "launch", 8 | "cwd": "${workspaceFolder}/Client" 9 | }, 10 | { 11 | "name": "Attach to .NET Functions", 12 | "type": "coreclr", 13 | "request": "attach", 14 | "processId": "${command:azureFunctions.pickProcess}" 15 | } 16 | ], 17 | "compounds": [ 18 | { 19 | "name": "Client/Server", 20 | "configurations": [ 21 | "Attach to .NET Functions", 22 | "Launch and Debug Standalone Blazor WebAssembly App" 23 | ] 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /Tools/blazorsampleapp/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "azureFunctions.deploySubpath": "Api/bin/Release/netcoreapp3.1/publish", 3 | "azureFunctions.projectLanguage": "C#", 4 | "azureFunctions.projectRuntime": "~3", 5 | "debug.internalConsoleOptions": "neverOpen", 6 | "azureFunctions.preDeployTask": "publish" 7 | } -------------------------------------------------------------------------------- /Tools/blazorsampleapp/.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0.0", 3 | "tasks": [ 4 | { 5 | "label": "clean", 6 | "command": "dotnet", 7 | "args": [ 8 | "clean", 9 | "/property:GenerateFullPaths=true", 10 | "/consoleloggerparameters:NoSummary" 11 | ], 12 | "type": "process", 13 | "problemMatcher": "$msCompile", 14 | "options": { 15 | "cwd": "${workspaceFolder}/Api" 16 | } 17 | }, 18 | { 19 | "label": "build", 20 | "command": "dotnet", 21 | "args": [ 22 | "build", 23 | "/property:GenerateFullPaths=true", 24 | "/consoleloggerparameters:NoSummary" 25 | ], 26 | "type": "process", 27 | "dependsOn": "clean", 28 | "group": { 29 | "kind": "build", 30 | "isDefault": true 31 | }, 32 | "problemMatcher": "$msCompile", 33 | "options": { 34 | "cwd": "${workspaceFolder}/Api" 35 | } 36 | }, 37 | { 38 | "label": "clean release", 39 | "command": "dotnet", 40 | "args": [ 41 | "clean", 42 | "--configuration", 43 | "Release", 44 | "/property:GenerateFullPaths=true", 45 | "/consoleloggerparameters:NoSummary" 46 | ], 47 | "type": "process", 48 | "problemMatcher": "$msCompile", 49 | "options": { 50 | "cwd": "${workspaceFolder}/Api" 51 | } 52 | }, 53 | { 54 | "label": "publish", 55 | "command": "dotnet", 56 | "args": [ 57 | "publish", 58 | "--configuration", 59 | "Release", 60 | "/property:GenerateFullPaths=true", 61 | "/consoleloggerparameters:NoSummary" 62 | ], 63 | "type": "process", 64 | "dependsOn": "clean release", 65 | "problemMatcher": "$msCompile", 66 | "options": { 67 | "cwd": "${workspaceFolder}/Api" 68 | } 69 | }, 70 | { 71 | "type": "func", 72 | "dependsOn": "build", 73 | "options": { 74 | "cwd": "${workspaceFolder}/Api/bin/Debug/netcoreapp3.1" 75 | }, 76 | "command": "host start", 77 | "isBackground": true, 78 | "problemMatcher": "$func-watch" 79 | } 80 | ] 81 | } -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Api/.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | 4 | # Azure Functions localsettings file 5 | local.settings.json 6 | 7 | # User-specific files 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Build results 17 | [Dd]ebug/ 18 | [Dd]ebugPublic/ 19 | [Rr]elease/ 20 | [Rr]eleases/ 21 | x64/ 22 | x86/ 23 | bld/ 24 | [Bb]in/ 25 | [Oo]bj/ 26 | [Ll]og/ 27 | 28 | # Visual Studio 2015 cache/options directory 29 | .vs/ 30 | # Uncomment if you have tasks that create the project's static files in wwwroot 31 | #wwwroot/ 32 | 33 | # MSTest test Results 34 | [Tt]est[Rr]esult*/ 35 | [Bb]uild[Ll]og.* 36 | 37 | # NUNIT 38 | *.VisualState.xml 39 | TestResult.xml 40 | 41 | # Build Results of an ATL Project 42 | [Dd]ebugPS/ 43 | [Rr]eleasePS/ 44 | dlldata.c 45 | 46 | # DNX 47 | project.lock.json 48 | project.fragment.lock.json 49 | artifacts/ 50 | 51 | *_i.c 52 | *_p.c 53 | *_i.h 54 | *.ilk 55 | *.meta 56 | *.obj 57 | *.pch 58 | *.pdb 59 | *.pgc 60 | *.pgd 61 | *.rsp 62 | *.sbr 63 | *.tlb 64 | *.tli 65 | *.tlh 66 | *.tmp 67 | *.tmp_proj 68 | *.log 69 | *.vspscc 70 | *.vssscc 71 | .builds 72 | *.pidb 73 | *.svclog 74 | *.scc 75 | 76 | # Chutzpah Test files 77 | _Chutzpah* 78 | 79 | # Visual C++ cache files 80 | ipch/ 81 | *.aps 82 | *.ncb 83 | *.opendb 84 | *.opensdf 85 | *.sdf 86 | *.cachefile 87 | *.VC.db 88 | *.VC.VC.opendb 89 | 90 | # Visual Studio profiler 91 | *.psess 92 | *.vsp 93 | *.vspx 94 | *.sap 95 | 96 | # TFS 2012 Local Workspace 97 | $tf/ 98 | 99 | # Guidance Automation Toolkit 100 | *.gpState 101 | 102 | # ReSharper is a .NET coding add-in 103 | _ReSharper*/ 104 | *.[Rr]e[Ss]harper 105 | *.DotSettings.user 106 | 107 | # JustCode is a .NET coding add-in 108 | .JustCode 109 | 110 | # TeamCity is a build add-in 111 | _TeamCity* 112 | 113 | # DotCover is a Code Coverage Tool 114 | *.dotCover 115 | 116 | # NCrunch 117 | _NCrunch_* 118 | .*crunch*.local.xml 119 | nCrunchTemp_* 120 | 121 | # MightyMoose 122 | *.mm.* 123 | AutoTest.Net/ 124 | 125 | # Web workbench (sass) 126 | .sass-cache/ 127 | 128 | # Installshield output folder 129 | [Ee]xpress/ 130 | 131 | # DocProject is a documentation generator add-in 132 | DocProject/buildhelp/ 133 | DocProject/Help/*.HxT 134 | DocProject/Help/*.HxC 135 | DocProject/Help/*.hhc 136 | DocProject/Help/*.hhk 137 | DocProject/Help/*.hhp 138 | DocProject/Help/Html2 139 | DocProject/Help/html 140 | 141 | # Click-Once directory 142 | publish/ 143 | 144 | # Publish Web Output 145 | *.[Pp]ublish.xml 146 | *.azurePubxml 147 | # TODO: Comment the next line if you want to checkin your web deploy settings 148 | # but database connection strings (with potential passwords) will be unencrypted 149 | #*.pubxml 150 | *.publishproj 151 | 152 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 153 | # checkin your Azure Web App publish settings, but sensitive information contained 154 | # in these scripts will be unencrypted 155 | PublishScripts/ 156 | 157 | # NuGet Packages 158 | *.nupkg 159 | # The packages folder can be ignored because of Package Restore 160 | **/packages/* 161 | # except build/, which is used as an MSBuild target. 162 | !**/packages/build/ 163 | # Uncomment if necessary however generally it will be regenerated when needed 164 | #!**/packages/repositories.config 165 | # NuGet v3's project.json files produces more ignoreable files 166 | *.nuget.props 167 | *.nuget.targets 168 | 169 | # Microsoft Azure Build Output 170 | csx/ 171 | *.build.csdef 172 | 173 | # Microsoft Azure Emulator 174 | ecf/ 175 | rcf/ 176 | 177 | # Windows Store app package directories and files 178 | AppPackages/ 179 | BundleArtifacts/ 180 | Package.StoreAssociation.xml 181 | _pkginfo.txt 182 | 183 | # Visual Studio cache files 184 | # files ending in .cache can be ignored 185 | *.[Cc]ache 186 | # but keep track of directories ending in .cache 187 | !*.[Cc]ache/ 188 | 189 | # Others 190 | ClientBin/ 191 | ~$* 192 | *~ 193 | *.dbmdl 194 | *.dbproj.schemaview 195 | *.jfm 196 | *.pfx 197 | *.publishsettings 198 | node_modules/ 199 | orleans.codegen.cs 200 | 201 | # Since there are multiple workflows, uncomment next line to ignore bower_components 202 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 203 | #bower_components/ 204 | 205 | # RIA/Silverlight projects 206 | Generated_Code/ 207 | 208 | # Backup & report files from converting an old project file 209 | # to a newer Visual Studio version. Backup files are not needed, 210 | # because we have git ;-) 211 | _UpgradeReport_Files/ 212 | Backup*/ 213 | UpgradeLog*.XML 214 | UpgradeLog*.htm 215 | 216 | # SQL Server files 217 | *.mdf 218 | *.ldf 219 | 220 | # Business Intelligence projects 221 | *.rdl.data 222 | *.bim.layout 223 | *.bim_*.settings 224 | 225 | # Microsoft Fakes 226 | FakesAssemblies/ 227 | 228 | # GhostDoc plugin setting file 229 | *.GhostDoc.xml 230 | 231 | # Node.js Tools for Visual Studio 232 | .ntvs_analysis.dat 233 | 234 | # Visual Studio 6 build log 235 | *.plg 236 | 237 | # Visual Studio 6 workspace options file 238 | *.opt 239 | 240 | # Visual Studio LightSwitch build output 241 | **/*.HTMLClient/GeneratedArtifacts 242 | **/*.DesktopClient/GeneratedArtifacts 243 | **/*.DesktopClient/ModelManifest.xml 244 | **/*.Server/GeneratedArtifacts 245 | **/*.Server/ModelManifest.xml 246 | _Pvt_Extensions 247 | 248 | # Paket dependency manager 249 | .paket/paket.exe 250 | paket-files/ 251 | 252 | # FAKE - F# Make 253 | .fake/ 254 | 255 | # JetBrains Rider 256 | .idea/ 257 | *.sln.iml 258 | 259 | # CodeRush 260 | .cr/ 261 | 262 | # Python Tools for Visual Studio (PTVS) 263 | __pycache__/ 264 | *.pyc -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Api/Api.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | netcoreapp3.1 4 | v3 5 | BlazorApp.Api 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | PreserveNewest 16 | 17 | 18 | PreserveNewest 19 | Never 20 | 21 | 22 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Api/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "profiles": { 3 | "Api": { 4 | "commandName": "Project", 5 | "commandLineArgs": "start --cors *" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Api/Properties/serviceDependencies.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "storage1": { 4 | "type": "storage", 5 | "connectionId": "AzureWebJobsStorage" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Api/Properties/serviceDependencies.local.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "storage1": { 4 | "type": "storage.emulator", 5 | "connectionId": "AzureWebJobsStorage" 6 | } 7 | } 8 | } -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Api/WeatherForecastFunction.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using Microsoft.AspNetCore.Http; 4 | using Microsoft.AspNetCore.Mvc; 5 | using Microsoft.Azure.WebJobs; 6 | using Microsoft.Azure.WebJobs.Extensions.Http; 7 | using Microsoft.Extensions.Logging; 8 | 9 | using BlazorApp.Shared; 10 | 11 | namespace BlazorApp.Api 12 | { 13 | public static class WeatherForecastFunction 14 | { 15 | private static string GetSummary(int temp) 16 | { 17 | var summary = "Mild"; 18 | 19 | if (temp >= 32) 20 | { 21 | summary = "Hot"; 22 | } 23 | else if (temp <= 16 && temp > 0) 24 | { 25 | summary = "Cold"; 26 | } 27 | else if (temp <= 0) 28 | { 29 | summary = "Freezing"; 30 | } 31 | 32 | return summary; 33 | } 34 | 35 | [FunctionName("WeatherForecast")] 36 | public static IActionResult Run( 37 | [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req, 38 | ILogger log) 39 | { 40 | var randomNumber = new Random(); 41 | var temp = 0; 42 | 43 | var result = Enumerable.Range(1, 5).Select(index => new WeatherForecast 44 | { 45 | Date = DateTime.Now.AddDays(index), 46 | TemperatureC = temp = randomNumber.Next(-20, 55), 47 | Summary = GetSummary(temp) 48 | }).ToArray(); 49 | 50 | return new OkObjectResult(result); 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Api/host.json: -------------------------------------------------------------------------------- 1 | { 2 | "version": "2.0", 3 | "logging": { 4 | "applicationInsights": { 5 | "samplingExcludedTypes": "Request", 6 | "samplingSettings": { 7 | "isEnabled": true 8 | } 9 | } 10 | } 11 | } -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/App.razor: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 |

Sorry, there's nothing at this address.

8 |
9 |
10 |
11 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/Client.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | net5.0 5 | BlazorApp.Client 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/Pages/Counter.razor: -------------------------------------------------------------------------------- 1 | @page "/counter" 2 | 3 |

Counter

4 | 5 |

Current count: @currentCount

6 | 7 | 8 | 9 | @code { 10 | private int currentCount = 0; 11 | 12 | private void IncrementCount() 13 | { 14 | currentCount++; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/Pages/FetchData.razor: -------------------------------------------------------------------------------- 1 | @page "/fetchdata" 2 | @using BlazorApp.Shared 3 | @inject HttpClient Http 4 | 5 |

Weather forecast

6 | 7 |

This component demonstrates fetching data from the server.

8 | 9 | @if (forecasts == null) 10 | { 11 |

Loading...

12 | } 13 | else 14 | { 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | @foreach (var forecast in forecasts) 26 | { 27 | 28 | 29 | 30 | 31 | 32 | 33 | } 34 | 35 |
DateTemp. (C)Temp. (F)Summary
@forecast.Date.ToShortDateString()@forecast.TemperatureC@forecast.TemperatureF@forecast.Summary
36 | } 37 | 38 | @code { 39 | private WeatherForecast[] forecasts; 40 | 41 | protected override async Task OnInitializedAsync() 42 | { 43 | try 44 | { 45 | forecasts = await Http.GetFromJsonAsync("/api/WeatherForecast"); 46 | } 47 | catch (Exception ex) 48 | { 49 | Console.WriteLine(ex.ToString()); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/Pages/Index.razor: -------------------------------------------------------------------------------- 1 | @page "/" 2 | 3 |

Asset Administration Shell

4 | 5 | Sample Client App to create sub model twin instances 6 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/Pages/TechnicalData.razor: -------------------------------------------------------------------------------- 1 | @page "/technicaldata" 2 | 3 |

Technical Data

4 | 5 |

 

6 |

Generation Information

7 | 8 | ManufacturerName :
9 | ManufacturerProductDesignation :
10 | ManufacturerPartNumber :
11 | ManufacturerOrderCode :
12 | 13 | 14 | 15 | @code { 16 | private string mfgName; 17 | private string mfgProduct; 18 | private string mfgPartNumber; 19 | private string mfgOrderCode; 20 | private void CreateTwin() 21 | { 22 | Console.WriteLine(mfgName); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/Program.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net.Http; 3 | using System.Threading.Tasks; 4 | using Microsoft.AspNetCore.Components.WebAssembly.Hosting; 5 | using Microsoft.Extensions.DependencyInjection; 6 | 7 | namespace BlazorApp.Client 8 | { 9 | public class Program 10 | { 11 | public static async Task Main(string[] args) 12 | { 13 | var builder = WebAssemblyHostBuilder.CreateDefault(args); 14 | builder.RootComponents.Add("app"); 15 | 16 | var baseAddress = builder.Configuration["BaseAddress"] ?? builder.HostEnvironment.BaseAddress; 17 | builder.Services.AddScoped(_ => new HttpClient { BaseAddress = new Uri(baseAddress) }); 18 | 19 | await builder.Build().RunAsync(); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/Properties/launchSettings.json: -------------------------------------------------------------------------------- 1 | { 2 | "iisSettings": { 3 | "windowsAuthentication": false, 4 | "anonymousAuthentication": true, 5 | "iisExpress": { 6 | "applicationUrl": "http://localhost:54613", 7 | "sslPort": 44351 8 | } 9 | }, 10 | "profiles": { 11 | "IIS Express": { 12 | "commandName": "IISExpress", 13 | "launchBrowser": true, 14 | "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", 15 | "environmentVariables": { 16 | "ASPNETCORE_ENVIRONMENT": "Development" 17 | } 18 | }, 19 | "BlazorSWA-Weather": { 20 | "commandName": "Project", 21 | "launchBrowser": true, 22 | "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", 23 | "applicationUrl": "https://localhost:5001;http://localhost:5000", 24 | "environmentVariables": { 25 | "ASPNETCORE_ENVIRONMENT": "Development" 26 | } 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/Shared/MainLayout.razor: -------------------------------------------------------------------------------- 1 | @inherits LayoutComponentBase 2 | 3 | 6 | 7 |
8 |
9 | About 10 |
11 | 12 |
13 | @Body 14 |
15 |
16 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/Shared/NavMenu.razor: -------------------------------------------------------------------------------- 1 |  7 | 8 |
9 | 36 |
37 | 38 | @code { 39 | private bool collapseNavMenu = true; 40 | 41 | private string NavMenuCssClass => collapseNavMenu ? "collapse" : null; 42 | 43 | private void ToggleNavMenu() 44 | { 45 | collapseNavMenu = !collapseNavMenu; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/Shared/SurveyPrompt.razor: -------------------------------------------------------------------------------- 1 |  11 | 12 | @code { 13 | // Demonstrates how a parent component can supply parameters 14 | [Parameter] 15 | public string Title { get; set; } 16 | } 17 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/_Imports.razor: -------------------------------------------------------------------------------- 1 | @using System.Net.Http 2 | @using System.Net.Http.Json 3 | @using Microsoft.AspNetCore.Components.Forms 4 | @using Microsoft.AspNetCore.Components.Routing 5 | @using Microsoft.AspNetCore.Components.Web 6 | @using Microsoft.AspNetCore.Components.WebAssembly.Http 7 | @using Microsoft.JSInterop 8 | @using BlazorApp.Client 9 | @using BlazorApp.Client.Shared 10 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/staticwebapp.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "navigationFallback": { 3 | "rewrite": "/index.html" 4 | } 5 | } -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/wwwroot/appsettings.Development.json: -------------------------------------------------------------------------------- 1 | { 2 | "BaseAddress": "http://localhost:7071/" 3 | } -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/wwwroot/css/app.css: -------------------------------------------------------------------------------- 1 | @import url('open-iconic/font/css/open-iconic-bootstrap.min.css'); 2 | 3 | html, body { 4 | font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; 5 | } 6 | 7 | a, .btn-link { 8 | color: #0366d6; 9 | } 10 | 11 | .btn-primary { 12 | color: #fff; 13 | background-color: #1b6ec2; 14 | border-color: #1861ac; 15 | } 16 | 17 | app { 18 | position: relative; 19 | display: flex; 20 | flex-direction: column; 21 | } 22 | 23 | .top-row { 24 | height: 3.5rem; 25 | display: flex; 26 | align-items: center; 27 | } 28 | 29 | .main { 30 | flex: 1; 31 | } 32 | 33 | .main .top-row { 34 | background-color: #f7f7f7; 35 | border-bottom: 1px solid #d6d5d5; 36 | justify-content: flex-end; 37 | } 38 | 39 | .main .top-row > a, .main .top-row .btn-link { 40 | white-space: nowrap; 41 | margin-left: 1.5rem; 42 | } 43 | 44 | .main .top-row a:first-child { 45 | overflow: hidden; 46 | text-overflow: ellipsis; 47 | } 48 | 49 | .sidebar { 50 | background-image: linear-gradient(180deg, rgb(5, 39, 103) 0%, #3a0647 70%); 51 | } 52 | 53 | .sidebar .top-row { 54 | background-color: rgba(0,0,0,0.4); 55 | } 56 | 57 | .sidebar .navbar-brand { 58 | font-size: 1.1rem; 59 | } 60 | 61 | .sidebar .oi { 62 | width: 2rem; 63 | font-size: 1.1rem; 64 | vertical-align: text-top; 65 | top: -2px; 66 | } 67 | 68 | .sidebar .nav-item { 69 | font-size: 0.9rem; 70 | padding-bottom: 0.5rem; 71 | } 72 | 73 | .sidebar .nav-item:first-of-type { 74 | padding-top: 1rem; 75 | } 76 | 77 | .sidebar .nav-item:last-of-type { 78 | padding-bottom: 1rem; 79 | } 80 | 81 | .sidebar .nav-item a { 82 | color: #d7d7d7; 83 | border-radius: 4px; 84 | height: 3rem; 85 | display: flex; 86 | align-items: center; 87 | line-height: 3rem; 88 | } 89 | 90 | .sidebar .nav-item a.active { 91 | background-color: rgba(255,255,255,0.25); 92 | color: white; 93 | } 94 | 95 | .sidebar .nav-item a:hover { 96 | background-color: rgba(255,255,255,0.1); 97 | color: white; 98 | } 99 | 100 | .content { 101 | padding-top: 1.1rem; 102 | } 103 | 104 | .navbar-toggler { 105 | background-color: rgba(255, 255, 255, 0.1); 106 | } 107 | 108 | .valid.modified:not([type=checkbox]) { 109 | outline: 1px solid #26b050; 110 | } 111 | 112 | .invalid { 113 | outline: 1px solid red; 114 | } 115 | 116 | .validation-message { 117 | color: red; 118 | } 119 | 120 | #blazor-error-ui { 121 | background: lightyellow; 122 | bottom: 0; 123 | box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.2); 124 | display: none; 125 | left: 0; 126 | padding: 0.6rem 1.25rem 0.7rem 1.25rem; 127 | position: fixed; 128 | width: 100%; 129 | z-index: 1000; 130 | } 131 | 132 | #blazor-error-ui .dismiss { 133 | cursor: pointer; 134 | position: absolute; 135 | right: 0.75rem; 136 | top: 0.5rem; 137 | } 138 | 139 | @media (max-width: 767.98px) { 140 | .main .top-row:not(.auth) { 141 | display: none; 142 | } 143 | 144 | .main .top-row.auth { 145 | justify-content: space-between; 146 | } 147 | 148 | .main .top-row a, .main .top-row .btn-link { 149 | margin-left: 0; 150 | } 151 | } 152 | 153 | @media (min-width: 768px) { 154 | app { 155 | flex-direction: row; 156 | } 157 | 158 | .sidebar { 159 | width: 250px; 160 | height: 100vh; 161 | position: sticky; 162 | top: 0; 163 | } 164 | 165 | .main .top-row { 166 | position: sticky; 167 | top: 0; 168 | } 169 | 170 | .main > div { 171 | padding-left: 2rem !important; 172 | padding-right: 1.5rem !important; 173 | } 174 | 175 | .navbar-toggler { 176 | display: none; 177 | } 178 | 179 | .sidebar .collapse { 180 | /* Never collapse the sidebar for wide screens */ 181 | display: block; 182 | } 183 | } 184 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/wwwroot/css/open-iconic/FONT-LICENSE: -------------------------------------------------------------------------------- 1 | SIL OPEN FONT LICENSE Version 1.1 2 | 3 | Copyright (c) 2014 Waybury 4 | 5 | PREAMBLE 6 | The goals of the Open Font License (OFL) are to stimulate worldwide 7 | development of collaborative font projects, to support the font creation 8 | efforts of academic and linguistic communities, and to provide a free and 9 | open framework in which fonts may be shared and improved in partnership 10 | with others. 11 | 12 | The OFL allows the licensed fonts to be used, studied, modified and 13 | redistributed freely as long as they are not sold by themselves. The 14 | fonts, including any derivative works, can be bundled, embedded, 15 | redistributed and/or sold with any software provided that any reserved 16 | names are not used by derivative works. The fonts and derivatives, 17 | however, cannot be released under any other type of license. The 18 | requirement for fonts to remain under this license does not apply 19 | to any document created using the fonts or their derivatives. 20 | 21 | DEFINITIONS 22 | "Font Software" refers to the set of files released by the Copyright 23 | Holder(s) under this license and clearly marked as such. This may 24 | include source files, build scripts and documentation. 25 | 26 | "Reserved Font Name" refers to any names specified as such after the 27 | copyright statement(s). 28 | 29 | "Original Version" refers to the collection of Font Software components as 30 | distributed by the Copyright Holder(s). 31 | 32 | "Modified Version" refers to any derivative made by adding to, deleting, 33 | or substituting -- in part or in whole -- any of the components of the 34 | Original Version, by changing formats or by porting the Font Software to a 35 | new environment. 36 | 37 | "Author" refers to any designer, engineer, programmer, technical 38 | writer or other person who contributed to the Font Software. 39 | 40 | PERMISSION & CONDITIONS 41 | Permission is hereby granted, free of charge, to any person obtaining 42 | a copy of the Font Software, to use, study, copy, merge, embed, modify, 43 | redistribute, and sell modified and unmodified copies of the Font 44 | Software, subject to the following conditions: 45 | 46 | 1) Neither the Font Software nor any of its individual components, 47 | in Original or Modified Versions, may be sold by itself. 48 | 49 | 2) Original or Modified Versions of the Font Software may be bundled, 50 | redistributed and/or sold with any software, provided that each copy 51 | contains the above copyright notice and this license. These can be 52 | included either as stand-alone text files, human-readable headers or 53 | in the appropriate machine-readable metadata fields within text or 54 | binary files as long as those fields can be easily viewed by the user. 55 | 56 | 3) No Modified Version of the Font Software may use the Reserved Font 57 | Name(s) unless explicit written permission is granted by the corresponding 58 | Copyright Holder. This restriction only applies to the primary font name as 59 | presented to the users. 60 | 61 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font 62 | Software shall not be used to promote, endorse or advertise any 63 | Modified Version, except to acknowledge the contribution(s) of the 64 | Copyright Holder(s) and the Author(s) or with their explicit written 65 | permission. 66 | 67 | 5) The Font Software, modified or unmodified, in part or in whole, 68 | must be distributed entirely under this license, and must not be 69 | distributed under any other license. The requirement for fonts to 70 | remain under this license does not apply to any document created 71 | using the Font Software. 72 | 73 | TERMINATION 74 | This license becomes null and void if any of the above conditions are 75 | not met. 76 | 77 | DISCLAIMER 78 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 79 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF 80 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT 81 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE 82 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 83 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL 84 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 85 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM 86 | OTHER DEALINGS IN THE FONT SOFTWARE. 87 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/wwwroot/css/open-iconic/ICON-LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Waybury 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/wwwroot/css/open-iconic/README.md: -------------------------------------------------------------------------------- 1 | [Open Iconic v1.1.1](http://useiconic.com/open) 2 | =========== 3 | 4 | ### Open Iconic is the open source sibling of [Iconic](http://useiconic.com). It is a hyper-legible collection of 223 icons with a tiny footprint—ready to use with Bootstrap and Foundation. [View the collection](http://useiconic.com/open#icons) 5 | 6 | 7 | 8 | ## What's in Open Iconic? 9 | 10 | * 223 icons designed to be legible down to 8 pixels 11 | * Super-light SVG files - 61.8 for the entire set 12 | * SVG sprite—the modern replacement for icon fonts 13 | * Webfont (EOT, OTF, SVG, TTF, WOFF), PNG and WebP formats 14 | * Webfont stylesheets (including versions for Bootstrap and Foundation) in CSS, LESS, SCSS and Stylus formats 15 | * PNG and WebP raster images in 8px, 16px, 24px, 32px, 48px and 64px. 16 | 17 | 18 | ## Getting Started 19 | 20 | #### For code samples and everything else you need to get started with Open Iconic, check out our [Icons](http://useiconic.com/open#icons) and [Reference](http://useiconic.com/open#reference) sections. 21 | 22 | ### General Usage 23 | 24 | #### Using Open Iconic's SVGs 25 | 26 | We like SVGs and we think they're the way to display icons on the web. Since Open Iconic are just basic SVGs, we suggest you display them like you would any other image (don't forget the `alt` attribute). 27 | 28 | ``` 29 | icon name 30 | ``` 31 | 32 | #### Using Open Iconic's SVG Sprite 33 | 34 | Open Iconic also comes in a SVG sprite which allows you to display all the icons in the set with a single request. It's like an icon font, without being a hack. 35 | 36 | Adding an icon from an SVG sprite is a little different than what you're used to, but it's still a piece of cake. *Tip: To make your icons easily style able, we suggest adding a general class to the* `` *tag and a unique class name for each different icon in the* `` *tag.* 37 | 38 | ``` 39 | 40 | 41 | 42 | ``` 43 | 44 | Sizing icons only needs basic CSS. All the icons are in a square format, so just set the `` tag with equal width and height dimensions. 45 | 46 | ``` 47 | .icon { 48 | width: 16px; 49 | height: 16px; 50 | } 51 | ``` 52 | 53 | Coloring icons is even easier. All you need to do is set the `fill` rule on the `` tag. 54 | 55 | ``` 56 | .icon-account-login { 57 | fill: #f00; 58 | } 59 | ``` 60 | 61 | To learn more about SVG Sprites, read [Chris Coyier's guide](http://css-tricks.com/svg-sprites-use-better-icon-fonts/). 62 | 63 | #### Using Open Iconic's Icon Font... 64 | 65 | 66 | ##### …with Bootstrap 67 | 68 | You can find our Bootstrap stylesheets in `font/css/open-iconic-bootstrap.{css, less, scss, styl}` 69 | 70 | 71 | ``` 72 | 73 | ``` 74 | 75 | 76 | ``` 77 | 78 | ``` 79 | 80 | ##### …with Foundation 81 | 82 | You can find our Foundation stylesheets in `font/css/open-iconic-foundation.{css, less, scss, styl}` 83 | 84 | ``` 85 | 86 | ``` 87 | 88 | 89 | ``` 90 | 91 | ``` 92 | 93 | ##### …on its own 94 | 95 | You can find our default stylesheets in `font/css/open-iconic.{css, less, scss, styl}` 96 | 97 | ``` 98 | 99 | ``` 100 | 101 | ``` 102 | 103 | ``` 104 | 105 | 106 | ## License 107 | 108 | ### Icons 109 | 110 | All code (including SVG markup) is under the [MIT License](http://opensource.org/licenses/MIT). 111 | 112 | ### Fonts 113 | 114 | All fonts are under the [SIL Licensed](http://scripts.sil.org/cms/scripts/page.php?item_id=OFL_web). 115 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Tools/blazorsampleapp/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.eot -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Tools/blazorsampleapp/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.otf -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Tools/blazorsampleapp/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.ttf -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Tools/blazorsampleapp/Client/wwwroot/css/open-iconic/font/fonts/open-iconic.woff -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/wwwroot/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JMayrbaeurl/opendigitaltwins-assetadminstrationshell/05109c5b283eac94b2b588b4531de64762c332cb/Tools/blazorsampleapp/Client/wwwroot/favicon.ico -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Client/wwwroot/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Blazor Starter 8 | 9 | 10 | 11 | 12 | 13 | 14 | Loading... 15 | 16 |
17 | An unhandled error has occurred. 18 | Reload 19 | 🗙 20 |
21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/README.md: -------------------------------------------------------------------------------- 1 | # Sample UI for Generating Twin based on AAS Models -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Shared/Shared.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | BlazorApp.Shared 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/Shared/WeatherForecast.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace BlazorApp.Shared 4 | { 5 | public class WeatherForecast 6 | { 7 | public DateTime Date { get; set; } 8 | 9 | public int TemperatureC { get; set; } 10 | 11 | public string Summary { get; set; } 12 | 13 | public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Tools/blazorsampleapp/blazor-basic-swa.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 16 4 | VisualStudioVersion = 16.0.30308.16 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Api", "Api\Api.csproj", "{B3A5AFFA-5517-41E6-BAE2-C30558032DD9}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Client", "Client\Client.csproj", "{52AF5162-0ED3-42DC-A246-39C57DBAA3C7}" 9 | EndProject 10 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shared", "Shared\Shared.csproj", "{3DC4D146-5318-4FB7-B96D-91E6DFD7AEBA}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {B3A5AFFA-5517-41E6-BAE2-C30558032DD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {B3A5AFFA-5517-41E6-BAE2-C30558032DD9}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {B3A5AFFA-5517-41E6-BAE2-C30558032DD9}.Release|Any CPU.ActiveCfg = Release|Any CPU 21 | {B3A5AFFA-5517-41E6-BAE2-C30558032DD9}.Release|Any CPU.Build.0 = Release|Any CPU 22 | {52AF5162-0ED3-42DC-A246-39C57DBAA3C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 23 | {52AF5162-0ED3-42DC-A246-39C57DBAA3C7}.Debug|Any CPU.Build.0 = Debug|Any CPU 24 | {52AF5162-0ED3-42DC-A246-39C57DBAA3C7}.Release|Any CPU.ActiveCfg = Release|Any CPU 25 | {52AF5162-0ED3-42DC-A246-39C57DBAA3C7}.Release|Any CPU.Build.0 = Release|Any CPU 26 | {3DC4D146-5318-4FB7-B96D-91E6DFD7AEBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 27 | {3DC4D146-5318-4FB7-B96D-91E6DFD7AEBA}.Debug|Any CPU.Build.0 = Debug|Any CPU 28 | {3DC4D146-5318-4FB7-B96D-91E6DFD7AEBA}.Release|Any CPU.ActiveCfg = Release|Any CPU 29 | {3DC4D146-5318-4FB7-B96D-91E6DFD7AEBA}.Release|Any CPU.Build.0 = Release|Any CPU 30 | EndGlobalSection 31 | GlobalSection(SolutionProperties) = preSolution 32 | HideSolutionNode = FALSE 33 | EndGlobalSection 34 | GlobalSection(ExtensibilityGlobals) = postSolution 35 | SolutionGuid = {F29999CD-3C9D-4894-8F10-4372E1347DF7} 36 | EndGlobalSection 37 | EndGlobal 38 | -------------------------------------------------------------------------------- /Work/submodels/README.md: -------------------------------------------------------------------------------- 1 | # opendigitaltwins-assetadminstrationshell submodels -------------------------------------------------------------------------------- /Work/submodels/technicaldata/FurtherInformation.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:td:FurtherInformation;1", 4 | "@type": "Interface", 5 | "displayName": "Further Information", 6 | "description": "Further information on the product, the validity of the information provided and this data record", 7 | "comment": "According Industrie 4.0 specification at https://www.zvei.org/fileadmin/user_upload/Presse_und_Medien/Publikationen/2020/Dezember/Submodel_Templates_of_the_Asset_Administration_Shell/201117_I40_ZVEI_SG2_Submodel_Spec_ZVEI_Technical_Data_Version_1_1.pdf", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "TextStatement", 12 | "displayName": "Statement", 13 | "writable": true, 14 | "description": "Statement by the manufacturer in text form, e.g. scope of validity of the statements, scopes of application, conditions of operation", 15 | "target": "dtmi:digitaltwins:aas:MultiLanguageProperty;1" 16 | }, 17 | { 18 | "@type": "Property", 19 | "name": "ValidDate", 20 | "writable": true, 21 | "description": "Denotes a date on which the data specified in the Submodel was valid from for the associated asset", 22 | "displayName": "Date when valid", 23 | "schema": "date" 24 | } 25 | ] 26 | } -------------------------------------------------------------------------------- /Work/submodels/technicaldata/GeneralInformation.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:td:GeneralInformation;1", 4 | "@type": "Interface", 5 | "displayName": "General Information", 6 | "description": "General information, for example ordering and manufacturer information", 7 | "comment": "According Industrie 4.0 specification at https://www.zvei.org/fileadmin/user_upload/Presse_und_Medien/Publikationen/2020/Dezember/Submodel_Templates_of_the_Asset_Administration_Shell/201117_I40_ZVEI_SG2_Submodel_Spec_ZVEI_Technical_Data_Version_1_1.pdf", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name": "ManufacturerName", 12 | "writable": true, 13 | "description": "Legally valid designation of the natural or judicial body which is directly responsible for the design, production, packaging and labeling of a product in respect to its being brought into the market.", 14 | "displayName": "Manufacturer Name", 15 | "schema": "string" 16 | }, 17 | { 18 | "@type": "Component", 19 | "name": "ManufacturerLogo", 20 | "description": "Imagefile for logo of manufacturer provided in common format (.png, .jpg).", 21 | "displayName": "Manufacturer Logo", 22 | "schema": "dtmi:digitaltwins:aas:File;1" 23 | }, 24 | { 25 | "@type": "Property", 26 | "name": "ManufacturerProductDesignation", 27 | "writable": true, 28 | "description": "Product designation as given by the mnaufacturer. Short description of the product, product group or function (short text) in common language.", 29 | "displayName": "Manufacturer Product Designation", 30 | "schema": "string" 31 | }, 32 | { 33 | "@type": "Property", 34 | "name": "ManufacturerPartNumber", 35 | "writable": true, 36 | "description": "Unique product identifier of the manufacturer for the product type respective the type designation of the industrial equipment.", 37 | "displayName": "Manufacturer Part Number", 38 | "schema": "string" 39 | }, 40 | { 41 | "@type": "Property", 42 | "name": "ManufacturerOrderCode", 43 | "writable": true, 44 | "description": "Unique product identifier of the manufacturer sufficient to order the exact same product.", 45 | "displayName": "Manufacturer Order Code", 46 | "schema": "string" 47 | }, 48 | { 49 | "@type": "Component", 50 | "name": "ProductImage", 51 | "description": "Image file for associated product provided in common format (.png, .jpg).", 52 | "displayName": "Product Image", 53 | "schema": "dtmi:digitaltwins:aas:File;1" 54 | } 55 | ] 56 | } -------------------------------------------------------------------------------- /Work/submodels/technicaldata/ProductClassificationItem: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:td:ProductClassificationItem;1", 4 | "@type": "Interface", 5 | "displayName": "Product Classification", 6 | "description": "Single product classification by association with product class in a particular classification system or property dictionary", 7 | "comment": "According Industrie 4.0 specification at https://www.zvei.org/fileadmin/user_upload/Presse_und_Medien/Publikationen/2020/Dezember/Submodel_Templates_of_the_Asset_Administration_Shell/201117_I40_ZVEI_SG2_Submodel_Spec_ZVEI_Technical_Data_Version_1_1.pdf", 8 | "contents": [ 9 | { 10 | "@type": "Property", 11 | "name": "ProductClassificationSystem", 12 | "writable": true, 13 | "description": "Common name of the classification system", 14 | "displayName": "Name of the clasification system", 15 | "schema": "string" 16 | }, 17 | { 18 | "@type": "Property", 19 | "name": "ClassificationSystemVersion", 20 | "writable": true, 21 | "description": "Common version identifier of the used classification system, in order to distinguish different version of the property dictionary", 22 | "displayName": "Version identifier of the used classification system", 23 | "schema": "string" 24 | }, 25 | { 26 | "@type": "Property", 27 | "name": "ProductClassId", 28 | "writable": true, 29 | "description": "Class of the associated product or industrial equipment in the classification system. According to the notation of the system", 30 | "displayName": "Class of the product", 31 | "schema": "string" 32 | } 33 | ] 34 | } -------------------------------------------------------------------------------- /Work/submodels/technicaldata/ProductClassifications.json: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:td:GeneralInformation;1", 4 | "@type": "Interface", 5 | "displayName": "General Information", 6 | "description": "General information, for example ordering and manufacturer information.", 7 | "comment": "According Industrie 4.0 specification at https://www.zvei.org/fileadmin/user_upload/Presse_und_Medien/Publikationen/2020/Dezember/Submodel_Templates_of_the_Asset_Administration_Shell/201117_I40_ZVEI_SG2_Submodel_Spec_ZVEI_Technical_Data_Version_1_1.pdf", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "ProductClassificationItem", 12 | "displayName": "contains", 13 | "writable": true, 14 | "description": "Single product classification item by association with product class in a particular classification system or property dictionary.", 15 | "target": "dtmi:digitaltwins:aas:ProductClassificationItem;1" 16 | } 17 | ] 18 | } -------------------------------------------------------------------------------- /Work/submodels/technicaldata/README.md: -------------------------------------------------------------------------------- 1 | # opendigitaltwins-assetadminstrationshell submodel technicaldata 2 | # Naming convention for Technical Data Submodel: "td" --> dtmi:digitaltwins:aas:td:XXXX;1 -------------------------------------------------------------------------------- /Work/submodels/technicaldata/TechnicalProperties: -------------------------------------------------------------------------------- 1 | { 2 | "@context": "dtmi:dtdl:context;2", 3 | "@id": "dtmi:digitaltwins:aas:td:TechnicalProperties;1", 4 | "@type": "Interface", 5 | "displayName": "Technical Properties", 6 | "description": "Individual characteristics that describe the product (industrial equipment) and its technical properties", 7 | "comment": "According Industrie 4.0 specification at https://www.zvei.org/fileadmin/user_upload/Presse_und_Medien/Publikationen/2020/Dezember/Submodel_Templates_of_the_Asset_Administration_Shell/201117_I40_ZVEI_SG2_Submodel_Spec_ZVEI_Technical_Data_Version_1_1.pdf", 8 | "contents": [ 9 | { 10 | "@type": "Relationship", 11 | "name": "ArbitraryConceptDescription", 12 | "displayName": "Arbitrary Concept Description", 13 | "writable": true, 14 | "description": "Arbitrary SubmodelElement with semanticId possibly referring to a ConceptDescription can be used within the Technical Properties", 15 | "target": "dtmi:digitaltwins:aas:SubmodelElement;1" 16 | }, 17 | { 18 | "@type": "Relationship", 19 | "name": "ArbitraryNonStandardDescription", 20 | "displayName": "Arbitrary Description (non standard)", 21 | "writable": true, 22 | "description": "Represents a SubmodelElement that is not described using a common classification system, a consortium specification, an open community standard, a published manufacturer specification or such", 23 | "target": "dtmi:digitaltwins:aas:SubmodelElement;1" 24 | }, 25 | { 26 | "@type": "Relationship", 27 | "name": "MainSection", 28 | "displayName": "main properties", 29 | "description": "Main subdivision possibility for properties", 30 | "target": "dtmi:digitaltwins:aas:SubmodelElementCollection;1" 31 | }, 32 | { 33 | "@type": "Relationship", 34 | "name": "SubSection", 35 | "displayName": "subordinate properties", 36 | "description": "Subordinate subdivision possibility for properties", 37 | "target": "dtmi:digitaltwins:aas:SubmodelElementCollection;1" 38 | } 39 | ] 40 | } --------------------------------------------------------------------------------