From e525dbb0477c90420bea9ad2b66dae180efee983 Mon Sep 17 00:00:00 2001 From: Michael Hoffmeister Date: Sun, 9 Nov 2025 23:01:52 +0100 Subject: [PATCH 01/10] * update --- .../options-debug.MIHO.json | 5 +- .../KnownEndpointDescription.cs | 5 + .../PackageContainerHttpRepoSubset.cs | 147 +++++++++++++----- .../SecurityAccessHandlerLogicBase.cs | 9 +- .../AasxPluginExportTable.options.json | 8 +- 5 files changed, 127 insertions(+), 47 deletions(-) diff --git a/src/AasxPackageExplorer/options-debug.MIHO.json b/src/AasxPackageExplorer/options-debug.MIHO.json index 4ede4352..e407a292 100644 --- a/src/AasxPackageExplorer/options-debug.MIHO.json +++ b/src/AasxPackageExplorer/options-debug.MIHO.json @@ -19,7 +19,10 @@ "C:\\HOMI\\Develop\\Aasx\\repo\\phoenix-api-key.json", "C:\\HOMI\\Develop\\Aasx\\repo\\local-basyx.json", "C:\\HOMI\\Develop\\Aasx\\repo\\reg-of-reg-voyager.json", - "C:\\HOMI\\Develop\\Aasx\\repo\\phoenix-big.json" + "C:\\HOMI\\Develop\\Aasx\\repo\\phoenix-big.json", + "C:\\HOMI\\Develop\\Aasx\\repo\\Festo-basyx.json", + "C:\\HOMI\\Develop\\Aasx\\repo\\Festo-apigee.json", + "C:\\HOMI\\Develop\\Aasx\\repo\\reg-of-reg-plugfest3.json" ] /* When connecting to given URIs, auto-authenticate by matching with known endpoints. */, "AutoAuthenticateUris": true diff --git a/src/AasxPackageLogic/PackageCentral/KnownEndpointDescription.cs b/src/AasxPackageLogic/PackageCentral/KnownEndpointDescription.cs index 82af48ed..cf6b6ffc 100644 --- a/src/AasxPackageLogic/PackageCentral/KnownEndpointDescription.cs +++ b/src/AasxPackageLogic/PackageCentral/KnownEndpointDescription.cs @@ -109,6 +109,11 @@ public class SecurityAccessUserInfo /// Note: Default is rather short because of secure by design /// public int RenewPeriodMins = 5; + + /// + /// Scope to be send with the token generation access to be embedded into + /// + public string Scope = ""; } public class KnownEndpointDescription diff --git a/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs b/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs index f12caa3b..88f35f17 100644 --- a/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs +++ b/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs @@ -375,6 +375,11 @@ public static Uri GetBaseUri(string location) { return new Uri(location.Substring(0, p) + "/"); } + else + { + // no seconds slash -> whole is a base url + return new Uri(location + "/"); + } } // go to error @@ -826,49 +831,101 @@ private static async Task FromRegistryGetAasAndSubmodels( foreach (var ep in aasDescriptor.endpoints) { + // gather informaation + AasIdentifiableSideInfo aasSi = null; + List smSiReg = null; + // strictly check IFC var aasIfc = "" + ep["interface"]; - if (aasIfc != "AAS-1.0") - continue; + if (aasIfc == "AAS-1.0") + { + + // direct access HREF + aasSi = new AasIdentifiableSideInfo() + { + IsStub = false, + StubLevel = AasIdentifiableSideInfoLevel.IdWithEndpoint, + Id = "" + aasDescriptor.id, + IdShort = "" + aasDescriptor.idShort, + QueriedEndpoint = new Uri("" + ep.protocolInformation.href), + DesignatedEndpoint = new Uri("" + ep.protocolInformation.href) + }; + + // but in order to operate as registry, a list of Submodel endpoints + // is required as well + smSiReg = new List(); + if (AdminShellUtil.DynamicHasProperty(aasDescriptor, "submodelDescriptors")) + foreach (var smdesc in aasDescriptor.submodelDescriptors) + { + foreach (var smep in smdesc.endpoints) + { + // strictly check IFC + var smIfc = "" + smep["interface"]; + if (smIfc != "SUBMODEL-1.0") + continue; - // direct access HREF - var aasSi = new AasIdentifiableSideInfo() + // ok + string href = smep.protocolInformation.href; + if (href.HasContent() == true) + smSiReg.Add(new AasIdentifiableSideInfo() + { + IsStub = true, + StubLevel = AasIdentifiableSideInfoLevel.IdWithEndpoint, + Id = smdesc.id, + IdShort = smdesc.idShort, + QueriedEndpoint = new Uri(href), + DesignatedEndpoint = new Uri(href) + }); + } + } + } + else if (aasIfc == "AAS-3.0") { - IsStub = false, - StubLevel = AasIdentifiableSideInfoLevel.IdWithEndpoint, - Id = "" + aasDescriptor.id, - IdShort = "" + aasDescriptor.idShort, - QueriedEndpoint = new Uri("" + ep.protocolInformation.href), - DesignatedEndpoint = new Uri("" + ep.protocolInformation.href) - }; - - // but in order to operate as registry, a list of Submodel endpoints - // is required as well - var smRegged = new List(); - if (AdminShellUtil.DynamicHasProperty(aasDescriptor, "submodelDescriptors")) - foreach (var smdesc in aasDescriptor.submodelDescriptors) + // Remark: Suspicously, this will be an exacht copy 1.0 == 3.0 :-( + // direct access HREF + aasSi = new AasIdentifiableSideInfo() { - foreach (var smep in smdesc.endpoints) + IsStub = false, + StubLevel = AasIdentifiableSideInfoLevel.IdWithEndpoint, + Id = "" + aasDescriptor.id, + IdShort = "" + aasDescriptor.idShort, + QueriedEndpoint = new Uri("" + ep.protocolInformation.href), + DesignatedEndpoint = new Uri("" + ep.protocolInformation.href) + }; + + // but in order to operate as registry, a list of Submodel endpoints + // is required as well + smSiReg = new List(); + if (AdminShellUtil.DynamicHasProperty(aasDescriptor, "submodelDescriptors")) + foreach (var smdesc in aasDescriptor.submodelDescriptors) { - // strictly check IFC - var smIfc = "" + smep["interface"]; - if (smIfc != "SUBMODEL-1.0") - continue; + foreach (var smep in smdesc.endpoints) + { + // strictly check IFC + var smIfc = "" + smep["interface"]; + if (smIfc != "SUBMODEL-3.0") + continue; - // ok - string href = smep.protocolInformation.href; - if (href.HasContent() == true) - smRegged.Add(new AasIdentifiableSideInfo() - { - IsStub = true, - StubLevel = AasIdentifiableSideInfoLevel.IdWithEndpoint, - Id = smdesc.id, - IdShort = smdesc.idShort, - QueriedEndpoint = new Uri(href), - DesignatedEndpoint = new Uri(href) - }); + // ok + string href = smep.protocolInformation.href; + if (href.HasContent() == true) + smSiReg.Add(new AasIdentifiableSideInfo() + { + IsStub = true, + StubLevel = AasIdentifiableSideInfoLevel.IdWithEndpoint, + Id = smdesc.id, + IdShort = smdesc.idShort, + QueriedEndpoint = new Uri(href), + DesignatedEndpoint = new Uri(href) + }); + } } - } + } + else + { + // no chance + continue; + } // ok var aas = await PackageHttpDownloadUtil.DownloadIdentifiableToOK( @@ -892,7 +949,7 @@ private static async Task FromRegistryGetAasAndSubmodels( // make sure the list of Submodel endpoints is the same (in numbers) // as the AAS expects - if (smRegged.Count != uniqSms.Count()) + if (smSiReg.Count != uniqSms.Count()) { Log.Singleton.Info(StoredPrint.Color.Blue, "For downloading AAS at {0}, the number of Submodels " + @@ -906,7 +963,7 @@ private static async Task FromRegistryGetAasAndSubmodels( // makes most sense to "recrate" the AAS.Submodels with the side infos // from the registry aas.Submodels = null; - foreach (var smrr in smRegged) + foreach (var smrr in smSiReg) aas.AddSubmodelReference(new Aas.Reference( ReferenceTypes.ModelReference, (new Aas.IKey[] { new Aas.Key(KeyTypes.Submodel, smrr.Id) }).ToList())); @@ -923,7 +980,7 @@ private static async Task FromRegistryGetAasAndSubmodels( // be prepared to download them var numRes = await PackageHttpDownloadUtil.DownloadListOfIdentifiables( null, - smRegged, + smSiReg, lambdaGetLocation: (si) => si.QueriedEndpoint, runtimeOptions: runtimeOptions, allowFakeResponses: allowFakeResponses, @@ -951,7 +1008,7 @@ private static async Task FromRegistryGetAasAndSubmodels( } else { - foreach (var si in smRegged) + foreach (var si in smSiReg) { // valid Id is required if (si?.Id?.HasContent() != true) @@ -1025,11 +1082,19 @@ private static async Task FromRegOfRegGetAasAndSubmodels( // translate to a list of AAS-Ids .. var uriGetListOfAids = BuildUriForRegistryAasByAssetId(baseUris.GetBaseUriForAasReg(), assetId); - if (compatOldAasxServer) - uriGetListOfAids = BuildUriForRegistryAasByAssetLinkDeprecated(baseUris.GetBaseUriForAasReg(), assetId); var listOfAids = await PackageHttpDownloadUtil.DownloadEntityToDynamicObject( uriGetListOfAids, runtimeOptions, allowFakeResponses); + if (compatOldAasxServer + && (listOfAids == null || !(listOfAids is JArray) || (listOfAids as JArray).Count < 1)) + { + // repeat with deprecated call + uriGetListOfAids = BuildUriForRegistryAasByAssetLinkDeprecated(baseUris.GetBaseUriForAasReg(), assetId); + + listOfAids = await PackageHttpDownloadUtil.DownloadEntityToDynamicObject( + uriGetListOfAids, runtimeOptions, allowFakeResponses); + } + if (listOfAids == null || !(listOfAids is JArray) || (listOfAids as JArray).Count < 1) { runtimeOptions?.Log?.Info("Registry {0} did not translate glopbalAssetId={1} to any AAS Ids. " + diff --git a/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs b/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs index b44fca13..663b502c 100644 --- a/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs +++ b/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs @@ -664,12 +664,16 @@ protected virtual async Task DetermineAuthenticateHeaderForE var secretRequest = new HttpRequestMessage(System.Net.Http.HttpMethod.Post, authConfigUrl); secretRequest.Headers.Add("Accept", "application/json"); - secretRequest.Content = new FormUrlEncodedContent(new[] + var reqContent = new List>(new[] { new KeyValuePair("grant_type", "client_credentials"), new KeyValuePair("client_id", id), new KeyValuePair("client_secret", secret) }); + if (endpoint.Endpoint.AccessInfo.Scope?.HasContent() == true) + reqContent.Add(new KeyValuePair("scope", endpoint.Endpoint.AccessInfo.Scope)); + + secretRequest.Content = new FormUrlEncodedContent(reqContent); var secretResponse = await client.SendAsync(secretRequest); var secretContentStr = await secretResponse.Content.ReadAsStringAsync(); @@ -991,6 +995,9 @@ protected virtual async Task DetermineAuthenticateHeaderForE }; request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); + // Festo? + request.Content.Headers.Add("scope", "offline_access basyx-api-access"); + // second request to auth-server: get token var response = await client.SendAsync(request); Log.Singleton.Info($"Security access handler: Response of authentification server is: {response.StatusCode}"); diff --git a/src/AasxPluginExportTable/AasxPluginExportTable.options.json b/src/AasxPluginExportTable/AasxPluginExportTable.options.json index dfd30734..55cc6db3 100644 --- a/src/AasxPluginExportTable/AasxPluginExportTable.options.json +++ b/src/AasxPluginExportTable/AasxPluginExportTable.options.json @@ -1,11 +1,11 @@ { "TemplateIdConceptDescription": "www.example.com/ids/cd/DDDD_DDDD_DDDD_DDDD", // the following options, if Docker (Desktop) is installed: - // "SmtExportHtmlCmd": "docker", - // "SmtExportPdfCmd": "docker", + "SmtExportHtmlCmd": "docker", + "SmtExportPdfCmd": "docker", // the following options, if Podman (open source replacement for Docker) is installed: - "SmtExportHtmlCmd": "podman", - "SmtExportPdfCmd": "podman", + //"SmtExportHtmlCmd": "podman", + //"SmtExportPdfCmd": "podman", "SmtExportHtmlArgs": "run -it -v %WD%:/documents/ asciidoctor/docker-asciidoctor asciidoctor -r asciidoctor-diagram -a stylesheet=asciidoc-style-idta.css %ADOC%", "SmtExportPdfArgs": "run -it -v %WD%:/documents/ asciidoctor/docker-asciidoctor asciidoctor-pdf -r asciidoctor-diagram -r ./extended.rb -a toc=macro -a pdf-theme=my-theme.yml -a env-pdf %ADOC%", // this is required to ignore a non-critical error message from podman, preventing the export to stop. From 0439f52d8f15f67576649326b5cc4a0a52592508 Mon Sep 17 00:00:00 2001 From: Michael Hoffmeister Date: Mon, 10 Nov 2025 11:42:44 +0100 Subject: [PATCH 02/10] * update --- src/AasxPackageExplorer/options-debug.MIHO.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AasxPackageExplorer/options-debug.MIHO.json b/src/AasxPackageExplorer/options-debug.MIHO.json index e407a292..eb7f17cd 100644 --- a/src/AasxPackageExplorer/options-debug.MIHO.json +++ b/src/AasxPackageExplorer/options-debug.MIHO.json @@ -7,7 +7,7 @@ // "AasxToLoad": "http://localhost:8081/shells/aHR0cHM6Ly9hZG1pbi1zaGVsbC1pby9pZHRhL2Fhcy9Qcm9kdWN0Q2hhbmdlTm90aWZpY2F0aW9ucy8xLzA" // "AasxToLoad": "http://localhost:8081/shells/aHR1cHM6Ly9hZG1pbi1zaGVsbC1pby9pZHRhL2Fhcy9Qcm9kdWN0Q2hhbmdlTm90aWZpY2F0aW9ucy8xLzA" // "AasxToLoad": "C:\\Users\\Micha\\Desktop\\test-smt-on-basyx\\IDTA_02036-1-0_SMT_ProductChangeNotification_Draft_v35_manual_fixes.aasx" - "AasxToLoad": "C:\\HOMI\\Develop\\Aasx\\SMT\\IDTA 02036-1-0_Submodel_ProductChangeNotification\\IDTA_02036-1-0_SMT_ProductChangeNotification_Draft_v40_add_podman.aasx" + "AasxToLoad": "C:\\HOMI\\Develop\\Aasx\\SMT\\IDTA 02036-1-0_Submodel_ProductChangeNotification\\IDTA_02036-1-0_SMT_ProductChangeNotification_Draft_v41_check_IRDIs.aasx" /* This file shall be loaded as aux package at start of application | Arg: */, "AuxToLoad": null /* List of pathes to a JSON, defining a set of AasxPackage-Files, which serve as repository. | Arg: */, From 04b29f7c8682ee9dc93d2e4af8717f03d50c874c Mon Sep 17 00:00:00 2001 From: Michael Hoffmeister Date: Mon, 10 Nov 2025 16:29:09 +0100 Subject: [PATCH 03/10] * set nugets to newer versions --- src/AasCore.Aas3_0/AasCore.Aas3_0.csproj | 2 +- src/AasxAmlImExport/AasxAmlImExport.csproj | 10 +++++----- .../AasxBammRdfImExport.csproj | 10 +++++----- .../AasxCore.Samm2_2_0.csproj | 2 +- src/AasxCsharpLibrary/AasxCsharpLibrary.csproj | 14 +++++++------- .../AasxDictionaryImport.csproj | 6 +++--- .../AasxFileServerRestLibrary.csproj | 6 +++--- src/AasxFormatCst/AasxFormatCst.csproj | 6 +++--- .../AasxIntegrationBase.csproj | 4 ++-- .../AasxIntegrationBaseGdi.csproj | 8 ++++---- .../AasxIntegrationBaseWpf.csproj | 6 +++--- .../AasxIntegrationEmptySample.csproj | 4 ++-- src/AasxMqtt/AasxMqtt.csproj | 4 ++-- src/AasxMqttClient/AasxMqttClient.csproj | 8 ++++---- src/AasxMqttClient/MqttClient.cs | 1 + src/AasxOpcUa2Client/AasxOpcUa2Client.csproj | 2 +- src/AasxOpenidClient/AasxOpenidClient.csproj | 10 +++++----- .../AasxPackageExplorer.csproj | 18 +++++++++--------- src/AasxPackageExplorer/MainWindow.xaml.cs | 1 - src/AasxPackageLogic/AasxPackageLogic.csproj | 14 +++++++------- src/AasxPackageLogic/DispEditHelperBasics.cs | 3 ++- .../AasxPluginAdvancedTextEditor.csproj | 4 ++-- .../AasxPluginAssetInterfaceDesc.csproj | 6 +++--- .../AasxPluginBomStructure.csproj | 6 +++--- .../AasxPluginContactInformation.csproj | 6 +++--- .../AasxPluginDigitalNameplate.csproj | 8 ++++---- .../NameplateAnyUiControl.cs | 1 + .../AasxPluginDocumentShelf.csproj | 6 +++--- .../AasxPluginExportTable.csproj | 13 ++++++------- .../Table/ImportTableExcelProvider.cs | 2 +- .../AasxPluginGenericForms.csproj | 6 +++--- .../AasxPluginImageMap.csproj | 6 +++--- .../AasxPluginKnownSubmodels.csproj | 6 +++--- .../AasxPluginMtpViewer.csproj | 6 +++--- .../AasxPluginPlotting.csproj | 8 ++++---- ...AasxPluginProductChangeNotifications.csproj | 2 +- .../AasxPluginSmdExporter.csproj | 16 ++++++++-------- .../AasxPluginTechnicalData.csproj | 6 +++--- .../AasxPluginUaNetClient.csproj | 4 ++-- .../AasxPluginWebBrowser.csproj | 15 ++++++++------- src/AasxPluginWebBrowser/Plugin.cs | 10 ++++++++++ .../AasxPredefinedConcepts.csproj | 6 +++--- src/AasxSchemaExport/AasxSchemaExport.csproj | 6 +++--- src/AasxSignature/AasxSignature.csproj | 2 +- src/AasxToolkit/AasxToolkit.csproj | 6 +++--- .../AasxWpfControlLibrary.csproj | 15 +++++++-------- .../Flyouts/SelectFromDataGridFlyout.xaml.cs | 2 -- src/AnyUi/AnyUi.csproj | 2 +- src/BlazorExplorer/BlazorExplorer.csproj | 4 ++-- src/MsaglWpfControl/MsaglWpfControl.csproj | 2 +- .../UIComponents.Flags.Blazor.csproj | 4 ++-- src/WpfMtpControl/WpfMtpControl.csproj | 8 ++++---- src/WpfMtpVisuViewer/WpfMtpVisuViewer.csproj | 6 +++--- src/WpfXamlTool/WpfXamlTool.csproj | 2 +- 54 files changed, 175 insertions(+), 166 deletions(-) diff --git a/src/AasCore.Aas3_0/AasCore.Aas3_0.csproj b/src/AasCore.Aas3_0/AasCore.Aas3_0.csproj index 9907c0c0..2c736815 100644 --- a/src/AasCore.Aas3_0/AasCore.Aas3_0.csproj +++ b/src/AasCore.Aas3_0/AasCore.Aas3_0.csproj @@ -20,6 +20,6 @@ aas;asset administration shell;iiot;industry internet of things;industrie 4.0;i4.0 - + diff --git a/src/AasxAmlImExport/AasxAmlImExport.csproj b/src/AasxAmlImExport/AasxAmlImExport.csproj index f8aaa6bd..7b63e3ca 100644 --- a/src/AasxAmlImExport/AasxAmlImExport.csproj +++ b/src/AasxAmlImExport/AasxAmlImExport.csproj @@ -15,11 +15,11 @@ - - - - + + + + - + diff --git a/src/AasxBammRdfImExport/AasxBammRdfImExport.csproj b/src/AasxBammRdfImExport/AasxBammRdfImExport.csproj index 3be9786e..aca236e5 100644 --- a/src/AasxBammRdfImExport/AasxBammRdfImExport.csproj +++ b/src/AasxBammRdfImExport/AasxBammRdfImExport.csproj @@ -9,11 +9,11 @@ - - - - - + + + + + diff --git a/src/AasxCore.Samm2_2_0/AasxCore.Samm2_2_0.csproj b/src/AasxCore.Samm2_2_0/AasxCore.Samm2_2_0.csproj index 13afad60..91682af9 100644 --- a/src/AasxCore.Samm2_2_0/AasxCore.Samm2_2_0.csproj +++ b/src/AasxCore.Samm2_2_0/AasxCore.Samm2_2_0.csproj @@ -10,7 +10,7 @@ - + diff --git a/src/AasxCsharpLibrary/AasxCsharpLibrary.csproj b/src/AasxCsharpLibrary/AasxCsharpLibrary.csproj index 9ec2ecbb..b1cd41bc 100644 --- a/src/AasxCsharpLibrary/AasxCsharpLibrary.csproj +++ b/src/AasxCsharpLibrary/AasxCsharpLibrary.csproj @@ -32,13 +32,13 @@ - - - - - - - + + + + + + + diff --git a/src/AasxDictionaryImport/AasxDictionaryImport.csproj b/src/AasxDictionaryImport/AasxDictionaryImport.csproj index faf06eba..cece654c 100644 --- a/src/AasxDictionaryImport/AasxDictionaryImport.csproj +++ b/src/AasxDictionaryImport/AasxDictionaryImport.csproj @@ -15,11 +15,11 @@ - + - - + + diff --git a/src/AasxFileServerRestLibrary/AasxFileServerRestLibrary.csproj b/src/AasxFileServerRestLibrary/AasxFileServerRestLibrary.csproj index a0af8005..86e68ed3 100644 --- a/src/AasxFileServerRestLibrary/AasxFileServerRestLibrary.csproj +++ b/src/AasxFileServerRestLibrary/AasxFileServerRestLibrary.csproj @@ -10,11 +10,11 @@ - + - + - + diff --git a/src/AasxFormatCst/AasxFormatCst.csproj b/src/AasxFormatCst/AasxFormatCst.csproj index 7beb2950..54e1a85d 100644 --- a/src/AasxFormatCst/AasxFormatCst.csproj +++ b/src/AasxFormatCst/AasxFormatCst.csproj @@ -14,8 +14,8 @@ - - - + + + diff --git a/src/AasxIntegrationBase/AasxIntegrationBase.csproj b/src/AasxIntegrationBase/AasxIntegrationBase.csproj index 8e88900e..d5225bc9 100644 --- a/src/AasxIntegrationBase/AasxIntegrationBase.csproj +++ b/src/AasxIntegrationBase/AasxIntegrationBase.csproj @@ -14,7 +14,7 @@ - - + + diff --git a/src/AasxIntegrationBaseGdi/AasxIntegrationBaseGdi.csproj b/src/AasxIntegrationBaseGdi/AasxIntegrationBaseGdi.csproj index b4b74505..5cd5dd10 100644 --- a/src/AasxIntegrationBaseGdi/AasxIntegrationBaseGdi.csproj +++ b/src/AasxIntegrationBaseGdi/AasxIntegrationBaseGdi.csproj @@ -10,10 +10,10 @@ - - - - + + + + diff --git a/src/AasxIntegrationBaseWpf/AasxIntegrationBaseWpf.csproj b/src/AasxIntegrationBaseWpf/AasxIntegrationBaseWpf.csproj index 4b8317c8..950b68c0 100644 --- a/src/AasxIntegrationBaseWpf/AasxIntegrationBaseWpf.csproj +++ b/src/AasxIntegrationBaseWpf/AasxIntegrationBaseWpf.csproj @@ -25,10 +25,10 @@ - - + + - + diff --git a/src/AasxIntegrationEmptySample/AasxIntegrationEmptySample.csproj b/src/AasxIntegrationEmptySample/AasxIntegrationEmptySample.csproj index 12b712e8..9984057c 100644 --- a/src/AasxIntegrationEmptySample/AasxIntegrationEmptySample.csproj +++ b/src/AasxIntegrationEmptySample/AasxIntegrationEmptySample.csproj @@ -9,7 +9,7 @@ - - + + diff --git a/src/AasxMqtt/AasxMqtt.csproj b/src/AasxMqtt/AasxMqtt.csproj index 97762ef9..cd69e852 100644 --- a/src/AasxMqtt/AasxMqtt.csproj +++ b/src/AasxMqtt/AasxMqtt.csproj @@ -11,8 +11,8 @@ - + - + diff --git a/src/AasxMqttClient/AasxMqttClient.csproj b/src/AasxMqttClient/AasxMqttClient.csproj index c0bc5ba0..68e5970a 100644 --- a/src/AasxMqttClient/AasxMqttClient.csproj +++ b/src/AasxMqttClient/AasxMqttClient.csproj @@ -14,9 +14,9 @@ - - - - + + + + diff --git a/src/AasxMqttClient/MqttClient.cs b/src/AasxMqttClient/MqttClient.cs index e0d01aab..48296704 100644 --- a/src/AasxMqttClient/MqttClient.cs +++ b/src/AasxMqttClient/MqttClient.cs @@ -22,6 +22,7 @@ This source code may use other Open Source software components (see LICENSE.txt) using Extensions; using MQTTnet; using MQTTnet.Client; +using MQTTnet.Client.Options; using Newtonsoft.Json; using System; using System.Collections.Generic; diff --git a/src/AasxOpcUa2Client/AasxOpcUa2Client.csproj b/src/AasxOpcUa2Client/AasxOpcUa2Client.csproj index 12f9b572..6c4448ac 100644 --- a/src/AasxOpcUa2Client/AasxOpcUa2Client.csproj +++ b/src/AasxOpcUa2Client/AasxOpcUa2Client.csproj @@ -6,7 +6,7 @@ - + diff --git a/src/AasxOpenidClient/AasxOpenidClient.csproj b/src/AasxOpenidClient/AasxOpenidClient.csproj index b402be53..6c3d500e 100644 --- a/src/AasxOpenidClient/AasxOpenidClient.csproj +++ b/src/AasxOpenidClient/AasxOpenidClient.csproj @@ -23,11 +23,11 @@ - - - - - + + + + + diff --git a/src/AasxPackageExplorer/AasxPackageExplorer.csproj b/src/AasxPackageExplorer/AasxPackageExplorer.csproj index 924eebf8..4889c7b4 100644 --- a/src/AasxPackageExplorer/AasxPackageExplorer.csproj +++ b/src/AasxPackageExplorer/AasxPackageExplorer.csproj @@ -149,21 +149,21 @@ - + - - - - + + + + - + - + - + - + diff --git a/src/AasxPackageExplorer/MainWindow.xaml.cs b/src/AasxPackageExplorer/MainWindow.xaml.cs index 53f7e133..bd3ad3d2 100644 --- a/src/AasxPackageExplorer/MainWindow.xaml.cs +++ b/src/AasxPackageExplorer/MainWindow.xaml.cs @@ -22,7 +22,6 @@ This source code may use other Open Source software components (see LICENSE.txt) using J2N; using Microsoft.Win32; using Newtonsoft.Json; -using NPOI.POIFS.Properties; using System; using System.Collections; using System.Collections.Generic; diff --git a/src/AasxPackageLogic/AasxPackageLogic.csproj b/src/AasxPackageLogic/AasxPackageLogic.csproj index e3dae4e2..e64a82eb 100644 --- a/src/AasxPackageLogic/AasxPackageLogic.csproj +++ b/src/AasxPackageLogic/AasxPackageLogic.csproj @@ -33,18 +33,18 @@ - + - - + + - + - - - + + + diff --git a/src/AasxPackageLogic/DispEditHelperBasics.cs b/src/AasxPackageLogic/DispEditHelperBasics.cs index 087a0bda..65cc57f1 100644 --- a/src/AasxPackageLogic/DispEditHelperBasics.cs +++ b/src/AasxPackageLogic/DispEditHelperBasics.cs @@ -2651,7 +2651,8 @@ public void EntityListUpDownDeleteHelper( if (list.Count < 1) setOutputList?.Invoke(null); - await postActionHookAsync?.Invoke(theMenu?.ElementAt(buttonNdx)?.Name, ticket); + if (postActionHookAsync != null) + await postActionHookAsync.Invoke(theMenu?.ElementAt(buttonNdx)?.Name, ticket); this.AddDiaryEntry(entityRf, new DiaryEntryStructChange(StructuralChangeReason.Delete), diff --git a/src/AasxPluginAdvancedTextEditor/AasxPluginAdvancedTextEditor.csproj b/src/AasxPluginAdvancedTextEditor/AasxPluginAdvancedTextEditor.csproj index 2045bb8d..cf01a91b 100644 --- a/src/AasxPluginAdvancedTextEditor/AasxPluginAdvancedTextEditor.csproj +++ b/src/AasxPluginAdvancedTextEditor/AasxPluginAdvancedTextEditor.csproj @@ -14,9 +14,9 @@ - + - + diff --git a/src/AasxPluginAssetInterfaceDesc/AasxPluginAssetInterfaceDesc.csproj b/src/AasxPluginAssetInterfaceDesc/AasxPluginAssetInterfaceDesc.csproj index 6166ed62..9ddd7adb 100644 --- a/src/AasxPluginAssetInterfaceDesc/AasxPluginAssetInterfaceDesc.csproj +++ b/src/AasxPluginAssetInterfaceDesc/AasxPluginAssetInterfaceDesc.csproj @@ -42,10 +42,10 @@ - + - + - + diff --git a/src/AasxPluginBomStructure/AasxPluginBomStructure.csproj b/src/AasxPluginBomStructure/AasxPluginBomStructure.csproj index 3d62b940..473fbb7d 100644 --- a/src/AasxPluginBomStructure/AasxPluginBomStructure.csproj +++ b/src/AasxPluginBomStructure/AasxPluginBomStructure.csproj @@ -40,8 +40,8 @@ - - - + + + diff --git a/src/AasxPluginContactInformation/AasxPluginContactInformation.csproj b/src/AasxPluginContactInformation/AasxPluginContactInformation.csproj index 96a7e860..2f7b2921 100644 --- a/src/AasxPluginContactInformation/AasxPluginContactInformation.csproj +++ b/src/AasxPluginContactInformation/AasxPluginContactInformation.csproj @@ -30,8 +30,8 @@ - - - + + + diff --git a/src/AasxPluginDigitalNameplate/AasxPluginDigitalNameplate.csproj b/src/AasxPluginDigitalNameplate/AasxPluginDigitalNameplate.csproj index 81c5b881..bc83a260 100644 --- a/src/AasxPluginDigitalNameplate/AasxPluginDigitalNameplate.csproj +++ b/src/AasxPluginDigitalNameplate/AasxPluginDigitalNameplate.csproj @@ -55,9 +55,9 @@ - - - - + + + + diff --git a/src/AasxPluginDigitalNameplate/NameplateAnyUiControl.cs b/src/AasxPluginDigitalNameplate/NameplateAnyUiControl.cs index 46bd5af5..93b8a5bc 100644 --- a/src/AasxPluginDigitalNameplate/NameplateAnyUiControl.cs +++ b/src/AasxPluginDigitalNameplate/NameplateAnyUiControl.cs @@ -30,6 +30,7 @@ This source code may use other Open Source software components (see LICENSE.txt) using QRCoder; using ImageMagick; using System.DirectoryServices.ActiveDirectory; +using ImageMagick.Factories; namespace AasxPluginDigitalNameplate diff --git a/src/AasxPluginDocumentShelf/AasxPluginDocumentShelf.csproj b/src/AasxPluginDocumentShelf/AasxPluginDocumentShelf.csproj index 8d0445f8..dd1c773d 100644 --- a/src/AasxPluginDocumentShelf/AasxPluginDocumentShelf.csproj +++ b/src/AasxPluginDocumentShelf/AasxPluginDocumentShelf.csproj @@ -34,8 +34,8 @@ - - - + + + diff --git a/src/AasxPluginExportTable/AasxPluginExportTable.csproj b/src/AasxPluginExportTable/AasxPluginExportTable.csproj index ec664a93..9cc5ce1e 100644 --- a/src/AasxPluginExportTable/AasxPluginExportTable.csproj +++ b/src/AasxPluginExportTable/AasxPluginExportTable.csproj @@ -35,14 +35,13 @@ - - - - - - + + + + + - + diff --git a/src/AasxPluginExportTable/Table/ImportTableExcelProvider.cs b/src/AasxPluginExportTable/Table/ImportTableExcelProvider.cs index 557a610d..79b01f78 100644 --- a/src/AasxPluginExportTable/Table/ImportTableExcelProvider.cs +++ b/src/AasxPluginExportTable/Table/ImportTableExcelProvider.cs @@ -34,7 +34,7 @@ public string Cell(int row, int col) { if (_worksheet == null) return null; - return _worksheet.Cell(1 + row, 1 + col)?.Value?.ToString(); + return _worksheet.Cell(1 + row, 1 + col)?.Value.ToString(); } // diff --git a/src/AasxPluginGenericForms/AasxPluginGenericForms.csproj b/src/AasxPluginGenericForms/AasxPluginGenericForms.csproj index 8fbbd7f4..838e3caf 100644 --- a/src/AasxPluginGenericForms/AasxPluginGenericForms.csproj +++ b/src/AasxPluginGenericForms/AasxPluginGenericForms.csproj @@ -47,8 +47,8 @@ - - - + + + diff --git a/src/AasxPluginImageMap/AasxPluginImageMap.csproj b/src/AasxPluginImageMap/AasxPluginImageMap.csproj index cdc96f35..1a2c49d2 100644 --- a/src/AasxPluginImageMap/AasxPluginImageMap.csproj +++ b/src/AasxPluginImageMap/AasxPluginImageMap.csproj @@ -16,9 +16,9 @@ - - - + + + diff --git a/src/AasxPluginKnownSubmodels/AasxPluginKnownSubmodels.csproj b/src/AasxPluginKnownSubmodels/AasxPluginKnownSubmodels.csproj index 2a00e68e..32ebe1ff 100644 --- a/src/AasxPluginKnownSubmodels/AasxPluginKnownSubmodels.csproj +++ b/src/AasxPluginKnownSubmodels/AasxPluginKnownSubmodels.csproj @@ -8,9 +8,9 @@ false - - - + + + diff --git a/src/AasxPluginMtpViewer/AasxPluginMtpViewer.csproj b/src/AasxPluginMtpViewer/AasxPluginMtpViewer.csproj index 663c3d83..516187fe 100644 --- a/src/AasxPluginMtpViewer/AasxPluginMtpViewer.csproj +++ b/src/AasxPluginMtpViewer/AasxPluginMtpViewer.csproj @@ -31,9 +31,9 @@ - + - - + + diff --git a/src/AasxPluginPlotting/AasxPluginPlotting.csproj b/src/AasxPluginPlotting/AasxPluginPlotting.csproj index 307e8164..59ca0ecc 100644 --- a/src/AasxPluginPlotting/AasxPluginPlotting.csproj +++ b/src/AasxPluginPlotting/AasxPluginPlotting.csproj @@ -20,11 +20,11 @@ - - - + + + - + diff --git a/src/AasxPluginProductChangeNotifications/AasxPluginProductChangeNotifications.csproj b/src/AasxPluginProductChangeNotifications/AasxPluginProductChangeNotifications.csproj index 2e9bd9ce..fb9c8b9f 100644 --- a/src/AasxPluginProductChangeNotifications/AasxPluginProductChangeNotifications.csproj +++ b/src/AasxPluginProductChangeNotifications/AasxPluginProductChangeNotifications.csproj @@ -26,7 +26,7 @@ - + diff --git a/src/AasxPluginSmdExporter/AasxPluginSmdExporter.csproj b/src/AasxPluginSmdExporter/AasxPluginSmdExporter.csproj index 0747a971..9edb848d 100644 --- a/src/AasxPluginSmdExporter/AasxPluginSmdExporter.csproj +++ b/src/AasxPluginSmdExporter/AasxPluginSmdExporter.csproj @@ -31,16 +31,16 @@ - - + + - - + + - - - - + + + + diff --git a/src/AasxPluginTechnicalData/AasxPluginTechnicalData.csproj b/src/AasxPluginTechnicalData/AasxPluginTechnicalData.csproj index 6d483151..0ecd671d 100644 --- a/src/AasxPluginTechnicalData/AasxPluginTechnicalData.csproj +++ b/src/AasxPluginTechnicalData/AasxPluginTechnicalData.csproj @@ -25,8 +25,8 @@ - - - + + + diff --git a/src/AasxPluginUaNetClient/AasxPluginUaNetClient.csproj b/src/AasxPluginUaNetClient/AasxPluginUaNetClient.csproj index 45b30603..af2b1b14 100644 --- a/src/AasxPluginUaNetClient/AasxPluginUaNetClient.csproj +++ b/src/AasxPluginUaNetClient/AasxPluginUaNetClient.csproj @@ -22,7 +22,7 @@ - - + + diff --git a/src/AasxPluginWebBrowser/AasxPluginWebBrowser.csproj b/src/AasxPluginWebBrowser/AasxPluginWebBrowser.csproj index ed69d5d4..bba2190b 100644 --- a/src/AasxPluginWebBrowser/AasxPluginWebBrowser.csproj +++ b/src/AasxPluginWebBrowser/AasxPluginWebBrowser.csproj @@ -11,7 +11,8 @@ net8.0-windows - win-x64 + + $(NETCoreSdkRuntimeIdentifier) x64 x64 x64 @@ -60,13 +61,13 @@ - - - - - + + + + + - + diff --git a/src/AasxPluginWebBrowser/Plugin.cs b/src/AasxPluginWebBrowser/Plugin.cs index 14ce76ef..9df9d091 100644 --- a/src/AasxPluginWebBrowser/Plugin.cs +++ b/src/AasxPluginWebBrowser/Plugin.cs @@ -9,6 +9,7 @@ This source code may use other Open Source software components (see LICENSE.txt) using System; using System.Collections.Generic; +using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; @@ -137,6 +138,15 @@ public void OnDownloadUpdated(IWebBrowser chromiumWebBrowser, IBrowser browser, this.browserGrid.ColumnDefinitions.Add( new ColumnDefinition() { Width = new GridLength(1.0, GridUnitType.Star) }); + // New: two instances of the AASPE crash because of Cef + var settings = new CefSharp.Wpf.CefSettings + { + CachePath = $"C:\\Temp\\CEFCache_{Process.GetCurrentProcess().Id}" + }; + if (Cef.IsInitialized != true) + Cef.Initialize(settings); + + // ok, start this._browser = new CefSharp.Wpf.ChromiumWebBrowser(); this._browser.DownloadHandler = this; // this._browser.RequestHandler = this; diff --git a/src/AasxPredefinedConcepts/AasxPredefinedConcepts.csproj b/src/AasxPredefinedConcepts/AasxPredefinedConcepts.csproj index b601a746..be5576ce 100644 --- a/src/AasxPredefinedConcepts/AasxPredefinedConcepts.csproj +++ b/src/AasxPredefinedConcepts/AasxPredefinedConcepts.csproj @@ -40,8 +40,8 @@ - - - + + + diff --git a/src/AasxSchemaExport/AasxSchemaExport.csproj b/src/AasxSchemaExport/AasxSchemaExport.csproj index 47d1f5fd..6e544da5 100644 --- a/src/AasxSchemaExport/AasxSchemaExport.csproj +++ b/src/AasxSchemaExport/AasxSchemaExport.csproj @@ -10,9 +10,9 @@ - - - + + + diff --git a/src/AasxSignature/AasxSignature.csproj b/src/AasxSignature/AasxSignature.csproj index 7ed33704..ccb58d1d 100644 --- a/src/AasxSignature/AasxSignature.csproj +++ b/src/AasxSignature/AasxSignature.csproj @@ -10,7 +10,7 @@ false - + diff --git a/src/AasxToolkit/AasxToolkit.csproj b/src/AasxToolkit/AasxToolkit.csproj index 685fb46b..f912acb1 100644 --- a/src/AasxToolkit/AasxToolkit.csproj +++ b/src/AasxToolkit/AasxToolkit.csproj @@ -106,11 +106,11 @@ - + - + - + diff --git a/src/AasxWpfControlLibrary/AasxWpfControlLibrary.csproj b/src/AasxWpfControlLibrary/AasxWpfControlLibrary.csproj index 47df9103..39ccd0c8 100644 --- a/src/AasxWpfControlLibrary/AasxWpfControlLibrary.csproj +++ b/src/AasxWpfControlLibrary/AasxWpfControlLibrary.csproj @@ -45,18 +45,17 @@ - + - - - + + - - - - + + + + diff --git a/src/AasxWpfControlLibrary/Flyouts/SelectFromDataGridFlyout.xaml.cs b/src/AasxWpfControlLibrary/Flyouts/SelectFromDataGridFlyout.xaml.cs index 36d1d5fd..2c85cb7c 100644 --- a/src/AasxWpfControlLibrary/Flyouts/SelectFromDataGridFlyout.xaml.cs +++ b/src/AasxWpfControlLibrary/Flyouts/SelectFromDataGridFlyout.xaml.cs @@ -26,8 +26,6 @@ This source code may use other Open Source software components (see LICENSE.txt) using AasxIntegrationBase; using AdminShellNS; using AnyUi; -using Newtonsoft.Json; -using NPOI.HPSF; namespace AasxPackageExplorer { diff --git a/src/AnyUi/AnyUi.csproj b/src/AnyUi/AnyUi.csproj index c40b8e26..60b1fec2 100644 --- a/src/AnyUi/AnyUi.csproj +++ b/src/AnyUi/AnyUi.csproj @@ -23,7 +23,7 @@ - + diff --git a/src/BlazorExplorer/BlazorExplorer.csproj b/src/BlazorExplorer/BlazorExplorer.csproj index b794b743..77e8ec68 100644 --- a/src/BlazorExplorer/BlazorExplorer.csproj +++ b/src/BlazorExplorer/BlazorExplorer.csproj @@ -84,8 +84,8 @@ - - + + diff --git a/src/MsaglWpfControl/MsaglWpfControl.csproj b/src/MsaglWpfControl/MsaglWpfControl.csproj index 3ec2a90c..4a202c04 100644 --- a/src/MsaglWpfControl/MsaglWpfControl.csproj +++ b/src/MsaglWpfControl/MsaglWpfControl.csproj @@ -18,6 +18,6 @@ - + diff --git a/src/UIComponents.Flags.Blazor/UIComponents.Flags.Blazor.csproj b/src/UIComponents.Flags.Blazor/UIComponents.Flags.Blazor.csproj index 59627cba..f7a3a09f 100644 --- a/src/UIComponents.Flags.Blazor/UIComponents.Flags.Blazor.csproj +++ b/src/UIComponents.Flags.Blazor/UIComponents.Flags.Blazor.csproj @@ -12,8 +12,8 @@ - - + + diff --git a/src/WpfMtpControl/WpfMtpControl.csproj b/src/WpfMtpControl/WpfMtpControl.csproj index 02bd5d1c..f945dc82 100644 --- a/src/WpfMtpControl/WpfMtpControl.csproj +++ b/src/WpfMtpControl/WpfMtpControl.csproj @@ -17,10 +17,10 @@ - - + + - - + + diff --git a/src/WpfMtpVisuViewer/WpfMtpVisuViewer.csproj b/src/WpfMtpVisuViewer/WpfMtpVisuViewer.csproj index b22b5de1..47fc86d0 100644 --- a/src/WpfMtpVisuViewer/WpfMtpVisuViewer.csproj +++ b/src/WpfMtpVisuViewer/WpfMtpVisuViewer.csproj @@ -21,9 +21,9 @@ - + - - + + diff --git a/src/WpfXamlTool/WpfXamlTool.csproj b/src/WpfXamlTool/WpfXamlTool.csproj index 248d6eb3..c6ea6295 100644 --- a/src/WpfXamlTool/WpfXamlTool.csproj +++ b/src/WpfXamlTool/WpfXamlTool.csproj @@ -13,7 +13,7 @@ - + From 56bafe04d0097459f98970201ddf4eddf726001d Mon Sep 17 00:00:00 2001 From: Michael Hoffmeister Date: Sun, 16 Nov 2025 12:24:04 +0100 Subject: [PATCH 04/10] * update --- src/AasxPackageExplorer/options-debug.MIHO.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AasxPackageExplorer/options-debug.MIHO.json b/src/AasxPackageExplorer/options-debug.MIHO.json index eb7f17cd..8f035a58 100644 --- a/src/AasxPackageExplorer/options-debug.MIHO.json +++ b/src/AasxPackageExplorer/options-debug.MIHO.json @@ -63,7 +63,7 @@ "Username": "Albert", "Password": "Alb" } - } + } // ] /* Presets for base addresses for Registries and Repositories. */, "BaseAddresses": [ From c052388b4cc659b5d1e99915b1cc241d3549b00f Mon Sep 17 00:00:00 2001 From: Michael Hoffmeister Date: Sun, 16 Nov 2025 18:02:46 +0100 Subject: [PATCH 05/10] * tried to fix warnings in the solution * surprisingly many await's missing in the MainWindow (suspect unnecessary conversion of DispEditElement() as source) --- src/AasxDictionaryImport/Cdd/Model.cs | 6 +- src/AasxDictionaryImport/Cdd/Parser.cs | 12 ++- src/AasxDictionaryImport/Eclass/Model.cs | 36 ++++--- .../ElementDetailsDialog.xaml.cs | 2 +- src/AasxDictionaryImport/Iec61360Utils.cs | 4 +- src/AasxDictionaryImport/Import.cs | 31 +++--- src/AasxDictionaryImport/ImportDialog.xaml.cs | 16 +++- src/AasxDictionaryImport/Model.cs | 4 +- .../AasxPackageExplorer.csproj | 4 +- .../MainWindow.CommandBindings.cs | 14 +-- src/AasxPackageExplorer/MainWindow.xaml.cs | 52 +++------- .../WinGdiSecurityAccessHandler.cs | 39 ++++---- .../options-debug.MIHO.json | 2 + src/AasxPackageLogic/AasxFixListVisitor.cs | 4 - src/AasxPackageLogic/AasxPackageLogic.csproj | 1 - .../DispEditHelperEntities.cs | 2 +- .../DispEditHelperExtensions.cs | 5 - src/AasxPackageLogic/DispEditHelperModules.cs | 2 +- .../DispEditHelperSammModules.cs | 8 +- .../MainWindowAnyUiDialogs.cs | 36 +++---- src/AasxPackageLogic/MainWindowHeadless.cs | 4 +- src/AasxPackageLogic/MainWindowTools.cs | 68 ++++++++------ src/AasxPackageLogic/OpcUa/NodeSetImport.cs | 3 +- .../AasxFileServerInterfaceService.cs | 2 - .../PackageContainerHttpRepoSubset.cs | 11 +-- .../PackageContainerListHttpRestRepository.cs | 5 - .../SecurityAccessHandlerLogicBase.cs | 2 + src/AasxPackageLogic/VisualAasxElements.cs | 2 + .../AasxPrintFunctions.cs | 94 ++++++++++--------- .../DiplayVisualAasxElements.xaml.cs | 9 +- .../DispEditAasxEntity.xaml.cs | 11 ++- .../PackageContainerListOfListControl.xaml.cs | 2 - src/BlazorExplorer/Program.cs | 2 +- src/BlazorExplorer/Startup.cs | 1 + src/BlazorExplorer/StylePile.cs | 15 --- 35 files changed, 252 insertions(+), 259 deletions(-) diff --git a/src/AasxDictionaryImport/Cdd/Model.cs b/src/AasxDictionaryImport/Cdd/Model.cs index 97400058..9ff05e43 100644 --- a/src/AasxDictionaryImport/Cdd/Model.cs +++ b/src/AasxDictionaryImport/Cdd/Model.cs @@ -29,7 +29,7 @@ public class DataProvider : Model.DataProviderBase /// public override bool IsValidPath(string path) { - string dir = File.Exists(path) ? Path.GetDirectoryName(path) : path; + string dir = File.Exists(path) ? (Path.GetDirectoryName(path) ?? "") : path; return Parser.IsValidDirectory(dir); } @@ -45,7 +45,7 @@ protected override IEnumerable GetDefaultPaths(string dir) /// public override Model.IDataSource OpenPath(string path, Model.DataSourceType type = Model.DataSourceType.Custom) { - string dir = File.Exists(path) ? Path.GetDirectoryName(path) : path; + string dir = File.Exists(path) ? (Path.GetDirectoryName(path) ?? "") : path; return new DataSource(this, dir, type); } } @@ -133,7 +133,7 @@ public Context(DataSource dataSource, List classes, List proper if (key.Length == 0) return null; - if (!_elements.TryGetValue(key, out Element element)) + if (!_elements.TryGetValue(key, out Element? element)) { UnknownReferences.Add(Model.UnknownReference.Create(key)); return null; diff --git a/src/AasxDictionaryImport/Cdd/Parser.cs b/src/AasxDictionaryImport/Cdd/Parser.cs index 0dcd974c..e4c39d9b 100644 --- a/src/AasxDictionaryImport/Cdd/Parser.cs +++ b/src/AasxDictionaryImport/Cdd/Parser.cs @@ -113,7 +113,11 @@ private List ParseFile(IExcelDataReader reader) where T : Element if (value == "#PROPERTY_ID") columns = ParseHeaders(reader); else if (value.Length == 0) - data.Add(ParseElement(reader, columns)); + { + var pe = ParseElement(reader, columns); + if (pe != null) + data.Add(pe); + } } return data; @@ -130,20 +134,20 @@ private List ParseHeaders(IExcelDataReader reader) return columns; } - private T ParseElement(IExcelDataReader reader, List columns) where T : Element + private T? ParseElement(IExcelDataReader reader, List columns) where T : Element { var elementDict = new Dictionary(); for (int i = 0; i < columns.Count; i++) { elementDict.Add(columns[i], GetString(reader, i + 1)); } - return (T)Activator.CreateInstance(typeof(T), elementDict); + return (T?)Activator.CreateInstance(typeof(T), elementDict); } private String GetString(IExcelDataReader reader, int index) { var value = reader.GetValue(index); - return (value == null) ? String.Empty : value.ToString(); + return "" + value?.ToString(); } /// diff --git a/src/AasxDictionaryImport/Eclass/Model.cs b/src/AasxDictionaryImport/Eclass/Model.cs index d65318a4..f9b4aaeb 100644 --- a/src/AasxDictionaryImport/Eclass/Model.cs +++ b/src/AasxDictionaryImport/Eclass/Model.cs @@ -19,6 +19,7 @@ This source code may use other Open Source software components (see LICENSE.txt) using System.Linq; using System.Net; using System.Net.Http; +using System.Runtime.Versioning; using System.Security.Cryptography.X509Certificates; using System.Xml; using System.Xml.Linq; @@ -153,22 +154,26 @@ private string FetchXmlFile(string irdi) } } - X509Certificate2 cert = new X509Certificate2(); + X509Certificate2? cert = null; if (certFound) { certFound = false; - X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection2, + + if (OperatingSystem.IsWindows()) + { + X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection2, "Test Certificate Select", "Select an ECLASS client certificate which you already imported into your certificate store", X509SelectionFlag.SingleSelection); - if (scollection.Count != 0) - { - certFound = true; - cert = scollection[0]; + if (scollection.Count != 0) + { + certFound = true; + cert = scollection[0]; + } } } - if (!certFound) + if (!certFound || cert == null) { throw new ImportException($"No valid ECLASS certificate selected"); } @@ -261,13 +266,18 @@ public override Model.IDataContext Load() private IEnumerable FindAdditionalFiles() { var dir = System.IO.Path.GetDirectoryName(Path); + if (dir == null) + yield break; var searchPattern = System.IO.Path.GetFileName(Path).Replace("_EN_", "_??_"); - return Directory.GetFiles(dir, searchPattern).Where(path => path != Path); + foreach (var x in Directory.GetFiles(dir, searchPattern).Where(path => path != Path)) + yield return x; } private XDocument? FindUnits() { var dir = System.IO.Path.GetDirectoryName(Path); + if (dir == null) + return null; var dictName = System.IO.Path.GetFileName(Path); var i = dictName.IndexOf("BASIC", System.StringComparison.Ordinal); if (i < 0) @@ -363,7 +373,7 @@ private void LoadTranslations(XElement element) if (idAttr == null) return; - if (_elements.TryGetValue(idAttr.Value, out Element oldElement)) + if (_elements.TryGetValue(idAttr.Value, out Element? oldElement)) oldElement.AddTranslation(element); } @@ -373,8 +383,8 @@ private void AssignUnits(ICollection properties, XDocument document) foreach (var property in properties) { var unitIrdi = property.UnitIrdi; - if (unitIrdi.Length > 0 && units.TryGetValue(unitIrdi, out string unit)) - property.Unit = unit; + if (unitIrdi.Length > 0 && units.TryGetValue(unitIrdi, out string? unit)) + property.Unit = unit ?? ""; } } @@ -387,7 +397,7 @@ private IDictionary LoadUnits(XDocument document) .Elements(Namespaces.UnitsML + "CodeListValue") .ToDictionary(e => e.Attributes("codeListName").FirstValue(), e => e.Attributes("unitCodeValue").FirstValue()); - if (data.TryGetValue("IRDI", out string irdi) && data.TryGetValue("SI code", out string siCode)) + if (data.TryGetValue("IRDI", out string? irdi) && data.TryGetValue("SI code", out string? siCode)) { if (!units.ContainsKey(irdi)) // TODO (krahlro-sick, 2021-02-03): HTML-decode SI code @@ -458,7 +468,7 @@ private void AddElements(IEnumerable elements) where T : Element public T? GetElement(string id) where T : Element { - if (_elements.TryGetValue(id, out Element e)) + if (_elements.TryGetValue(id, out Element? e)) if (e is T t) return t; diff --git a/src/AasxDictionaryImport/ElementDetailsDialog.xaml.cs b/src/AasxDictionaryImport/ElementDetailsDialog.xaml.cs index 031c2d37..9bda99af 100644 --- a/src/AasxDictionaryImport/ElementDetailsDialog.xaml.cs +++ b/src/AasxDictionaryImport/ElementDetailsDialog.xaml.cs @@ -115,7 +115,7 @@ private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs { if (textBox.Tag is MultiString ms) { - textBox.Text = ms.Get(comboBox.SelectedItem.ToString()); + textBox.Text = ms.Get(comboBox.SelectedItem.ToString() ?? ""); } } } diff --git a/src/AasxDictionaryImport/Iec61360Utils.cs b/src/AasxDictionaryImport/Iec61360Utils.cs index 9ceb154f..476cf05a 100644 --- a/src/AasxDictionaryImport/Iec61360Utils.cs +++ b/src/AasxDictionaryImport/Iec61360Utils.cs @@ -411,10 +411,10 @@ public Iec61360Data(string irdi) /// The AAS DataSpecification with the data stored in this element public Aas.DataSpecificationIec61360 ToDataSpecification() { - var ds = new Aas.DataSpecificationIec61360(null) + var ds = new Aas.DataSpecificationIec61360( + preferredName: PreferredName.ToLangStringPreferredNameTypeIec61360()) { Definition = Definition.ToLangStringDefinitionTypeIec61360(), - PreferredName = PreferredName.ToLangStringPreferredNameTypeIec61360(), ShortName = ShortName.ToLangStringShortNameTypeIec61360(), }; diff --git a/src/AasxDictionaryImport/Import.cs b/src/AasxDictionaryImport/Import.cs index 6caad610..36d2d340 100644 --- a/src/AasxDictionaryImport/Import.cs +++ b/src/AasxDictionaryImport/Import.cs @@ -99,22 +99,25 @@ public static bool ImportSubmodelElements(Window window, Aas.IEnvironment env, private static bool PerformImport(Window window, ImportMode importMode, string defaultSourceDir, Func f) { - var dialog = new ImportDialog(window, importMode, defaultSourceDir); - if (dialog.ShowDialog() != true || dialog.Context == null) - return false; - - int imported; - try - { - Mouse.OverrideCursor = Cursors.Wait; - imported = dialog.GetResult().Count(f); - } - finally + int imported = 0; + if (OperatingSystem.IsWindows()) { - Mouse.OverrideCursor = null; - } + var dialog = new ImportDialog(window, importMode, defaultSourceDir); + if (dialog.ShowDialog() != true || dialog.Context == null) + return false; + + try + { + Mouse.OverrideCursor = Cursors.Wait; + imported = dialog.GetResult().Count(f); + } + finally + { + Mouse.OverrideCursor = null; + } - CheckUnresolvedReferences(dialog.Context); + CheckUnresolvedReferences(dialog.Context); + } return imported > 0; } diff --git a/src/AasxDictionaryImport/ImportDialog.xaml.cs b/src/AasxDictionaryImport/ImportDialog.xaml.cs index d529ad02..0204607a 100644 --- a/src/AasxDictionaryImport/ImportDialog.xaml.cs +++ b/src/AasxDictionaryImport/ImportDialog.xaml.cs @@ -14,6 +14,7 @@ This source code may use other Open Source software components (see LICENSE.txt) using System.ComponentModel; using System.IO; using System.Linq; +using System.Runtime.Versioning; using System.Windows; using System.Windows.Controls; using System.Windows.Data; @@ -37,6 +38,7 @@ namespace AasxDictionaryImport /// adding another button that fetches a data source from the network. /// /// + [SupportedOSPlatform("windows")] internal partial class ImportDialog : Window { public ISet DataProviders = new HashSet { @@ -107,14 +109,17 @@ private void LoadCachedImports() { if (cacheEl == null) continue; - var fileName = cacheEl.Attribute("FileName").Value; - if (File.Exists(fileName) && cacheEl.Attribute("Source").Value.Equals("Online")) + + var fileName = cacheEl.Attribute("FileName")?.Value; + if (fileName != null + && File.Exists(fileName) + && true == cacheEl.Attribute("Source")?.Value.Equals("Online")) { ICollection providers = DataProviders.Where(p => p.IsFetchSupported).ToList(); foreach (var provider in providers) { - if (cacheEl.Attribute("Provider").Value.Equals(provider.Name)) + if (true == cacheEl.Attribute("Provider")?.Value.Equals(provider.Name)) { var source = provider.OpenPath(fileName, Model.DataSourceType.Online); ComboBoxSource.Items.Add(source); @@ -148,7 +153,8 @@ private void SaveCachedIndex() el.SetAttributeValue("FileName", source.Path); el.SetAttributeValue("Source", source.Type.ToString()); el.SetAttributeValue("Provider", source.DataProvider.ToString()); - rootEl.Add(el); + if (rootEl != null) + rootEl.Add(el); } } doc.Save(indexFile); @@ -244,7 +250,7 @@ private void ClassViewControl_SelectionChanged(object sender, UpdateImportButton(); } - private void ClassWrapper_PropertyChanged(object o, PropertyChangedEventArgs e) + private void ClassWrapper_PropertyChanged(object? o, PropertyChangedEventArgs e) { if (e.PropertyName == "IsChecked") UpdateImportButton(); diff --git a/src/AasxDictionaryImport/Model.cs b/src/AasxDictionaryImport/Model.cs index fcf7a4ee..f2f5e9ec 100644 --- a/src/AasxDictionaryImport/Model.cs +++ b/src/AasxDictionaryImport/Model.cs @@ -307,7 +307,7 @@ public bool Equals(UnknownReference? reference) } /// - public override bool Equals(object o) + public override bool Equals(object? o) { return Equals(o as UnknownReference); } @@ -568,7 +568,7 @@ public bool Equals(IDataSource? source) } /// - public override bool Equals(object o) + public override bool Equals(object? o) { return Equals(o as IDataSource); } diff --git a/src/AasxPackageExplorer/AasxPackageExplorer.csproj b/src/AasxPackageExplorer/AasxPackageExplorer.csproj index 4889c7b4..21948547 100644 --- a/src/AasxPackageExplorer/AasxPackageExplorer.csproj +++ b/src/AasxPackageExplorer/AasxPackageExplorer.csproj @@ -175,8 +175,6 @@ - - - + diff --git a/src/AasxPackageExplorer/MainWindow.CommandBindings.cs b/src/AasxPackageExplorer/MainWindow.CommandBindings.cs index 221576a4..844545dc 100644 --- a/src/AasxPackageExplorer/MainWindow.CommandBindings.cs +++ b/src/AasxPackageExplorer/MainWindow.CommandBindings.cs @@ -348,7 +348,7 @@ private async Task CommandBinding_GeneralDispatch( CommandBinding_PrintAsset(ticket); if (cmd == "importdictsubmodel" || cmd == "importdictsubmodelelements") - CommandBinding_ImportDictToSubmodel(cmd, ticket); + await CommandBinding_ImportDictToSubmodel(cmd, ticket); // stays in WPF if (cmd == "serverrest") @@ -360,7 +360,7 @@ private async Task CommandBinding_GeneralDispatch( // stays in WPF if (cmd == "connectintegrated") - CommandBinding_ConnectIntegrated(); + await CommandBinding_ConnectIntegrated(); // stays in WPF if (cmd == "connectsecure") @@ -403,7 +403,7 @@ private async Task CommandBinding_GeneralDispatch( // REFACTOR: STAYS if (cmd == "checkandfix") - CommandBinding_CheckAndFix(); + await CommandBinding_CheckAndFix(); // REFACTOR: STAYS if (cmd == "eventsresetlocks") @@ -644,7 +644,7 @@ public void CommandBinding_ConnectSecure() Log.Singleton.Info("Secure connect done."); } - public void CommandBinding_ConnectIntegrated() + public async Task CommandBinding_ConnectIntegrated() { // make dialogue flyout var uc = new IntegratedConnectFlyout( @@ -665,7 +665,7 @@ public void CommandBinding_ConnectIntegrated() $"{uc.ResultContainer.ToString()} .."); try { - UiLoadPackageWithNew( + await UiLoadPackageWithNew( PackageCentral.MainItem, null, takeOverContainer: uc.ResultContainer, onlyAuxiliary: false); } catch (Exception ex) @@ -1036,7 +1036,7 @@ public async void CommandBinding_ConnectRest() } if (System.IO.File.Exists(AasxOpenIdClient.OpenIDClient.outputDir + "\\download.aasx")) - UiLoadPackageWithNew( + await UiLoadPackageWithNew( PackageCentral.MainItem, null, AasxOpenIdClient.OpenIDClient.outputDir + "\\download.aasx", onlyAuxiliary: false); @@ -1072,7 +1072,7 @@ public async void CommandBinding_ConnectRest() await AasxOpenIdClient.OpenIDClient.Run(tag, value/*, this*/); if (System.IO.File.Exists(AasxOpenIdClient.OpenIDClient.outputDir + "\\download.aasx")) - UiLoadPackageWithNew( + await UiLoadPackageWithNew( PackageCentral.MainItem, null, AasxOpenIdClient.OpenIDClient.outputDir + "\\download.aasx", onlyAuxiliary: false); diff --git a/src/AasxPackageExplorer/MainWindow.xaml.cs b/src/AasxPackageExplorer/MainWindow.xaml.cs index bd3ad3d2..bd00bb25 100644 --- a/src/AasxPackageExplorer/MainWindow.xaml.cs +++ b/src/AasxPackageExplorer/MainWindow.xaml.cs @@ -1151,7 +1151,7 @@ private async void Window_Loaded(object sender, RoutedEventArgs e) { // load Log.Singleton.Info("Switching to location {0} ..", fi.Location); - UiLoadPackageWithNew(PackageCentral.MainItem, null, + await UiLoadPackageWithNew(PackageCentral.MainItem, null, fi.Location, onlyAuxiliary: false, preserveEditMode: true); // in any case, stop here @@ -1232,9 +1232,9 @@ private async void Window_Loaded(object sender, RoutedEventArgs e) var container = await restRepository.LoadAasxFileFromServer(fi.PackageId, PackageCentral.CentralRuntimeOptions); if (container != null) { - UiLoadPackageWithNew(PackageCentral.MainItem, - takeOverContainer: container, onlyAuxiliary: false, - storeFnToLRU: fi.PackageId); + await UiLoadPackageWithNew(PackageCentral.MainItem, + takeOverContainer: container, onlyAuxiliary: false, + storeFnToLRU: fi.PackageId); } Log.Singleton.Info($"Successfully loaded AASX Package with PackageId {fi.PackageId}"); @@ -1266,7 +1266,7 @@ private async void Window_Loaded(object sender, RoutedEventArgs e) if (container == null) Log.Singleton.Error($"Failed to load AASX from {location}"); else - UiLoadPackageWithNew(PackageCentral.MainItem, + await UiLoadPackageWithNew(PackageCentral.MainItem, takeOverContainer: container, onlyAuxiliary: false, storeFnToLRU: location); @@ -1397,7 +1397,7 @@ private async void Window_Loaded(object sender, RoutedEventArgs e) $"Auto-load request seem to result in empty data! Auto-load location: {location}"); } else - UiLoadPackageWithNew(PackageCentral.MainItem, + await UiLoadPackageWithNew(PackageCentral.MainItem, takeOverContainer: container, onlyAuxiliary: false, indexItems: true, nextEditMode: Options.Curr.EditMode); @@ -1429,7 +1429,7 @@ private async void Window_Loaded(object sender, RoutedEventArgs e) if (container == null) Log.Singleton.Error($"Failed to auto-load AASX from {location}"); else - UiLoadPackageWithNew(PackageCentral.AuxItem, + await UiLoadPackageWithNew(PackageCentral.AuxItem, takeOverContainer: container, onlyAuxiliary: true, indexItems: false); Log.Singleton.Info($"Successfully auto-loaded AASX {location}"); @@ -1475,36 +1475,6 @@ private async void Window_Loaded(object sender, RoutedEventArgs e) } } - // - // TEST - // - - if (false) - { - // in both cases, prepare list of events as string - var lev = new List(); - - lev.Add(new AasEventMsgEnvelope() - { - Source = new Aas.Reference(ReferenceTypes.ExternalReference, - new List(new[] { new Aas.Key(KeyTypes.Blob, "bb") })) - }); - - var settings = new JsonSerializerSettings - { - // SerializationBinder = new DisplayNameSerializationBinder(new[] { typeof(AasEventMsgEnvelope) }), - NullValueHandling = NullValueHandling.Ignore, - ReferenceLoopHandling = ReferenceLoopHandling.Serialize, - TypeNameHandling = TypeNameHandling.None, - Formatting = Formatting.Indented - }; - settings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter()); - settings.Converters.Add(new AdminShellConverters.AdaptiveAasIClassConverter( - AdminShellConverters.AdaptiveAasIClassConverter.ConversionMode.AasCore)); - var json = JsonConvert.SerializeObject(lev, settings); - ; - } - AasxIntegrationBaseWpf.CountryFlagWpf.LoadImage(); } @@ -1898,7 +1868,7 @@ private async Task LoadFromFileRepository(PackageCon fileRepo.StartAnimation(fi, PackageContainerRepoItem.VisualStateEnum.ReadFrom); // activate - UiLoadPackageWithNew(PackageCentral.MainItem, + await UiLoadPackageWithNew(PackageCentral.MainItem, takeOverContainer: container, onlyAuxiliary: false); Log.Singleton.Info($"Successfully loaded AASX {location}"); @@ -3073,7 +3043,7 @@ private async Task MainTimer_Tick(object sender, EventArgs e) // normal stuff MainTimer_PeriodicalTaskForSelectedEntity(); - MainTaimer_HandleIncomingAasEvents(); + await MainTaimer_HandleIncomingAasEvents(); DisplayElements.UpdateFromQueuedEvents(); } @@ -4160,7 +4130,7 @@ private void Window_DragEnter(object sender, DragEventArgs e) } } - private void Window_Drop(object sender, DragEventArgs e) + private async void Window_Drop(object sender, DragEventArgs e) { // Appearantly you need to figure out if OriginalSource would have handled the Drop? if (!e.Handled && e.Data.GetDataPresent(DataFormats.FileDrop, true)) @@ -4175,7 +4145,7 @@ private void Window_Drop(object sender, DragEventArgs e) string fn = files[0]; try { - UiLoadPackageWithNew( + await UiLoadPackageWithNew( PackageCentral.MainItem, null, loadLocalFilename: fn, onlyAuxiliary: false, nextEditMode: Options.Curr.EditMode); } diff --git a/src/AasxPackageExplorer/WinGdiSecurityAccessHandler.cs b/src/AasxPackageExplorer/WinGdiSecurityAccessHandler.cs index c820ddfc..fa913112 100644 --- a/src/AasxPackageExplorer/WinGdiSecurityAccessHandler.cs +++ b/src/AasxPackageExplorer/WinGdiSecurityAccessHandler.cs @@ -10,16 +10,6 @@ This source code is licensed under the Apache License 2.0 (see LICENSE.txt). This source code may use other Open Source software components (see LICENSE.txt). */ -using AasxIntegrationBase; -using AasxMqttClient; -using AasxPackageLogic; -using AasxPackageLogic.PackageCentral; -using AdminShellNS; -using AnyUi; -using Extensions; -using Microsoft.Identity.Client; -using Microsoft.IdentityModel.Tokens; -using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.ComponentModel; @@ -30,6 +20,7 @@ This source code may use other Open Source software components (see LICENSE.txt) using System.Net.Http; using System.Net.Http.Headers; using System.Reflection; +using System.Runtime.Versioning; using System.Security.Claims; using System.Security.Cryptography.X509Certificates; using System.Text; @@ -38,6 +29,16 @@ This source code may use other Open Source software components (see LICENSE.txt) using System.Threading.Tasks; using System.Windows; using System.Windows.Input; +using AasxIntegrationBase; +using AasxMqttClient; +using AasxPackageLogic; +using AasxPackageLogic.PackageCentral; +using AdminShellNS; +using AnyUi; +using Extensions; +using Microsoft.Identity.Client; +using Microsoft.IdentityModel.Tokens; +using Newtonsoft.Json.Linq; using Aas = AasCore.Aas3_0; namespace AasxPackageExplorer @@ -80,12 +81,18 @@ protected override async Task AskForSelectFromCertCo if (false) { - X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, - "Certificate Select", - "Select a certificate for authentification on AAS server", - X509SelectionFlag.SingleSelection); - - return scollection; +#pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. + if (OperatingSystem.IsWindows()) + { + // Note: Leave this in, suppress warning + X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, + "Certificate Select", + "Select a certificate for authentification on AAS server", + X509SelectionFlag.SingleSelection); + return scollection; +#pragma warning restore CS0162 // Unerreichbarer Code wurde entdeckt. + } + return null; } else { diff --git a/src/AasxPackageExplorer/options-debug.MIHO.json b/src/AasxPackageExplorer/options-debug.MIHO.json index 8f035a58..7af335a2 100644 --- a/src/AasxPackageExplorer/options-debug.MIHO.json +++ b/src/AasxPackageExplorer/options-debug.MIHO.json @@ -1,4 +1,6 @@ { + /* Try disable VS editor warnings */ + "$schema": "http://json-schema.org/draft-07/schema#", /* If set, start in editor mode instead of browse mode. */ "EditMode": true /* If set, do not start in hinting mode. */, diff --git a/src/AasxPackageLogic/AasxFixListVisitor.cs b/src/AasxPackageLogic/AasxFixListVisitor.cs index 923d478b..fc729ecd 100644 --- a/src/AasxPackageLogic/AasxFixListVisitor.cs +++ b/src/AasxPackageLogic/AasxFixListVisitor.cs @@ -748,7 +748,6 @@ public override IClass TransformEntity(IEntity that) && that.Qualifiers == null && that.EmbeddedDataSpecifications == null && that.Statements == null - && that.EntityType == null && that.GlobalAssetId == null && that.SpecificAssetIds == null) { @@ -1403,7 +1402,6 @@ public override IClass TransformQualifier(IQualifier that) if(that.SemanticId == null && that.SupplementalSemanticIds == null && that.Type == null - && that.ValueType == null && that.Kind == null && that.Value == null && that.ValueId == null) @@ -1465,7 +1463,6 @@ public override IClass TransformRange(IRange that) && that.SupplementalSemanticIds == null && that.Qualifiers == null && that.EmbeddedDataSpecifications == null - && that.ValueType == null && that.Min == null && that.Max == null) { @@ -1925,7 +1922,6 @@ public override IClass TransformSubmodelElementList(ISubmodelElementList that) && that.SupplementalSemanticIds == null && that.Qualifiers == null && that.EmbeddedDataSpecifications == null - && that.TypeValueListElement == null && that.OrderRelevant == null && that.SemanticIdListElement == null && that.ValueTypeListElement == null diff --git a/src/AasxPackageLogic/AasxPackageLogic.csproj b/src/AasxPackageLogic/AasxPackageLogic.csproj index e64a82eb..31e2cfe9 100644 --- a/src/AasxPackageLogic/AasxPackageLogic.csproj +++ b/src/AasxPackageLogic/AasxPackageLogic.csproj @@ -21,7 +21,6 @@ - diff --git a/src/AasxPackageLogic/DispEditHelperEntities.cs b/src/AasxPackageLogic/DispEditHelperEntities.cs index 8d691276..400c8663 100644 --- a/src/AasxPackageLogic/DispEditHelperEntities.cs +++ b/src/AasxPackageLogic/DispEditHelperEntities.cs @@ -1602,7 +1602,7 @@ public static async Task ExecuteUiForFetchOfElements( } // display - mainWindow.UiLoadPackageWithNew(packages.MainItem, + await mainWindow.UiLoadPackageWithNew(packages.MainItem, takeOverContainer: container, onlyAuxiliary: false, indexItems: true, storeFnToLRU: location.Location.ToString(), preserveEditMode: preserveEditMode, diff --git a/src/AasxPackageLogic/DispEditHelperExtensions.cs b/src/AasxPackageLogic/DispEditHelperExtensions.cs index 722760c6..af63a12a 100644 --- a/src/AasxPackageLogic/DispEditHelperExtensions.cs +++ b/src/AasxPackageLogic/DispEditHelperExtensions.cs @@ -2075,9 +2075,6 @@ public static bool TakeoverSmOrganizeToCds( if (ownCd == null) return false; - if (ownCd.IdShort == "Markings") - ; - // get or create SMT attributeRecord for the CD var smtRec = DispEditHelperExtensions .CheckReferableForExtensionRecords(ownCd)?.FirstOrDefault(); @@ -2177,8 +2174,6 @@ public static bool TakeoverSmOrganizeToCds( // if changes, write back if (changes) { - if (ownCd.Extensions != null && ownCd.Extensions.Count > 1) - ; DispEditHelperExtensions.GeneralExtensionHelperAddJsonExtension( ownCd, smtRec.GetType(), smtRec, replaceExistingRecordType: true); diff --git a/src/AasxPackageLogic/DispEditHelperModules.cs b/src/AasxPackageLogic/DispEditHelperModules.cs index aeb72742..7362a18a 100644 --- a/src/AasxPackageLogic/DispEditHelperModules.cs +++ b/src/AasxPackageLogic/DispEditHelperModules.cs @@ -668,7 +668,7 @@ public void DisplayOrEditEntityIdentifiable(AnyUiStackPanel stack, //Added this method only to support embeddedDS from ConceptDescriptions public void DisplayOrEditEntityHasDataSpecificationReferences(AnyUiStackPanel stack, - List? hasDataSpecification, + List hasDataSpecification, Action> setOutput, string[] addPresetNames = null, List[] addPresetKeyLists = null, bool dataSpecRefsAreUsual = false, diff --git a/src/AasxPackageLogic/DispEditHelperSammModules.cs b/src/AasxPackageLogic/DispEditHelperSammModules.cs index 271eaa6c..9bac4481 100644 --- a/src/AasxPackageLogic/DispEditHelperSammModules.cs +++ b/src/AasxPackageLogic/DispEditHelperSammModules.cs @@ -1157,13 +1157,15 @@ public void DisplayOrEditEntitySammExtensions( Samm.ModelElement sammInst = null; if (false) { - // Note: right now, create fresh instance - sammInst = Activator.CreateInstance(sammType, new object[] { }) as Samm.ModelElement; - if (sammInst == null) + // Note: right now, create fresh instance + #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. + sammInst = Activator.CreateInstance(sammType, new object[] { }) as Samm.ModelElement; + if (sammInst == null) { stack.Add(new AnyUiLabel() { Content = "(unable to create instance data)" }); continue; } + #pragma warning restore CS0162 // Unerreichbarer Code wurde entdeckt. } else { diff --git a/src/AasxPackageLogic/MainWindowAnyUiDialogs.cs b/src/AasxPackageLogic/MainWindowAnyUiDialogs.cs index 9dc9607f..bca6c822 100644 --- a/src/AasxPackageLogic/MainWindowAnyUiDialogs.cs +++ b/src/AasxPackageLogic/MainWindowAnyUiDialogs.cs @@ -151,12 +151,12 @@ public async Task CommandBinding_GeneralDispatchAnyUiDialogs( switch (cmd) { case "open": - MainWindow.UiLoadPackageWithNew( + await MainWindow.UiLoadPackageWithNew( PackageCentral.MainItem, null, fn, onlyAuxiliary: false, storeFnToLRU: fn, nextEditMode: Options.Curr.EditMode); break; case "openaux": - MainWindow.UiLoadPackageWithNew( + await MainWindow.UiLoadPackageWithNew( PackageCentral.AuxItem, null, fn, onlyAuxiliary: true); break; default: @@ -208,7 +208,7 @@ public async Task CommandBinding_GeneralDispatchAnyUiDialogs( MainWindow.CheckIfToFlushEvents(); // as saving changes the structure of pending supplementary files, re-display - MainWindow.RedrawAllAasxElementsAsync(keepFocus: true); + await MainWindow.RedrawAllAasxElementsAsync(keepFocus: true); } catch (Exception ex) { @@ -305,7 +305,7 @@ await PackageCentral.MainItem.SaveAsAsync(targetFn, prefFmt: prefFmt, PackageContainerBase.BackupType.FullCopy); // as saving changes the structure of pending supplementary files, re-display - MainWindow.RedrawAllAasxElementsAsync(); + await MainWindow.RedrawAllAasxElementsAsync(); // LRU? // record in LRU? @@ -364,7 +364,7 @@ await DisplayContextPlus.WebBrowserDisplayOrDownloadFile( try { PackageCentral.MainItem.Close(); - MainWindow.RedrawAllAasxElementsAsync(); + await MainWindow.RedrawAllAasxElementsAsync(); } catch (Exception ex) { @@ -395,7 +395,7 @@ await DisplayContextPlus.WebBrowserDisplayOrDownloadFile( await CommandBinding_GeneralDispatchHeadless(cmd, menuItem, ticket); // update - MainWindow.RedrawAllAasxElementsAsync(); + await MainWindow.RedrawAllAasxElementsAsync(); await MainWindow.RedrawElementViewAsync(); return; } @@ -883,7 +883,7 @@ await val.PerformDialogue(ticket, DisplayContext, // be careful try { - UiCheckIfActivateLoadedNavTo(); + await UiCheckIfActivateLoadedNavTo(); } catch (Exception ex) { @@ -1059,7 +1059,7 @@ await val.PerformDialogue(ticket, DisplayContext, await CommandBinding_GeneralDispatchHeadless(cmd, menuItem, ticket); // update - MainWindow.RedrawAllAasxElementsAsync(); + await MainWindow.RedrawAllAasxElementsAsync(); await MainWindow.RedrawElementViewAsync(); } @@ -1081,7 +1081,7 @@ await val.PerformDialogue(ticket, DisplayContext, { await CommandBinding_GeneralDispatchHeadless(cmd, menuItem, ticket); - MainWindow.RedrawAllAasxElementsAsync(); + await MainWindow.RedrawAllAasxElementsAsync(); await MainWindow.RedrawElementViewAsync(); } catch (Exception ex) @@ -1190,7 +1190,7 @@ await DisplayContextPlus.CheckIfDownloadAndStart( await CommandBinding_GeneralDispatchHeadless(cmd, menuItem, ticket); // redisplay - MainWindow.RedrawAllAasxElementsAsync(); + await MainWindow.RedrawAllAasxElementsAsync(); await MainWindow.RedrawElementViewAsync(); } catch (Exception ex) @@ -1264,7 +1264,7 @@ await DisplayContextPlus.CheckIfDownloadAndStart( await CommandBinding_GeneralDispatchHeadless(cmd, menuItem, ticket); // redisplay - MainWindow.RedrawAllAasxElementsAsync(); + await MainWindow.RedrawAllAasxElementsAsync(); await MainWindow.RedrawElementViewAsync(); } catch (Exception ex) @@ -1292,7 +1292,7 @@ await DisplayContextPlus.CheckIfDownloadAndStart( await CommandBinding_GeneralDispatchHeadless(cmd, menuItem, ticket); // redisplay - MainWindow.RedrawAllAasxElementsAsync(); + await MainWindow.RedrawAllAasxElementsAsync(); await MainWindow.RedrawElementViewAsync(); } catch (Exception ex) @@ -1322,7 +1322,7 @@ await DisplayContextPlus.CheckIfDownloadAndStart( await CommandBinding_GeneralDispatchHeadless(cmd, menuItem, ticket); // redisplay - MainWindow.RedrawAllAasxElementsAsync(); + await MainWindow.RedrawAllAasxElementsAsync(); await MainWindow.RedrawElementViewAsync(); } catch (Exception ex) @@ -1380,7 +1380,7 @@ await DisplayContextPlus.CheckIfDownloadAndStart( await CommandBinding_GeneralDispatchHeadless(cmd, menuItem, ticket); // redisplay - MainWindow.RedrawAllAasxElementsAsync(); + await MainWindow.RedrawAllAasxElementsAsync(); await MainWindow.RedrawElementViewAsync(); } catch (Exception ex) @@ -1407,7 +1407,7 @@ await DisplayContextPlus.CheckIfDownloadAndStart( try { await CommandBinding_GeneralDispatchHeadless(cmd, menuItem, ticket); - MainWindow.RestartUIafterNewPackage(); + await MainWindow.RestartUIafterNewPackage(); } catch (Exception ex) { @@ -1432,7 +1432,7 @@ await DisplayContextPlus.CheckIfDownloadAndStart( try { await CommandBinding_GeneralDispatchHeadless(cmd, menuItem, ticket); - MainWindow.RestartUIafterNewPackage(); + await MainWindow.RestartUIafterNewPackage(); } catch (Exception ex) { @@ -1586,7 +1586,7 @@ await DisplayContextPlus.CheckIfDownloadAndStart( && ticket.PostResults["TakeOver"] is AdminShellPackageEnvBase pe) PackageCentral.MainItem.TakeOver(pe); - MainWindow.RestartUIafterNewPackage(); + await MainWindow.RestartUIafterNewPackage(); } catch (Exception ex) { @@ -2123,7 +2123,7 @@ private async Task CommandBinding_FixAndFinalizeAsync(AasxMenuActionTicket ticke MainWindow.CheckIfToFlushEvents(); // as saving changes the structure of pending supplementary files, re-display - MainWindow.RedrawAllAasxElementsAsync(keepFocus: true); + await MainWindow.RedrawAllAasxElementsAsync(keepFocus: true); } catch (Exception ex) { diff --git a/src/AasxPackageLogic/MainWindowHeadless.cs b/src/AasxPackageLogic/MainWindowHeadless.cs index ba625e84..a8044ee0 100644 --- a/src/AasxPackageLogic/MainWindowHeadless.cs +++ b/src/AasxPackageLogic/MainWindowHeadless.cs @@ -244,7 +244,7 @@ public async Task CommandBinding_GeneralDispatchHeadless( } // do - PackageHelper.SignAll( + await PackageHelper.SignAll( sourceFn, certFn, invokeMessage: (ticket.InvokeMessage == null) ? StandardInvokeMessageDelegate : ticket.InvokeMessage); @@ -1718,7 +1718,7 @@ record = o; else if (res is AasxPluginResultEventRedrawAllElements aprrae) { - MainWindow.CommandExecution_RedrawAllAsync(); + await MainWindow.CommandExecution_RedrawAllAsync(); } } catch (Exception ex) diff --git a/src/AasxPackageLogic/MainWindowTools.cs b/src/AasxPackageLogic/MainWindowTools.cs index f794a3a1..e2060290 100644 --- a/src/AasxPackageLogic/MainWindowTools.cs +++ b/src/AasxPackageLogic/MainWindowTools.cs @@ -293,44 +293,52 @@ public bool Tool_Security_Sign( X509Certificate2Collection fcollection = collection.Find( X509FindType.FindByTimeValid, DateTime.Now, false); - X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, - "Test Certificate Select", - "Select a certificate from the following list to get information on that certificate", - X509SelectionFlag.SingleSelection); - if (scollection.Count != 0) + if (OperatingSystem.IsWindows()) { - var certificate = scollection[0]; - subject.Value = certificate.Subject; - X509Chain ch = new X509Chain(); - ch.Build(certificate); + X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, + "Test Certificate Select", + "Select a certificate from the following list to get information on that certificate", + X509SelectionFlag.SingleSelection); + if (scollection.Count != 0) + { + var certificate = scollection[0]; + subject.Value = certificate.Subject; - //// string[] X509Base64 = new string[ch.ChainElements.Count]; + X509Chain ch = new X509Chain(); + ch.Build(certificate); - int j = 1; - foreach (X509ChainElement element in ch.ChainElements) - { - Aas.Property c = new Aas.Property(Aas.DataTypeDefXsd.String, idShort: "certificate_" + j++); - c.Value = Convert.ToBase64String(element.Certificate.GetRawCertData()); - x5c.Add(c); - } + //// string[] X509Base64 = new string[ch.ChainElements.Count]; - try - { - using (RSA rsa = certificate.GetRSAPrivateKey()) + int j = 1; + foreach (X509ChainElement element in ch.ChainElements) { - algorithm.Value = "RS256"; - byte[] data = Encoding.UTF8.GetBytes(result); - byte[] signed = rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); - signature.Value = Convert.ToBase64String(signed); - sigT.Value = DateTime.UtcNow.ToString("yyyy'-'MM'-'dd' 'HH':'mm':'ss"); + Aas.Property c = new Aas.Property(Aas.DataTypeDefXsd.String, idShort: "certificate_" + j++); + c.Value = Convert.ToBase64String(element.Certificate.GetRawCertData()); + x5c.Add(c); } + + try + { + using (RSA rsa = certificate.GetRSAPrivateKey()) + { + algorithm.Value = "RS256"; + byte[] data = Encoding.UTF8.GetBytes(result); + byte[] signed = rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); + signature.Value = Convert.ToBase64String(signed); + sigT.Value = DateTime.UtcNow.ToString("yyyy'-'MM'-'dd' 'HH':'mm':'ss"); + } + } + // ReSharper disable EmptyGeneralCatchClause + catch + { + } + // ReSharper enable EmptyGeneralCatchClause } - // ReSharper disable EmptyGeneralCatchClause - catch - { - } - // ReSharper enable EmptyGeneralCatchClause + } + else + { + Log.Singleton.Error("Cannot access Cert-selection on non-windows systems!"); } } else // Verifiable Credential diff --git a/src/AasxPackageLogic/OpcUa/NodeSetImport.cs b/src/AasxPackageLogic/OpcUa/NodeSetImport.cs index f83d824d..58770f00 100644 --- a/src/AasxPackageLogic/OpcUa/NodeSetImport.cs +++ b/src/AasxPackageLogic/OpcUa/NodeSetImport.cs @@ -51,11 +51,12 @@ public UaNode() } } - +#if OLD_V20_CODE static List roots; static List nodes; static Dictionary parentNodes; static Dictionary semanticIDPool; +#endif public static void ImportNodeSetToSubModel( string inputFn, Aas.IEnvironment env, Aas.ISubmodel sm, diff --git a/src/AasxPackageLogic/PackageCentral/AasxFileServerInterface/AasxFileServerInterfaceService.cs b/src/AasxPackageLogic/PackageCentral/AasxFileServerInterface/AasxFileServerInterfaceService.cs index cb25c386..3fb0532c 100644 --- a/src/AasxPackageLogic/PackageCentral/AasxFileServerInterface/AasxFileServerInterfaceService.cs +++ b/src/AasxPackageLogic/PackageCentral/AasxFileServerInterface/AasxFileServerInterfaceService.cs @@ -21,8 +21,6 @@ namespace AasxPackageLogic.PackageCentral { public class AasxFileServerInterfaceService { - private AASXFileServerInterfaceApi _fileApiInstance; - private object _aasApiInstace; private AasxServerService _aasxServerService; public AasxFileServerInterfaceService(string basePath) diff --git a/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs b/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs index 88f35f17..d9ebe0d7 100644 --- a/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs +++ b/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs @@ -796,7 +796,6 @@ public ProfileDescription(string id, string name, string abbreviation) public static ProfileDescription FindProfileDescription(string input) { - ProfileDescription pdFound = null; foreach (var pd in ProfileDescriptions) if (pd.Id.Equals(input)) return pd; @@ -1732,12 +1731,9 @@ await PackageHttpDownloadUtil.HttpGetToMemoryStream( // Have a list of ids. Decompose into single id. // Note: Parallel makes no sense, ideally only 1 result (is per AssetId)!! // TODO: not parallel! - var noRes = true; int i = 0; foreach (var res in resObj) { - noRes = false; - // in res, have only an id. Get the AAS itself Uri designEnd = BuildUriForRepoSingleAAS( baseUri.GetBaseUriForAasRepo(), "" + res, encryptIds: true); @@ -1771,7 +1767,6 @@ await PackageHttpDownloadUtil.HttpGetToMemoryStream( if (i >= limitResults.Value) break; } - } } @@ -1945,15 +1940,17 @@ await PackageHttpDownloadUtil.HttpGetToMemoryStream( var jsonQuery = ""; if (false) { - + // Andreas' very much outdated server: // but, the query needs to be reformatted as JSON // query = "{ searchSMs(expression: \"\"\"$LOG \"\"\") { url smId } }"; // query = "{ searchSMs(expression: \"\"\"$LOG filter=or(str_contains(sm.IdShort, \"Technical\"), str_contains(sm.IdShort, \"Nameplate\")) \"\"\") { url smId } }"; + #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. query = query.Replace("\\", "\\\\"); query = query.Replace("\"", "\\\""); query = query.Replace("\r", " "); query = query.Replace("\n", " "); jsonQuery = $"{{ \"query\" : \"{query}\" }} "; + #pragma warning restore CS0162 // Unerreichbarer Code wurde entdeckt. } else { @@ -2375,12 +2372,14 @@ public override async Task SaveLocalCopyAsync( string targetFilename, PackCntRuntimeOptions runtimeOptions = null) { + await Task.Yield(); return false; } private async Task UploadToServerAsync(string copyFn, Uri serverUri, PackCntRuntimeOptions runtimeOptions = null) { + await Task.Yield(); } public override async Task SaveToSourceAsync(string saveAsNewFileName = null, diff --git a/src/AasxPackageLogic/PackageCentral/PackageContainerListHttpRestRepository.cs b/src/AasxPackageLogic/PackageCentral/PackageContainerListHttpRestRepository.cs index 75fe506c..b339260b 100644 --- a/src/AasxPackageLogic/PackageCentral/PackageContainerListHttpRestRepository.cs +++ b/src/AasxPackageLogic/PackageCentral/PackageContainerListHttpRestRepository.cs @@ -32,8 +32,6 @@ public class PackageContainerListHttpRestRepository : PackageContainerListHttpRe // Member // - private PackageConnectorHttpRest _connector; - [JsonIgnore] public string ServerStatus { get; private set; } = "Status unknown!"; @@ -101,9 +99,6 @@ public PackageContainerListHttpRestRepository(string location) /// If a successfull retrieval could be made public async Task SyncronizeFromServerAsync() { - if (true != _connector?.IsValid()) - return false; - await Task.Yield(); #if old_implementation diff --git a/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs b/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs index 663b502c..0ca7a90f 100644 --- a/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs +++ b/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs @@ -452,7 +452,9 @@ protected virtual async Task AskForSelectFromCertCol if (false) { // in the UI-abstract logic, NO Windows UI is possible + #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. return null; + #pragma warning restore CS0162 // Unerreichbarer Code wurde entdeckt. } else { diff --git a/src/AasxPackageLogic/VisualAasxElements.cs b/src/AasxPackageLogic/VisualAasxElements.cs index dd575d4d..b0c9419b 100644 --- a/src/AasxPackageLogic/VisualAasxElements.cs +++ b/src/AasxPackageLogic/VisualAasxElements.cs @@ -2696,7 +2696,9 @@ public void AddVisualElementsFromShellEnv( else { // inner items directly + #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. GenerateInnerElementsForSubmodelOrRef(cache, env, package, sm, tiSm); + #pragma warning restore CS0162 // Unerreichbarer Code wurde entdeckt. } } diff --git a/src/AasxWpfControlLibrary/AasxPrintFunctions.cs b/src/AasxWpfControlLibrary/AasxPrintFunctions.cs index 3036b814..789e4cc4 100644 --- a/src/AasxWpfControlLibrary/AasxPrintFunctions.cs +++ b/src/AasxWpfControlLibrary/AasxPrintFunctions.cs @@ -132,54 +132,58 @@ public static void PrintCodeSheet(CodeSheetItem[] codeSheetItems, string title = if (g.Children.Count / 2 >= numrow * numcol) break; - Bitmap bmp = null; - if (csi.code.Trim().ToLower() == "dmc") + if (OperatingSystem.IsWindowsVersionAtLeast(6, 1)) { - var barcodeWriter = new BarcodeWriter() - { - Format = BarcodeFormat.DATA_MATRIX, - Renderer = new ZXing.Windows.Compatibility.BitmapRenderer() - }; - //// write text and generate a 2-D barcode as a bitmap - bmp = barcodeWriter.Write(csi.id); - } - else - { - QRCodeGenerator qrGenerator = new QRCodeGenerator(); - QRCodeData qrCodeData = qrGenerator.CreateQrCode(csi.id, QRCodeGenerator.ECCLevel.Q); - QRCode qrCode = new QRCode(qrCodeData); - bmp = qrCode.GetGraphic(20); + Bitmap bmp = null; + if (csi.code.Trim().ToLower() == "dmc") + { + var barcodeWriter = new BarcodeWriter() + { + Format = BarcodeFormat.DATA_MATRIX, + Renderer = new ZXing.Windows.Compatibility.BitmapRenderer() + }; + + //// write text and generate a 2-D barcode as a bitmap + bmp = barcodeWriter.Write(csi.id); + } + else + { + QRCodeGenerator qrGenerator = new QRCodeGenerator(); + QRCodeData qrCodeData = qrGenerator.CreateQrCode(csi.id, QRCodeGenerator.ECCLevel.Q); + QRCode qrCode = new QRCode(qrCodeData); + bmp = qrCode.GetGraphic(20); + } + + var imgsrc = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( + bmp.GetHbitmap(), + IntPtr.Zero, + System.Windows.Int32Rect.Empty, + BitmapSizeOptions.FromWidthAndHeight(bmp.Width, bmp.Height)); + + var img = new System.Windows.Controls.Image(); + img.Source = imgsrc; + img.Height = 200 * csi.normSize; + img.Width = 200 * csi.normSize; + img.VerticalAlignment = VerticalAlignment.Bottom; + img.HorizontalAlignment = HorizontalAlignment.Center; + img.Margin = new Thickness(40, 40, 40, 0); + Grid.SetRow(img, 1 + 2 * row); + Grid.SetColumn(img, col); + g.Children.Add(img); + + var lab = new Label(); + lab.Content = csi.description; + + var labview = new Viewbox(); + labview.Child = lab; + labview.Stretch = Stretch.Uniform; + labview.Width = 200; + labview.Height = 40; + Grid.SetRow(labview, 1 + 2 * row + 1); + Grid.SetColumn(labview, col); + g.Children.Add(labview); } - - var imgsrc = System.Windows.Interop.Imaging.CreateBitmapSourceFromHBitmap( - bmp.GetHbitmap(), - IntPtr.Zero, - System.Windows.Int32Rect.Empty, - BitmapSizeOptions.FromWidthAndHeight(bmp.Width, bmp.Height)); - - var img = new System.Windows.Controls.Image(); - img.Source = imgsrc; - img.Height = 200 * csi.normSize; - img.Width = 200 * csi.normSize; - img.VerticalAlignment = VerticalAlignment.Bottom; - img.HorizontalAlignment = HorizontalAlignment.Center; - img.Margin = new Thickness(40, 40, 40, 0); - Grid.SetRow(img, 1 + 2 * row); - Grid.SetColumn(img, col); - g.Children.Add(img); - - var lab = new Label(); - lab.Content = csi.description; - - var labview = new Viewbox(); - labview.Child = lab; - labview.Stretch = Stretch.Uniform; - labview.Width = 200; - labview.Height = 40; - Grid.SetRow(labview, 1 + 2 * row + 1); - Grid.SetColumn(labview, col); - g.Children.Add(labview); } diff --git a/src/AasxWpfControlLibrary/DiplayVisualAasxElements.xaml.cs b/src/AasxWpfControlLibrary/DiplayVisualAasxElements.xaml.cs index eb84a224..7d8fac81 100644 --- a/src/AasxWpfControlLibrary/DiplayVisualAasxElements.xaml.cs +++ b/src/AasxWpfControlLibrary/DiplayVisualAasxElements.xaml.cs @@ -254,9 +254,6 @@ public void EnableSelectedItemChanged() private void TreeViewInner_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs e) { - if (MultiSelect == 1) - return; - if (sender != treeViewInner || preventSelectedItemChanged) return; @@ -717,6 +714,7 @@ private void TreeViewInner_PreviewMouseDown(object sender, MouseButtonEventArgs return; // If clicking on the + of the tree + #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. if (e.OriginalSource is Shape || e.OriginalSource is Grid || e.OriginalSource is Border) return; @@ -726,6 +724,7 @@ private void TreeViewInner_PreviewMouseDown(object sender, MouseButtonEventArgs { this.SelectedItemChangedHandler(item); } + #pragma warning restore CS0162 // Unerreichbarer Code wurde entdeckt. } // Check done to avoid deselecting everything when clicking to drag @@ -734,6 +733,7 @@ private void TreeViewInner_PreviewMouseUp(object sender, MouseButtonEventArgs e) if (MultiSelect != 1) return; + #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. if (_itemToCheck != null) { TreeViewItem item = this.GetTreeViewItemClicked((FrameworkElement)e.OriginalSource); @@ -757,6 +757,7 @@ private void TreeViewInner_PreviewMouseUp(object sender, MouseButtonEventArgs e) } } } + #pragma warning restore CS0162 // Unerreichbarer Code wurde entdeckt. } // does the real multi select @@ -765,6 +766,7 @@ private void SelectedItemChangedHandler(TreeViewItem item) if (MultiSelect != 1) return; + #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. ITreeViewSelectable content = (ITreeViewSelectable)item.Header; _itemToCheck = null; @@ -801,6 +803,7 @@ private void SelectedItemChangedHandler(TreeViewItem item) this.treeViewInner.UpdateLayout(); } } + #pragma warning restore CS0162 // Unerreichbarer Code wurde entdeckt. } // allow left + right keys diff --git a/src/AasxWpfControlLibrary/DispEditAasxEntity.xaml.cs b/src/AasxWpfControlLibrary/DispEditAasxEntity.xaml.cs index 8a2aecf4..4901ca00 100644 --- a/src/AasxWpfControlLibrary/DispEditAasxEntity.xaml.cs +++ b/src/AasxWpfControlLibrary/DispEditAasxEntity.xaml.cs @@ -47,12 +47,15 @@ private void UserControl_Loaded(object sender, RoutedEventArgs e) { // Timer for below System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer(); - dispatcherTimer.Tick += dispatcherTimer_Tick; + dispatcherTimer.Tick += async (sender, e) => + { + await dispatcherTimer_Tick(sender, e); + }; dispatcherTimer.Interval = new TimeSpan(0, 0, 0, 0, 100); dispatcherTimer.Start(); } - private void dispatcherTimer_Tick(object sender, EventArgs e) + private async Task dispatcherTimer_Tick(object sender, EventArgs e) { // check for wishes from the modify repo @@ -72,7 +75,7 @@ private void dispatcherTimer_Tick(object sender, EventArgs e) { // redraw ourselves? if (_packages != null && _theEntities != null) - DisplayOrEditVisualAasxElement( + await DisplayOrEditVisualAasxElement( _packages, dcwpf, _theEntities, _helper.editMode, _helper.hintMode, flyoutProvider: dcwpf?.FlyoutProvider, appEventProvider: _helper?.appEventsProvider); @@ -296,6 +299,8 @@ public async Task DisplayOrEditVisualAasxElement( // Start // + await Task.Yield(); + // hint mode disable, when not edit hintMode = hintMode && editMode; diff --git a/src/AasxWpfControlLibrary/PackageCentral/PackageContainerListOfListControl.xaml.cs b/src/AasxWpfControlLibrary/PackageCentral/PackageContainerListOfListControl.xaml.cs index c0ce7a27..343937e1 100644 --- a/src/AasxWpfControlLibrary/PackageCentral/PackageContainerListOfListControl.xaml.cs +++ b/src/AasxWpfControlLibrary/PackageCentral/PackageContainerListOfListControl.xaml.cs @@ -666,8 +666,6 @@ private void UserControl_Drop(object sender, DragEventArgs e) private async Task PackageContainerListControl_DataChanged(Control fileCntl, PackageContainerListBase fr) { - Task.Yield(); - await CommandBinding_FileRepoAll(fileCntl, fr, "EventDataChanged"); } } diff --git a/src/BlazorExplorer/Program.cs b/src/BlazorExplorer/Program.cs index 9825c5ea..f333a7d1 100644 --- a/src/BlazorExplorer/Program.cs +++ b/src/BlazorExplorer/Program.cs @@ -220,7 +220,7 @@ public static void loadAasxFiles(BlazorSession bi, bool load = true) public static async Task getAasxAsync(BlazorSession bi, string input) { - + await Task.Yield(); } diff --git a/src/BlazorExplorer/Startup.cs b/src/BlazorExplorer/Startup.cs index 407d3ebb..a7d597a8 100644 --- a/src/BlazorExplorer/Startup.cs +++ b/src/BlazorExplorer/Startup.cs @@ -37,6 +37,7 @@ public Startup(IConfiguration configuration) // This method gets called by the runtime. Use this method to add services to the container. // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940 + [Obsolete] public void ConfigureServices(IServiceCollection services) { // Note: added by MIHO in order to serve controllers diff --git a/src/BlazorExplorer/StylePile.cs b/src/BlazorExplorer/StylePile.cs index 68d06153..7ce340d3 100644 --- a/src/BlazorExplorer/StylePile.cs +++ b/src/BlazorExplorer/StylePile.cs @@ -16,22 +16,7 @@ This source code may use other Open Source software components (see LICENSE.txt) using System.Globalization; using System.IO; using System.Linq; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using System.Windows.Controls; -using AasxPackageLogic; -using AdminShellNS; using AnyUi; -using BlazorUI.Data; -using Microsoft.AspNetCore; -using Microsoft.AspNetCore.Hosting; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using Newtonsoft.Json; // ReSharper disable MergeIntoPattern From 5c1aadd9917932196bfaea7cca882c8bab0194d4 Mon Sep 17 00:00:00 2001 From: Michael Hoffmeister Date: Mon, 17 Nov 2025 14:50:17 +0100 Subject: [PATCH 06/10] * disable CheckTodos! --- src/CheckTodos.ps1 | 24 +++++++++++++----------- src/CheckTodosLocal.ps1 | 26 ++++++++++++++------------ 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/src/CheckTodos.ps1 b/src/CheckTodos.ps1 index 346f219b..cd54c0a9 100644 --- a/src/CheckTodos.ps1 +++ b/src/CheckTodos.ps1 @@ -15,17 +15,19 @@ function Main Set-Location $PSScriptRoot Write-Host "Inspecting the TODOs in the code..." - dotnet opinionated-csharp-todos ` - --inputs '**/*.cs' ` - --excludes 'packages/**' '**/obj/**' 'MsaglWpfControl/**' 'AasxCsharpLib_bkp/**' - if($LASTEXITCODE -ne 0) - { - throw ( - "The opinionated-csharp-todos check failed. " + - "Please have a close look at the output above, " + - "in particular the lines prefixed with `"FAILED`"." - ) - } + Write-Host "DISABLED! There might be a wrong dependency in the NuGet OpinionatedCsharpTodos" + Write-Host "towards the NuGet dotnet format, which is now part of the dotnet SDK." + # dotnet opinionated-csharp-todos ` + # --inputs '**/*.cs' ` + # --excludes 'packages/**' '**/obj/**' 'MsaglWpfControl/**' 'AasxCsharpLib_bkp/**' + # if($LASTEXITCODE -ne 0) + # { + # throw ( + # "The opinionated-csharp-todos check failed. " + + # "Please have a close look at the output above, " + + # "in particular the lines prefixed with `"FAILED`"." + # ) + # } } $previousLocation = Get-Location; try { Main } finally { Set-Location $previousLocation } diff --git a/src/CheckTodosLocal.ps1 b/src/CheckTodosLocal.ps1 index bd908f45..4b19c73d 100644 --- a/src/CheckTodosLocal.ps1 +++ b/src/CheckTodosLocal.ps1 @@ -15,18 +15,20 @@ function Main Set-Location $PSScriptRoot Write-Host "Inspecting the TODOs in the code..." - dotnet opinionated-csharp-todos ` - --inputs '**/*.cs' ` - --excludes 'packages/**' '**/obj/**' 'MsaglWpfControl/**' 'AasxCsharpLib_bkp/**' - Read-Host -Prompt "Press Enter to exit" - if($LASTEXITCODE -ne 0) - { - throw ( - "The opinionated-csharp-todos check failed. " + - "Please have a close look at the output above, " + - "in particular the lines prefixed with `"FAILED`"." - ) - } + Write-Host "DISABLED! There might be a wrong dependency in the NuGet OpinionatedCsharpTodos" + Write-Host "towards the NuGet dotnet format, which is now part of the dotnet SDK." + # dotnet opinionated-csharp-todos ` + # --inputs '**/*.cs' ` + # --excludes 'packages/**' '**/obj/**' 'MsaglWpfControl/**' 'AasxCsharpLib_bkp/**' + # Read-Host -Prompt "Press Enter to exit" + # if($LASTEXITCODE -ne 0) + # { + # throw ( + # "The opinionated-csharp-todos check failed. " + + # "Please have a close look at the output above, " + + # "in particular the lines prefixed with `"FAILED`"." + # ) + # } } $previousLocation = Get-Location; try { Main } finally { Set-Location $previousLocation } From c5299af644fc7c864a7eb193a99f49ec2d6c8828 Mon Sep 17 00:00:00 2001 From: Michael Hoffmeister Date: Tue, 18 Nov 2025 22:09:52 +0100 Subject: [PATCH 07/10] * update --- src/.config/dotnet-tools.json | 6 - src/AasCore.Aas3_0/DiaryData/DiaryDataDef.cs | 4 +- src/AasCore.Aas3_0/types.cs | 3 + src/AasCore.Aas3_0/xmlization.cs | 3 + src/AasxCore.Samm2_2_0/SammClasses.cs | 4 +- .../AasxCompatibilityModels/V20/AdminShell.cs | 6 +- .../AdminShellBasicExtensions.cs | 6 - .../Extensions/ExtendBlob.cs | 2 +- .../Extensions/ExtendEnvironment.cs | 2 +- .../Extensions/ExtendISubmodelElement.cs | 4 +- .../PackageEnv/AdminShellPackageEnvBase.cs | 14 +- .../AdminShellPackageFileBasedEnv.cs | 7 - .../Model/AssetInformation.cs | 15 +- .../Model/Capability.cs | 6 +- src/AasxFileServerRestLibrary/Model/Entity.cs | 15 +- .../Model/Extension.cs | 6 +- src/AasxFileServerRestLibrary/Model/Key.cs | 15 +- .../Model/ModelType.cs | 15 +- .../Model/Permission.cs | 16 +- .../Model/Property.cs | 6 +- .../Model/Qualifier.cs | 6 +- src/AasxFileServerRestLibrary/Model/Range.cs | 25 ++- .../Model/Submodel.cs | 6 +- .../Model/SubmodelElement.cs | 6 +- .../Model/SubmodelElementList.cs | 6 +- .../Model/ValueObject.cs | 6 +- .../AasForms/AasFormUtils.cs | 2 +- .../AnyUI/AnyUiMagickHelper.cs | 29 +--- src/AasxOpcUa2Client/AasOpcUaClient2.cs | 2 - src/AasxOpenidClient/OpenIDCLient.cs | 146 +++++++++++++----- src/AasxOpenidClient/OpenIDClientInstance.cs | 33 ++-- src/AasxPackageExplorer/MainWindow.xaml.cs | 2 +- .../DispEditHelperEntities.cs | 36 ----- .../DispEditHelperExtensions.cs | 10 +- .../DispEditHelperMiniModules.cs | 4 +- src/AasxPackageLogic/DispEditHelperModules.cs | 2 +- .../DispEditHelperSammModules.cs | 7 +- src/AasxPackageLogic/EclassUtils.cs | 4 - .../MainWindowAnyUiDialogs.cs | 2 +- src/AasxPackageLogic/MainWindowHeadless.cs | 8 +- .../PackageCentral/InterfaceArtefacts.cs | 6 - .../PackageCentral/PackageCentral.cs | 24 +-- .../PackageContainerHttpRepoSubset.cs | 88 +++++------ .../PackageContainerListHttpRestRepository.cs | 4 - .../PackageCentral/PackageHttpDownloadUtil.cs | 6 +- .../SecurityAccessHandlerLogicBase.cs | 9 +- src/AasxPackageLogic/VisualAasxElements.cs | 10 +- src/AasxPluginAdvancedTextEditor/Plugin.cs | 41 +++-- .../UserControlAdvancedTextEditor.xaml.cs | 2 + .../AidHttpConnection.cs | 2 +- .../AidInterfaceService.cs | 6 +- .../AidInterfaceStatus.cs | 5 +- .../AidModbusConnection.cs | 4 +- .../AidMqttConnection.cs | 5 +- .../AidOpcUaConnection.cs | 11 +- .../AssetInterfaceAnyUiControl.cs | 10 +- src/AasxPluginAssetInterfaceDesc/Plugin.cs | 2 +- .../GenericBomCreator.cs | 3 - .../AasxPluginContactInformation.csproj | 2 +- .../ContactEntity.cs | 10 +- .../ContactListAnyUiControl.cs | 2 + .../AasxPluginDigitalNameplate.csproj | 2 +- .../NameplateAnyUiControl.cs | 61 +++----- .../AasxPluginDocumentShelf.csproj | 4 +- src/AasxPluginDocumentShelf/DocumentEntity.cs | 12 +- .../ShelfAnyUiControl.cs | 6 +- .../ShelfPreviewService.cs | 18 ++- .../AasxPluginExportTable.csproj | 4 +- src/AasxPluginExportTable/Smt/ExportSmt.cs | 1 - .../Table/ExportTableProcessor.cs | 6 +- .../Table/ImportTableWordProvider.cs | 3 - .../Uml/PlantUmlWriter.cs | 3 + .../AasxPluginGenericForms.csproj | 2 +- .../AasxPluginImageMap.csproj | 4 +- .../ImageMapAnyUiControl.cs | 17 +- .../AasxPluginKnownSubmodels.csproj | 2 +- .../KnownSubmodelAnyUiControl.cs | 5 +- src/AasxPluginPlotting/PlotHelpers.cs | 2 + src/AasxPluginPlotting/PlotItem.cs | 6 + .../PlottingViewControl.xaml.cs | 2 + src/AasxPluginPlotting/Plugin.cs | 40 +++-- .../WpfPlotViewControlCumulative.xaml.cs | 2 + .../WpfPlotViewControlHorizontal.xaml.cs | 2 + .../PcnAnyUiControl.cs | 23 +-- .../TechnicalDataAnyUiControl.cs | 67 +++++--- src/AasxPluginUaNetClient/Plugin.cs | 2 +- src/AasxPluginWebBrowser/Plugin.cs | 8 +- .../BaseTopUtil/DefinitionsPool.cs | 4 +- .../PredefinedConceptsClassMapper.cs | 43 +----- .../MappingsAssetInterfacesDescription.cs | 1 - .../MappingsPcnHelper.cs | 13 +- src/AasxWpfControlLibrary/AnyUiWpf.cs | 2 + .../DispEditAasxEntity.xaml.cs | 2 +- src/BlazorExplorer/AasxMenuBlazor.cs | 4 - src/BlazorExplorer/AnyUI/AnyUiHtml.cs | 2 +- .../Data/BlazorSession.CommandBindings.cs | 2 +- .../Data/BlazorSession.MainWindow.cs | 7 +- src/BlazorExplorer/Data/BlazorSession.cs | 6 +- .../Pages/AnyUiRenderElem.razor | 16 +- .../Pages/AnyUiRenderGrid.razor | 18 +-- .../Pages/AnyUiRenderStackPanel.razor | 8 +- .../Pages/AnyUiRenderWrapPanel.razor | 7 +- src/BlazorExplorer/Pages/Index.razor | 109 +++++++------ src/CheckFormat.ps1 | 4 +- src/CheckTodos.ps1 | 24 ++- src/CheckTodosLocal.ps1 | 26 ++-- src/SSIExtension/Prover.cs | 5 +- src/SSIExtension/Verifier.cs | 2 +- src/WpfMtpControl/MtpVisuOpcUaClient.cs | 2 +- src/WpfMtpControl/MtpVisuOptions.cs | 3 +- src/WpfMtpControl/MtpVisuViewer.xaml.cs | 2 +- src/WpfMtpControl/UiElementHelper.cs | 2 +- src/WpfMtpVisuViewer/MainWindow.xaml.cs | 2 - src/WpfXamlTool/MainWindow.xaml.cs | 2 + 114 files changed, 654 insertions(+), 717 deletions(-) diff --git a/src/.config/dotnet-tools.json b/src/.config/dotnet-tools.json index b1e66618..092fc022 100644 --- a/src/.config/dotnet-tools.json +++ b/src/.config/dotnet-tools.json @@ -2,12 +2,6 @@ "version": 1, "isRoot": true, "tools": { - "dotnet-format": { - "version": "7.0.360101", - "commands": [ - "dotnet-format" - ] - }, "deadcsharp": { "version": "2.0.0", "commands": [ diff --git a/src/AasCore.Aas3_0/DiaryData/DiaryDataDef.cs b/src/AasCore.Aas3_0/DiaryData/DiaryDataDef.cs index 75671ff8..4a0e35a2 100644 --- a/src/AasCore.Aas3_0/DiaryData/DiaryDataDef.cs +++ b/src/AasCore.Aas3_0/DiaryData/DiaryDataDef.cs @@ -23,7 +23,7 @@ public enum TimeStampKind { Create, Update } /// Note: Default is Entries = null, as handling of many many AAS elements does not /// create additional overhead of creating empty lists. An empty list shall be avoided. /// - public List Entries = null; + public List? Entries = null; public static void AddAndSetTimestamps(IReferable element, IAasDiaryEntry de, bool isCreate = false) { @@ -44,7 +44,7 @@ public static void AddAndSetTimestamps(IReferable element, IAasDiaryEntry de, bo } // set this timestamp (and for the parents, as well) - IDiaryData el = element; + IDiaryData? el = element; while (el?.DiaryData != null) { // itself diff --git a/src/AasCore.Aas3_0/types.cs b/src/AasCore.Aas3_0/types.cs index e9d29c71..1c8d4f5a 100644 --- a/src/AasCore.Aas3_0/types.cs +++ b/src/AasCore.Aas3_0/types.cs @@ -9,6 +9,9 @@ using Aas = AasCore.Aas3_0; // renamed using EnumMemberAttribute = System.Runtime.Serialization.EnumMemberAttribute; +// TODO (MIHO, 2025-11-17): Check how to improve. Because of Parent not null disabled globally :-( +#pragma warning disable CS8618 + namespace AasCore.Aas3_0 { /// diff --git a/src/AasCore.Aas3_0/xmlization.cs b/src/AasCore.Aas3_0/xmlization.cs index 7c34fa04..9c9e6f85 100644 --- a/src/AasCore.Aas3_0/xmlization.cs +++ b/src/AasCore.Aas3_0/xmlization.cs @@ -16838,7 +16838,10 @@ out Reporting.Error? error // ?? throw new System.InvalidOperationException( // "Unexpected null, had to be handled before")); + // TODO: Suppress, because of least side effects +#pragma warning disable CS8604 return new EmbeddedDataSpecification(theDataSpecification, theDataSpecificationContent); +#pragma warning restore CS8604 } // internal static Aas.EmbeddedDataSpecification? EmbeddedDataSpecificationFromSequence /// diff --git a/src/AasxCore.Samm2_2_0/SammClasses.cs b/src/AasxCore.Samm2_2_0/SammClasses.cs index 65d20886..083a7c88 100644 --- a/src/AasxCore.Samm2_2_0/SammClasses.cs +++ b/src/AasxCore.Samm2_2_0/SammClasses.cs @@ -216,8 +216,8 @@ public class ModelElement ///// times for different languages but only once for a specific language. There should be at ///// least one description defined with an "en" language tag. ///// - //[SammPropertyUri("bamm:description")] - //public List? Description { get; set; } = null; + ////[SammPropertyUri("bamm:description")] + ////public List? Description { get; set; } = null; /// /// A reference to a related element in an external taxonomy, ontology or other standards document. diff --git a/src/AasxCsharpLibrary/AasxCompatibilityModels/V20/AdminShell.cs b/src/AasxCsharpLibrary/AasxCompatibilityModels/V20/AdminShell.cs index 197116ec..b7ab7062 100644 --- a/src/AasxCsharpLibrary/AasxCompatibilityModels/V20/AdminShell.cs +++ b/src/AasxCsharpLibrary/AasxCompatibilityModels/V20/AdminShell.cs @@ -2418,9 +2418,9 @@ public byte[] ComputeByteArray() bs = BitConverter.GetBytes((float)o); else if (o is char) bs = BitConverter.GetBytes((char)o); - //TODO (jtikekar, 2025-02-25): due to dotnet 8 - //else if (o is byte) - // bs = BitConverter.GetBytes((byte)o); + ////TODO (jtikekar, 2025-02-25): due to dotnet 8 + ////else if (o is byte) + //// bs = BitConverter.GetBytes((byte)o); else if (o is int) bs = BitConverter.GetBytes((int)o); else if (o is long) diff --git a/src/AasxCsharpLibrary/AdminShellBasicExtensions.cs b/src/AasxCsharpLibrary/AdminShellBasicExtensions.cs index 0ca1e993..f430e530 100644 --- a/src/AasxCsharpLibrary/AdminShellBasicExtensions.cs +++ b/src/AasxCsharpLibrary/AdminShellBasicExtensions.cs @@ -82,12 +82,6 @@ public static IEnumerable Add(this IEnumerable seq, IEnumerable othe yield return s; } - //public static IEnumerable Times(T value, int num = 1) where T : class - //{ - // for(int i = 0; i < num; i++) - // yield return value; - //} - public static string SubstringMax(this string str, int pos, int len) { if (!str.HasContent() || str.Length <= pos) diff --git a/src/AasxCsharpLibrary/Extensions/ExtendBlob.cs b/src/AasxCsharpLibrary/Extensions/ExtendBlob.cs index 0beb6c8d..c53ea198 100644 --- a/src/AasxCsharpLibrary/Extensions/ExtendBlob.cs +++ b/src/AasxCsharpLibrary/Extensions/ExtendBlob.cs @@ -13,7 +13,7 @@ namespace Extensions public static class ExtendBlob { public static void Set(this Blob blob, - string contentType = "", byte[]? value = null) + string contentType = "", byte[] value = null) { blob.ContentType = contentType; blob.Value = value; diff --git a/src/AasxCsharpLibrary/Extensions/ExtendEnvironment.cs b/src/AasxCsharpLibrary/Extensions/ExtendEnvironment.cs index f2c51227..c7be7232 100644 --- a/src/AasxCsharpLibrary/Extensions/ExtendEnvironment.cs +++ b/src/AasxCsharpLibrary/Extensions/ExtendEnvironment.cs @@ -1003,7 +1003,7 @@ public static IEnumerable FindAllReferences(this AasCore.Aas3_ yield return new LocatedReference(cd, r); } - // TODO: Integrate into above function + // TODO (Jui, 2024-01-01): Integrate into above function public static IEnumerable FindAllSubmodelReferences( this AasCore.Aas3_0.IEnvironment environment, bool onlyNotExisting = false) diff --git a/src/AasxCsharpLibrary/Extensions/ExtendISubmodelElement.cs b/src/AasxCsharpLibrary/Extensions/ExtendISubmodelElement.cs index 0e3b2980..02c704a6 100644 --- a/src/AasxCsharpLibrary/Extensions/ExtendISubmodelElement.cs +++ b/src/AasxCsharpLibrary/Extensions/ExtendISubmodelElement.cs @@ -1596,7 +1596,7 @@ public static ISubmodelElement UpdateFrom(this ISubmodelElement elem, ISubmodelE /// /// If is not a valid literal, return null. /// - public static string? ToString(AasSubmodelElements? that) + public static string ToString(AasSubmodelElements? that) { if (!that.HasValue) { @@ -1604,7 +1604,7 @@ public static ISubmodelElement UpdateFrom(this ISubmodelElement elem, ISubmodelE } else { - if (AasSubmodelElementsToAbbrev.TryGetValue(that.Value, out string? value)) + if (AasSubmodelElementsToAbbrev.TryGetValue(that.Value, out string value)) { return value; } diff --git a/src/AasxCsharpLibrary/PackageEnv/AdminShellPackageEnvBase.cs b/src/AasxCsharpLibrary/PackageEnv/AdminShellPackageEnvBase.cs index e3c3b2ef..1bdbadff 100644 --- a/src/AasxCsharpLibrary/PackageEnv/AdminShellPackageEnvBase.cs +++ b/src/AasxCsharpLibrary/PackageEnv/AdminShellPackageEnvBase.cs @@ -205,16 +205,10 @@ public static AasCore.Aas3_0.Environment DeserializeXmlFromStreamWithCompat(Stre public static T DeserializeFromJSON(string data) where T : IReferable { - //using (var tr = new StringReader(data)) - //{ - //var serializer = BuildDefaultAasxJsonSerializer(); - //var rf = (T)serializer.Deserialize(tr, typeof(T)); - var node = System.Text.Json.Nodes.JsonNode.Parse(data); var rf = Jsonization.Deserialize.IReferableFrom(node); return (T)rf; - //} } /// @@ -268,12 +262,12 @@ public void SetEnvironment(IEnvironment environment) _aasEnv = environment; } - // TODO: remove, is not for base class!! + // TODO (MIHO, 2024-01-01): remove, is not for base class!! public virtual void SetFilename(string fileName) { } - // TODO: remove, is not for base class!! + // TODO (MIHO, 2024-01-01): remove, is not for base class!! public virtual string Filename { get @@ -368,7 +362,7 @@ public virtual HttpRequestMessage CreateHttpRequest( // seems to be required by Phoenix request.Headers.Add("User-Agent", "aasx-package-explorer/1.0.0"); - // would be good to always have an accept header, if in doubt: "*/*" + // would be good to always have an accept header, if in doubt: * / * if (acceptHeader?.HasContent() == true) request.Headers.Add("Accept", acceptHeader); @@ -427,7 +421,7 @@ public virtual byte[] GetBytesFromPackageOrExternal( } // MIHO, 2025-07-21: old, working code: - // var response = client.GetAsync(uriString).GetAwaiter().GetResult(); + //// var response = client.GetAsync(uriString).GetAwaiter().GetResult(); // re-direct? if (response.StatusCode == HttpStatusCode.Moved diff --git a/src/AasxCsharpLibrary/PackageEnv/AdminShellPackageFileBasedEnv.cs b/src/AasxCsharpLibrary/PackageEnv/AdminShellPackageFileBasedEnv.cs index eff86b47..5f25cf5b 100644 --- a/src/AasxCsharpLibrary/PackageEnv/AdminShellPackageFileBasedEnv.cs +++ b/src/AasxCsharpLibrary/PackageEnv/AdminShellPackageFileBasedEnv.cs @@ -207,7 +207,6 @@ private static (AasCore.Aas3_0.Environment, Package) LoadPackageAasx(string fn, foreach (var x in FindAllRelationships(package, relTypesOrigin)) if (x.Rel.SourceUri.ToString() == "/") { - //originPart = package.GetPart(x.TargetUri); var absoluteURI = PackUriHelper.ResolvePartUri(x.Rel.SourceUri, x.Rel.TargetUri); if (package.PartExists(absoluteURI)) { @@ -224,7 +223,6 @@ private static (AasCore.Aas3_0.Environment, Package) LoadPackageAasx(string fn, PackagePart specPart = null; foreach (var x in FindAllRelationships(originPart, relTypesSpec)) { - //specPart = package.GetPart(x.TargetUri); var absoluteURI = PackUriHelper.ResolvePartUri(x.Rel.SourceUri, x.Rel.TargetUri); if (package.PartExists(absoluteURI)) { @@ -831,7 +829,6 @@ public override bool SaveAs(string fn, bool writeFreshly = false, SerializationF foreach (var x in FindAllRelationships(specPart, relTypesSuppl)) if (x.Rel.TargetUri == psfAdd.Uri) { - //filePart = package.GetPart(x.TargetUri); var absoluteURI = PackUriHelper.ResolvePartUri(x.Rel.SourceUri, x.Rel.TargetUri); if (package.PartExists(absoluteURI)) { @@ -853,7 +850,6 @@ public override bool SaveAs(string fn, bool writeFreshly = false, SerializationF foreach (var x in FindAllRelationships(package, relTypesThumb)) if (x.Rel.SourceUri.ToString() == "/" && x.Rel.TargetUri == psfAdd.Uri) { - //filePart = package.GetPart(x.TargetUri); var absoluteURI = PackUriHelper.ResolvePartUri(x.Rel.SourceUri, x.Rel.TargetUri); if (package.PartExists(absoluteURI)) { @@ -1264,7 +1260,6 @@ public override byte[] GetLocalThumbnailBytes(ref Uri thumbUri) foreach (var x in FindAllRelationships(_openPackage, relTypesThumb)) if (x.Rel.SourceUri.ToString() == "/") { - //thumbPart = _openPackage.GetPart(x.TargetUri); var absoluteURI = PackUriHelper.ResolvePartUri(x.Rel.SourceUri, x.Rel.TargetUri); if (_openPackage.PartExists(absoluteURI)) { @@ -1308,7 +1303,6 @@ public override ListOfAasSupplementaryFile GetListOfSupplementaryFiles() foreach (var x in FindAllRelationships(_openPackage, relTypesOrigin)) if (x.Rel.SourceUri.ToString() == "/") { - //originPart = _openPackage.GetPart(x.TargetUri); var absoluteURI = PackUriHelper.ResolvePartUri(x.Rel.SourceUri, x.Rel.TargetUri); if (_openPackage.PartExists(absoluteURI)) { @@ -1323,7 +1317,6 @@ public override ListOfAasSupplementaryFile GetListOfSupplementaryFiles() PackagePart specPart = null; foreach (var x in FindAllRelationships(originPart, relTypesSpec)) { - //specPart = _openPackage.GetPart(x.TargetUri); var absoluteURI = PackUriHelper.ResolvePartUri(x.Rel.SourceUri, x.Rel.TargetUri); if (_openPackage.PartExists(absoluteURI)) { diff --git a/src/AasxFileServerRestLibrary/Model/AssetInformation.cs b/src/AasxFileServerRestLibrary/Model/AssetInformation.cs index 98adc4ae..d290097f 100644 --- a/src/AasxFileServerRestLibrary/Model/AssetInformation.cs +++ b/src/AasxFileServerRestLibrary/Model/AssetInformation.cs @@ -40,14 +40,7 @@ public partial class AssetInformation : IEquatable, IValidatab public AssetInformation(AssetKind assetKind = default(AssetKind), List billOfMaterial = default(List), Reference globalAssetId = default(Reference), List specificAssetIds = default(List), System.IO.Stream thumbnail = default(System.IO.Stream)) { // to ensure "assetKind" is required (not null) - if (assetKind == null) - { - throw new InvalidDataException("assetKind is a required property for AssetInformation and cannot be null"); - } - else - { - this.AssetKind = assetKind; - } + this.AssetKind = assetKind; this.BillOfMaterial = billOfMaterial; this.GlobalAssetId = globalAssetId; this.SpecificAssetIds = specificAssetIds; @@ -133,8 +126,7 @@ public bool Equals(AssetInformation input) return ( this.AssetKind == input.AssetKind || - (this.AssetKind != null && - this.AssetKind.Equals(input.AssetKind)) + this.AssetKind.Equals(input.AssetKind) ) && ( this.BillOfMaterial == input.BillOfMaterial || @@ -169,8 +161,7 @@ public override int GetHashCode() unchecked // Overflow is fine, just wrap { int hashCode = 41; - if (this.AssetKind != null) - hashCode = hashCode * 59 + this.AssetKind.GetHashCode(); + hashCode = hashCode * 59 + this.AssetKind.GetHashCode(); if (this.BillOfMaterial != null) hashCode = hashCode * 59 + this.BillOfMaterial.GetHashCode(); if (this.GlobalAssetId != null) diff --git a/src/AasxFileServerRestLibrary/Model/Capability.cs b/src/AasxFileServerRestLibrary/Model/Capability.cs index 84ac9118..99e6ef00 100644 --- a/src/AasxFileServerRestLibrary/Model/Capability.cs +++ b/src/AasxFileServerRestLibrary/Model/Capability.cs @@ -134,8 +134,7 @@ public bool Equals(Capability input) ) && base.Equals(input) && ( this.Kind == input.Kind || - (this.Kind != null && - this.Kind.Equals(input.Kind)) + this.Kind.Equals(input.Kind) ); } @@ -154,8 +153,7 @@ public override int GetHashCode() hashCode = hashCode * 59 + this.SemanticId.GetHashCode(); if (this.Qualifiers != null) hashCode = hashCode * 59 + this.Qualifiers.GetHashCode(); - if (this.Kind != null) - hashCode = hashCode * 59 + this.Kind.GetHashCode(); + hashCode = hashCode * 59 + this.Kind.GetHashCode(); return hashCode; } } diff --git a/src/AasxFileServerRestLibrary/Model/Entity.cs b/src/AasxFileServerRestLibrary/Model/Entity.cs index 249c8394..6fd068bb 100644 --- a/src/AasxFileServerRestLibrary/Model/Entity.cs +++ b/src/AasxFileServerRestLibrary/Model/Entity.cs @@ -39,14 +39,7 @@ public partial class Entity : SubmodelElement, IEquatable, IValidatableO public Entity(EntityType entityType = default(EntityType), Reference globalAssetId = default(Reference), List specificAssetIds = default(List), List statements = default(List), List embeddedDataSpecifications = default(List), Reference semanticId = default(Reference), List qualifiers = default(List), ModelingKind kind = default(ModelingKind)) : base(embeddedDataSpecifications, semanticId, qualifiers, kind) { // to ensure "entityType" is required (not null) - if (entityType == null) - { - throw new InvalidDataException("entityType is a required property for Entity and cannot be null"); - } - else - { - this.EntityType = entityType; - } + this.EntityType = entityType; this.GlobalAssetId = globalAssetId; this.SpecificAssetIds = specificAssetIds; this.Statements = statements; @@ -125,8 +118,7 @@ public bool Equals(Entity input) return base.Equals(input) && ( this.EntityType == input.EntityType || - (this.EntityType != null && - this.EntityType.Equals(input.EntityType)) + this.EntityType.Equals(input.EntityType) ) && base.Equals(input) && ( this.GlobalAssetId == input.GlobalAssetId || @@ -156,8 +148,7 @@ public override int GetHashCode() unchecked // Overflow is fine, just wrap { int hashCode = base.GetHashCode(); - if (this.EntityType != null) - hashCode = hashCode * 59 + this.EntityType.GetHashCode(); + hashCode = hashCode * 59 + this.EntityType.GetHashCode(); if (this.GlobalAssetId != null) hashCode = hashCode * 59 + this.GlobalAssetId.GetHashCode(); if (this.SpecificAssetIds != null) diff --git a/src/AasxFileServerRestLibrary/Model/Extension.cs b/src/AasxFileServerRestLibrary/Model/Extension.cs index acc42bec..5a271326 100644 --- a/src/AasxFileServerRestLibrary/Model/Extension.cs +++ b/src/AasxFileServerRestLibrary/Model/Extension.cs @@ -140,8 +140,7 @@ public bool Equals(Extension input) ) && base.Equals(input) && ( this.ValueType == input.ValueType || - (this.ValueType != null && - this.ValueType.Equals(input.ValueType)) + this.ValueType.Equals(input.ValueType) ); } @@ -160,8 +159,7 @@ public override int GetHashCode() hashCode = hashCode * 59 + this.RefersTo.GetHashCode(); if (this.Value != null) hashCode = hashCode * 59 + this.Value.GetHashCode(); - if (this.ValueType != null) - hashCode = hashCode * 59 + this.ValueType.GetHashCode(); + hashCode = hashCode * 59 + this.ValueType.GetHashCode(); return hashCode; } } diff --git a/src/AasxFileServerRestLibrary/Model/Key.cs b/src/AasxFileServerRestLibrary/Model/Key.cs index 675e32c8..fe58aa72 100644 --- a/src/AasxFileServerRestLibrary/Model/Key.cs +++ b/src/AasxFileServerRestLibrary/Model/Key.cs @@ -37,14 +37,7 @@ public partial class Key : IEquatable, IValidatableObject public Key(KeyElements type = default(KeyElements), string value = default(string)) { // to ensure "type" is required (not null) - if (type == null) - { - throw new InvalidDataException("type is a required property for Key and cannot be null"); - } - else - { - this.Type = type; - } + this.Type = type; // to ensure "value" is required (not null) if (value == null) { @@ -114,8 +107,7 @@ public bool Equals(Key input) return ( this.Type == input.Type || - (this.Type != null && - this.Type.Equals(input.Type)) + this.Type.Equals(input.Type) ) && ( this.Value == input.Value || @@ -133,8 +125,7 @@ public override int GetHashCode() unchecked // Overflow is fine, just wrap { int hashCode = 41; - if (this.Type != null) - hashCode = hashCode * 59 + this.Type.GetHashCode(); + hashCode = hashCode * 59 + this.Type.GetHashCode(); if (this.Value != null) hashCode = hashCode * 59 + this.Value.GetHashCode(); return hashCode; diff --git a/src/AasxFileServerRestLibrary/Model/ModelType.cs b/src/AasxFileServerRestLibrary/Model/ModelType.cs index 78db6239..a53188e6 100644 --- a/src/AasxFileServerRestLibrary/Model/ModelType.cs +++ b/src/AasxFileServerRestLibrary/Model/ModelType.cs @@ -36,14 +36,7 @@ public partial class ModelType : IEquatable, IValidatableObject public ModelType(ModelTypes name = default(ModelTypes)) { // to ensure "name" is required (not null) - if (name == null) - { - throw new InvalidDataException("name is a required property for ModelType and cannot be null"); - } - else - { - this.Name = name; - } + this.Name = name; } /// @@ -97,8 +90,7 @@ public bool Equals(ModelType input) return ( this.Name == input.Name || - (this.Name != null && - this.Name.Equals(input.Name)) + this.Name.Equals(input.Name) ); } @@ -111,8 +103,7 @@ public override int GetHashCode() unchecked // Overflow is fine, just wrap { int hashCode = 41; - if (this.Name != null) - hashCode = hashCode * 59 + this.Name.GetHashCode(); + hashCode = hashCode * 59 + this.Name.GetHashCode(); return hashCode; } } diff --git a/src/AasxFileServerRestLibrary/Model/Permission.cs b/src/AasxFileServerRestLibrary/Model/Permission.cs index a893b93b..8e95ac1e 100644 --- a/src/AasxFileServerRestLibrary/Model/Permission.cs +++ b/src/AasxFileServerRestLibrary/Model/Permission.cs @@ -69,14 +69,8 @@ public enum KindOfPermissionEnum public Permission(KindOfPermissionEnum kindOfPermission = default(KindOfPermissionEnum), Reference permission = default(Reference)) { // to ensure "kindOfPermission" is required (not null) - if (kindOfPermission == null) - { - throw new InvalidDataException("kindOfPermission is a required property for Permission and cannot be null"); - } - else - { - this.KindOfPermission = kindOfPermission; - } + KindOfPermission = kindOfPermission; + // to ensure "permission" is required (not null) if (permission == null) { @@ -141,8 +135,7 @@ public bool Equals(Permission input) return ( this.KindOfPermission == input.KindOfPermission || - (this.KindOfPermission != null && - this.KindOfPermission.Equals(input.KindOfPermission)) + this.KindOfPermission.Equals(input.KindOfPermission) ) && ( this._Permission == input._Permission || @@ -160,8 +153,7 @@ public override int GetHashCode() unchecked // Overflow is fine, just wrap { int hashCode = 41; - if (this.KindOfPermission != null) - hashCode = hashCode * 59 + this.KindOfPermission.GetHashCode(); + hashCode = hashCode * 59 + this.KindOfPermission.GetHashCode(); if (this._Permission != null) hashCode = hashCode * 59 + this._Permission.GetHashCode(); return hashCode; diff --git a/src/AasxFileServerRestLibrary/Model/Property.cs b/src/AasxFileServerRestLibrary/Model/Property.cs index 1c915aa2..76801e5a 100644 --- a/src/AasxFileServerRestLibrary/Model/Property.cs +++ b/src/AasxFileServerRestLibrary/Model/Property.cs @@ -118,8 +118,7 @@ public bool Equals(Property input) ) && base.Equals(input) && ( this.ValueType == input.ValueType || - (this.ValueType != null && - this.ValueType.Equals(input.ValueType)) + this.ValueType.Equals(input.ValueType) ); } @@ -136,8 +135,7 @@ public override int GetHashCode() hashCode = hashCode * 59 + this.Value.GetHashCode(); if (this.ValueId != null) hashCode = hashCode * 59 + this.ValueId.GetHashCode(); - if (this.ValueType != null) - hashCode = hashCode * 59 + this.ValueType.GetHashCode(); + hashCode = hashCode * 59 + this.ValueType.GetHashCode(); return hashCode; } } diff --git a/src/AasxFileServerRestLibrary/Model/Qualifier.cs b/src/AasxFileServerRestLibrary/Model/Qualifier.cs index 91ba4d2d..558884bf 100644 --- a/src/AasxFileServerRestLibrary/Model/Qualifier.cs +++ b/src/AasxFileServerRestLibrary/Model/Qualifier.cs @@ -135,8 +135,7 @@ public bool Equals(Qualifier input) ) && base.Equals(input) && ( this.ValueType == input.ValueType || - (this.ValueType != null && - this.ValueType.Equals(input.ValueType)) + this.ValueType.Equals(input.ValueType) ) && base.Equals(input) && ( this.Type == input.Type || @@ -158,8 +157,7 @@ public override int GetHashCode() hashCode = hashCode * 59 + this.Value.GetHashCode(); if (this.ValueId != null) hashCode = hashCode * 59 + this.ValueId.GetHashCode(); - if (this.ValueType != null) - hashCode = hashCode * 59 + this.ValueType.GetHashCode(); + hashCode = hashCode * 59 + this.ValueType.GetHashCode(); if (this.Type != null) hashCode = hashCode * 59 + this.Type.GetHashCode(); return hashCode; diff --git a/src/AasxFileServerRestLibrary/Model/Range.cs b/src/AasxFileServerRestLibrary/Model/Range.cs index a8019317..1b7f85c6 100644 --- a/src/AasxFileServerRestLibrary/Model/Range.cs +++ b/src/AasxFileServerRestLibrary/Model/Range.cs @@ -35,17 +35,18 @@ public partial class Range : SubmodelElement, IEquatable, IValidatableObj /// max. /// min. /// valueType (required). - public Range(string max = default(string), string min = default(string), ValueTypeEnum valueType = default(ValueTypeEnum), List embeddedDataSpecifications = default(List), Reference semanticId = default(Reference), List qualifiers = default(List), ModelingKind kind = default(ModelingKind)) : base(embeddedDataSpecifications, semanticId, qualifiers, kind) + public Range( + string max = default(string), + string min = default(string), + ValueTypeEnum valueType = default(ValueTypeEnum), + List embeddedDataSpecifications = default(List), + Reference semanticId = default(Reference), + List qualifiers = default(List), + ModelingKind kind = default(ModelingKind)) + : base(embeddedDataSpecifications, semanticId, qualifiers, kind) { // to ensure "valueType" is required (not null) - if (valueType == null) - { - throw new InvalidDataException("valueType is a required property for Range and cannot be null"); - } - else - { - this.ValueType = valueType; - } + this.ValueType = valueType; this.Max = max; this.Min = min; } @@ -126,8 +127,7 @@ public bool Equals(Range input) ) && base.Equals(input) && ( this.ValueType == input.ValueType || - (this.ValueType != null && - this.ValueType.Equals(input.ValueType)) + this.ValueType.Equals(input.ValueType) ); } @@ -144,8 +144,7 @@ public override int GetHashCode() hashCode = hashCode * 59 + this.Max.GetHashCode(); if (this.Min != null) hashCode = hashCode * 59 + this.Min.GetHashCode(); - if (this.ValueType != null) - hashCode = hashCode * 59 + this.ValueType.GetHashCode(); + hashCode = hashCode * 59 + this.ValueType.GetHashCode(); return hashCode; } } diff --git a/src/AasxFileServerRestLibrary/Model/Submodel.cs b/src/AasxFileServerRestLibrary/Model/Submodel.cs index debd7bed..b8c90177 100644 --- a/src/AasxFileServerRestLibrary/Model/Submodel.cs +++ b/src/AasxFileServerRestLibrary/Model/Submodel.cs @@ -143,8 +143,7 @@ public bool Equals(Submodel input) ) && base.Equals(input) && ( this.Kind == input.Kind || - (this.Kind != null && - this.Kind.Equals(input.Kind)) + this.Kind.Equals(input.Kind) ) && base.Equals(input) && ( this.SubmodelElements == input.SubmodelElements || @@ -169,8 +168,7 @@ public override int GetHashCode() hashCode = hashCode * 59 + this.Qualifiers.GetHashCode(); if (this.SemanticId != null) hashCode = hashCode * 59 + this.SemanticId.GetHashCode(); - if (this.Kind != null) - hashCode = hashCode * 59 + this.Kind.GetHashCode(); + hashCode = hashCode * 59 + this.Kind.GetHashCode(); if (this.SubmodelElements != null) hashCode = hashCode * 59 + this.SubmodelElements.GetHashCode(); return hashCode; diff --git a/src/AasxFileServerRestLibrary/Model/SubmodelElement.cs b/src/AasxFileServerRestLibrary/Model/SubmodelElement.cs index 2d898e19..d2b922c2 100644 --- a/src/AasxFileServerRestLibrary/Model/SubmodelElement.cs +++ b/src/AasxFileServerRestLibrary/Model/SubmodelElement.cs @@ -134,8 +134,7 @@ public bool Equals(SubmodelElement input) ) && base.Equals(input) && ( this.Kind == input.Kind || - (this.Kind != null && - this.Kind.Equals(input.Kind)) + this.Kind.Equals(input.Kind) ); } @@ -154,8 +153,7 @@ public override int GetHashCode() hashCode = hashCode * 59 + this.SemanticId.GetHashCode(); if (this.Qualifiers != null) hashCode = hashCode * 59 + this.Qualifiers.GetHashCode(); - if (this.Kind != null) - hashCode = hashCode * 59 + this.Kind.GetHashCode(); + hashCode = hashCode * 59 + this.Kind.GetHashCode(); return hashCode; } } diff --git a/src/AasxFileServerRestLibrary/Model/SubmodelElementList.cs b/src/AasxFileServerRestLibrary/Model/SubmodelElementList.cs index f49ff61e..314dceb1 100644 --- a/src/AasxFileServerRestLibrary/Model/SubmodelElementList.cs +++ b/src/AasxFileServerRestLibrary/Model/SubmodelElementList.cs @@ -133,8 +133,7 @@ public bool Equals(SubmodelElementList input) ) && base.Equals(input) && ( this.ValueTypeValues == input.ValueTypeValues || - (this.ValueTypeValues != null && - this.ValueTypeValues.Equals(input.ValueTypeValues)) + this.ValueTypeValues.Equals(input.ValueTypeValues) ); } @@ -153,8 +152,7 @@ public override int GetHashCode() hashCode = hashCode * 59 + this.SubmodelElementTypeValues.GetHashCode(); if (this.Value != null) hashCode = hashCode * 59 + this.Value.GetHashCode(); - if (this.ValueTypeValues != null) - hashCode = hashCode * 59 + this.ValueTypeValues.GetHashCode(); + hashCode = hashCode * 59 + this.ValueTypeValues.GetHashCode(); return hashCode; } } diff --git a/src/AasxFileServerRestLibrary/Model/ValueObject.cs b/src/AasxFileServerRestLibrary/Model/ValueObject.cs index 583e3df6..d01e379e 100644 --- a/src/AasxFileServerRestLibrary/Model/ValueObject.cs +++ b/src/AasxFileServerRestLibrary/Model/ValueObject.cs @@ -117,8 +117,7 @@ public bool Equals(ValueObject input) ) && ( this.ValueType == input.ValueType || - (this.ValueType != null && - this.ValueType.Equals(input.ValueType)) + this.ValueType.Equals(input.ValueType) ); } @@ -135,8 +134,7 @@ public override int GetHashCode() hashCode = hashCode * 59 + this.Value.GetHashCode(); if (this.ValueId != null) hashCode = hashCode * 59 + this.ValueId.GetHashCode(); - if (this.ValueType != null) - hashCode = hashCode * 59 + this.ValueType.GetHashCode(); + hashCode = hashCode * 59 + this.ValueType.GetHashCode(); return hashCode; } } diff --git a/src/AasxIntegrationBase/AasForms/AasFormUtils.cs b/src/AasxIntegrationBase/AasForms/AasFormUtils.cs index 873b8d69..0ebf5e21 100644 --- a/src/AasxIntegrationBase/AasForms/AasFormUtils.cs +++ b/src/AasxIntegrationBase/AasForms/AasFormUtils.cs @@ -135,7 +135,7 @@ private static void RecurseExportAsTemplate( if (q != null) tsme.FormEditDescription = q.Value.Trim().ToLower() == "true"; - // TODO (MIHO, 24-01-01): reorganize access to qualifiers + // TODO (MIHO, 2024-01-01): reorganize access to qualifiers #if __old__ var multiTrigger = new[] { "Multiplicity", "Cardinality", "SMT/Cardinality" }; diff --git a/src/AasxIntegrationBaseGdi/AnyUI/AnyUiMagickHelper.cs b/src/AasxIntegrationBaseGdi/AnyUI/AnyUiMagickHelper.cs index 150220c5..29fb33b9 100644 --- a/src/AasxIntegrationBaseGdi/AnyUI/AnyUiMagickHelper.cs +++ b/src/AasxIntegrationBaseGdi/AnyUI/AnyUiMagickHelper.cs @@ -29,6 +29,7 @@ This source code may use other Open Source software components (see LICENSE.txt) using System.Linq; using System.IO.Packaging; using AasxIntegrationBase; +using System.Runtime.Versioning; namespace AasxIntegrationBaseGdi { @@ -37,6 +38,7 @@ namespace AasxIntegrationBaseGdi /// Only one #define shall be given. /// This class understands the term GDI to be "graphics dependent inteface" ;-) /// + [SupportedOSPlatform("windows")] public static class AnyUiGdiHelper { public static AnyUiBitmapInfo CreateAnyUiBitmapInfo(MagickImage source, bool doFreeze = true) @@ -160,32 +162,7 @@ public static AnyUiBitmapInfo LoadBitmapInfoFromPackage( } return null; - } - - // DEPRECATED - //public static AnyUiBitmapInfo LoadBitmapInfoFromStream(Stream stream) - //{ - // if (stream == null) - // return null; - - // try - // { - // // load image - // var bi = new MagickImage(stream); - // var binfo = CreateAnyUiBitmapInfo(bi); - - // // give this back - // return binfo; - // } - // catch (Exception ex) - // { - // AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex); - // } - - // return null; - //} - - // TODO (MIHO, 2023-02-23): make the whole thing async!! + } public static async Task MakePreviewFromPackageOrUrlAsync( AdminShellPackageEnvBase package, string path, diff --git a/src/AasxOpcUa2Client/AasOpcUaClient2.cs b/src/AasxOpcUa2Client/AasOpcUaClient2.cs index 00d85657..c03f129e 100644 --- a/src/AasxOpcUa2Client/AasOpcUaClient2.cs +++ b/src/AasxOpcUa2Client/AasOpcUaClient2.cs @@ -134,8 +134,6 @@ public NodeId CreateNodeId(string nodeName, int index) return new NodeId(nodeName, (ushort)index); } - private Dictionary nsDict = null; - public NodeId CreateNodeId(string nodeName, string ns) { // access diff --git a/src/AasxOpenidClient/OpenIDCLient.cs b/src/AasxOpenidClient/OpenIDCLient.cs index 94e24bea..7acdc006 100644 --- a/src/AasxOpenidClient/OpenIDCLient.cs +++ b/src/AasxOpenidClient/OpenIDCLient.cs @@ -10,6 +10,7 @@ using System.IO; using System.Net; using System.Net.Http; +using System.Runtime.Versioning; using System.Security.Claims; using System.Security.Cryptography.X509Certificates; using System.Text; @@ -42,13 +43,22 @@ public delegate DialogResult ShowMessageDelegate( string content, string text, string caption, MessageBoxButtons buttons = 0); public ShowMessageDelegate MesssageBox; + [SupportedOSPlatform("windows")] public static DialogResult MesssageBoxShow( UiLambdaSet lambdaSet, string content, string text, string caption, MessageBoxButtons buttons = 0) { if (lambdaSet?.MesssageBox != null) return lambdaSet.MesssageBox(content, text, caption, buttons); - return System.Windows.Forms.MessageBox.Show(content + text, caption, buttons); + + if (OperatingSystem.IsWindowsVersionAtLeast(6, 1, 0)) + { + return System.Windows.Forms.MessageBox.Show(content + text, caption, buttons); + } + else + { + return DialogResult.OK; + } } } @@ -111,17 +121,22 @@ public static async Task Run(string tag, string value, UiLambdaSet uiLambda = nu "outputDir: " + outputDir + "\n" + "\nConinue?"; - // Displays the MessageBox. - var result = UiLambdaSet.MesssageBoxShow( - uiLambda, message, "", caption, MessageBoxButtons.YesNo); - if (result != System.Windows.Forms.DialogResult.Yes) + // Displays the MessageBox + if (OperatingSystem.IsWindows()) { - // Closes the parent form. - return; - } + #pragma warning disable CA1416 // Plattformkompatibilität überprüfen + var result = UiLambdaSet.MesssageBoxShow( + uiLambda, message, "", caption, MessageBoxButtons.YesNo); + if (result != System.Windows.Forms.DialogResult.Yes) + { + // Closes the parent form. + return; + } - UiLambdaSet.MesssageBoxShow(uiLambda, "", "Access Aasx Server at " + dataServer, - "Data Server", MessageBoxButtons.OK); + UiLambdaSet.MesssageBoxShow(uiLambda, "", "Access Aasx Server at " + dataServer, + "Data Server", MessageBoxButtons.OK); + #pragma warning restore CA1416 // Plattformkompatibilität überprüfen + } var handler = new HttpClientHandler(); handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials; @@ -147,8 +162,13 @@ public static async Task Run(string tag, string value, UiLambdaSet uiLambda = nu while (operation != "") { - UiLambdaSet.MesssageBoxShow(uiLambda, "", "operation: " + operation + value + "\ntoken: " + token, - "Operation", MessageBoxButtons.OK); + if (OperatingSystem.IsWindows()) + { + #pragma warning disable CA1416 // Plattformkompatibilität überprüfen + UiLambdaSet.MesssageBoxShow(uiLambda, "", "operation: " + operation + value + "\ntoken: " + token, + "Operation", MessageBoxButtons.OK); + #pragma warning restore CA1416 // Plattformkompatibilität überprüfen + } switch (operation) { @@ -174,8 +194,14 @@ public static async Task Run(string tag, string value, UiLambdaSet uiLambda = nu StringSplitOptions.RemoveEmptyEntries); Console.WriteLine("Redirect to:" + splitResult[0]); authServer = splitResult[0]; - UiLambdaSet.MesssageBoxShow( - uiLambda, authServer, "", "Redirect to", MessageBoxButtons.OK); + + if (OperatingSystem.IsWindows()) + { + #pragma warning disable CA1416 // Plattformkompatibilität überprüfen + UiLambdaSet.MesssageBoxShow( + uiLambda, authServer, "", "Redirect to", MessageBoxButtons.OK); + #pragma warning restore CA1416 // Plattformkompatibilität überprüfen + } lastOperation = operation; operation = "authenticate"; continue; @@ -190,9 +216,14 @@ public static async Task Run(string tag, string value, UiLambdaSet uiLambda = nu switch (operation) { case "/server/listaas/": - UiLambdaSet.MesssageBoxShow(uiLambda, + if (OperatingSystem.IsWindows()) + { + #pragma warning disable CA1416 // Plattformkompatibilität überprüfen + UiLambdaSet.MesssageBoxShow(uiLambda, "", "SelectFromListFlyoutItem missing", "SelectFromListFlyoutItem missing", MessageBoxButtons.OK); + #pragma warning restore CA1416 // Plattformkompatibilität überprüfen + } value = "0"; operation = "/server/getaasx2/"; break; @@ -247,8 +278,13 @@ public static async Task Run(string tag, string value, UiLambdaSet uiLambda = nu client.SetBearerToken(token); response.Show(); - UiLambdaSet.MesssageBoxShow(uiLambda, response.AccessToken, "", + if (OperatingSystem.IsWindows()) + { + #pragma warning disable CA1416 // Plattformkompatibilität überprüfen + UiLambdaSet.MesssageBoxShow(uiLambda, response.AccessToken, "", "Access Token", MessageBoxButtons.OK); + #pragma warning restore CA1416 // Plattformkompatibilität überprüfen + } operation = lastOperation; lastOperation = ""; @@ -261,8 +297,13 @@ public static async Task Run(string tag, string value, UiLambdaSet uiLambda = nu } break; case "error": - UiLambdaSet.MesssageBoxShow(uiLambda, "", $"Can not perform: {lastOperation}", + if (OperatingSystem.IsWindows()) + { + #pragma warning disable CA1416 // Plattformkompatibilität überprüfen + UiLambdaSet.MesssageBoxShow(uiLambda, "", $"Can not perform: {lastOperation}", "Error", MessageBoxButtons.OK); + #pragma warning restore CA1416 // Plattformkompatibilität überprüfen + } operation = ""; break; } @@ -280,7 +321,12 @@ public static async Task RequestTokenAsync( var disco = await client.GetDiscoveryDocumentAsync(authServer); if (disco.IsError) throw new Exception(disco.Error); - UiLambdaSet.MesssageBoxShow(uiLambda, disco.Raw, "", "Discovery JSON", MessageBoxButtons.OK); + if (OperatingSystem.IsWindows()) + { + #pragma warning disable CA1416 // Plattformkompatibilität überprüfen + UiLambdaSet.MesssageBoxShow(uiLambda, disco.Raw, "", "Discovery JSON", MessageBoxButtons.OK); + #pragma warning restore CA1416 // Plattformkompatibilität überprüfen + } List rootCertSubject = new List(); dynamic discoObject = null; @@ -301,7 +347,12 @@ public static async Task RequestTokenAsync( Console.ResetColor(); Console.WriteLine(clientToken + "\n"); - UiLambdaSet.MesssageBoxShow(uiLambda, clientToken, "", "Client Token", MessageBoxButtons.OK); + if (OperatingSystem.IsWindows()) + { + #pragma warning disable CA1416 // Plattformkompatibilität überprüfen + UiLambdaSet.MesssageBoxShow(uiLambda, clientToken, "", "Client Token", MessageBoxButtons.OK); + #pragma warning restore CA1416 // Plattformkompatibilität überprüfen + } var response = await client.RequestClientCredentialsTokenAsync(new ClientCredentialsTokenRequest { @@ -378,12 +429,21 @@ private static string CreateClientToken(SigningCredentials credential, string cl if (credential == null) { - var res = UiLambdaSet.MesssageBoxShow(uiLambda, "", - "Select certificate chain from certificate store? \n" + - "(otherwise use file Andreas_Orzelski_Chain.pfx)", - "Select certificate chain", MessageBoxButtons.YesNo); + var fix = true; + + if (OperatingSystem.IsWindows()) + { + #pragma warning disable CA1416 // Plattformkompatibilität überprüfen + var res = UiLambdaSet.MesssageBoxShow(uiLambda, "", + "Select certificate chain from certificate store? \n" + + "(otherwise use file Andreas_Orzelski_Chain.pfx)", + "Select certificate chain", MessageBoxButtons.YesNo); + #pragma warning restore CA1416 // Plattformkompatibilität überprüfen + if (res != DialogResult.No) + fix = false; + } - if (res == DialogResult.No) + if (fix) { certFileName = "Andreas_Orzelski_Chain.pfx"; password = "i40"; @@ -418,25 +478,28 @@ private static string CreateClientToken(SigningCredentials credential, string cl if (rootCertFound) fcollection = fcollection2; - X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, - "Test Certificate Select", - "Select a certificate from the following list to get information on that certificate", - X509SelectionFlag.SingleSelection); - if (scollection.Count != 0) + if (OperatingSystem.IsWindows()) { - certificate = scollection[0]; - X509Chain ch = new X509Chain(); - ch.Build(certificate); + X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, + "Test Certificate Select", + "Select a certificate from the following list to get information on that certificate", + X509SelectionFlag.SingleSelection); + if (scollection.Count != 0) + { + certificate = scollection[0]; + X509Chain ch = new X509Chain(); + ch.Build(certificate); - string[] X509Base64 = new string[ch.ChainElements.Count]; + string[] X509Base64 = new string[ch.ChainElements.Count]; - int j = 0; - foreach (X509ChainElement element in ch.ChainElements) - { - X509Base64[j++] = Convert.ToBase64String(element.Certificate.GetRawCertData()); - } + int j = 0; + foreach (X509ChainElement element in ch.ChainElements) + { + X509Base64[j++] = Convert.ToBase64String(element.Certificate.GetRawCertData()); + } - x5c = X509Base64; + x5c = X509Base64; + } } } else @@ -479,7 +542,10 @@ private static string CreateClientToken(SigningCredentials credential, string cl Convert.ToBase64String(certificate.RawData, Base64FormattingOptions.InsertLineBreaks)); builder.AppendLine("-----END CERTIFICATE-----"); - UiLambdaSet.MesssageBoxShow(uiLambda, builder.ToString(), "", "Client Certificate", MessageBoxButtons.OK); + if (OperatingSystem.IsWindowsVersionAtLeast(6, 1, 1)) + { + UiLambdaSet.MesssageBoxShow(uiLambda, builder.ToString(), "", "Client Certificate", MessageBoxButtons.OK); + } credential = new X509SigningCredentials(certificate); // oz end diff --git a/src/AasxOpenidClient/OpenIDClientInstance.cs b/src/AasxOpenidClient/OpenIDClientInstance.cs index 201222e8..2fbf9ec6 100644 --- a/src/AasxOpenidClient/OpenIDClientInstance.cs +++ b/src/AasxOpenidClient/OpenIDClientInstance.cs @@ -493,25 +493,28 @@ private string CreateClientToken(SigningCredentials credential, string clientId, if (rootCertFound) fcollection = fcollection2; - X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, - "Test Certificate Select", - "Select a certificate from the following list to get information on that certificate", - X509SelectionFlag.SingleSelection); - if (scollection.Count != 0) + if (OperatingSystem.IsWindows()) { - certificate = scollection[0]; - X509Chain ch = new X509Chain(); - ch.Build(certificate); + X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(fcollection, + "Test Certificate Select", + "Select a certificate from the following list to get information on that certificate", + X509SelectionFlag.SingleSelection); + if (scollection.Count != 0) + { + certificate = scollection[0]; + X509Chain ch = new X509Chain(); + ch.Build(certificate); - string[] X509Base64 = new string[ch.ChainElements.Count]; + string[] X509Base64 = new string[ch.ChainElements.Count]; - int j = 0; - foreach (X509ChainElement element in ch.ChainElements) - { - X509Base64[j++] = Convert.ToBase64String(element.Certificate.GetRawCertData()); - } + int j = 0; + foreach (X509ChainElement element in ch.ChainElements) + { + X509Base64[j++] = Convert.ToBase64String(element.Certificate.GetRawCertData()); + } - x5c = X509Base64; + x5c = X509Base64; + } } } else diff --git a/src/AasxPackageExplorer/MainWindow.xaml.cs b/src/AasxPackageExplorer/MainWindow.xaml.cs index bd00bb25..297df8ab 100644 --- a/src/AasxPackageExplorer/MainWindow.xaml.cs +++ b/src/AasxPackageExplorer/MainWindow.xaml.cs @@ -2016,7 +2016,7 @@ private void UiHandleReRenderAnyUiInEntityPanel( return null; // try to load in sequence, until new Identifiable is found - // TODO: take over those options from existing container + // TODO (MIHO, 2024-01-01): take over those options from existing container var foundIdfs = new List(); foreach (var search in searches) { diff --git a/src/AasxPackageLogic/DispEditHelperEntities.cs b/src/AasxPackageLogic/DispEditHelperEntities.cs index 400c8663..e50bbe3c 100644 --- a/src/AasxPackageLogic/DispEditHelperEntities.cs +++ b/src/AasxPackageLogic/DispEditHelperEntities.cs @@ -1352,42 +1352,6 @@ public void DisplayOrEditAasEntityAasEnv( // success will trigger redraw independently, therefore always return none return new AnyUiLambdaActionNone(); - - //var location = PackageContainerHttpRepoSubset.BuildLocationFrom(record); - //if (location == null) - //{ - // MainWindowLogic.LogErrorToTicketStatic(ticket, - // new InvalidDataException(), - // "Error building location from query selection. Aborting."); - // return new AnyUiLambdaActionNone(); - //} - - //// more details into container options - //var containerOptions = new PackageContainerHttpRepoSubset. - // PackageContainerHttpRepoSubsetOptions(PackageContainerOptionsBase.CreateDefault(Options.Curr), - // record); - - //// load - //Log.Singleton.Info($"For refining extended connect, loading " + - // $"from {location} into container"); - - //var container = await PackageContainerFactory.GuessAndCreateForAsync( - // packages, - // location, - // location, - // overrideLoadResident: true, - // containerOptions: containerOptions, - // runtimeOptions: packages.CentralRuntimeOptions); - - //if (container == null) - // Log.Singleton.Error($"Failed to load from {location}"); - //else - // mainWindow.UiLoadPackageWithNew(packages.MainItem, - // takeOverContainer: container, onlyAuxiliary: false, indexItems: true, - // storeFnToLRU: location, - // nextEditMode: editMode); - - //Log.Singleton.Info($"Successfully loaded {location}"); } return new AnyUiLambdaActionNone(); }); diff --git a/src/AasxPackageLogic/DispEditHelperExtensions.cs b/src/AasxPackageLogic/DispEditHelperExtensions.cs index af63a12a..84474114 100644 --- a/src/AasxPackageLogic/DispEditHelperExtensions.cs +++ b/src/AasxPackageLogic/DispEditHelperExtensions.cs @@ -61,8 +61,8 @@ public static void GeneralExtensionHelperUpdateJson(Aas.IExtension se, Type recT Formatting = Formatting.Indented }; settings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter()); - //settings.Converters.Add(new AdminShellConverters.AdaptiveAasIClassConverter( - // AdminShellConverters.AdaptiveAasIClassConverter.ConversionMode.AasCore)); + ////settings.Converters.Add(new AdminShellConverters.AdaptiveAasIClassConverter( + ////AdminShellConverters.AdaptiveAasIClassConverter.ConversionMode.AasCore)); json = JsonConvert.SerializeObject(recInst, recType, settings); } catch (Exception ex) @@ -947,9 +947,9 @@ public void ExtensionHelperAddEditFieldsByReflection( // List of enum? // see:https://stackoverflow.com/questions/12617280/how-to-check-if-an-object-is-a-list-enum-type-objects - //var testListEnum = pii.PropertyType - // .GetInterface("System.Collections.Generic.IList")? - // .GetGenericArguments()?[0].IsEnum; + //// var testListEnum = pii.PropertyType + //// .GetInterface("System.Collections.Generic.IList")? + //// .GetGenericArguments()?[0].IsEnum; var testListEnum = pii.PropertyType.IsGenericType && pii.PropertyType.GetGenericTypeDefinition() != null && pii.PropertyType.GetGenericTypeDefinition() == typeof(System.Collections.Generic.List<>) diff --git a/src/AasxPackageLogic/DispEditHelperMiniModules.cs b/src/AasxPackageLogic/DispEditHelperMiniModules.cs index 58e003d7..d3598020 100644 --- a/src/AasxPackageLogic/DispEditHelperMiniModules.cs +++ b/src/AasxPackageLogic/DispEditHelperMiniModules.cs @@ -915,7 +915,7 @@ public void ExtensionHelper( // read file contents var init = System.IO.File.ReadAllText(pfn); - // TODO (MIHO, 2024-01-024): refactor this + // TODO (MIHO, 2024-01-24): refactor this JsonTextReader reader = new JsonTextReader(new StringReader(init)); JsonSerializer serializer = new JsonSerializer(); serializer.Converters.Add(new AdminShellConverters.AdaptiveAasIClassConverter( @@ -1064,7 +1064,7 @@ public void ExtensionHelper( padding: new AnyUiThickness(5, 0, 5, 0)); // special case: SAMM extension - // TODO: enable + // TODO (MIHO, 2024-01-01): enable if (false && Samm.Util.HasSammSemanticId(extension)) { substack.Add(new AnyUiLabel() diff --git a/src/AasxPackageLogic/DispEditHelperModules.cs b/src/AasxPackageLogic/DispEditHelperModules.cs index 7362a18a..d74ece29 100644 --- a/src/AasxPackageLogic/DispEditHelperModules.cs +++ b/src/AasxPackageLogic/DispEditHelperModules.cs @@ -2750,7 +2750,7 @@ public static bool DisplayOrEditEntityFileResource_EditTextFile( byte[] bytes = Encoding.ASCII.GetBytes(uc.Text); try { - // TODO: add IdShortPath !! + // TODO (MIHO, 2024-01-01): add IdShortPath !! env.PutBytesToPackageOrExternal( valuePath, bytes); } diff --git a/src/AasxPackageLogic/DispEditHelperSammModules.cs b/src/AasxPackageLogic/DispEditHelperSammModules.cs index 9bac4481..0f7430cf 100644 --- a/src/AasxPackageLogic/DispEditHelperSammModules.cs +++ b/src/AasxPackageLogic/DispEditHelperSammModules.cs @@ -96,8 +96,8 @@ public static void SammExtensionHelperUpdateJson(Aas.IExtension se, Type sammTyp Formatting = Formatting.Indented }; settings.Converters.Add(new Newtonsoft.Json.Converters.StringEnumConverter()); - //settings.Converters.Add(new AdminShellConverters.AdaptiveAasIClassConverter( - // AdminShellConverters.AdaptiveAasIClassConverter.ConversionMode.AasCore)); + //// settings.Converters.Add(new AdminShellConverters.AdaptiveAasIClassConverter( + //// AdminShellConverters.AdaptiveAasIClassConverter.ConversionMode.AasCore)); json = JsonConvert.SerializeObject(sammInst, sammType, settings); } catch (Exception ex) @@ -1748,7 +1748,6 @@ public void ImportSammModelToConceptDescriptions( } // figure out, which idSet to be used - // var idSet = Samm.SammIdSets.IdSets.Values.Last(); var idSet = Samm.SammIdSets.DetectVersion(globalNamespaces); if (idSet == null) { @@ -2245,7 +2244,7 @@ public void ExportSammModelFromConceptDescription( new Uri(nit.Uri)); } - // hack + // a little informal g.NamespaceMap.AddNamespace("this", new Uri(buri)); // export diff --git a/src/AasxPackageLogic/EclassUtils.cs b/src/AasxPackageLogic/EclassUtils.cs index 30af63a0..69972b2a 100644 --- a/src/AasxPackageLogic/EclassUtils.cs +++ b/src/AasxPackageLogic/EclassUtils.cs @@ -655,10 +655,6 @@ public static Aas.ConceptDescription GenerateConceptDescription( // set it ds.ShortName ??= new List(); ds.ShortName.Add(new Aas.LangStringShortNameTypeIec61360(pn.Language, sn)); - //ds.ShortName = new List - //{ - // new Aas.LangStringShortNameTypeIec61360(AdminShellUtil.GetDefaultLngIso639(), sn) - //}; } } } diff --git a/src/AasxPackageLogic/MainWindowAnyUiDialogs.cs b/src/AasxPackageLogic/MainWindowAnyUiDialogs.cs index bca6c822..390eb02b 100644 --- a/src/AasxPackageLogic/MainWindowAnyUiDialogs.cs +++ b/src/AasxPackageLogic/MainWindowAnyUiDialogs.cs @@ -797,7 +797,7 @@ await PackageContainerHttpRepoSubset.PerformUploadAssistant( ticket.StartExec(); // edit infos - // TODO: adopt from? + // TODO (MIHO, 2024-01-01): adopt from? var record = (null) ?? new PackageContainerHttpRepoSubset.ConnectExtendedRecord(); var uiRes = await PackageContainerHttpRepoSubset.PerformConnectExtendedDialogue( diff --git a/src/AasxPackageLogic/MainWindowHeadless.cs b/src/AasxPackageLogic/MainWindowHeadless.cs index a8044ee0..5d7b6d9a 100644 --- a/src/AasxPackageLogic/MainWindowHeadless.cs +++ b/src/AasxPackageLogic/MainWindowHeadless.cs @@ -1317,8 +1317,8 @@ record = rec; // report Log.Singleton.Info($"Convert SMT qualifiers to SMT extension: {anyChanges} changes done."); - // emit event for Submodel and children - // this.AddDiaryEntry(submodel, new DiaryEntryStructChange(), allChildrenAffected: true); + // TODO (MIHO, 2025-11-17): check, emit event for Submodel and children + //// this.AddDiaryEntry(submodel, new DiaryEntryStructChange(), allChildrenAffected: true); ticket.SetNextFocus = ticket.SubmodelRef; } @@ -1385,8 +1385,8 @@ record = rec; // report Log.Singleton.Info($"Take over SM element relationships to CDs: {anyChanges} changes done."); - // emit event for Submodel and children - // this.AddDiaryEntry(submodel, new DiaryEntryStructChange(), allChildrenAffected: true); + // TODO (MIHO, 2025-11-17): check, emit event for Submodel and children + //// this.AddDiaryEntry(submodel, new DiaryEntryStructChange(), allChildrenAffected: true); ticket.SetNextFocus = ticket.SubmodelRef; } diff --git a/src/AasxPackageLogic/PackageCentral/InterfaceArtefacts.cs b/src/AasxPackageLogic/PackageCentral/InterfaceArtefacts.cs index d9fb8b63..066dbb50 100644 --- a/src/AasxPackageLogic/PackageCentral/InterfaceArtefacts.cs +++ b/src/AasxPackageLogic/PackageCentral/InterfaceArtefacts.cs @@ -68,12 +68,6 @@ public partial class ProtocolInformation /// [JsonProperty(PropertyName = "subprotocolBodyEncoding")] public string SubprotocolBodyEncoding { get; set; } - - /// - /// Gets or Sets SecurityAttributes - /// - //[JsonProperty(PropertyName = "securityAttributes")] - //public List? SecurityAttributes { get; set; } } public partial class Endpoint diff --git a/src/AasxPackageLogic/PackageCentral/PackageCentral.cs b/src/AasxPackageLogic/PackageCentral/PackageCentral.cs index 625de128..93370b85 100644 --- a/src/AasxPackageLogic/PackageCentral/PackageCentral.cs +++ b/src/AasxPackageLogic/PackageCentral/PackageCentral.cs @@ -428,17 +428,19 @@ public IEnumerable FindAllReferables() where T : class, Aas.IReferable // Determine full item locations from file repositories, but also connected repositories // - //public enum FindIdKind { Asset, Aas } - - //public string FindFullItemLocationForId( - // FindIdKind kind, - // string id, - // Action lambdaFoundContainer) - //{ - // // access - // if (id?.HasContent() != true) - // return null; - //} +#if __old_not_needed + public enum FindIdKind { Asset, Aas } + + public string FindFullItemLocationForId( + FindIdKind kind, + string id, + Action lambdaFoundContainer) + { + // access + if (id?.HasContent() != true) + return null; + } +#endif // // Event management diff --git a/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs b/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs index d9ebe0d7..213e680f 100644 --- a/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs +++ b/src/AasxPackageLogic/PackageCentral/PackageContainerHttpRepoSubset.cs @@ -208,7 +208,7 @@ public static bool IsValidUriForRepoSingleSubmodel(string location) if (m.Success) return true; - // TODO: Add AAS based Submodel + // TODO (MIHO, 2024-01-01): Add AAS based Submodel return false; } @@ -393,9 +393,9 @@ public static Uri CombineUri(Uri baseUri, string relativeUri) // for problems see: // https://stackoverflow.com/questions/372865/path-combine-for-urls - //if (Uri.TryCreate(baseUri, relativeUri, out var res)) - // return res; - //return null; + //// if (Uri.TryCreate(baseUri, relativeUri, out var res)) + //// return res; + //// return null; var bu = baseUri.ToString().TrimEnd('/'); bu += "/" + relativeUri.TrimStart('/'); @@ -509,7 +509,6 @@ public static Uri BuildUriForRepoAasByGlobalAssetId(Uri baseUri, string id, bool // build 'pseudo'-JSON // Note: seems (against the spec??) only work without array - // var jsonArr = $"[{{\"name\": \"globalAssetId\", \"value\": \"{id}\"}}]"; var jsonArr = $"{{\"name\": \"globalAssetId\", \"value\": \"{id}\"}}"; // try combine @@ -729,7 +728,6 @@ public static Uri BuildUriForRegistryAasByAssetId(Uri baseUri, string id, bool e // build 'pseudo'-JSON // Note: seems (against the spec??) only work without array - // var jsonArr = $"[{{\"name\": \"globalAssetId\", \"value\": \"{id}\"}}]"; var jsonArr = $"{{\"name\": \"globalAssetId\", \"value\": \"{id}\"}}"; // try combine @@ -880,7 +878,7 @@ private static async Task FromRegistryGetAasAndSubmodels( } else if (aasIfc == "AAS-3.0") { - // Remark: Suspicously, this will be an exacht copy 1.0 == 3.0 :-( + // Remark: Suspicously, this will be an exact copy 1.0 equal to 3.0 .. hmm // direct access HREF aasSi = new AasIdentifiableSideInfo() { @@ -956,7 +954,7 @@ private static async Task FromRegistryGetAasAndSubmodels( aasSi.QueriedEndpoint.ToString()); // cycle to next endpoint or next descriptor (more likely) - // continue; + //// continue; } // makes most sense to "recrate" the AAS.Submodels with the side infos @@ -1051,17 +1049,17 @@ private static async Task FromRegOfRegGetAasAndSubmodels( if (record == null || regDescriptor == null || assetId?.HasContent() != true) return false; - // The format is: - // { - // "Url": "http://example.com/6789", - // "Security": "", - // "Match": "LIKE", - // "Pattern": "%6789%", - // "Domain": "example.com", - // "Id": "xxx", - // "Info": "xxx" - // } - // However, only Url and Id are currently useful + //// The format is: + //// { + //// "Url": "http://example.com/6789", + //// "Security": "", + //// "Match": "LIKE", + //// "Pattern": "%6789%", + //// "Domain": "example.com", + //// "Id": "xxx", + //// "Info": "xxx" + //// } + //// However, only Url and Id are currently useful string regUrl = "" + regDescriptor["url"]; string regInfo = "" + regDescriptor["info"]; @@ -1245,7 +1243,7 @@ protected static async Task LoadFromSourceInternalAsyn prepCD = new OnDemandListIdentifiable(); // integrate in a fresh environment - // TODO: new kind of environment + // TODO (MIHO, 2025-01-01): new kind of environment env = (Aas.IEnvironment)new AasOnDemandEnvironment(); // already set structure to use some convenience functions @@ -1254,7 +1252,7 @@ protected static async Task LoadFromSourceInternalAsyn env.ConceptDescriptions = prepCD; // also the package "around" - // TODO: Check default for base uri + // TODO (MIHO, 2025-01-01): Check default for base uri dynPack = new AdminShellPackageDynamicFetchEnv(runtimeOptions, baseUri.GetBaseUriForAasRepo()); } @@ -1265,7 +1263,7 @@ protected static async Task LoadFromSourceInternalAsyn // invalidate cursor data (as a new request is about to be started) string cursor = null; - // TODO: very long function, needs to be refactored + // TODO (MIHO, 2025-01-01): very long function, needs to be refactored var operationFound = false; // @@ -1302,7 +1300,7 @@ await FromRegOfRegGetAasAndSubmodels( res, foundAssetId, trackNewIdentifiables, trackLoadedIdentifiables, lambdaReportProgress: lambdaReportAasSm, - // TODO: check!! + // TODO (MIHO, 2025-01-01): check, if still required!! compatOldAasxServer: true); } } @@ -1497,7 +1495,9 @@ await FromRegistryGetAasAndSubmodels( { // for all repo access, use the same client var client = PackageHttpDownloadUtil.CreateHttpClient(baseUri.GetBaseUriForAasRepo(), runtimeOptions, containerList); - // var client = PackageHttpDownloadUtil.CreateHttpClient(new Uri(""), runtimeOptions, containerList); + + //// Alternative + //// var client = PackageHttpDownloadUtil.CreateHttpClient(new Uri(""), runtimeOptions, containerList); // start with a list of AAS or Submodels (very similar, therefore unified) var isAllAAS = IsValidUriForRepoAllAAS(fullItemLocation) @@ -1730,7 +1730,6 @@ await PackageHttpDownloadUtil.HttpGetToMemoryStream( // Have a list of ids. Decompose into single id. // Note: Parallel makes no sense, ideally only 1 result (is per AssetId)!! - // TODO: not parallel! int i = 0; foreach (var res in resObj) { @@ -1940,11 +1939,11 @@ await PackageHttpDownloadUtil.HttpGetToMemoryStream( var jsonQuery = ""; if (false) { + #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. // Andreas' very much outdated server: // but, the query needs to be reformatted as JSON - // query = "{ searchSMs(expression: \"\"\"$LOG \"\"\") { url smId } }"; - // query = "{ searchSMs(expression: \"\"\"$LOG filter=or(str_contains(sm.IdShort, \"Technical\"), str_contains(sm.IdShort, \"Nameplate\")) \"\"\") { url smId } }"; - #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. + //// query = "{ searchSMs(expression: \"\"\"$LOG \"\"\") { url smId } }"; + //// query = "{ searchSMs(expression: \"\"\"$LOG filter=or(str_contains(sm.IdShort, \"Technical\"), str_contains(sm.IdShort, \"Nameplate\")) \"\"\") { url smId } }"; query = query.Replace("\\", "\\\\"); query = query.Replace("\"", "\\\""); query = query.Replace("\r", " "); @@ -2424,14 +2423,14 @@ public enum BaseTypeEnum { Repository, Registry, RegOfReg } [AasxMenuArgument(help: "Specifies the part of the URI of the Repository/ Registry, which is " + "common to all operations.")] public string BaseAddress = ""; - // public string BaseAddress = "https://cloudrepo.aas-voyager.com/"; - // public string BaseAddress = "https://eis-data.aas-voyager.com/"; - // public string BaseAddress = "http://smt-repo.admin-shell-io.com/api/v3.0"; - // public string BaseAddress = "https://techday2-registry.admin-shell-io.com/"; + //// public string BaseAddress = "https://cloudrepo.aas-voyager.com/"; + //// public string BaseAddress = "https://eis-data.aas-voyager.com/"; + //// public string BaseAddress = "http://smt-repo.admin-shell-io.com/api/v3.0"; + //// public string BaseAddress = "https://techday2-registry.admin-shell-io.com/"; [AasxMenuArgument(help: "Either: Repository or Registry")] public BaseTypeEnum BaseType = BaseTypeEnum.Repository; - // public BaseTypeEnum BaseType = BaseTypeEnum.Registry; + //// public BaseTypeEnum BaseType = BaseTypeEnum.Registry; [AasxMenuArgument(help: "Retrieve all AAS from Repository or Registry. " + "Note: Use of PageLimit is recommended.")] @@ -2441,16 +2440,16 @@ public enum BaseTypeEnum { Repository, Registry, RegOfReg } public bool GetSingleAas; [AasxMenuArgument(help: "Specifies the Id of the AAS to be retrieved.")] - // public string AasId = "https://new.abb.com/products/de/2CSF204101R1400/aas"; + //// public string AasId = "https://new.abb.com/products/de/2CSF204101R1400/aas"; public string AasId = ""; - // public string AasId = "https://phoenixcontact.com/qr/2900542/1/aas/1B"; + //// public string AasId = "https://phoenixcontact.com/qr/2900542/1/aas/1B"; [AasxMenuArgument(help: "Get a single AAS, which is specified by a asset link/ asset id.")] public bool GetAasByAssetLink; [AasxMenuArgument(help: "Specifies the Id of the asset to be retrieved.")] public string AssetId = ""; - // public string AssetId = "https://pk.harting.com/?.20P=ZSN1"; + //// public string AssetId = "https://pk.harting.com/?.20P=ZSN1"; [AasxMenuArgument(help: "Retrieve all Submodels from Repository or Registry. " + "Note: Use of PageLimit is recommended.")] @@ -2460,7 +2459,7 @@ public enum BaseTypeEnum { Repository, Registry, RegOfReg } public bool GetSingleSubmodel; [AasxMenuArgument(help: "Specifies the Id of the Submodel to be retrieved.")] - // public string SmId = "aHR0cHM6Ly9leGFtcGxlLmNvbS9pZHMvc20vMjAxNV82MDIwXzMwMTJfMDU4NQ=="; + //// public string SmId = "aHR0cHM6Ly9leGFtcGxlLmNvbS9pZHMvc20vMjAxNV82MDIwXzMwMTJfMDU4NQ=="; public string SmId = ""; [AasxMenuArgument(help: "Retrieve all ConceptDescriptions from Repository or Registry. " + @@ -2479,8 +2478,6 @@ public enum BaseTypeEnum { Repository, Registry, RegOfReg } [AasxMenuArgument(help: "Specifies the contents of the query script to be executed. " + "Note: Complex syntax and quoting needs to be applied!")] public string QueryScript = ""; - // public string QueryScript = "{\r\n searchSMs(\r\n expression: \"\"\"$LOG\r\n filter=\r\n or(\r\n str_contains(sm.IdShort, \"Technical\"),\r\n str_contains(sm.IdShort, \"Nameplate\")\r\n )\r\n \"\"\"\r\n )\r\n {\r\n url\r\n smId\r\n }\r\n}"; - // public string QueryScript = "{\r\n searchSMs(\r\n expression: \"\"\"$LOG$QL\r\n ( contains(sm.idShort, \"Technical\") and\r\n sme.value ge 100 and\r\n sme.value le 200 )\r\n or\r\n ( contains(sm.idShort, \"Nameplate\") and\r\n contains(sme.idShort,\"ManufacturerName\") and\r\n not(contains(sme.value,\"Phoenix\")))\r\n \"\"\"\r\n )\r\n {\r\n url\r\n smId\r\n }\r\n}"; [AasxMenuArgument(help: "Specifies the AAS meta model element type name to be queried (AAS, Submodel, ConceptDescription).")] public string QueryElementType = "AAS"; @@ -3743,14 +3740,14 @@ public class UploadAssistantJobRecord [AasxMenuArgument(help: "Specifies the part of the URI of the Repository/ Registry, which is " + "common to all operations.")] public string BaseAddress = ""; - // public string BaseAddress = "https://cloudrepo.aas-voyager.com/"; - // public string BaseAddress = "https://eis-data.aas-voyager.com/"; - // public string BaseAddress = "http://smt-repo.admin-shell-io.com/api/v3.0"; - // public string BaseAddress = "https://techday2-registry.admin-shell-io.com/"; + //// public string BaseAddress = "https://cloudrepo.aas-voyager.com/"; + //// public string BaseAddress = "https://eis-data.aas-voyager.com/"; + //// public string BaseAddress = "http://smt-repo.admin-shell-io.com/api/v3.0"; + //// public string BaseAddress = "https://techday2-registry.admin-shell-io.com/"; [AasxMenuArgument(help: "Either: Repository or Registry")] public ConnectExtendedRecord.BaseTypeEnum BaseType = ConnectExtendedRecord.BaseTypeEnum.Repository; - // public ConnectExtendedRecord.BaseTypeEnum BaseType = ConnectExtendedRecord.BaseTypeEnum.Registry; + //// public ConnectExtendedRecord.BaseTypeEnum BaseType = ConnectExtendedRecord.BaseTypeEnum.Registry; [AasxMenuArgument(help: "Includes Submodels of the particular AAS into the upload.")] public bool IncludeSubmodels = false; @@ -4026,7 +4023,7 @@ public static async Task PerformUploadAssistant( { // Note: it seems to be also possible to create an HttpClient with "" as BaseAddress and pass Host via URL!! baseUri = new BaseUriDict(record.BaseAddress); - // TODO + // TODO (MIHO, 2025-01-01): check this again, if re-use is important client = PackageHttpDownloadUtil.CreateHttpClient(baseUri.GetBaseUriForAasRepo(), runtimeOptions, containerList); } @@ -4061,7 +4058,6 @@ public static async Task PerformUploadAssistant( rows, lambdaGetLocation: (row) => { - // return new Uri("https://eis-data.aas-voyager.com/shells/aHR0cHM6Ly9uZXcuYWJiLmNvbS9wcm9kdWN0cy9kZS8yQ1NSMjU1MTYzUjExNjUvYWFz"); if (!(row.Tag is Aas.IIdentifiable idf)) return null; if (idf is Aas.IAssetAdministrationShell) diff --git a/src/AasxPackageLogic/PackageCentral/PackageContainerListHttpRestRepository.cs b/src/AasxPackageLogic/PackageCentral/PackageContainerListHttpRestRepository.cs index b339260b..2825b06f 100644 --- a/src/AasxPackageLogic/PackageCentral/PackageContainerListHttpRestRepository.cs +++ b/src/AasxPackageLogic/PackageCentral/PackageContainerListHttpRestRepository.cs @@ -79,10 +79,6 @@ public PackageContainerListHttpRestRepository(string location) // always have a location Endpoint = location; - - // directly set endpoint - // Note: later - // _connector = new PackageConnectorHttpRest(null, Endpoint); } // diff --git a/src/AasxPackageLogic/PackageCentral/PackageHttpDownloadUtil.cs b/src/AasxPackageLogic/PackageCentral/PackageHttpDownloadUtil.cs index 51a8fa82..2a14a414 100644 --- a/src/AasxPackageLogic/PackageCentral/PackageHttpDownloadUtil.cs +++ b/src/AasxPackageLogic/PackageCentral/PackageHttpDownloadUtil.cs @@ -100,8 +100,8 @@ public static HttpClient CreateHttpClient( // new http client var client = new HttpClient(handler); - // TODO/CHECK: Basyx does not like this: - // client.DefaultRequestHeaders.Add("Accept", "application/aas"); + // TODO (MIHO, 2025-01-01): Check again, Basyx does not like this: + //// client.DefaultRequestHeaders.Add("Accept", "application/aas"); client.DefaultRequestHeaders.Add("Accept", "application/json"); client.BaseAddress = new Uri(baseUri.GetLeftPart(UriPartial.Authority)); @@ -480,10 +480,8 @@ public static async Task> HttpPutPostFromMemoryStr } else { - // var data = new ProgressableStreamContent(ms.ToArray(), runtimeOptions); overallContent = new ByteArrayContent(ms.ToArray()); overallContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); - // var data = new StringContent("1.2345", Encoding.UTF8, "application/json"); } // get response? diff --git a/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs b/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs index 0ca7a90f..0ced5eef 100644 --- a/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs +++ b/src/AasxPackageLogic/PackageCentral/SecurityAccessHandlerLogicBase.cs @@ -618,7 +618,6 @@ protected virtual async Task DetermineAuthenticateHeaderForE // connect to auth-server // check if the auth-server could be asked for - // var authConfigUrl = "https://www.admin-shell-io.com/50001/.well-known/openid-configuration"; var authConfigUrl = "" + endpoint.Endpoint.AccessInfo.AuthServer; if (authConfigUrl?.HasContent() != true) { @@ -893,10 +892,9 @@ protected virtual async Task DetermineAuthenticateHeaderForE } else if (preferredMethod == SecurityAccessMethod.InteractiveEntry) - { - - // test tenant for ENTRA id - // TODO: configure clientId + { + // ENTRA id + // TODO (MIHO, 2025-01-01): configure clientId var tenant = "common"; // Damit auch externe Konten wie @live.de funktionieren var clientId = "865f6ac0-cdbc-44c6-98cc-3e35c39ecb6e"; // aus der App-Registrierung var scopes = new[] { "openid", "profile", "email" }; // für ID Token im JWT-Format @@ -965,7 +963,6 @@ protected virtual async Task DetermineAuthenticateHeaderForE Log.Singleton.Info($"Security access handler: Add X5C token from ENTRA id .."); claims.Add(new("entraid", entraid)); - // var secret = "test-with-entra-id-34zu8934h89ehhghbgeg54tgfbufrbbssdbsbibu4trui45tr"; var secret = entraid; var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)); var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256); diff --git a/src/AasxPackageLogic/VisualAasxElements.cs b/src/AasxPackageLogic/VisualAasxElements.cs index b0c9419b..2172610a 100644 --- a/src/AasxPackageLogic/VisualAasxElements.cs +++ b/src/AasxPackageLogic/VisualAasxElements.cs @@ -2305,9 +2305,9 @@ private void GenerateInnerElementsForConceptDescriptions( env.AllConceptDescriptions().Cast().ToList())) { foreach(var idfrec in DispEditHelperExtensions.CheckReferableForExtensionRecords(idf)) - if (idfrec is IExtensionStructureModel esm /* && esm.IsTopElement() */) + if (idfrec is IExtensionStructureModel esm /* & & esm.IsTopElement() */) { - // add && recurse + // add & recurse // might not be in structure lambdaAddRecurse(tiStructuredRoot, idf as Aas.IConceptDescription, 0); } @@ -2320,7 +2320,7 @@ private void GenerateInnerElementsForConceptDescriptions( foreach (var me in DispEditHelperSammModules.CheckReferableForSammElements(cd)) if (me is Samm.ISammStructureModel ssm && ssm.IsTopElement()) { - // add && recurse + // add & recurse // mark as in structure lambdaAddRecurse(tiStructuredRoot, cd, 0); } @@ -3358,7 +3358,7 @@ public bool UpdateByEvent( continue; // add to parent - // TODO: check if package = null is ok! + // TODO (MIHO, 2025-01-01): check if package = null is ok! GenerateVisualElementsFromShellEnvAddElements( cache, null /* package */, data.Container?.Env?.AasEnv, parentSm, parentVE, data.ParentElem as Aas.IReferable, foundSmw, indexPos++); @@ -3393,7 +3393,7 @@ public bool UpdateByEvent( // add to parent // TODO (MIHO, 2021-06-11): Submodel needs to be set in the long run - // TODO: check if package = null is ok! + // TODO (MIHO, 2025-01-01): check if package = null is ok! var ti = GenerateVisualElementsFromShellEnvAddElements( cache, null /* package */, data.Container?.Env?.AasEnv, null, parentVE, data.ParentElem as Aas.IReferable, foundSmw, indexPos++); diff --git a/src/AasxPluginAdvancedTextEditor/Plugin.cs b/src/AasxPluginAdvancedTextEditor/Plugin.cs index cd1247dd..bfa6201d 100644 --- a/src/AasxPluginAdvancedTextEditor/Plugin.cs +++ b/src/AasxPluginAdvancedTextEditor/Plugin.cs @@ -92,13 +92,20 @@ public class AasxPlugin : AasxPluginBase var initialContent = args[0] as string; // build visual - this.theEditControl = new UserControlAdvancedTextEditor(); - this.theEditControl.Text = initialContent; - - // give object back - var res = new AasxPluginResultBaseObject(); - res.obj = this.theEditControl; - return res; + if (OperatingSystem.IsWindowsVersionAtLeast(7, 0, 0)) + { + this.theEditControl = new UserControlAdvancedTextEditor(); + this.theEditControl.Text = initialContent; + + // give object back + var res = new AasxPluginResultBaseObject(); + res.obj = this.theEditControl; + return res; + } + else + { + return null; + } } if (action == "set-content" && args != null && args.Length >= 2 @@ -110,16 +117,26 @@ public class AasxPlugin : AasxPluginBase var content = args[1] as string; // apply - this.theEditControl.MimeType = mimeType; - this.theEditControl.Text = content; + if (OperatingSystem.IsWindows()) + { + this.theEditControl.MimeType = mimeType; + this.theEditControl.Text = content; + } } if (action == "get-content" && this.theEditControl != null) { // give object back - var res = new AasxPluginResultBaseObject(); - res.obj = this.theEditControl.Text; - return res; + if (OperatingSystem.IsWindows()) + { + var res = new AasxPluginResultBaseObject(); + res.obj = this.theEditControl.Text; + return res; + } + else + { + return null; + } } // default diff --git a/src/AasxPluginAdvancedTextEditor/UserControlAdvancedTextEditor.xaml.cs b/src/AasxPluginAdvancedTextEditor/UserControlAdvancedTextEditor.xaml.cs index 5c1294a1..8117f5a7 100644 --- a/src/AasxPluginAdvancedTextEditor/UserControlAdvancedTextEditor.xaml.cs +++ b/src/AasxPluginAdvancedTextEditor/UserControlAdvancedTextEditor.xaml.cs @@ -10,6 +10,7 @@ This source code may use other Open Source software components (see LICENSE.txt) using System; using System.Collections.Generic; using System.IO; +using System.Runtime.Versioning; using System.Text.RegularExpressions; using System.Windows; using System.Windows.Controls; @@ -30,6 +31,7 @@ namespace AasxPluginAdvancedTextEditor /// /// Interaction logic for UserControl1.xaml /// + [SupportedOSPlatform("windows")] public partial class UserControlAdvancedTextEditor : UserControl { // diff --git a/src/AasxPluginAssetInterfaceDesc/AidHttpConnection.cs b/src/AasxPluginAssetInterfaceDesc/AidHttpConnection.cs index a9bc7eb1..de7fe3f0 100644 --- a/src/AasxPluginAssetInterfaceDesc/AidHttpConnection.cs +++ b/src/AasxPluginAssetInterfaceDesc/AidHttpConnection.cs @@ -91,7 +91,7 @@ override public async Task UpdateItemValueAsync(AidIfxItemStatus item) } catch (Exception ex) { // set breakpoint in order to get failed connections! - ; + LogInternally.That.SilentlyIgnoredError(ex); } } diff --git a/src/AasxPluginAssetInterfaceDesc/AidInterfaceService.cs b/src/AasxPluginAssetInterfaceDesc/AidInterfaceService.cs index ac68626e..616f8b2c 100644 --- a/src/AasxPluginAssetInterfaceDesc/AidInterfaceService.cs +++ b/src/AasxPluginAssetInterfaceDesc/AidInterfaceService.cs @@ -63,8 +63,6 @@ public void StartOperation( private bool _inDispatcherTimer = false; - private int _counter = 0; - private async void DispatcherTimer_TickAsync(object sender, EventArgs e) { // access @@ -108,8 +106,8 @@ private async void DispatcherTimer_TickAsync(object sender, EventArgs e) await _allInterfaceStatus.UpdateValuesContinousByTickAsyc(); } catch (Exception ex) { - ; - } + LogInternally.That.SilentlyIgnoredError(ex); + } // check if to send an event var potEvt = new AasxPluginResultEventPushSomeEvents(); diff --git a/src/AasxPluginAssetInterfaceDesc/AidInterfaceStatus.cs b/src/AasxPluginAssetInterfaceDesc/AidInterfaceStatus.cs index d492efaa..5c5b871d 100644 --- a/src/AasxPluginAssetInterfaceDesc/AidInterfaceStatus.cs +++ b/src/AasxPluginAssetInterfaceDesc/AidInterfaceStatus.cs @@ -324,7 +324,7 @@ virtual public async Task UpdateItemValueAsync(AidIfxItemStatus item) /// Number of values changed virtual public async Task PrepareContinousRunAsync(IEnumerable items) { - + await Task.Yield(); } public void NotifyOutputItems(AidIfxItemStatus item, string strval) @@ -600,6 +600,7 @@ public async Task UpdateValuesSingleShot() // go thru all items (async) if (false) { + #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. var clientDescription = new Workstation.ServiceModel.Ua.ApplicationDescription { ApplicationName = "AASX Package Explorer", @@ -616,6 +617,8 @@ public async Task UpdateValuesSingleShot() // try opening a session and reading a few nodes. await _channel.OpenAsync(); + + #pragma warning restore CS0162 // Unerreichbarer Code wurde entdeckt. } // see: https://www.hanselman.com/blog/parallelforeachasync-in-net-6 diff --git a/src/AasxPluginAssetInterfaceDesc/AidModbusConnection.cs b/src/AasxPluginAssetInterfaceDesc/AidModbusConnection.cs index 9820c24f..7b417298 100644 --- a/src/AasxPluginAssetInterfaceDesc/AidModbusConnection.cs +++ b/src/AasxPluginAssetInterfaceDesc/AidModbusConnection.cs @@ -44,6 +44,7 @@ override public async Task Open() return true; } catch (Exception ex) { + LogInternally.That.SilentlyIgnoredError(ex); Client = null; return false; } @@ -74,7 +75,6 @@ override public int UpdateItemValue(AidIfxItemStatus item) if (item?.FormData?.Href?.HasContent() != true || item.FormData.Modv_function?.HasContent() != true) return 0; - int res = 0; // decode address + quantity // (assumption: 1 quantity = 2 bytes) @@ -115,7 +115,7 @@ override public int UpdateItemValue(AidIfxItemStatus item) byte[] od = id.ToArray(); if (quantity == 2) { - if (byteSequence == "" && wordSequence == "") // //byte sequence defined at the local level + if (byteSequence == "" && wordSequence == "") // byte sequence defined at the local level //byte sequence defined at the global level if ((mostSignificantByte == "" && mostSignificantWord == "") || diff --git a/src/AasxPluginAssetInterfaceDesc/AidMqttConnection.cs b/src/AasxPluginAssetInterfaceDesc/AidMqttConnection.cs index 1abf3ea2..642f1cf5 100644 --- a/src/AasxPluginAssetInterfaceDesc/AidMqttConnection.cs +++ b/src/AasxPluginAssetInterfaceDesc/AidMqttConnection.cs @@ -46,7 +46,7 @@ override public async Task Open() var options = new MqttClientOptionsBuilder() .WithTcpServer(TargetUri.Host, TargetUri.Port) // MQTT broker address and port - // .WithCredentials(username, password) // Set username and password + //// .WithCredentials(username, password) // Set username and password .WithClientId("AasxPackageExplorer") .WithCleanSession() .Build(); @@ -65,6 +65,7 @@ override public async Task Open() } catch (Exception ex) { + LogInternally.That.SilentlyIgnoredError(ex); Client = null; _subscribedTopics.Clear(); return false; @@ -83,7 +84,7 @@ private async Task Client_ApplicationMessageReceivedAsync(MqttApplicationMessage return; // payload? - // var payload = Encoding.UTF8.GetString(arg.ApplicationMessage.PayloadSegment); + //// var payload = Encoding.UTF8.GetString(arg.ApplicationMessage.PayloadSegment); var payload = arg.ApplicationMessage.ConvertPayloadToString(); if (payload?.HasContent() != true) return; diff --git a/src/AasxPluginAssetInterfaceDesc/AidOpcUaConnection.cs b/src/AasxPluginAssetInterfaceDesc/AidOpcUaConnection.cs index 19e800d5..531a6a6a 100644 --- a/src/AasxPluginAssetInterfaceDesc/AidOpcUaConnection.cs +++ b/src/AasxPluginAssetInterfaceDesc/AidOpcUaConnection.cs @@ -100,8 +100,9 @@ override public async Task Open() } catch (Exception ex) { + LogInternally.That.SilentlyIgnoredError(ex); Client = null; - // _subscribedTopics.Clear(); + //// _subscribedTopics.Clear(); return false; } } @@ -118,13 +119,13 @@ override public void Close() { try { - // Client.Cancel(); + //// Client.Cancel(); Client.Close(); } catch (Exception ex) { - ; + LogInternally.That.SilentlyIgnoredError(ex); } - // _subscribedTopics.Clear(); + //// _subscribedTopics.Clear(); } } @@ -151,7 +152,7 @@ override public async Task UpdateItemValueAsync(AidIfxItemStatus item) } catch (Exception ex) { - ; + LogInternally.That.SilentlyIgnoredError(ex); } return 0; diff --git a/src/AasxPluginAssetInterfaceDesc/AssetInterfaceAnyUiControl.cs b/src/AasxPluginAssetInterfaceDesc/AssetInterfaceAnyUiControl.cs index 2f4117f7..7c5beccd 100644 --- a/src/AasxPluginAssetInterfaceDesc/AssetInterfaceAnyUiControl.cs +++ b/src/AasxPluginAssetInterfaceDesc/AssetInterfaceAnyUiControl.cs @@ -332,7 +332,7 @@ protected void RenderPanelInner( } catch (Exception ex) { - ; + LogInternally.That.SilentlyIgnoredError(ex); } return new AnyUiLambdaActionNone(); }); @@ -368,7 +368,7 @@ protected void RenderPanelInner( } catch (Exception ex) { - ; + LogInternally.That.SilentlyIgnoredError(ex); } return new AnyUiLambdaActionNone(); }); @@ -393,7 +393,7 @@ protected void RenderPanelInner( } catch (Exception ex) { - ; + LogInternally.That.SilentlyIgnoredError(ex); } return new AnyUiLambdaActionNone(); }); @@ -418,7 +418,7 @@ protected void RenderPanelInner( } catch (Exception ex) { - ; + LogInternally.That.SilentlyIgnoredError(ex); } return new AnyUiLambdaActionNone(); }); @@ -600,7 +600,9 @@ protected void RenderTripleRowData( #region Timer //=========== + #pragma warning disable CS0414 private bool _inDispatcherTimer = false; + #pragma warning restore CS0414 private UInt64 _lastValueChanges = 0; private void DispatcherTimer_Tick(object sender, EventArgs e) diff --git a/src/AasxPluginAssetInterfaceDesc/Plugin.cs b/src/AasxPluginAssetInterfaceDesc/Plugin.cs index 122572ca..1232fd88 100644 --- a/src/AasxPluginAssetInterfaceDesc/Plugin.cs +++ b/src/AasxPluginAssetInterfaceDesc/Plugin.cs @@ -33,7 +33,7 @@ public class AasxPlugin : AasxPluginBase private AasxPluginAssetInterfaceDescription.AssetInterfaceOptions _options = new AasxPluginAssetInterfaceDescription.AssetInterfaceOptions(); - // TODO: make this multi-session!! + // TODO (MIHO, 2024-01-01): make this multi-session!! private AidAllInterfaceStatus _allInterfaceStatus = null; private AidInterfaceService _interfaceService = null; diff --git a/src/AasxPluginBomStructure/GenericBomCreator.cs b/src/AasxPluginBomStructure/GenericBomCreator.cs index 0ec76113..60e46fd0 100644 --- a/src/AasxPluginBomStructure/GenericBomCreator.cs +++ b/src/AasxPluginBomStructure/GenericBomCreator.cs @@ -700,9 +700,6 @@ public void RecurseOnLayout( // includes AnnotatedRelationshipElement x1 = this.FindReferableByReference(rel.First); x2 = this.FindReferableByReference(rel.Second); - - if (x1 == null || x2 == null) - ; } if (sme is Aas.IReferenceElement rfe) diff --git a/src/AasxPluginContactInformation/AasxPluginContactInformation.csproj b/src/AasxPluginContactInformation/AasxPluginContactInformation.csproj index 2f7b2921..8006024c 100644 --- a/src/AasxPluginContactInformation/AasxPluginContactInformation.csproj +++ b/src/AasxPluginContactInformation/AasxPluginContactInformation.csproj @@ -1,4 +1,4 @@ - + net8.0-windows Library diff --git a/src/AasxPluginContactInformation/ContactEntity.cs b/src/AasxPluginContactInformation/ContactEntity.cs index e036a76a..9e2d8e4e 100644 --- a/src/AasxPluginContactInformation/ContactEntity.cs +++ b/src/AasxPluginContactInformation/ContactEntity.cs @@ -82,7 +82,10 @@ public AnyUiBitmapInfo LoadImageFromPath(string fn) // convert here, as the tick-Thread in STA / UI thread try { - ImgContainerAnyUi.BitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapInfo(fn); + if (OperatingSystem.IsWindows()) + { + ImgContainerAnyUi.BitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapInfo(fn); + } } catch (Exception ex) { @@ -99,8 +102,11 @@ public AnyUiBitmapInfo LoadImageFromResource(string path) // convert here, as the tick-Thread in STA / UI thread try { - ImgContainerAnyUi.BitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapFromResource(path, + if (OperatingSystem.IsWindows()) + { + ImgContainerAnyUi.BitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapFromResource(path, assembly: Assembly.GetExecutingAssembly()); + } } catch (Exception ex) { diff --git a/src/AasxPluginContactInformation/ContactListAnyUiControl.cs b/src/AasxPluginContactInformation/ContactListAnyUiControl.cs index 48c3882a..a0a102b1 100644 --- a/src/AasxPluginContactInformation/ContactListAnyUiControl.cs +++ b/src/AasxPluginContactInformation/ContactListAnyUiControl.cs @@ -673,6 +673,8 @@ public void Update(params object[] args) private async Task GetFormDescForSingleContact( List sourceElems) { + await Task.Yield(); + // ask the plugin generic forms for information via event stack _eventStack?.PushEvent(new AasxIntegrationBase.AasxPluginResultEventInvokeOtherPlugin() { diff --git a/src/AasxPluginDigitalNameplate/AasxPluginDigitalNameplate.csproj b/src/AasxPluginDigitalNameplate/AasxPluginDigitalNameplate.csproj index bc83a260..87272304 100644 --- a/src/AasxPluginDigitalNameplate/AasxPluginDigitalNameplate.csproj +++ b/src/AasxPluginDigitalNameplate/AasxPluginDigitalNameplate.csproj @@ -1,4 +1,4 @@ - + net8.0-windows Library diff --git a/src/AasxPluginDigitalNameplate/NameplateAnyUiControl.cs b/src/AasxPluginDigitalNameplate/NameplateAnyUiControl.cs index 93b8a5bc..fa273183 100644 --- a/src/AasxPluginDigitalNameplate/NameplateAnyUiControl.cs +++ b/src/AasxPluginDigitalNameplate/NameplateAnyUiControl.cs @@ -416,7 +416,10 @@ protected AnyUiImage AddNamedImage( var imagePath = Path.Combine(basePath, il); // load - bitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapInfo(imagePath); + if (OperatingSystem.IsWindows()) + { + bitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapInfo(imagePath); + } } catch (Exception ex) { @@ -469,7 +472,10 @@ protected AnyUiImage AddQrCode( // make intermediate format from it // absurldy, this will AGAIN create an PNG for the HMTL side .. - bitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapInfo(img); + if (OperatingSystem.IsWindows()) + { + bitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapInfo(img); + } } } } @@ -501,10 +507,13 @@ protected AnyUiImage AddAasxFileImage( AnyUiBitmapInfo bitmapInfo = null; try { - bitmapInfo = AnyUiGdiHelper.LoadBitmapInfoFromPackage( - _package, aasFile.Value, - secureAccess: _secureAccess, - transparentBackground: true); + if (OperatingSystem.IsWindows()) + { + bitmapInfo = AnyUiGdiHelper.LoadBitmapInfoFromPackage( + _package, aasFile.Value, + secureAccess: _secureAccess, + transparentBackground: true); + } } catch (Exception ex) { @@ -616,6 +625,7 @@ public AnyUiFrameworkElement RenderAnyUiNameplateData( if (false) { // screw by border + #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. var brd = uitk.Set( uitk.AddSmallBorderTo(plateGrid, screwPos[2 * i + 0], screwPos[2 * i + 1], margin: new AnyUiThickness(2), @@ -626,6 +636,7 @@ public AnyUiFrameworkElement RenderAnyUiNameplateData( skipForTarget: AnyUiTargetPlatform.Browser); brd.Height = 6; brd.MaxHeight = 12; + #pragma warning restore CS0162 // Unerreichbarer Code wurde entdeckt. } else { @@ -861,23 +872,14 @@ public AnyUiFrameworkElement RenderAnyUiNameplateData( // render EITHER image or text AnyUiBitmapInfo markImg = null; - if (_package != null) - markImg = AnyUiGdiHelper.LoadBitmapInfoFromPackage(_package, mark.File?.Value); + if (OperatingSystem.IsWindows()) + { + if (_package != null) + markImg = AnyUiGdiHelper.LoadBitmapInfoFromPackage(_package, mark.File?.Value); + } if (markImg != null) { - // render IMAGE - // dead-csharp off - //var img = uitk.Set( - // new AnyUiImage() { Stretch = AnyUiStretch.Uniform, BitmapInfo = markImg }, - // margin: new AnyUiThickness(0, 0, 4, 4), - // horizontalAlignment: AnyUiHorizontalAlignment.Stretch, - // verticalAlignment: AnyUiVerticalAlignment.Stretch); - //wrapPanel.Add(img); - - //img.MaxHeight = 70; - //img.MaxWidth = 100; - // dead-csharp on var img = uitk.Set( uitk.AddSmallImageTo(oneMarkGrid, 0, 0, margin: new AnyUiThickness(0, 0, 4, 4), @@ -889,25 +891,6 @@ public AnyUiFrameworkElement RenderAnyUiNameplateData( } else { - // dead-csharp off - // render TEXT - - //var tb = new AnyUiTextBlock() - //{ - // Text = "" + mark.Name, - // FontSize = 1.4, - // Margin = new AnyUiThickness(0, 0, 4, 4), - // Padding = new AnyUiThickness(4), - // Background = AnyUiBrushes.White, - // TextWrapping = AnyUiTextWrapping.Wrap, - // VerticalAlignment = AnyUiVerticalAlignment.Stretch, - // VerticalContentAlignment = AnyUiVerticalAlignment.Center - //}; - //wrapPanel.Add(tb); - - //tb.MaxHeight = 70; - //tb.MaxWidth = 100; - // dead-csharp on var tb = uitk.Set( uitk.AddSmallBasicLabelTo(oneMarkGrid, 0, 0, content: "" + mark.Name, diff --git a/src/AasxPluginDocumentShelf/AasxPluginDocumentShelf.csproj b/src/AasxPluginDocumentShelf/AasxPluginDocumentShelf.csproj index dd1c773d..1c2031ca 100644 --- a/src/AasxPluginDocumentShelf/AasxPluginDocumentShelf.csproj +++ b/src/AasxPluginDocumentShelf/AasxPluginDocumentShelf.csproj @@ -1,9 +1,9 @@ - + net8.0-windows Library false - true + false false false diff --git a/src/AasxPluginDocumentShelf/DocumentEntity.cs b/src/AasxPluginDocumentShelf/DocumentEntity.cs index 8355db14..e323cf70 100644 --- a/src/AasxPluginDocumentShelf/DocumentEntity.cs +++ b/src/AasxPluginDocumentShelf/DocumentEntity.cs @@ -143,7 +143,10 @@ public AnyUiBitmapInfo LoadImageFromPath(string fn) } return bi; #else - ImgContainerAnyUi.BitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapInfo(fn); + if (OperatingSystem.IsWindows()) + { + ImgContainerAnyUi.BitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapInfo(fn); + } #endif } catch (Exception ex) @@ -161,8 +164,11 @@ public AnyUiBitmapInfo LoadImageFromResource(string path) // convert here, as the tick-Thread in STA / UI thread try { - ImgContainerAnyUi.BitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapFromResource(path, - assembly: Assembly.GetExecutingAssembly()); + if (OperatingSystem.IsWindows()) + { + ImgContainerAnyUi.BitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapFromResource(path, + assembly: Assembly.GetExecutingAssembly()); + } } catch (Exception ex) { diff --git a/src/AasxPluginDocumentShelf/ShelfAnyUiControl.cs b/src/AasxPluginDocumentShelf/ShelfAnyUiControl.cs index 6e8a564d..a2b4b0c6 100644 --- a/src/AasxPluginDocumentShelf/ShelfAnyUiControl.cs +++ b/src/AasxPluginDocumentShelf/ShelfAnyUiControl.cs @@ -874,6 +874,8 @@ private async Task GetFormDescForV12( List sourceElems, Action lambda) { + await Task.Yield(); + // ask the plugin generic forms for information via event stack _eventStack?.PushEvent(new AasxIntegrationBase.AasxPluginResultEventInvokeOtherPlugin() { @@ -1441,10 +1443,6 @@ private async Task ButtonTabPanels_Click(string cmd, stri #region Timer //=========== - private object mutexDocEntitiesInPreview = new object(); - private int numDocEntitiesInPreview = 0; - private const int maxDocEntitiesInPreview = 3; - private bool _inDispatcherTimer = false; protected int _dispatcherNumException = 0; diff --git a/src/AasxPluginDocumentShelf/ShelfPreviewService.cs b/src/AasxPluginDocumentShelf/ShelfPreviewService.cs index c0e23268..bde57363 100644 --- a/src/AasxPluginDocumentShelf/ShelfPreviewService.cs +++ b/src/AasxPluginDocumentShelf/ShelfPreviewService.cs @@ -180,8 +180,13 @@ private async Task DispatcherTimer_Tick(object sender, EventArgs e) if (ent?.Package != null && ent.PackageFn != null && ent.SupplFn != null) { // try check if Magick.NET library is available - var thumbBI = await AnyUiGdiHelper.MakePreviewFromPackageOrUrlAsync( - ent.Package, ent.SupplFn, ent.AasId, ent.SmId, ent.IdShortPath); + AnyUiBitmapInfo thumbBI = null; + if (OperatingSystem.IsWindows()) + { + await AnyUiGdiHelper.MakePreviewFromPackageOrUrlAsync( + ent.Package, ent.SupplFn, ent.AasId, ent.SmId, ent.IdShortPath); + } + if (thumbBI != null) { ent.Bitmap = thumbBI; @@ -194,7 +199,7 @@ private async Task DispatcherTimer_Tick(object sender, EventArgs e) // // makes only sense under Windows - if (OperatingSystemHelper.IsWindows()) + if (OperatingSystem.IsWindows()) { // from package? var inputFn = ent.SupplFn; @@ -231,8 +236,11 @@ private async Task DispatcherTimer_Tick(object sender, EventArgs e) // try load try - { - lambdaEntity.Bitmap = AnyUiGdiHelper.CreateAnyUiBitmapInfo(outputFnBuffer); + { + if (OperatingSystem.IsWindows()) + { + lambdaEntity.Bitmap = AnyUiGdiHelper.CreateAnyUiBitmapInfo(outputFnBuffer); + } } catch (Exception ex) { diff --git a/src/AasxPluginExportTable/AasxPluginExportTable.csproj b/src/AasxPluginExportTable/AasxPluginExportTable.csproj index 9cc5ce1e..30cf0412 100644 --- a/src/AasxPluginExportTable/AasxPluginExportTable.csproj +++ b/src/AasxPluginExportTable/AasxPluginExportTable.csproj @@ -1,9 +1,9 @@ - + net8.0-windows library false - true + false diff --git a/src/AasxPluginExportTable/Smt/ExportSmt.cs b/src/AasxPluginExportTable/Smt/ExportSmt.cs index a8fbf1b5..bbbdb417 100644 --- a/src/AasxPluginExportTable/Smt/ExportSmt.cs +++ b/src/AasxPluginExportTable/Smt/ExportSmt.cs @@ -108,7 +108,6 @@ protected async Task ProcessImageLink(Aas.ISubmodelElement sme, string dataExt = ".bin"; if (sme is Aas.IFile smeFile) { - // old: data = _package?.GetBytesFromPackageOrExternal(smeFile.Value); data = await _package?.GetBytesFromPackageOrExternalAsync( smeFile.Value, aasId: aasId, smId: smId, idShortPath: idShortPath); diff --git a/src/AasxPluginExportTable/Table/ExportTableProcessor.cs b/src/AasxPluginExportTable/Table/ExportTableProcessor.cs index 264e24f4..b6e22b84 100644 --- a/src/AasxPluginExportTable/Table/ExportTableProcessor.cs +++ b/src/AasxPluginExportTable/Table/ExportTableProcessor.cs @@ -769,10 +769,6 @@ public void ProcessCellRecord(CellRecord cr) // do the replace advancedReplace = am.Replace; - // debug - if (am.Replace != "") - ; - // now care for regognized groups for (int i = 1; i < m.Groups.Count; i++) advancedReplace = advancedReplace @@ -1305,7 +1301,7 @@ private void ExportWord_AppendTableCell(TableRow tr, CellRecord cr) var lines = cr.Text.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries); foreach (var l in lines) { - if (run.ChildElements != null && run.ChildElements.Count > 0) + if (run.ChildElements.Count > 0) run.AppendChild(new Break()); run.AppendChild(new Text(l)); } diff --git a/src/AasxPluginExportTable/Table/ImportTableWordProvider.cs b/src/AasxPluginExportTable/Table/ImportTableWordProvider.cs index 3d47fa8d..f4e6186a 100644 --- a/src/AasxPluginExportTable/Table/ImportTableWordProvider.cs +++ b/src/AasxPluginExportTable/Table/ImportTableWordProvider.cs @@ -59,9 +59,6 @@ public string Cell(int row, int col) if (runs != null) foreach (var r in runs) { - if (r.ChildElements == null) - continue; - foreach (var rc in r.ChildElements) { if (rc is Text rct) diff --git a/src/AasxPluginExportTable/Uml/PlantUmlWriter.cs b/src/AasxPluginExportTable/Uml/PlantUmlWriter.cs index 200b9055..d892bae3 100644 --- a/src/AasxPluginExportTable/Uml/PlantUmlWriter.cs +++ b/src/AasxPluginExportTable/Uml/PlantUmlWriter.cs @@ -204,6 +204,7 @@ public UmlHandle AddClass(Aas.IReferable rf, string visIdShort) // see "not_promising" // attempt to produce object / map diagram + #pragma warning disable CS0162 // Unerreichbarer Code wurde entdeckt. Writeln($"map {FormatAs(visIdShort, classId)} {{"); if (!_options.Outline) @@ -222,6 +223,8 @@ public UmlHandle AddClass(Aas.IReferable rf, string visIdShort) Writeln($"}}"); Writeln(""); + + #pragma warning restore CS0162 // Unerreichbarer Code wurde entdeckt. } return new UmlHandle() { Id = classId }; diff --git a/src/AasxPluginGenericForms/AasxPluginGenericForms.csproj b/src/AasxPluginGenericForms/AasxPluginGenericForms.csproj index 838e3caf..a96807f4 100644 --- a/src/AasxPluginGenericForms/AasxPluginGenericForms.csproj +++ b/src/AasxPluginGenericForms/AasxPluginGenericForms.csproj @@ -1,4 +1,4 @@ - + net8.0-windows library diff --git a/src/AasxPluginImageMap/AasxPluginImageMap.csproj b/src/AasxPluginImageMap/AasxPluginImageMap.csproj index 1a2c49d2..9f69ce8a 100644 --- a/src/AasxPluginImageMap/AasxPluginImageMap.csproj +++ b/src/AasxPluginImageMap/AasxPluginImageMap.csproj @@ -1,9 +1,9 @@ - + net8.0-windows Library false - true + false false false diff --git a/src/AasxPluginImageMap/ImageMapAnyUiControl.cs b/src/AasxPluginImageMap/ImageMapAnyUiControl.cs index 3dc995aa..31e01090 100644 --- a/src/AasxPluginImageMap/ImageMapAnyUiControl.cs +++ b/src/AasxPluginImageMap/ImageMapAnyUiControl.cs @@ -77,7 +77,10 @@ public class ImageMapAnyUiControl public ImageMapAnyUiControl() { // start a timer - AnyUiTimerHelper.CreatePluginTimer(1000, DispatcherTimer_Tick); + if (OperatingSystem.IsWindowsVersionAtLeast(7, 0, 0)) + { + AnyUiTimerHelper.CreatePluginTimer(1000, DispatcherTimer_Tick); + } } public void Start( @@ -412,7 +415,10 @@ protected void SetBasicInfos() var imgBytes = task.Result; // convert to image - bi = AnyUiGdiHelper.LoadBitmapInfoFromBytes(imgBytes); + if (OperatingSystem.IsWindows()) + { + bi = AnyUiGdiHelper.LoadBitmapInfoFromBytes(imgBytes); + } } // BLOB @@ -420,8 +426,11 @@ protected void SetBasicInfos() AasxPredefinedConcepts.ImageMap.Static.CD_ImageFile, MatchMode.Relaxed); if (be?.Value != null) - { - bi = AnyUiGdiHelper.LoadBitmapInfoFromBytes(be.Value); + { + if (OperatingSystem.IsWindows()) + { + bi = AnyUiGdiHelper.LoadBitmapInfoFromBytes(be.Value); + } } // set diff --git a/src/AasxPluginKnownSubmodels/AasxPluginKnownSubmodels.csproj b/src/AasxPluginKnownSubmodels/AasxPluginKnownSubmodels.csproj index 32ebe1ff..8ead1a7d 100644 --- a/src/AasxPluginKnownSubmodels/AasxPluginKnownSubmodels.csproj +++ b/src/AasxPluginKnownSubmodels/AasxPluginKnownSubmodels.csproj @@ -1,4 +1,4 @@ - + net8.0-windows Library diff --git a/src/AasxPluginKnownSubmodels/KnownSubmodelAnyUiControl.cs b/src/AasxPluginKnownSubmodels/KnownSubmodelAnyUiControl.cs index 6f644fb3..b224f685 100644 --- a/src/AasxPluginKnownSubmodels/KnownSubmodelAnyUiControl.cs +++ b/src/AasxPluginKnownSubmodels/KnownSubmodelAnyUiControl.cs @@ -232,7 +232,10 @@ protected void RenderPanelInner( var imagePath = Path.Combine(basePath, il); // load - bitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapInfo(imagePath); + if (OperatingSystem.IsWindows()) + { + bitmapInfo = AnyUiGdiHelper.CreateAnyUiBitmapInfo(imagePath); + } } catch {; } diff --git a/src/AasxPluginPlotting/PlotHelpers.cs b/src/AasxPluginPlotting/PlotHelpers.cs index c6d6a73a..f5207f4d 100644 --- a/src/AasxPluginPlotting/PlotHelpers.cs +++ b/src/AasxPluginPlotting/PlotHelpers.cs @@ -32,9 +32,11 @@ This source code may use other Open Source software components (see LICENSE.txt) using AdminShellNS; using Extensions; using ScottPlot; +using System.Runtime.Versioning; namespace AasxPluginPlotting { + [SupportedOSPlatform("windows")] public static class PlotHelpers { public static Brush BrushFrom(System.Drawing.Color col) diff --git a/src/AasxPluginPlotting/PlotItem.cs b/src/AasxPluginPlotting/PlotItem.cs index 8737afb7..60e9bd2c 100644 --- a/src/AasxPluginPlotting/PlotItem.cs +++ b/src/AasxPluginPlotting/PlotItem.cs @@ -30,10 +30,12 @@ This source code may use other Open Source software components (see LICENSE.txt) using AdminShellNS; using Extensions; using ScottPlot; +using System.Runtime.Versioning; namespace AasxPluginPlotting { // ReSharper disable once ClassWithVirtualMembersNeverInherited.Global + [SupportedOSPlatform("windows")] public class PlotItem : /* IEquatable, */ INotifyPropertyChanged, IComparable { public event PropertyChangedEventHandler PropertyChanged; @@ -182,6 +184,7 @@ public class RowColTuple public int Cols { get; set; } } + [SupportedOSPlatform("windows")] public class ListOfPlotItem : ObservableCollection { public RowColTuple GetMaxRowCol() @@ -456,8 +459,11 @@ public List RenderAllGroups(StackPanel panel, double defPlotHeigh var signal = wpfPlot.Plot.AddSignal(pb.Ydata, label: label); PlotHelpers.SetPlottableProperties(signal, pi.Args); pb.Plottable = signal; + +#pragma warning disable CS0618 // Suppress obsolete warning if (signal.FillColor1.HasValue) pi.ValueForeground = PlotHelpers.BrushFrom(signal.FillColor1.Value); +#pragma warning restore CS0618 // Re-enable obsolete warning } else { diff --git a/src/AasxPluginPlotting/PlottingViewControl.xaml.cs b/src/AasxPluginPlotting/PlottingViewControl.xaml.cs index c2911aed..ced1c7b6 100644 --- a/src/AasxPluginPlotting/PlottingViewControl.xaml.cs +++ b/src/AasxPluginPlotting/PlottingViewControl.xaml.cs @@ -25,11 +25,13 @@ This source code may use other Open Source software components (see LICENSE.txt) using AdminShellNS; using Extensions; using ScottPlot; +using System.Runtime.Versioning; // ReSharper disable CompareOfFloatsByEqualityOperator namespace AasxPluginPlotting { + [SupportedOSPlatform("windows")] public partial class PlottingViewControl : UserControl { protected ListOfPlotItem _plotItems = new ListOfPlotItem(); diff --git a/src/AasxPluginPlotting/Plugin.cs b/src/AasxPluginPlotting/Plugin.cs index 6d42d206..9433e320 100644 --- a/src/AasxPluginPlotting/Plugin.cs +++ b/src/AasxPluginPlotting/Plugin.cs @@ -130,7 +130,10 @@ public class AasxPlugin : AasxPluginBase if (args.Length < 1 || !(args[0] is AasEventMsgEnvelope ev)) return null; - _viewControl?.PushEvent(ev); + if (OperatingSystem.IsWindows()) + { + _viewControl?.PushEvent(ev); + } } // can basic helper help to reduce lines of code? @@ -159,8 +162,11 @@ public class AasxPlugin : AasxPluginBase { // simple delete reference to view control // this shall also stop event notifications! - if (_viewControl != null) - _viewControl.Stop(); + if (OperatingSystem.IsWindows()) + { + if (_viewControl != null) + _viewControl.Stop(); + } _viewControl = null; } @@ -173,18 +179,26 @@ public class AasxPlugin : AasxPluginBase if (package == null || sm == null || master == null) return null; - // the Submodel elements need to have parents - sm.SetAllParents(); + if (OperatingSystem.IsWindows()) + { - // create TOP control - _viewControl = new AasxPluginPlotting.PlottingViewControl(); - _viewControl.Start(package, sm, _options, _eventStack, _log); - master.Children.Add(_viewControl); + // the Submodel elements need to have parents + sm.SetAllParents(); - // give object back - var res = new AasxPluginResultBaseObject(); - res.obj = _viewControl; - return res; + // create TOP control + _viewControl = new AasxPluginPlotting.PlottingViewControl(); + _viewControl.Start(package, sm, _options, _eventStack, _log); + master.Children.Add(_viewControl); + + // give object back + var res = new AasxPluginResultBaseObject(); + res.obj = _viewControl; + return res; + } + else + { + return null; + } } // default diff --git a/src/AasxPluginPlotting/WpfPlotViewControlCumulative.xaml.cs b/src/AasxPluginPlotting/WpfPlotViewControlCumulative.xaml.cs index b18dcdc4..bcef7050 100644 --- a/src/AasxPluginPlotting/WpfPlotViewControlCumulative.xaml.cs +++ b/src/AasxPluginPlotting/WpfPlotViewControlCumulative.xaml.cs @@ -10,6 +10,7 @@ This source code may use other Open Source software components (see LICENSE.txt) using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Versioning; using System.Text; using System.Threading.Tasks; using System.Windows; @@ -27,6 +28,7 @@ namespace AasxPluginPlotting /// /// Interaktionslogik für WpfPlotViewControl.xaml /// + [SupportedOSPlatform("windows")] public partial class WpfPlotViewControlCumulative : UserControl, IWpfPlotViewControl { public ScottPlot.WpfPlot WpfPlot { get { return WpfPlotItself; } } diff --git a/src/AasxPluginPlotting/WpfPlotViewControlHorizontal.xaml.cs b/src/AasxPluginPlotting/WpfPlotViewControlHorizontal.xaml.cs index 2454d741..a3a13454 100644 --- a/src/AasxPluginPlotting/WpfPlotViewControlHorizontal.xaml.cs +++ b/src/AasxPluginPlotting/WpfPlotViewControlHorizontal.xaml.cs @@ -10,6 +10,7 @@ This source code may use other Open Source software components (see LICENSE.txt) using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.Versioning; using System.Text; using System.Threading.Tasks; using System.Windows; @@ -27,6 +28,7 @@ namespace AasxPluginPlotting /// /// Interaktionslogik für WpfPlotViewControl.xaml /// + [SupportedOSPlatform("windows")] public partial class WpfPlotViewControlHorizontal : UserControl, IWpfPlotViewControl { public ScottPlot.WpfPlot WpfPlot { get { return WpfPlotItself; } } diff --git a/src/AasxPluginProductChangeNotifications/PcnAnyUiControl.cs b/src/AasxPluginProductChangeNotifications/PcnAnyUiControl.cs index 12b13785..68e91260 100644 --- a/src/AasxPluginProductChangeNotifications/PcnAnyUiControl.cs +++ b/src/AasxPluginProductChangeNotifications/PcnAnyUiControl.cs @@ -1188,16 +1188,19 @@ protected void InnerDocIdentificationData( && aas.AssetInformation is Aas.IAssetInformation ai && ai.DefaultThumbnail?.Path != null) { - var img = AnyUiGdiHelper.LoadBitmapInfoFromPackage(package, ai.DefaultThumbnail.Path); - - uitk.Set( - uitk.AddSmallImageTo(twoColGrid, 0, 1, - margin: new AnyUiThickness(2, 8, 2, 2), - stretch: AnyUiStretch.Uniform, - bitmap: img), - maxHeight: 300, maxWidth: 300, - horizontalAlignment: AnyUiHorizontalAlignment.Stretch, - verticalAlignment: AnyUiVerticalAlignment.Stretch); + if (OperatingSystem.IsWindows()) + { + var img = AnyUiGdiHelper.LoadBitmapInfoFromPackage(package, ai.DefaultThumbnail.Path); + + uitk.Set( + uitk.AddSmallImageTo(twoColGrid, 0, 1, + margin: new AnyUiThickness(2, 8, 2, 2), + stretch: AnyUiStretch.Uniform, + bitmap: img), + maxHeight: 300, maxWidth: 300, + horizontalAlignment: AnyUiHorizontalAlignment.Stretch, + verticalAlignment: AnyUiVerticalAlignment.Stretch); + } } // identification info diff --git a/src/AasxPluginTechnicalData/TechnicalDataAnyUiControl.cs b/src/AasxPluginTechnicalData/TechnicalDataAnyUiControl.cs index f5fb3e68..658898f2 100644 --- a/src/AasxPluginTechnicalData/TechnicalDataAnyUiControl.cs +++ b/src/AasxPluginTechnicalData/TechnicalDataAnyUiControl.cs @@ -47,8 +47,7 @@ public class TechnicalDataAnyUiControl protected AnyUiSmallWidgetToolkit _uitk = new AnyUiSmallWidgetToolkit(); - protected AnyUiGdiHelper.DelayedFileContentLoader _bitmapLoader = - new AnyUiGdiHelper.DelayedFileContentLoader(); + protected AnyUiGdiHelper.DelayedFileContentLoader _bitmapLoader = null; #endregion @@ -68,8 +67,18 @@ public class TechnicalDataAnyUiControl // ReSharper disable EmptyConstructor public TechnicalDataAnyUiControl() { + // the loader + if (OperatingSystem.IsWindows()) + { + _bitmapLoader = + new AnyUiGdiHelper.DelayedFileContentLoader(); + } + // start a timer - AnyUiTimerHelper.CreatePluginTimerAsync(300, lambdaTick: async () => await DispatcherTimer_Tick(null, null)); + if (OperatingSystem.IsWindowsVersionAtLeast(7, 0, 0)) + { + AnyUiTimerHelper.CreatePluginTimerAsync(300, lambdaTick: async () => await DispatcherTimer_Tick(null, null)); + } } // ReSharper enable EmptyConstructor @@ -356,16 +365,19 @@ protected void RenderPanelHeader( var fe = smcGeneral.Value.FindFirstSemanticIdAs( theDefs.CD_ManufacturerLogo.GetSingleKey(), MatchMode.Relaxed); - // for now - biManuLogo = AnyUiGdiHelper.LoadBitmapInfoFromPackage( - package, fe?.Value, - secureAccess: _secureAccess); - - // for later - _bitmapLoader.Add(package, _aas, _submodel, fe, (fcl, bi) => + if (OperatingSystem.IsWindowsVersionAtLeast(7, 0, 0)) { - imageManuLogo.BitmapInfo = bi; - }); + // for now + biManuLogo = AnyUiGdiHelper.LoadBitmapInfoFromPackage( + package, fe?.Value, + secureAccess: _secureAccess); + + // for later + _bitmapLoader.Add(package, _aas, _submodel, fe, (fcl, bi) => + { + imageManuLogo.BitmapInfo = bi; + }); + } } #endif } @@ -434,13 +446,16 @@ protected void RenderPanelHeader( thisImage.BitmapInfo = bi; #else // for now - imageElem.BitmapInfo = AnyUiGdiHelper.LoadBitmapInfoFromPackage(package, fePI.Value); - - // for later - _bitmapLoader.Add(package, _aas, _submodel, fePI, (fcl, bi) => + if (OperatingSystem.IsWindowsVersionAtLeast(7, 0, 0)) { - imageElem.BitmapInfo = bi; - }); + imageElem.BitmapInfo = AnyUiGdiHelper.LoadBitmapInfoFromPackage(package, fePI.Value); + + // for later + _bitmapLoader.Add(package, _aas, _submodel, fePI, (fcl, bi) => + { + imageElem.BitmapInfo = bi; + }); + } #endif } @@ -849,14 +864,18 @@ private async Task DispatcherTimer_Tick(object sender, EventArgs e) { try { - if ((await _bitmapLoader?.TickToLoad(_secureAccess)) == true) + await Task.Yield(); + if (OperatingSystem.IsWindowsVersionAtLeast(7, 0, 0)) { - _eventStack?.PushEvent(new AasxPluginEventReturnUpdateAnyUi() + if ((await _bitmapLoader?.TickToLoad(_secureAccess)) == true) { - PluginName = null, - Mode = AnyUiRenderMode.StatusToUi, - UseInnerGrid = true - }); + _eventStack?.PushEvent(new AasxPluginEventReturnUpdateAnyUi() + { + PluginName = null, + Mode = AnyUiRenderMode.StatusToUi, + UseInnerGrid = true + }); + } } } catch (Exception ex) { diff --git a/src/AasxPluginUaNetClient/Plugin.cs b/src/AasxPluginUaNetClient/Plugin.cs index 29055722..61e70aaf 100644 --- a/src/AasxPluginUaNetClient/Plugin.cs +++ b/src/AasxPluginUaNetClient/Plugin.cs @@ -47,7 +47,7 @@ public class AasxPlugin : AasxPluginBase _log.Info("InitPlugin() called with args = {0}", (args == null) ? "" : string.Join(", ", args)); } - public AasxPluginActionDescriptionBase[] ListActions() + public new AasxPluginActionDescriptionBase[] ListActions() { var res = ListActionsBasicHelper( enableCheckVisualExt: false, diff --git a/src/AasxPluginWebBrowser/Plugin.cs b/src/AasxPluginWebBrowser/Plugin.cs index 9df9d091..ef660e7c 100644 --- a/src/AasxPluginWebBrowser/Plugin.cs +++ b/src/AasxPluginWebBrowser/Plugin.cs @@ -149,7 +149,7 @@ public void OnDownloadUpdated(IWebBrowser chromiumWebBrowser, IBrowser browser, // ok, start this._browser = new CefSharp.Wpf.ChromiumWebBrowser(); this._browser.DownloadHandler = this; - // this._browser.RequestHandler = this; + //// this._browser.RequestHandler = this; this._browser.Address = url; this._browser.InvalidateVisual(); @@ -222,7 +222,11 @@ bool IRequestHandler.OnOpenUrlFromTab(IWebBrowser chromiumWebBrowser, IBrowser b return false; } - IResourceRequestHandler IRequestHandler.GetResourceRequestHandler(IWebBrowser chromiumWebBrowser, IBrowser browser, IFrame frame, IRequest request, bool isNavigation, bool isDownload, string requestInitiator, ref bool disableDefaultHandling) + IResourceRequestHandler IRequestHandler.GetResourceRequestHandler( + IWebBrowser chromiumWebBrowser, + IBrowser browser, IFrame frame, + IRequest request, bool isNavigation, bool isDownload, + string requestInitiator, ref bool disableDefaultHandling) { return null; } diff --git a/src/AasxPredefinedConcepts/BaseTopUtil/DefinitionsPool.cs b/src/AasxPredefinedConcepts/BaseTopUtil/DefinitionsPool.cs index e8290391..87d08f46 100644 --- a/src/AasxPredefinedConcepts/BaseTopUtil/DefinitionsPool.cs +++ b/src/AasxPredefinedConcepts/BaseTopUtil/DefinitionsPool.cs @@ -47,7 +47,7 @@ public override string DisplayType } } - public override string DisplayName { get { return (Ref != null) ? Ref.IdShort : ""; } } + public override string DisplayName { get { return (Ref != null) ? (Ref.IdShort ?? "") : ""; } } public override string DisplayId { @@ -187,7 +187,7 @@ public void IndexReferables(string Domain, IEnumerable indexRef) { if (ir == null) continue; - this.Add(new DefinitionsPoolReferableEntity(ir, Domain, ir.IdShort)); + this.Add(new DefinitionsPoolReferableEntity(ir, Domain, ir.IdShort ?? "")); } } diff --git a/src/AasxPredefinedConcepts/BaseTopUtil/PredefinedConceptsClassMapper.cs b/src/AasxPredefinedConcepts/BaseTopUtil/PredefinedConceptsClassMapper.cs index f9a91f4f..87e3e727 100644 --- a/src/AasxPredefinedConcepts/BaseTopUtil/PredefinedConceptsClassMapper.cs +++ b/src/AasxPredefinedConcepts/BaseTopUtil/PredefinedConceptsClassMapper.cs @@ -300,8 +300,10 @@ private static void ExportCSharpMapperSingleItems( // allow skipping to new line string nl = ""; +#if __only_test if (false) nl = $"{System.Environment.NewLine}{indent} "; +#endif // if using additional interfaces, for new List<>(), some dynamic casting needs to occur string dynCast = ""; @@ -507,7 +509,6 @@ private static void ExportCSharpMapperSingleItemAssigment( if (rf is Aas.IRange rng) { var dt = CSharpTypeFrom(rng.ValueType, specificNetType: true); - // snippets.WriteLine($"{indentPlus}{idsff} = new AasClassMapperRange<{dt}>(other.{idsff}) ;"); assignLambda($"AasClassMapperRange<{dt}", false, idsff); } @@ -517,7 +518,6 @@ private static void ExportCSharpMapperSingleItemAssigment( if (rf is Aas.IFile fl) { - // snippets.WriteLine($"{indentPlus}{idsff} = new AasClassMapperFile(other.{idsff}) ;"); assignLambda($"AasClassMapperFile", false, idsff); } @@ -527,7 +527,6 @@ private static void ExportCSharpMapperSingleItemAssigment( if (rf is Aas.IMultiLanguageProperty mlp) { - // snippets.WriteLine($"{indentPlus}{idsff} = new List(other.{idsff}) ;"); assignLambda($"List", false, idsff); } @@ -537,7 +536,6 @@ private static void ExportCSharpMapperSingleItemAssigment( if (rf is Aas.IReferenceElement rfe) { - // snippets.WriteLine($"{indentPlus}{idsff} = new AasClassMapperHintedReference(other.{idsff}) ;"); assignLambda($"AasClassMapperHintedReference", false, idsff); } @@ -547,7 +545,6 @@ private static void ExportCSharpMapperSingleItemAssigment( if (rf is Aas.IRelationshipElement rle) { - // snippets.WriteLine($"{indentPlus}{idsff} = new AasClassMapperHintedRelation(other.{idsff}) ;"); assignLambda($"AasClassMapperHintedRelation", false, idsff); } @@ -555,33 +552,6 @@ private static void ExportCSharpMapperSingleItemAssigment( // SMC, SML .. // -#if __can_be_replaced - if ((rf is Aas.Submodel - || rf is Aas.SubmodelElementCollection - || rf is Aas.SubmodelElementList) - && cdRef?.HasContent() == true) - { - // use the upgrade constructor! - if (card == FormMultiplicity.One) - { - snippets.WriteLine($"{indentPlus}{idsff} = new CD_{cdff}(other.{idsff}) ;"); - } - else - if (card == FormMultiplicity.ZeroToOne) - { - snippets.WriteLine($"{indentPlus}{idsff} = (other.{idsff} == null) ? null : new CD_{cdff}(other.{idsff}) ;"); - } - else - if (card == FormMultiplicity.ZeroToMany || card == FormMultiplicity.OneToMany) - { - snippets.WriteLine($"if (other.{idsff} != null)"); - snippets.WriteLine($"{indentPlusPlus}{idsff} = new List(other.{idsff}.Select((o) => new CD_{cdff}(o))) ;"); - } - else - throw new NotImplementedException("ExportCSharpMapperSingleItemAssigment(): unknown cardinality!"); - } -#endif - if ((rf is Aas.Submodel || rf is Aas.SubmodelElementCollection || rf is Aas.SubmodelElementList) @@ -671,7 +641,6 @@ private static List ExportCSharpPrepareDistinctClasses( // add Submodel at last, to be sure it is distinct distElems.Add(new ExportCSharpClassDef(env, sm)); - // distElems.Reverse(); // ok return distElems; @@ -897,8 +866,6 @@ This source code was auto-generated by the AASX Package Explorer. addBaseClass: nsBaseClasses, removeEnumerationTemplate: removeEnumerationTemplate); - // ExportCSharpMapperSingleItems(" ", env, sm, snippets); - snippets.WriteLine($"}}"); snippets.WriteLine($""); } @@ -1269,8 +1236,8 @@ private static void ParseAasElemFillData(ElemAttrInfo eai, Aas.ISubmodelElement else if ((eai.Attr.Card == AasxPredefinedCardinality.ZeroToMany || eai.Attr.Card == AasxPredefinedCardinality.OneToMany) - // && eai.Obj.GetType().IsGenericType - // && eai.Obj.GetType().GetGenericTypeDefinition() == typeof(List<>)) + //// && eai.Obj.GetType().IsGenericType + //// && eai.Obj.GetType().GetGenericTypeDefinition() == typeof(List<>)) && eai.FiPi.FiPiType.IsGenericType && eai.FiPi.FiPiType.GetGenericTypeDefinition() == typeof(List<>)) { @@ -1342,7 +1309,7 @@ public static void ParseAasElemsToObject(Aas.IReferable root, object obj, // find fields for this object var t = obj.GetType(); - // var lf = t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); + //// var lf = t.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); var lf = FieldPropertyInfo.GetFieldProperties(t, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (var fipi in lf) { diff --git a/src/AasxPredefinedConcepts/Mappings/MappingsAssetInterfacesDescription.cs b/src/AasxPredefinedConcepts/Mappings/MappingsAssetInterfacesDescription.cs index b36edc76..44d1b4fc 100644 --- a/src/AasxPredefinedConcepts/Mappings/MappingsAssetInterfacesDescription.cs +++ b/src/AasxPredefinedConcepts/Mappings/MappingsAssetInterfacesDescription.cs @@ -310,7 +310,6 @@ public class CD_InterfaceMetadata { [AasConcept(Cd = "https://www.w3.org/2019/wot/td#PropertyAffordance", Card = AasxPredefinedCardinality.ZeroToOne)] public CD_PropertiesAffordance Properties = null; - // public CD_Properties Properties = null; [AasConcept(Cd = "https://www.w3.org/2019/wot/td#ActionAffordance", Card = AasxPredefinedCardinality.ZeroToOne)] public CD_Actions Actions = null; diff --git a/src/AasxPredefinedConcepts/Mappings/ProductChangeNotifications/MappingsPcnHelper.cs b/src/AasxPredefinedConcepts/Mappings/ProductChangeNotifications/MappingsPcnHelper.cs index 6eff1e87..48f4aea9 100644 --- a/src/AasxPredefinedConcepts/Mappings/ProductChangeNotifications/MappingsPcnHelper.cs +++ b/src/AasxPredefinedConcepts/Mappings/ProductChangeNotifications/MappingsPcnHelper.cs @@ -39,14 +39,18 @@ public static List GetAll() lambda("PDN", "Discontinuation", "Unit is no longer produced by the original manufacturer according to original specification."); lambda("MANAQ", "Acquisition", "Transfer of a unit, portfolio or production from one production from one manufacturer to another"); - lambda("ALERT", "Alarm", "The manufacturer warns of changes and restrictions that he has detected in a product. For example, functional limitations on the units themselves, but also descriptions of unexpected behavior under certain conditions and also temporary interruptions in the production of the units."); + lambda("ALERT", "Alarm", "The manufacturer warns of changes and restrictions that he has detected in a product. For example, functional " + + "limitations on the units themselves, but also descriptions of unexpected behavior under certain conditions and also " + + "temporary interruptions in the production of the units."); lambda("SOFTW", "Change of the software", "Change of the software"); lambda("LABEL", "Labeling", "Change the labeling of the unit and or packing"); - lambda("CHARA", "Characteristics", "Characteristics such as attribute values of the unit are omitted, are added or changed. They can be electrical, mechanical, thermal or other characteristics kind"); + lambda("CHARA", "Characteristics", "Characteristics such as attribute values of the unit are omitted, are added or changed. They can be electrical, " + + "mechanical, thermal or other characteristics kind"); lambda("DOCUM", "Documentation", "General summary of changes made to the changes made. It does not change characteristics of the units are changed."); lambda("NRND", "Restriction of the Recommendation for use", "Official recommendation to no longer use the unit for new developments"); lambda("FIT", "Fit", "Describes a change in the units of fit and fit with respect to other units connected in the units connected in the product."); - lambda("FORM", "Shape and Appearance", "Describes a change in the outward appearance of the units. This concerns the spatial dimensions and form, but also colors and surface textures."); + lambda("FORM", "Shape and Appearance", "Describes a change in the outward appearance of the units. This concerns the spatial dimensions and form, but " + + "also colors and surface textures."); lambda("FUNCT", "Function", "Changes or effects from operation and performance"); lambda("INSOL", "Insolvency", "insolvency of the manufacturer"); lambda("CORR", "Correction", "Correction of documentation without change to the unit"); @@ -57,7 +61,8 @@ public static List GetAll() lambda("PSITE", "Production site", "The production site is changed."); lambda("CANCN", "Undo PCN", "A certain previous PCN will be undone reversed"); lambda("CANDN", "Withdrawal PDN", "Production of the unit is resumed. PDN loses validity."); - lambda("RECA", "Recall", "The manufacturer recalls the units from the market and explains the reasons and effects on the units themselves. The reasons can be manifold, from technical malfunctions to patent infringements"); + lambda("RECA", "Recall", "The manufacturer recalls the units from the market and explains the reasons and effects on the units themselves. " + + "The reasons can be manifold, from technical malfunctions to patent infringements"); lambda("TESTP", "Test process", "Modification of test processes before, during and after production, before delivery"); lambda("TESTS", "Test location", "Change of the location where the tests are performed are performed"); lambda("ORCOD", "Type codes", "Accompanying numbers next to the identifying number of the unit are changed - not the identifying number itself."); diff --git a/src/AasxWpfControlLibrary/AnyUiWpf.cs b/src/AasxWpfControlLibrary/AnyUiWpf.cs index c6ece069..60388f72 100644 --- a/src/AasxWpfControlLibrary/AnyUiWpf.cs +++ b/src/AasxWpfControlLibrary/AnyUiWpf.cs @@ -913,6 +913,7 @@ private void InitRenderRecs() } }), +#if old_diabled /*new RenderRec(typeof(AnyUiCountryFlag), typeof(CountryFlag.Wpf.CountryFlag), (a, b, mode, rd) => { if (a is AnyUiCountryFlag cntl && b is CountryFlag.Wpf.CountryFlag wpf @@ -927,6 +928,7 @@ private void InitRenderRecs() wpf.CountryCode = cntl.ISO3166Code; } }),*/ +#endif new RenderRec(typeof(AnyUiTextBox), typeof(TextBox), (a, b, mode, rd) => { diff --git a/src/AasxWpfControlLibrary/DispEditAasxEntity.xaml.cs b/src/AasxWpfControlLibrary/DispEditAasxEntity.xaml.cs index 4901ca00..b9462b8b 100644 --- a/src/AasxWpfControlLibrary/DispEditAasxEntity.xaml.cs +++ b/src/AasxWpfControlLibrary/DispEditAasxEntity.xaml.cs @@ -661,7 +661,7 @@ public void RedisplayRenderedRoot( return; // no plugin - // DisposeLoadedPlugin(); + //// DisposeLoadedPlugin(); // redisplay theMasterPanel.Children.Clear(); diff --git a/src/BlazorExplorer/AasxMenuBlazor.cs b/src/BlazorExplorer/AasxMenuBlazor.cs index c1b6ba11..5e555855 100644 --- a/src/BlazorExplorer/AasxMenuBlazor.cs +++ b/src/BlazorExplorer/AasxMenuBlazor.cs @@ -87,10 +87,6 @@ public void LoadAndRender( foreach (var mi in _menu.FindAll()) if (mi.Name.HasContent() && !_menuItems.Contains1(mi.Name.Trim().ToLower())) _menuItems.AddPair(mi.Name.Trim().ToLower(), mi); - - object kgConv = null; // new KeyGestureConverter(); - - } public bool IsChecked(string name) diff --git a/src/BlazorExplorer/AnyUI/AnyUiHtml.cs b/src/BlazorExplorer/AnyUI/AnyUiHtml.cs index 29dc4dba..e6763e97 100644 --- a/src/BlazorExplorer/AnyUI/AnyUiHtml.cs +++ b/src/BlazorExplorer/AnyUI/AnyUiHtml.cs @@ -321,7 +321,7 @@ public static AnyUiHtmlEventSession FindEventSession(int sessionNumber) /// public static void htmlDotnetLoop() { - AnyUiUIElement el; + //// AnyUiUIElement el; while (true) { diff --git a/src/BlazorExplorer/Data/BlazorSession.CommandBindings.cs b/src/BlazorExplorer/Data/BlazorSession.CommandBindings.cs index cc77bb1e..b82ab09e 100644 --- a/src/BlazorExplorer/Data/BlazorSession.CommandBindings.cs +++ b/src/BlazorExplorer/Data/BlazorSession.CommandBindings.cs @@ -98,7 +98,7 @@ public async Task CommandBinding_GeneralDispatch( this.CheckSmtMode = MainMenu?.IsChecked("CheckSmtElements") == true; // edit mode affects the total element view - RedrawAllAasxElementsAsync(nextFocusMdo: currMdo); + await RedrawAllAasxElementsAsync(nextFocusMdo: currMdo); return; } diff --git a/src/BlazorExplorer/Data/BlazorSession.MainWindow.cs b/src/BlazorExplorer/Data/BlazorSession.MainWindow.cs index 6b422959..0032ca69 100644 --- a/src/BlazorExplorer/Data/BlazorSession.MainWindow.cs +++ b/src/BlazorExplorer/Data/BlazorSession.MainWindow.cs @@ -178,7 +178,7 @@ public async Task UiLoadPackageWithNew( // displaying try { - RestartUIafterNewPackage(onlyAuxiliary); + await RestartUIafterNewPackage(onlyAuxiliary); } catch (Exception ex) { @@ -500,7 +500,7 @@ protected async Task LoadFromFileRepository(PackageC fileRepo.StartAnimation(fi, PackageContainerRepoItem.VisualStateEnum.ReadFrom); // activate - UiLoadPackageWithNew(PackageCentral.MainItem, + await UiLoadPackageWithNew(PackageCentral.MainItem, takeOverContainer: container, onlyAuxiliary: false); Log.Singleton.Info($"Successfully loaded AASX {location}"); @@ -521,8 +521,7 @@ protected async Task LoadFromFileRepository(PackageC { await Task.Yield(); - // TODO: take over from WPF app - + // TODO (MIHO, 2025-01-01): take over from WPF app return null; } diff --git a/src/BlazorExplorer/Data/BlazorSession.cs b/src/BlazorExplorer/Data/BlazorSession.cs index 1bf1de69..28198422 100644 --- a/src/BlazorExplorer/Data/BlazorSession.cs +++ b/src/BlazorExplorer/Data/BlazorSession.cs @@ -525,7 +525,7 @@ public bool PrepareDisplayDataAndElementPanel( superMenu, EditMode, HintMode, CheckSmtMode, tiCds?.CdSortOrder ?? VisualElementEnvironmentItem.ConceptDescSortOrder.None, DisplayElements.SelectedItem, - mainWindow: null); // TODO: fix mainWindow + mainWindow: null); // TODO (MIHO, 2025-01-01): fix mainWindow if (common) { @@ -766,7 +766,7 @@ public async Task ContainerListItemLoad(PackageContainerListBase repo, PackageCo if (container == null) Log.Singleton.Error($"Failed to load AASX from {location}"); else - UiLoadPackageWithNew(PackageCentral.MainItem, + await UiLoadPackageWithNew(PackageCentral.MainItem, takeOverContainer: container, onlyAuxiliary: false, storeFnToLRU: location); @@ -811,7 +811,7 @@ public async Task FileDropped(AnyUiDialogueDataOpenFile ddof, BlazorInput.Keyboa if (container == null) Log.Singleton.Error($"Failed to load AASX from {ddof.TargetFileName}"); else - UiLoadPackageWithNew(PackageCentral.MainItem, + await UiLoadPackageWithNew(PackageCentral.MainItem, takeOverContainer: container, onlyAuxiliary: false); Log.Singleton.Info($"Successfully loaded AASX {ddof.OriginalFileName}"); diff --git a/src/BlazorExplorer/Pages/AnyUiRenderElem.razor b/src/BlazorExplorer/Pages/AnyUiRenderElem.razor index 7b09d512..2397ce3c 100644 --- a/src/BlazorExplorer/Pages/AnyUiRenderElem.razor +++ b/src/BlazorExplorer/Pages/AnyUiRenderElem.razor @@ -1,7 +1,6 @@ @page "/test" @using AdminShellNS @using Aas = AasCore.Aas3_0 -@using AdminShellNS; @using Extensions @using AnyUi @using BlazorUI.Data @@ -96,9 +95,6 @@ if (Element is AnyUiGrid grid) { - if (grid.RowDefinitions.Count == 8 && grid.ColumnDefinitions.Count == 8) - ; - } else @@ -308,9 +301,6 @@ style.SetFillWidth(Element, AnyUiHtmlFillMode.None, chlb.Margin, setMinMaxWidth: true, setInlineBlock: true); style.SetAlignments(Element); - if (chlb.Content.StartsWith("Edit")) - ; - } @@ -372,8 +362,6 @@ @code { private void MyTextInput(AnyUiTextBox chtb, string value, bool takeOver) { - if (takeOver) - ; Program.EvalSetValueLambdaAndHandleReturn(Session.SessionId, chtb, value, takeOver); } } @@ -490,8 +478,8 @@ style.SetMinMaxWidthHeight(Element); - var country = Country.DE; - var size = FlagSize.Small; + // var country = Country.DE; + // var size = FlagSize.Small; - - Always - - - - diff --git a/src/AasxPackageExplorer.Tests/LICENSE.txt b/src/AasxPackageExplorer.Tests/LICENSE.txt deleted file mode 100644 index 75f36a4f..00000000 --- a/src/AasxPackageExplorer.Tests/LICENSE.txt +++ /dev/null @@ -1,1475 +0,0 @@ -Copyright (c) 2018-2023 Festo AG & Co. KG -, -author: Michael Hoffmeister - -Copyright (c) 2019-2021 PHOENIX CONTACT GmbH & Co. KG -, -author: Andreas Orzelski - -Copyright (c) 2019-2020 Fraunhofer IOSB-INA Lemgo, - eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft - zur Foerderung der angewandten Forschung e.V. - -Copyright (c) 2020 Schneider Electric Automation GmbH -, -author: Marco Mendes - -Copyright (c) 2020 SICK AG - -Copyright (c) 2021 KEB Automation KG - -Copyright (c) 2021 Lenze SE -author: Jonas Grote, Denis Göllner, Sebastian Bischof - -The AASX Package Explorer is licensed under the Apache License 2.0 -(Apache-2.0, see below). - -The AASX Package Explorer is a sample application for demonstration of the -features of the Asset Administration Shell. -The implementation uses the concepts of the document "Details of the Asset -Administration Shell" published on www.plattform-i40.de which is licensed -under Creative Commons CC BY-ND 3.0 DE. - -When using eCl@ss or IEC CDD data, please check the corresponding license -conditions. - -------------------------------------------------------------------------------- - -The components below are used in AASX Package Explorer. -The related licenses are listed for information purposes only. -Some licenses may only apply to their related plugins. - -The browser functionality is licensed under the cefSharp license (see below). - -The Newtonsoft.JSON serialization is licensed under the MIT License -(MIT, see below). - -The QR code generation is licensed under the MIT license (MIT, see below). - -The Zxing.Net Dot Matrix Code (DMC) generation is licensed under -the Apache License 2.0 (Apache-2.0, see below). - -The Grapevine REST server framework is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The AutomationML.Engine is licensed under the MIT license (MIT, see below). - -The MQTT server and client is licensed under the MIT license (MIT, see below). - -The ClosedXML Excel reader/writer is licensed under the MIT license (MIT, -see below). - -The CountryFlag WPF control is licensed under the Code Project Open License -(CPOL, see below). - -The DocumentFormat.OpenXml SDK is licensed under the MIT license (MIT, -see below). - -The ExcelNumberFormat number parser is licensed under the MIT license (MIT, -see below). - -The FastMember reflection access is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The IdentityModel OpenID client is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The jose-jwt object signing and encryption is licensed under the -MIT license (MIT, see below). - -The ExcelDataReader is licensed under the MIT license (MIT, see below). - -Portions copyright (c) by OPC Foundation, Inc. and licensed under the -Reciprocal Community License (RCL, see below) - -The OPC UA Example Code of OPC UA Standard is licensed under the MIT license -(MIT, see below). - -The MSAGL (Microsoft Automatic Graph Layout) is licensed under the MIT license -(MIT, see below) - -Glob (https://www.nuget.org/packages/Glob/) is licensed under the MIT license -(MIT, see below). - -The Magick.NET library is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The SSharp.NET library (https://github.com/PetroProtsyk/SSharp) is licensed -under Apache License 2.0 (Apache-2.0, see below). - -------------------------------------------------------------------------------- - - -With respect to AASX Package Explorer -===================================== - -(http://www.apache.org/licenses/LICENSE-2.0) - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -With respect to cefSharp -======================== - -(https://raw.githubusercontent.com/cefsharp/CefSharp/master/LICENSE) - -Copyright © The CefSharp Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google Inc. nor the name Chromium Embedded - Framework nor the name CefSharp nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -With respect to Newtonsoft.Json -=============================== - -(https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md) - -The MIT License (MIT) - -Copyright (c) 2007 James Newton-King - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to QRcoder -======================= - -(https://github.com/codebude/QRCoder/blob/master/LICENSE.txt) - -The MIT License (MIT) - -Copyright (c) 2013-2018 Raffael Herrmann - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to ZXing.Net -========================= -With respect to Grapevine -========================= -With respect to FastMember -========================== -With respect to IdentityModel -============================= - -(http://www.apache.org/licenses/LICENSE-2.0) - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -With respect to AutomationML.Engine -=================================== - -(https://raw.githubusercontent.com/AutomationML/AMLEngine2.1/master/license.txt) - -The MIT License (MIT) - -Copyright 2017 AutomationML e.V. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - -With respect to MQTTnet -======================= - -(https://github.com/chkr1011/MQTTnet/blob/master/LICENSE) - -MIT License - -MQTTnet Copyright (c) 2016-2019 Christian Kratky - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepct to ClosedXML -========================= - -(https://github.com/ClosedXML/ClosedXML/blob/develop/LICENSE) - -MIT License - -Copyright (c) 2016 ClosedXML - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepct to CountryFlag -=========================== - -(https://www.codeproject.com/Articles/190722/WPF-CountryFlag-Control) - -The Code Project Open License (CPOL) 1.02 - -Copyright © 2017 Meshack Musundi - -Preamble - -This License governs Your use of the Work. This License is intended to allow -developers to use the Source Code and Executable Files provided as part of -the Work in any application in any form. - -The main points subject to the terms of the License are: - - Source Code and Executable Files can be used in commercial applications; - Source Code and Executable Files can be redistributed; and - Source Code can be modified to create derivative works. - No claim of suitability, guarantee, or any warranty whatsoever is provided. - The software is provided "as-is". - The Article(s) accompanying the Work may not be distributed or republished - without the Author's consent - -This License is entered between You, the individual or other entity reading or -otherwise making use of the Work licensed pursuant to this License and the -individual or other entity which offers the Work under the terms of this -License ("Author"). - -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS -CODE PROJECT OPEN LICENSE ("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT -AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED -UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE -TO BE BOUND BY THE TERMS OF THIS LICENSE. THE AUTHOR GRANTS YOU THE RIGHTS -CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND -CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS -LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK. - -Definitions. - "Articles" means, collectively, all articles written by Author which -describes how the Source Code and Executable Files for the Work may -be used by a user. - "Author" means the individual or entity that offers the Work under -the terms of this License. - "Derivative Work" means a work based upon the Work or upon the Work -and other pre-existing works. - "Executable Files" refer to the executables, binary files, -configuration and any required data files included in the Work. - "Publisher" means the provider of the website, magazine, CD-ROM, -DVD or other medium from or by which the Work is obtained by You. - "Source Code" refers to the collection of source code and -configuration files used to create the Executable Files. - "Standard Version" refers to such a Work if it has not been modified, -or has been modified in accordance with the consent of the Author, -such consent being in the full discretion of the Author. - "Work" refers to the collection of files distributed by the Publisher, -including the Source Code, Executable Files, binaries, data files, -documentation, whitepapers and the Articles. - "You" is you, an individual or entity wishing to use the Work and -exercise your rights under this License. - -Fair Use/Fair Use Rights. Nothing in this License is intended to reduce, -limit, or restrict any rights arising from fair use, fair dealing, -first sale or other limitations on the exclusive rights of the -copyright owner under copyright law or other applicable laws. - -License Grant. Subject to the terms and conditions of this License, the -Author hereby grants You a worldwide, royalty-free, non-exclusive, -perpetual (for the duration of the applicable copyright) license -to exercise the rights in the Work as stated below: - You may use the standard version of the Source Code or Executable -Files in Your own applications. - You may apply bug fixes, portability fixes and other modifications -obtained from the Public Domain or from the Author. A Work modified -in such a way shall still be considered the standard version and will -be subject to this License. - You may otherwise modify Your copy of this Work (excluding the Articles) -in any way to create a Derivative Work, provided that You insert a prominent -notice in each changed file stating how, when and where You changed that file. - You may distribute the standard version of the Executable Files and Source -Code or Derivative Work in aggregate with other (possibly commercial) -programs as part of a larger (possibly commercial) software distribution. - The Articles discussing the Work published in any form by the author may -not be distributed or republished without the Author's consent. The author -retains copyright to any such Articles. You may use the Executable Files and -Source Code pursuant to this License but you may not repost or republish or -otherwise distribute or make available the Articles, without the prior written -consent of the Author. - -Any subroutines or modules supplied by You and linked into the Source Code -or Executable Files of this Work shall not be considered part of this Work -and will not be subject to the terms of this License. - -Patent License. Subject to the terms and conditions of this License, each -Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, -royalty-free, irrevocable (except as stated in this section) patent license -to make, have made, use, import, and otherwise transfer the Work. - -Restrictions. The license granted in Section 3 above is expressly made subject -to and limited by the following restrictions: - You agree not to remove any of the original copyright, patent, trademark, -and attribution notices and associated disclaimers that may appear in the -Source Code or Executable Files. - You agree not to advertise or in any way imply that this Work is a product -of Your own. - The name of the Author may not be used to endorse or promote products -derived from the Work without the prior written consent of the Author. - You agree not to sell, lease, or rent any part of the Work. This does -not restrict you from including the Work or any part of the Work inside -a larger software distribution that itself is being sold. The Work by itself, -though, cannot be sold, leased or rented. - You may distribute the Executable Files and Source Code only under the terms -of this License, and You must include a copy of, or the Uniform Resource -Identifier for, this License with every copy of the Executable Files or -Source Code You distribute and ensure that anyone receiving such Executable -Files and Source Code agrees that the terms of this License apply to such -Executable Files and/or Source Code. You may not offer or impose any terms -on the Work that alter or restrict the terms of this License or the -recipients' exercise of the rights granted hereunder. You may not sublicense -the Work. You must keep intact all notices that refer to this License and to -the disclaimer of warranties. You may not distribute the Executable Files or -Source Code with any technological measures that control access or use of the -Work in a manner inconsistent with the terms of this License. - You agree not to use the Work for illegal, immoral or improper -purposes, or on pages containing illegal, immoral or improper material. -The Work is subject to applicable export laws. You agree to comply with all -such laws and regulations that may apply to the Work after Your receipt of -the Work. - -Representations, Warranties and Disclaimer. THIS WORK IS PROVIDED "AS IS", -"WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR -CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, -INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC. -AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES -OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS -OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR -PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK -(OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES. -YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE -WORKS. - -Indemnity. You agree to defend, indemnify and hold harmless the Author and the -Publisher from and against any claims, suits, losses, damages, liabilities, -costs, and expenses (including reasonable legal or attorneys’ fees) -resulting from or relating to any use of the Work by You. - -Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, -IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL -THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY -DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE, -EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY -OF SUCH DAMAGES. - -Termination. - This License and the rights granted hereunder will terminate -automatically upon any breach by You of any term of this License. -Individuals or entities who have received Derivative Works from You under -this License, however, will not have their licenses terminated provided such -individuals or entities remain in full compliance with those licenses. -Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of -this License. - If You bring a copyright, trademark, patent or any other infringement -claim against any contributor over infringements You claim are made by the -Work, your License from such contributor to the Work ends automatically. - Subject to the above terms and conditions, this License is perpetual -(for the duration of the applicable copyright in the Work). -Notwithstanding the above, the Author reserves the right to release the Work -under different license terms or to stop distributing the Work at any time; -provided, however that any such election will not serve to withdraw this -License (or any other license that has been, or is required to be, -granted under the terms of this License), and this License will continue -in full force and effect unless terminated as stated above. - -Publisher. The parties hereby confirm that the Publisher shall not, under -any circumstances, be responsible for and shall not have any liability -in respect of the subject matter of this License. The Publisher makes no -warranty whatsoever in connection with the Work and shall not be liable -to You or any party on any legal theory for any damages whatsoever, including -without limitation any general, special, incidental or consequential damages -arising in connection to this license. The Publisher reserves the right to -cease making the Work available to You at any time without notice - -Miscellaneous - This License shall be governed by the laws of the location of the head -office of the Author or if the Author is an individual, the laws of -location of the principal place of residence of the Author. - If any provision of this License is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of the -remainder of the terms of this License, and without further action by the -parties to this License, such provision shall be reformed to the minimum -extent necessary to make such provision valid and enforceable. - No term or provision of this License shall be deemed waived and no -breach consented to unless such waiver or consent shall be in writing -and signed by the party to be charged with such waiver or consent. - This License constitutes the entire agreement between the parties -with respect to the Work licensed herein. There are no understandings, -agreements or representations with respect to the Work not specified herein. -The Author shall not be bound by any additional provisions that may appear -in any communication from You. This License may not be modified without -the mutual written agreement of the Author and You. - - -With respect to DocumentFormat.OpenXml -====================================== - -(https://github.com/OfficeDev/Open-XML-SDK/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With respect to ExcelNumberFormat -================================= - -(https://github.com/andersnm/ExcelNumberFormat/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2017 andersnm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With respect to jose-jwt -======================== - -(https://github.com/dvsekhvalnov/jose-jwt/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2014-2019 dvsekhvalnov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -With resepect to ExcelDataReader -================================ - -(https://github.com/ExcelDataReader/ExcelDataReader/blob/develop/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2014 ExcelDataReader - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepect to OPC UA Example Code -==================================== - - * Copyright (c) 2005-2019 The OPC Foundation, Inc. All rights reserved. - * - * OPC Foundation MIT License 1.00 - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * The complete license agreement can be found here: - * http://opcfoundation.org/License/MIT/1.00/ - - -With respect to OPC Foundation -============================== - -RCL License -Reciprocal Community License 1.00 (RCL1.00) -Version 1.00, June 24, 2009 -Copyright (C) 2008,2009 OPC Foundation, Inc., All Rights Reserved. - -https://opcfoundation.org/license/rcl.html - -Remark: PHOENIX CONTACT GmbH & Co. KG and Festo SE & Co. KG are members -of OPC foundation. - -With respect to MSAGL (Microsoft Automatic Graph Layout) -======================================================== -(see: https://github.com/microsoft/automatic-graph-layout/blob/master/LICENSE) - -Microsoft Automatic Graph Layout, MSAGL - -Copyright (c) Microsoft Corporation - -All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -""Software""), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -With respect to Glob (https://www.nuget.org/packages/Glob/) -=========================================================== -(see: https://raw.githubusercontent.com/kthompson/glob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2013-2019 Kevin Thompson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to Magick.NET -========================== - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -With respect to SSharp.NET library -================================== - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/src/AasxPackageExplorer.Tests/TemporaryDirectory.cs b/src/AasxPackageExplorer.Tests/TemporaryDirectory.cs deleted file mode 100644 index 1ba89e19..00000000 --- a/src/AasxPackageExplorer.Tests/TemporaryDirectory.cs +++ /dev/null @@ -1,23 +0,0 @@ -using IDisposable = System.IDisposable; - -namespace AasxPackageExplorer.Tests -{ - class TemporaryDirectory : IDisposable - { - public readonly string Path; - - public TemporaryDirectory() - { - this.Path = System.IO.Path.Combine( - System.IO.Path.GetTempPath(), - System.IO.Path.GetRandomFileName()); - - System.IO.Directory.CreateDirectory(this.Path); - } - - public void Dispose() - { - System.IO.Directory.Delete(this.Path, true); - } - } -} diff --git a/src/AasxPackageExplorer.Tests/TestOptionsAndPlugins.cs b/src/AasxPackageExplorer.Tests/TestOptionsAndPlugins.cs deleted file mode 100644 index fc9b5a55..00000000 --- a/src/AasxPackageExplorer.Tests/TestOptionsAndPlugins.cs +++ /dev/null @@ -1,316 +0,0 @@ -using System.Linq; -using AasxPackageLogic; -using JetBrains.Annotations; -using NUnit.Framework; -using Assert = NUnit.Framework.Assert; -using File = System.IO.File; -using InvalidOperationException = System.InvalidOperationException; -using Is = NUnit.Framework.Is; -using JsonConvert = Newtonsoft.Json.JsonConvert; -using Path = System.IO.Path; -using TestAttribute = NUnit.Framework.TestAttribute; -using TestContext = NUnit.Framework.TestContext; - -namespace AasxPackageExplorer.Tests -{ - internal static class Common - { - public static string AasxPackageExplorerExe() - { - var pth = Path.Combine(TestContext.CurrentContext.TestDirectory, "AasxPackageExplorer.exe"); - if (!File.Exists(pth)) - { - throw new InvalidOperationException( - $"The package explorer executable could not be found: {pth}"); - } - - return pth; - } - } - - [TestFixture] - // ReSharper disable UnusedType.Global - public class TestParseArguments - { - [Test] - public void Test_defaults_without_any_arguments() - { - string exePath = Common.AasxPackageExplorerExe(); - var optionsInformation = App.InferOptions(exePath, new string[] { }); - - // Test only a tiny subset of properties that are crucial for further unit tests - - // Note that the plugin directory differs in the default options between the "Release" and "Debug" - // build. - Assert.AreEqual(".", optionsInformation.PluginDir); - } - - [Test] - public void Test_overrule_plugin_dir_in_command_line() - { - string exePath = Common.AasxPackageExplorerExe(); - var optionsInformation = App.InferOptions( - exePath, new[] { "-plugin-dir", "/somewhere/over/the/rainbow" }); - - Assert.AreEqual("/somewhere/over/the/rainbow", optionsInformation.PluginDir); - } - - [Test] - public void Test_directly_load_AASX() - { - string exePath = Common.AasxPackageExplorerExe(); - var optionsInformation = App.InferOptions( - exePath, new[] { "/somewhere/over/the/rainbow.aasx" }); - - Assert.AreEqual("/somewhere/over/the/rainbow.aasx", optionsInformation.AasxToLoad); - } - - [Test] - public void Test_that_command_line_arguments_after_the_additional_config_file_overrule() - { - using (var tmpDir = new TemporaryDirectory()) - { - var jsonOptionsPath = Path.Combine(tmpDir.Path, "options-test.json"); - - const string text = @"{ ""PluginDir"": ""/somewhere/from/the/additional"" }"; - File.WriteAllText(jsonOptionsPath, text); - - string exePath = Common.AasxPackageExplorerExe(); - var optionsInformation = App.InferOptions( - exePath, new[] - { - "-read-json", jsonOptionsPath, - "-plugin-dir", "/somewhere/from/the/command/line", - }); - - Assert.AreEqual("/somewhere/from/the/command/line", optionsInformation.PluginDir); - } - } - - [Test] - public void Test_that_additional_config_file_after_the_command_lines_overrules() - { - using (var tmpDir = new TemporaryDirectory()) - { - var jsonOptionsPath = Path.Combine(tmpDir.Path, "options-test.json"); - - const string text = @"{ ""PluginDir"": ""/somewhere/from/the/additional"" }"; - File.WriteAllText(jsonOptionsPath, text); - - string exePath = Common.AasxPackageExplorerExe(); - var optionsInformation = App.InferOptions( - exePath, new[] - { - "-plugin-dir", "/somewhere/from/the/command/line", - "-read-json", jsonOptionsPath - }); - - Assert.AreEqual("/somewhere/from/the/additional", optionsInformation.PluginDir); - } - } - - [Test] - public void Test_that_multiple_additional_config_files_are_possible() - { - using (var tmpDir = new TemporaryDirectory()) - { - var jsonOptionsOnePath = Path.Combine(tmpDir.Path, "options-test-one.json"); - File.WriteAllText(jsonOptionsOnePath, - @"{ ""PluginDir"": ""/somewhere/from/the/additional-one"" }"); - - var jsonOptionsTwoPath = Path.Combine(tmpDir.Path, "options-test-one.json"); - File.WriteAllText(jsonOptionsTwoPath, - @"{ ""PluginDir"": ""/somewhere/from/the/additional-two"" }"); - - string exePath = Common.AasxPackageExplorerExe(); - var optionsInformation = App.InferOptions( - exePath, new[] - { - "-read-json", jsonOptionsOnePath, - "-read-json", jsonOptionsTwoPath - }); - - Assert.AreEqual("/somewhere/from/the/additional-two", optionsInformation.PluginDir); - } - } - - [Test] - public void Test_plugin_paths_from_JSON_options() - { - string exePath = Common.AasxPackageExplorerExe(); - - using (var tmpDir = new TemporaryDirectory()) - { - var jsonOptionsPath = Path.Combine(tmpDir.Path, "options-test.json"); - - var text = @"{ - ""PluginDll"": [ - { - ""Path"": ""AasxIntegrationEmptySample.dll"", - ""Args"": [], - ""Options"": null - }, - { - ""Path"": ""AasxPluginUaNetServer.dll"", - ""Args"": [ - ""-single-nodeids"", - ""-single-keys"", - ""-ns"", - ""2"", - ""-ns"", - ""3"" - ], - ""Options"": null - }, - { - ""Path"": ""AasxPluginBomStructure.dll"", - ""Args"": [] - } - ]; -}"; - File.WriteAllText(jsonOptionsPath, text); - - var optionsInformation = App.InferOptions( - exePath, new[] { "-read-json", jsonOptionsPath }); - - Assert.AreEqual(3, optionsInformation.PluginDll.Count); - - // TODO (mristin, 2020-11-13): @MIHO please check -- Options should be null, not empty? - Assert.IsEmpty(optionsInformation.PluginDll[0].Args); - Assert.IsEmpty(optionsInformation.PluginDll[0].Options); - Assert.AreEqual(null, optionsInformation.PluginDll[0].DefaultOptions); - Assert.AreEqual("AasxIntegrationEmptySample.dll", optionsInformation.PluginDll[0].Path); - - Assert.That(optionsInformation.PluginDll[1].Args, - Is.EquivalentTo(new[] { "-single-nodeids", "-single-keys", "-ns", "2", "-ns", "3" })); - Assert.IsEmpty(optionsInformation.PluginDll[1].Options); - Assert.AreEqual(null, optionsInformation.PluginDll[1].DefaultOptions); - Assert.AreEqual("AasxPluginUaNetServer.dll", optionsInformation.PluginDll[1].Path); - - Assert.IsEmpty(optionsInformation.PluginDll[2].Args); - Assert.AreEqual(null, optionsInformation.PluginDll[2].Options); - Assert.AreEqual(null, optionsInformation.PluginDll[2].DefaultOptions); - Assert.AreEqual("AasxPluginBomStructure.dll", optionsInformation.PluginDll[2].Path); - } - } - - [Test] - public void Test_plugin_paths_from_default_JSON_options() - { - using (var tmpDir = new TemporaryDirectory()) - { - var exePath = Path.Combine(tmpDir.Path, "NonexistingAasxPackageExplorer.exe"); - var optionsPath = Path.Combine(tmpDir.Path, "NonexistingAasxPackageExplorer.options.json"); - - var text = @"{ - ""PluginDir"": "".\\AcmePlugins"", - ""PluginDll"": [ { ""Path"": ""AasxPluginBomStructure.dll"", ""Args"": [] } ]; -}"; - File.WriteAllText(optionsPath, text); - - var optionsInformation = App.InferOptions( - exePath, new string[] { }); - - Assert.AreEqual(".\\AcmePlugins", optionsInformation.PluginDir); - - Assert.AreEqual(1, optionsInformation.PluginDll.Count); - Assert.IsEmpty(optionsInformation.PluginDll[0].Args); - Assert.AreEqual(null, optionsInformation.PluginDll[0].Options); - Assert.AreEqual(null, optionsInformation.PluginDll[0].DefaultOptions); - Assert.AreEqual("AasxPluginBomStructure.dll", optionsInformation.PluginDll[0].Path); - } - } - - [Test] - public void Test_plugins_are_passed_arguments() - { - var optionsInformation = App.InferOptions( - "NonExistingAasxPackageExplorer.exe", - new[] { "-p", "-something", "-dll", "ACME-plugins\\AasxSomeACMEPlugin.dll" }); - - Assert.AreEqual(1, optionsInformation.PluginDll.Count); - Assert.AreEqual("ACME-plugins\\AasxSomeACMEPlugin.dll", optionsInformation.PluginDll[0].Path); - Assert.That(optionsInformation.PluginDll[0].Args, Is.EquivalentTo(new[] { "-something" })); - } - - [Test] - public void Test_plugins_are_searched_in_plugins_directory() - { - using (var tmpDir = new TemporaryDirectory()) - { - var tagPath = Path.Combine(tmpDir.Path, "AasxAcmePluginForSomething.plugin"); - File.WriteAllText(tagPath, @"ACME tag!"); - - var pluginPath = Path.Combine(tmpDir.Path, "AasxAcmePluginForSomething.dll"); - File.WriteAllText(pluginPath, @"ACME!"); - - var pluginDllInfos = Plugins.TrySearchPlugins(tmpDir.Path); - - Assert.AreEqual(1, pluginDllInfos.Count); - - Assert.AreEqual(null, pluginDllInfos[0].Args); - Assert.AreEqual(null, pluginDllInfos[0].Options); - Assert.AreEqual(null, pluginDllInfos[0].DefaultOptions); - Assert.AreEqual(pluginPath, pluginDllInfos[0].Path); - } - } - - [Test] - public void Test_that_splash_time_is_set() - { - var optionsInformation = App.InferOptions( - "NonExistingAasxPackageExplorer.exe", new[] { "-splash", "1984" }); - - Assert.AreEqual(1984, optionsInformation.SplashTime); - } - } - - [TestFixture] - // ReSharper disable UnusedType.Global - public class TestLoadPlugins - { - [Test] - public void Test_that_it_works() - { - using (var tmpDir = new TemporaryDirectory()) - { - var jsonOptionsPath = Path.Combine(tmpDir.Path, "options-test.json"); - - var exePath = Common.AasxPackageExplorerExe(); - - var pluginPath = Path.Combine( - TestContext.CurrentContext.TestDirectory, - "TestResources\\AasxPackageExplorer.Tests\\AasxPluginGenericForms.dll"); - - Assert.IsTrue(File.Exists(pluginPath), pluginPath); - - var text = - $@"{{ ""PluginDll"": [ {{ ""Path"": {JsonConvert.ToString(pluginPath)}, ""Args"": [] }} ] }}"; - - File.WriteAllText(jsonOptionsPath, text); - - var optionsInformation = App.InferOptions( - exePath, new[] { "-read-json", jsonOptionsPath }); - - Assert.AreEqual(1, optionsInformation.PluginDll.Count); - Assert.IsEmpty(optionsInformation.PluginDll[0].Args); - Assert.AreEqual(null, optionsInformation.PluginDll[0].Options); - Assert.AreEqual(null, optionsInformation.PluginDll[0].DefaultOptions); - Assert.AreEqual(pluginPath, optionsInformation.PluginDll[0].Path); - - // ReSharper disable UnusedVariable - var loadedPlugins = App.LoadAndActivatePlugins(optionsInformation.PluginDll); - - // TODO (Marko Ristin, 2021-07-09): not clear, how this test could pass. As of today, - // it is failing and therefore disabled - //// Assert.AreEqual(new[] { "AasxPluginGenericForms" }, loadedPlugins.Keys.ToList()); - - // TODO (Marko Ristin, 2021-07-09): could not fix - //// Assert.IsNotNull(loadedPlugins["AasxPluginGenericForms"]); - - // This is not a comprehensive test, but it would fail if the plugin DLL has not been properly loaded. - //// Assert.Greater(loadedPlugins["AasxPluginGenericForms"].ListActions().Length, 0); - } - } - } -} diff --git a/src/AasxPackageExplorer.Tests/TestResources/AasxPackageExplorer.Tests/AasxPluginGenericForms.dll b/src/AasxPackageExplorer.Tests/TestResources/AasxPackageExplorer.Tests/AasxPluginGenericForms.dll deleted file mode 100644 index 04fa0062b8d26f56b3dae0a929ed343540197849..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21504 zcmd6Pdw3kxmFKDI>ZjB#bxW3CvfY+tTb5dF`61cHW4jS}fgLgEdXzyetwOL&B^A45n22@@d6@`XGmB*P@kF3Ca?58h;fWRfqCnamC| zgSEeNZ&i1zZ6_w*{IM<9t$WWs_uO;NJ@=ejw{E%r`di6GL>jKyS)!+L=iikg{lm#L zszb}34bhkVFD`#t+5O`3p|P|T9XE|pGm(uZ6SMjW!CE8Vn7|-h`^C&;oj|6o>c3TdV z#4k#8G;UgE5+%XgG%~E80bFIjD~m#x0WXqe9#nFZwhsJ2CjP^%)$W-Fy1rupDhVR<0| z&mBiDV=1#Bq$aBCaFNE+mg>!yL9qo5+N5|^l<_?#X5F~CNuhCTIRHizcj+;|1%UZ_ zC3Hvy^aPSQxX&~6r^3s*Sv@i#vSuB9wvQgW6m|=$2-ofLMXFzevwNr`2g;E#|AQbN}pNU}_Eb z6dIvv9zvzg6ZXie)2Nc8xUyYaRgV##TnREQ^%(eSAESE1UWxjCp!y~;TAFVX2Blf6 zfEe_Heh+F~LdAlISc4X;V;@PK)FVndR8s!}I0 zQ8ZgQ;cz%shrwWwfl1B1{|W_{$wnqyEY)I*g=Ximc0gE(fe6&&5Q&5%u?7%fkb`2t zlfa?7Og2j?MP0Zq)=CyURG_XtTyJK;@f3VkAY4EHmc1Z5wO$m!!l+>3m&K;@!t-M9 zCs-EvSa?orQ|8yr56_n-vK6?hbOGpGn}3h(AcRcXf_qvp`#n?4o9wzF+#p$%-8G=Q zf59wwnLH^ZrwhUhwtNnrfvgS8>_SN~Rx9t5@J){Bi^Gd!M{Q#kaAPC4Xlz>-X>94_ z?2_;jVYzHZOT$ZJ3&IO+$jWxlDlwEs7Z3>zHsRj>oijC&#&Zo|c(JjWD}E~ZUKCy= z%tWeeQFx)`e-ZfKEcoZ?D@W|2b75I{*_L0iV2+*FMZ-~^aLwUnsm?n)Hr&|4nr*T!Gk;v{+7O7S^?b zUH0SQR;g|$B7kHYh25A|)V&)F+z=~Fu0k`^7SLp@2)PUJU`n+o=J&=t91hq9IIge_w8gx})!dzh zrkY#o`HX8&<2NvtfmMhR_TbiasDuF_aKLe%l_KMgd$J#xn3w@itjVqs zAhXmBW;!l-~Er)Yo`kbCp9j4dEye#GXL6(+AmN0M^T z58S_C-1*WlWVe(1fFVt!terK;P?lFpT~;NV8ADP6iNY3U>@SD#h)x{<#5#xsW+Rkm z*cQf0@JJ=J!ll8^_h2?aofvm@601Y)oD%SC`98R{hak3Con)(z)k(dSw8rrqdN@k; z2&HWCT*VC8(Tt6x3RD;rq&A+oHch`IIe)%!9XemdUcrqjHr24(Jb_45Tqjc70=ve1 zfMY6*z0EizShk1Xx*jF;%!0F9=Y0gV`Aa})sPo(G3U_K8Vfw+gBavXsQO<@a9DsDNUg=_P3NK`G4I%SI8!se$WpoIbKAvQk@fR=|26gXKB_gHE4Xn;z9 zHh)xNuVHMqB56xN1T7o!7$deN(22l`2rQAFkG0jo;>jkb+y!XO0~Q2Urg*}(d2O|{ zKB>ypCS=v@EU&{6YB)gS#->{eWOW^WdI;>p)WakKUcdrdo|Wd?(C-veS!uq*S*B9u z5o;!|kzsMXW?vNyQ%BNZPH^^vNUSXC%qO_`4KC(T6n%Sz3pC#VaG~j~E;edMRyI0< zTz!N25!}q%8ET-dG0uH?s@up1aTjBJKLLK>+rm^IP@T0MjH3WMSp+7JLV>Tpv@0jV)gSFEM1+m z`tj6x5Vr8tjiG?0sI-I*osdfow&7iX!wNWN!U9zUE?b9k7J_ZHt<{l&V@8!~S?GR> zC6REcb0ZHZweBgeZYc=ZDtkDk{j0PEeS(!RePA(&pd%43&3mEIAHq+|M|tA}+FBDx zs=U*TC$VicV;;%91(-AFV4`Z`DH~CDnhUK?J!}Q_SfJVUYRgH%(*X-;o|aQ6g|fX^MUC^CpN}A;u|_PtYhXeSz%!GF--myA0YZC+?&D3iov{@ z&W%DnL<>OgpU`l{{z0mS@*yv+xN3hNPwhsOV-R%3_6$2U@k3})4$gn5$`4xfugV6o z@Iw|B#_J4>8WEOf1WkzbBiIx$$S2AODq`D*0|VppJ%EehoY!zcU?1mkr^nqpt34F= zaQcAetFECRf?E%r)n4{{Xv)p$`$am>!}%9Q{&kTCMf#$)x;j9I{r86gbdUS~kcYYj zyv6;WJRbT*=m}qlrj#aEi2k!kU+^@!BD5no67W!OfNQ&4O)d|uq7P!WJSFmq=Luf} z_}vD%e}iEOQN+&_RE^WmhnieT`VKS{qNlx0t^i%`GlGlgjjHbl8Yo@Mt!g3kQu;66 zCxZc6kJ0iL@Qo0#D7>H}k z?d_mu&{u@!uhm%RzYdHbeJ*f|zm+Ck6VUL(pyQ#ZR8CJIT}uC`J{ep}4?+VTdb##x zKlD(``6p|i@I`22?MNU*o2pnd-xK`5;^VeAqHTa~so@b(s~B znp~`I#I)r&(`voz7IG7IuYPhQ|}KMbUBRFp!Hamc&Ht^YNbAfDGvx6 z=uw#RzYF{WE{8X8+lbzzp`ty)g+1O26RHRLkr^DxEx73^k#S`BQVm2QR}*g7|G z0xRIZT2di@Z?V+pyEk|m^Uo{llFGfoUQCsUD7_xMH~0=MB7`Nh%T~Wp-HZ8xxB$m@ zZSalipt1yI6?K0O+xj+mTZ+CP^L)sq(62l(RiU=fN0Gn5_i>~W{+9AdCe@_M*3;xZ(O^gteMx9 zht(f~!cn{Qe|`TGrOnG_UA_9MOQq}V(hq`XP#SBJbKfzqw3xpeb_m#RGQ3*VYk z`WTiJL^E{G^J_@+aZ$RN;TcBAxFyYyrADwMt@N}uwrtJ$M9(oaN5^3q7Z5T)A|{J3fmb^ki2jxG1bAg6!p zXWuOIXE6a)8i3bV=nEX==q*^j3zo&c`6s}4!v;&W|0Zf*fGgKvl}@dP{u%fRJq2nC zmDBu+Xj=|>5lTR`M{rl@4$xui=5)75r9Slh2|Q=MRK+{iYzGUG251e^T3RR4Eh6m} zX`e{173m?7CXmjf<470LDFK-g=}SmKO_^8IL{BK3e+Fp_y@WJQuORKj5|!c0)u6wR z?xybq2561?G4&vItFhow>Qi5+P1D=TRF#2rf7LW_zFzeSq@mio=#Ux=|0Pz>f-=$; z3LeJ{8H2=)K@|)l!W?1D5ksvNSE@qX!|xT(zYT03)dA& zTD`w&JM#bR+NL~6@6=o^Fg^4RJ&Aew4t>Qlpwx?2jr7f`qe?UVxW)v8`)#Iy+6iSw zU9G{-D%aFZDt;lgU-_PI8u`W5A6D)bZ66frX_1Bn&S~{f?I)EOAonS!6;1h!a!9~$ zgMRKq{`a0QD0d_OSIGBypFXXz09(>hR|hxD-8i1cY?rTUEeDm>Y3qQ`a08~*E6*7E?} zEg%olZ)?WXZPZ*lp)ObMtesR}Q6H$C0faTsBQ)@i+U>tfeNfpOxKDi)tsX)Co#5lZ zVa@ai&3ps!XVrzSr)r*8*SLhF>KXchy3SSS{ejvjFt-5y_v%?-zM*y_|2FcklHxk# z`Z6tcC0u`B9d$Jdy*1Kmw0v7|xJLb2?M{~;`q}MTC@kufYm;)sbz0Way|ls;$Me~k z7Dq%lj&w2IigX3tjkJxPLb^euTSdA1~f z4*E2Gmrg6+QGTwdYKQtI^?T}%RG+KWwaqo;x*q;lLDb{*+^+)%v7Gw{^#-JaHAzjS z1%RuV!*1X#LaIVm#%-eI^b`%ka&A=aP~K4t^^>YL&0e7VcQ3q;Tpvp4m&+Fix|tZx=ttL4cQT(ga>(pXTY232a`_GGX#!!&rx%In$q4kMG%MQ2vr zZchD)d~$4`4#boNT7!Bvk;|u(eJQ#|KUG$;N)<^Xmy=|G)tyRFB9%I_+eoDJ6kTPe zi}@o!%}4~^+X*!i`Cr*g?L)5xW7vPsi^Gkr}um!f3B zG(noBm&{YSKK72YMlHLhucS1nRyRiyNu72ZqkTCmpU5Gf(nk`7Ouks&r;q5Mj+y~e zxAbC#wLM|!slB;Dp=%mJ=Y6^T>?aQ4oj^UPqr0J0~n+vhTJ-U??JPJr(E}btc^`xzF z!xA<73TT(rhfa;_yArt+T3@B-xwO+XvNnY24W;w4PFmKUL{=v&Z!)ITKrWwPh3+s+ zoksQiksZ)h0eR@An1`l>TAVtEQP!E@+EK3n92_4hj=KQx81d-fEC+X0gh`g<6k)l| zv>01azrB#ppNHCe0@~WAgFl$|O#)MU{X>ToW!Mn=p@+s)iD<`}|Iv=g}vO@(QQT zP6&NKH!YY*sg+Z?!^n-KM+?$|&aW;rpHd|pP*(5DjTj}6)UB|XeR?KwQsk^sz0=)* z2@jpjpI@=V7(ZpEN5{&l1`?2|+cXoWE`**PPvpuf?0L(4pzq;yCY>*@InX z$M$E z(IAA!5l$Rhup91RAD(dpW2G56@F2nrb6@l`Mc+AC7|wDKn&Xy=Kr|`lD`%}Uw~7et z<%$K{+Kc6E0%6zeF_OoGWETtGsZ5dk>k`=v?PZlh9Wdv-iT!3dU1h#J$~pBT;K6bV z%n+|5_Kx(VM?@IQJ5_v#Vw@r-ETNY^tPF%&2X$T?=qUk^D+U@&f`JTcP&b(}8Q89N zJbiy6N81e}qvOs4I|wV5;bAPDNg;qDfTi=&V#;KvtBrK7tStQ@JW3&v={*S!d2$zn zp7h+5wqu}O>@GQVLVFQ-deUNPlQ2*1Hf*%wx~I%9IEHc+c1RPM^i5)Rm$4(G!64RF zWwoGu0$x^zAxemj972e__Nt2G_g+)F?V|R3GjK4uyftK$mS5zUh+TQmOpK4SPj=R4 zw7<`;DueZ&OzI-|(N07u3?moIoEq)XClC)UVFg#QsU6SK5C2^lhXLhMx+zBA84s8TmN_QvV;7MUgk}Gx zLxW>bkHPCw8O$mjMcJtA(lb!d9DAf89_d61N>B5WA(62IIj?RUAKjBS;n5PQ9=XK( z0~mG;9y*EeGq-)OY2v*ImQMDn9nqNLNtue9oH>B@6}=Behu6q}N!9O6pWM-7IfD13 z6Qeo9!aCccWXggGi}klt?Ko%Q=!|jL;t8xMimjb$M{VcTI}Zb8`YZPv@zJ<5g{_OB zAhto@`81v=obj~ETFJ!(q6T|eOD=qIFS*M({gsG05<1pn`ywkoV5YMe#SUlGcR z7^NY=xM9(1Pw14HnCQ-AifGUuiddDfYpNKPGL=Xgyu95zd?W0c9KYz4;eKpS=|F6s z>*!wkhxi3%2By83Ba|15K8{5qO!B%@I1<|mXb09VdEF^FA=oLGoSbB~O&%piP$o`RX@ z@(kRKrNJOC{fBfjE1}X<@W@73KACx8@KDhSOvCcWU4D$Be&dAB?ppNPlgKC7oVi@u zEU=$Hdvhlw5NiUtFc!NI4CW4DE}R7`6J_Coh77S*epn0Hz=pg#ZS~GGWF!1&s2}qZjBr3Kj5x zMA0Tsc#E>!5;WU!#sr=WblWQwqhtpK2CHZsy*R^MiN}ML#2-^HDLs!ew=;2P-gppr zh_A-B>Rx=q5Jj(f)XG7Mld^pDkMVO28yM!%CGf*Ii9giaLZ`P3IABxaVZts6DO-31 zSih#-7mtGh>DhD&0*mFSYzK|bb7<<2m?<)^iZy`NSak`GazY1{qnQ_0!K21z&y<-H z?yp3N$B%WH1+;|k^dq&&<8X|}c44VqJ6e@&N0~mo1D%v+oE)Zd6sb6dSP)mv7$(Q9 z*tXfGSpmbs>>O6cz?x*)F*8;_E0)!m5W`$94w&q8)b*a`P{G5jDGg-4to{jXF&@B7b97&F>NtRqf5`7c zEv$g`&-0sC19HK0X;ht|aV%NNg>MJK*TR-qTE}W=`gEVIbslimG&?f6D!cTNn*dQZ zOP&O5zH&NA`7e@wY|P(aulu^cQz5_t~WY{$-8RC+@8pe6g{o`!(Wyl@M)dRlzGtJw!0 zSj!ZytRrt9?Sqq`brV?aPQZ?NjhO{4$xmGHpQW{sgr!-FbuIs`$Kg(1F|#ZZlUDM0 zI&znD&V%kO%4peKY1ygpQbxvfJO!-06hoWKZHb2xw@K)+#4XN!tt{`?>6NYRGF<#8 z*6YDJyn0zqw8f;jbnA#?Ov`1G3$Hk|%;wKg%7jiikN3=982?f7`or5lc6{5dRg?W^ zNsB6q&lM%bjZ8Sq#SkZ|H;Mx&o#9Tr;#Yi)oQ6Uk#+m*Z?0&SVWd1{oFWm zCM)ha6Uyx&i* zP$NW%>=z1XR6QZpqk36z2qZY(qIw$L%w0(GSnH3Hpj$^?o4yvs5e_I^MJ96G<%t~U zUViWPDv{~OS@Vs)d6DU_qx5a=rg1?PU=D-_ATrbEi@Fsb|HOdI^w)Sn;x?A!sYtaN zsTREKN2M<^a|lX=;DX{aey}BTPAAX!Foe@DKu2I>Ce6IuDSDZH+sDH({dVNIEZ+%U zuU+GnTKwMQMXzUteWKNA=wE3BK=Z0nACZ|m zeO_0j9s^tNjl#MxK7PJOX6_4xYN9>`%|0s%sF9348u5Bz4fYVRT|{b`h5P(bWM}RR z&phQ}nyMNQqcQUgEYI(Cq0WteLfrk-&bxrd|=_m*G~J^ zJ-7M5<6V0?eI1YQef`NtKK~o2wI5eKu4-2QZOBA%F$2?gb8;Ui4|4KZP9EjtZ7+rr zQ$w)n24u#MHjPkhi08$U5OO?=Fmu3HM8~9L{-CKRLa?4lzciTo$hAR2$C3WVMyTxC zMycv&Y}{|i;W9@+VV`x zQa%Ygq&Dyy2)r3CzGA=&L%eTRfag{C0Lx;98cJJ><-5CBY6^_`3Pp-9KBLb+8jY^+ zz)=^f7Pa=dAQZgoaNHe#MEwdi#`p9N6*uH!_S?wIaU{Mgz7C9q>Wh_SuafJzRkTBJH_C{uD z`+ErQx~w=(;^VbG-gM)1M9QfY{pcn-v1L1?&^7&Oygd_dW8}-N!F(Z=HsbQVItbZY z*w_S1kK!y(5ip3owT#Yhy6wGA!}P5yY7OkGJR;PNb4P#sz2E+Kmisnbne!NSxZ8(! zzq%QVI_H66QAg1>zp<$OhUfB}UcfeCCKeqi3}fpK`+q|?f|9#@c+;jtXR@4e zE_p0BtQ#KLu(`7Ey*tWO3#@nCt@UW5l6MCt%n8t%H8Z4iie46M_ zpnD$ohc&vcoNm!C{09)P-$`4>^7--0)~>a1egQA^n~GI#@-8$8o9xkV2dq_ z*{Z)<%_g^25Wx$;+{tWa1pD-fycIXh(Y0CevbPUG5Ct=w~iz{*|?NCS3e?vz_o7_#gwv;%|GG+IcQ@ z;u61Q_~_@hcU>BvQEHxtr<#i67k9ra8sj4@ieEX~$wyH6a@`6-JgjAe6uQ+R6j7+U z{Dl^%a4Y_%s=4OWte;=&C&qD_@bcNN766$?{yvLG!==tryO{JSh@U6)m$PrGs&|FH zng5o}QwcbseZ~adf~9fD0y?y+RO)2U$bGne{w{Um>@9!mMa_YSX0`4@-k{m8W|TEi z%RPx&??bc7`Z-lN*k7t@ol{loR8`WfUbX-Sg=Z-Y$qLzAIbSa7WS#_HkIYhMokPR> zkFyGs=g&m6>Ui61Co?4QZkVNJ?>A&l_vS_CyNL`Ep8>XljdK0ek3+EDuheX1!g2 z;Q|QH>(sp9ce4?kD~M*(m_)hJC=M7zj1$RKpL~$$y#IVcAkDk-kVGO%JWv>moeW9ztz8ky2N3vB99r6 z5WVt8h@w}Xq!;Q{o~l8wjQL)At^3__)Uso>R=M z*2(ULy$L%j{(TwO|M%-g!6_1Z-N-!mauJ8kEIn%Jdek}SolJrs^ZnVsd5x6*0oKjKxL$)nzP5)ezK9q z;ViDb67Hnz4$FW0273m#{_>SOwte)Dz4s{3J@ENeUl?W@J1#rSr}(VHCSJoI=A*4* z4S6`hp9QpA{9QnM+BlrRA?SAdym&jpqY&UQ{tLFl7hWwM#sSU4;w;YLoSxs`v^)@-D5j)5$o^Sl|(MVR^TfU--&> zSh;H}X?#)pHHa$Usk9GzKBeyp9Jv?C=|;RwfDYgmSs%PBn#G^oZD!ZSzoxP}`7ZGk zq~*sYT_PYo0QaU8Ilu5b5JrA4dz_5lfh~j*-2>>+g!Co3*I_TYqj)hNi-FIY<6UY# zbijN5C2rqK|8eZ@@*7nC?Sf~}yYajmZsPr -Author: Michael Hoffmeister - -This source code is licensed under the Apache License 2.0 (see LICENSE.txt). - -This source code may use other Open Source software components (see LICENSE.txt). -*/ - -using System; -using System.Collections.Generic; -using System.Dynamic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using AasxCompatibilityModels; -using AdminShellNS; -using Grapevine.Interfaces.Server; -using Grapevine.Server; -using Grapevine.Server.Attributes; -using Grapevine.Shared; -using Newtonsoft.Json; -using Newtonsoft.Json.Serialization; - -/* -Please notice: -The API and REST routes implemented in this version of the source code are not specified and standardised by the -specification Details of the Administration Shell. The hereby stated approach is solely the opinion of its author(s). -*/ - -namespace AasxRestServerLibrary -{ - public class AasxHttpContextHelper - { - - public AdminShellPackageEnv Package = null; - - public AasxHttpHandleStore IdRefHandleStore = new AasxHttpHandleStore(); - - #region // Path helpers - - public bool PathEndsWith(string path, string tag) - { - return path.Trim().ToLower().TrimEnd('/').EndsWith(tag); - } - - public bool PathEndsWith(IHttpContext context, string tag) - { - return PathEndsWith(context.Request.PathInfo, tag); - } - - // see also: https://stackoverflow.com/questions/33619469/ - // how-do-i-write-a-regular-expression-to-route-traffic-with-grapevine-when-my-requ - - public Match PathInfoRegexMatch(MethodBase methodWithRestRoute, string input) - { - if (methodWithRestRoute == null) - return null; - string piRegex = null; - foreach (var attr in methodWithRestRoute.GetCustomAttributes()) - if (attr.PathInfo != null) - piRegex = attr.PathInfo; - if (piRegex == null) - return null; - var m = Regex.Match(input, piRegex); - return m; - } - - public List CreateHandlesFromQueryString( - System.Collections.Specialized.NameValueCollection queryStrings) - { - // start - var res = new List(); - if (queryStrings == null) - return res; - - // over all query strings - foreach (var kr in queryStrings.AllKeys) - { - try - { - var k = kr.Trim().ToLower(); - var v = queryStrings[k]; - if (k.StartsWith("q") && k.Length > 1 && v.Contains(',')) - { - var vl = v.Split(','); - if (vl.Length == 2) - { - var id = new AdminShell.Identification(vl[0], vl[1]); - var h = new AasxHttpHandleIdentification(id, "@" + k); - res.Add(h); - } - } - } - catch (Exception ex) - { - AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex); - } - } - - // done - return res; - } - - public List CreateHandlesFromRawUrl(string rawUrl) - { - // start - var res = new List(); - if (rawUrl == null) - return res; - - // un-escape - var url = System.Uri.UnescapeDataString(rawUrl); - - // split for query string traditional - var i = url.IndexOf('?'); - if (i < 0 || i == url.Length - 1) - return res; - var query = url.Substring(i + 1); - - // try make a Regex wonder, again - var m = Regex.Match(query, @"(\s*([^&]+)(&|))+"); - if (m.Success && m.Groups.Count >= 3) - foreach (var cp in m.Groups[2].Captures) - { - var m2 = Regex.Match(cp.ToString(), @"\s*(\w+)\s*=\s*([^,]+),(.+)$"); - if (m2.Success && m2.Groups.Count >= 4) - { - var k = m2.Groups[1].ToString(); - var idt = m2.Groups[2].ToString(); - var ids = m2.Groups[3].ToString(); - - var id = new AdminShell.Identification(idt, ids); - var h = new AasxHttpHandleIdentification(id, "@" + k); - res.Add(h); - } - } - - // done - return res; - } - - #endregion - - #region // Access package structures - - public AdminShell.AdministrationShell FindAAS( - string aasid, System.Collections.Specialized.NameValueCollection queryStrings = null, string rawUrl = null) - { - // trivial - if (Package == null || Package.AasEnv == null || Package.AasEnv.AdministrationShells == null || - Package.AasEnv.AdministrationShells.Count < 1) - return null; - - // default aas? - if (aasid == null || aasid.Trim() == "" || aasid.Trim().ToLower() == "id") - return Package.AasEnv.AdministrationShells[0]; - - // resolve an ID? - var specialHandles = this.CreateHandlesFromRawUrl(rawUrl); - var handleId = IdRefHandleStore.ResolveSpecific(aasid, specialHandles); - if (handleId != null && handleId.identification != null) - return Package.AasEnv.FindAAS(handleId.identification); - - // no, iterate over idShort - return Package.AasEnv.FindAAS(aasid); - } - - public AdminShell.SubmodelRef FindSubmodelRefWithinAas( - AdminShell.AdministrationShell aas, string smid, - System.Collections.Specialized.NameValueCollection queryStrings = null, string rawUrl = null) - { - // trivial - if (Package == null || Package.AasEnv == null || aas == null || smid == null || smid.Trim() == "") - return null; - - // via handle - var specialHandles = this.CreateHandlesFromRawUrl(rawUrl); - var handleId = IdRefHandleStore.ResolveSpecific(smid, specialHandles); - - // no, iterate & find - foreach (var smref in aas.submodelRefs) - { - if (handleId != null && handleId.identification != null) - { - if (smref.Matches(handleId.identification)) - return smref; - } - else - { - var sm = this.Package.AasEnv.FindSubmodel(smref); - if (sm != null && sm.idShort != null && sm.idShort.Trim().ToLower() == smid.Trim().ToLower()) - return smref; - } - } - - // no - return null; - } - - public AdminShell.Submodel FindSubmodelWithinAas( - AdminShell.AdministrationShell aas, string smid, - System.Collections.Specialized.NameValueCollection queryStrings = null, string rawUrl = null) - { - // trivial - if (Package == null || Package.AasEnv == null || aas == null || smid == null || smid.Trim() == "") - return null; - - // via handle - var specialHandles = this.CreateHandlesFromRawUrl(rawUrl); - var handleId = IdRefHandleStore.ResolveSpecific(smid, specialHandles); - if (handleId != null && handleId.identification != null) - return Package.AasEnv.FindSubmodel(handleId.identification); - - // no, iterate & find - foreach (var smref in aas.submodelRefs) - { - var sm = this.Package.AasEnv.FindSubmodel(smref); - if (sm != null && sm.idShort != null && sm.idShort.Trim().ToLower() == smid.Trim().ToLower()) - return sm; - } - - // no - return null; - } - - public AdminShell.Submodel FindSubmodelWithoutAas( - string smid, System.Collections.Specialized.NameValueCollection queryStrings = null, - string rawUrl = null) - { - // trivial - if (Package == null || Package.AasEnv == null || smid == null || smid.Trim() == "") - return null; - - // via handle - var specialHandles = this.CreateHandlesFromRawUrl(rawUrl); - var handleId = IdRefHandleStore.ResolveSpecific(smid, specialHandles); - if (handleId != null && handleId.identification != null) - return Package.AasEnv.FindSubmodel(handleId.identification); - - // no, iterate & find - foreach (var sm in this.Package.AasEnv.Submodels) - { - if (sm != null && sm.idShort != null && sm.idShort.Trim().ToLower() == smid.Trim().ToLower()) - return sm; - } - - // no - return null; - } - - public AdminShell.ConceptDescription FindCdWithoutAas( - AdminShell.AdministrationShell aas, string cdid, - System.Collections.Specialized.NameValueCollection queryStrings = null, string rawUrl = null) - { - // trivial - if (Package == null || Package.AasEnv == null || aas == null || cdid == null || cdid.Trim() == "") - return null; - - // via handle - var specialHandles = this.CreateHandlesFromRawUrl(rawUrl); - var handleId = IdRefHandleStore.ResolveSpecific(cdid, specialHandles); - if (handleId != null && handleId.identification != null) - return Package.AasEnv.FindConceptDescription(handleId.identification); - - // no, iterate & find - foreach (var cd in Package.AasEnv.ConceptDescriptions) - { - if (cd.idShort != null && cd.idShort.Trim().ToLower() == cdid.Trim().ToLower()) - return cd; - } - - // no - return null; - } - - - public class FindSubmodelElementResult - { - public AdminShell.Referable elem = null; - public AdminShell.SubmodelElementWrapper wrapper = null; - public AdminShell.Referable parent = null; - - public FindSubmodelElementResult( - AdminShell.Referable elem = null, AdminShell.SubmodelElementWrapper wrapper = null, - AdminShell.Referable parent = null) - { - this.elem = elem; - this.wrapper = wrapper; - this.parent = parent; - } - } - - public FindSubmodelElementResult FindSubmodelElement( - AdminShell.Referable parent, List wrappers, - string[] elemids, int elemNdx = 0) - { - // trivial - if (wrappers == null || elemids == null || elemNdx >= elemids.Length) - return null; - - // dive into each - foreach (var smw in wrappers) - if (smw.submodelElement != null) - { - // idShort need to match - if (smw.submodelElement.idShort.Trim().ToLower() != elemids[elemNdx].Trim().ToLower()) - continue; - - // leaf - if (elemNdx == elemids.Length - 1) - { - return new FindSubmodelElementResult(elem: smw.submodelElement, wrapper: smw, parent: parent); - } - else - { - // recurse into? - var xsmc = smw.submodelElement as AdminShell.SubmodelElementCollection; - if (xsmc != null) - { - var r = FindSubmodelElement(xsmc, xsmc.value, elemids, elemNdx + 1); - if (r != null) - return r; - } - - var xop = smw.submodelElement as AdminShell.Operation; - if (xop != null) - { - var w2 = new List(); - for (int i = 0; i < 2; i++) - foreach (var opv in xop[i]) - if (opv.value != null) - w2.Add(opv.value); - - var r = FindSubmodelElement(xop, w2, elemids, elemNdx + 1); - if (r != null) - return r; - } - } - } - - // nothing - return null; - } - - #endregion - - #region // Generate responses - - - protected static void SendJsonResponse( - IHttpContext context, object obj, IContractResolver contractResolver = null) - { - var settings = new JsonSerializerSettings(); - if (contractResolver != null) - settings.ContractResolver = contractResolver; - var json = JsonConvert.SerializeObject(obj, Formatting.Indented, settings); - var buffer = context.Request.ContentEncoding.GetBytes(json); - var length = buffer.Length; - - context.Response.ContentType = ContentType.JSON; - context.Response.ContentEncoding = Encoding.UTF8; - context.Response.ContentLength64 = length; - context.Response.SendResponse(buffer); - } - - protected static void SendTextResponse(IHttpContext context, string txt, string mimeType = null) - { - context.Response.ContentType = ContentType.TEXT; - if (mimeType != null) - context.Response.Advanced.ContentType = mimeType; - context.Response.ContentEncoding = Encoding.UTF8; - context.Response.ContentLength64 = txt.Length; - context.Response.SendResponse(txt); - } - - protected static void SendStreamResponse( - IHttpContext context, Stream stream, string headerAttachmentFileName = null) - { - context.Response.ContentType = ContentType.APPLICATION; - context.Response.ContentLength64 = stream.Length; - context.Response.SendChunked = true; - - if (headerAttachmentFileName != null) - context.Response.AddHeader("Content-Disposition", $"attachment; filename={headerAttachmentFileName}"); - - stream.CopyTo(context.Response.Advanced.OutputStream); - context.Response.Advanced.Close(); - } - - #endregion - - #region AAS and Asset - - public void EvalGetAasAndAsset(IHttpContext context, string aasid, bool deep = false, bool complete = false) - { - // access the first AAS - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - if (aas == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with id '{aasid}' found."); - return; - } - - // try to get the asset as well - var asset = this.Package.AasEnv.FindAsset(aas.assetRef); - - // result - dynamic res = new ExpandoObject(); - res.AAS = aas; - res.Asset = asset; - - // return as JSON - var cr = new AdminShellConverters.AdaptiveFilterContractResolver(deep: deep, complete: complete); - SendJsonResponse(context, res, cr); - } - - public void EvalGetAasEnv(IHttpContext context, string aasid) - { - if (this.Package == null || this.Package.AasEnv == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures."); - return; - } - - // access the first AAS - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - if (aas == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with id '{aasid}' found."); - return; - } - - // create a new, filtered AasEnv - AdminShell.AdministrationShellEnv copyenv = null; - try - { - copyenv = AdminShell.AdministrationShellEnv.CreateFromExistingEnv( - this.Package.AasEnv, filterForAas: new List(new[] { aas })); - } - catch (Exception ex) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot filter aas envioronment: {ex.Message}."); - return; - } - - // return as FILE - try - { - using (var ms = new MemoryStream()) - { - // build a file name - var fn = "aasenv.json"; - if (aas.idShort != null) - fn = aas.idShort + "." + fn; - // serialize via helper - var jsonwriter = copyenv.SerialiazeJsonToStream(new StreamWriter(ms), leaveJsonWriterOpen: true); - // write out again - ms.Position = 0; - SendStreamResponse(context, ms, Path.GetFileName(fn)); - // bit ugly - jsonwriter.Close(); - } - } - catch (Exception ex) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, - $"Cannot serialize and send aas envioronment: {ex.Message}."); - } - } - - - public void EvalGetAasThumbnail(IHttpContext context, string aasid) - { - if (this.Package == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures."); - return; - } - - // access the first AAS - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - if (aas == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with id '{aasid}' found."); - return; - } - - // access the thumbnail - // Note: in this version, the thumbnail is not specific to the AAS, but maybe in later versions ;-) - Uri thumbUri = null; - var thumbStream = this.Package.GetLocalThumbnailStream(ref thumbUri); - if (thumbStream == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No thumbnail available in package."); - return; - } - - // return as FILE - SendStreamResponse(context, thumbStream, Path.GetFileName(thumbUri?.ToString() ?? "")); - thumbStream.Close(); - } - - public void EvalPutAas(IHttpContext context) - { - // first check - if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON."); - return; - } - - // list of Identification - AdminShell.AdministrationShell aas = null; - try - { - aas = Newtonsoft.Json.JsonConvert.DeserializeObject( - context.Request.Payload); - } - catch (Exception ex) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}."); - return; - } - - // need id for idempotent behaviour - if (aas.identification == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, - $"Identification of entity is (null); PUT cannot be performed."); - return; - } - - // datastructure update - if (this.Package == null || this.Package.AasEnv == null || - this.Package.AasEnv.AdministrationShells == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures."); - return; - } - context.Server.Logger.Debug( - $"Putting AdministrationShell with idShort {aas.idShort ?? "--"} and " + - $"id {aas.identification.ToString()}"); - var existingAas = this.Package.AasEnv.FindAAS(aas.identification); - if (existingAas != null) - this.Package.AasEnv.AdministrationShells.Remove(existingAas); - this.Package.AasEnv.AdministrationShells.Add(aas); - - // simple OK - SendTextResponse(context, "OK" + ((existingAas != null) ? " (updated)" : " (new)")); - } - - public void EvalDeleteAasAndAsset(IHttpContext context, string aasid, bool deleteAsset = false) - { - // datastructure update - if (this.Package == null || this.Package.AasEnv == null || - this.Package.AasEnv.AdministrationShells == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures."); - return; - } - - // access the AAS - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - if (aas == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found."); - return; - } - - // find the asset - var asset = this.Package.AasEnv.FindAsset(aas.assetRef); - - // delete - context.Server.Logger.Debug( - $"Deleting AdministrationShell with idShort {aas.idShort ?? "--"} and " + - $"id {aas.identification?.ToString() ?? "--"}"); - this.Package.AasEnv.AdministrationShells.Remove(aas); - - if (deleteAsset && asset != null) - { - context.Server.Logger.Debug( - $"Deleting Asset with idShort {asset.idShort ?? "--"} and " + - $"id {asset.identification?.ToString() ?? "--"}"); - this.Package.AasEnv.Assets.Remove(asset); - } - - // simple OK - SendTextResponse(context, "OK"); - } - - #endregion - - #region // Asset links - - public void EvalGetAssetLinks(IHttpContext context, string assetid) - { - // trivial - if (assetid == null) - return; - - // do a manual search - var res = new List(); - var specialHandles = this.CreateHandlesFromQueryString(context.Request.QueryString); - var handle = IdRefHandleStore.ResolveSpecific(assetid, specialHandles); - if (handle != null && handle.identification != null) - { - foreach (var aas in this.Package.AasEnv.AdministrationShells) - if (aas.assetRef != null && aas.assetRef.Matches(handle.identification)) - { - dynamic o = new ExpandoObject(); - o.identification = aas.identification; - o.idShort = aas.idShort; - res.Add(o); - } - } - else - { - foreach (var aas in this.Package.AasEnv.AdministrationShells) - if (aas.idShort != null && aas.idShort.Trim() != "" && - aas.idShort.Trim().ToLower() == assetid.Trim().ToLower()) - { - dynamic o = new ExpandoObject(); - o.identification = aas.identification; - o.idShort = aas.idShort; - res.Add(o); - } - } - - // return as JSON - SendJsonResponse(context, res); - } - - public void EvalPutAsset(IHttpContext context) - { - // first check - if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON."); - return; - } - - // de-serialize asset - AdminShell.Asset asset = null; - try - { - asset = Newtonsoft.Json.JsonConvert.DeserializeObject(context.Request.Payload); - } - catch (Exception ex) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}."); - return; - } - - // need id for idempotent behaviour - if (asset.identification == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, - $"Identification of entity is (null); PUT cannot be performed."); - return; - } - - // datastructure update - if (this.Package == null || this.Package.AasEnv == null || this.Package.AasEnv.Assets == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.InternalServerError, - $"Error accessing internal data structures."); - return; - } - context.Server.Logger.Debug($"Adding Asset with idShort {asset.idShort ?? "--"}"); - var existingAsset = this.Package.AasEnv.FindAsset(asset.identification); - if (existingAsset != null) - this.Package.AasEnv.Assets.Remove(existingAsset); - this.Package.AasEnv.Assets.Add(asset); - - // simple OK - SendTextResponse(context, "OK" + ((existingAsset != null) ? " (updated)" : " (new)")); - } - #endregion - - #region // List of Submodels - - public class GetSubmodelsItem - { - public AdminShell.Identification id = new AdminShell.Identification(); - public string idShort = ""; - public string kind = ""; - - public GetSubmodelsItem() { } - - public GetSubmodelsItem(AdminShell.Identification id, string idShort, string kind) - { - this.id = id; - this.idShort = idShort; - this.kind = kind; - } - - public GetSubmodelsItem(AdminShell.Identifiable idi, string kind) - { - this.id = idi.identification; - this.idShort = idi.idShort; - this.kind = kind; - } - } - - public void EvalGetSubmodels(IHttpContext context, string aasid) - { - // access the AAS - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - if (aas == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found."); - return; - } - - // build a list of results - var res = new List(); - - // get all submodels - foreach (var smref in aas.submodelRefs) - { - var sm = this.Package.AasEnv.FindSubmodel(smref); - if (sm != null) - res.Add(new GetSubmodelsItem(sm, sm.kind.kind)); - } - - // return as JSON - SendJsonResponse(context, res); - } - - public void EvalPutSubmodel(IHttpContext context, string aasid) - { - // first check - if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON."); - return; - } - - // access the AAS - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - if (aas == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found."); - return; - } - - // de-serialize Submodel - AdminShell.Submodel submodel = null; - try - { - submodel = Newtonsoft.Json.JsonConvert.DeserializeObject(context.Request.Payload); - } - catch (Exception ex) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}."); - return; - } - - // need id for idempotent behaviour - if (submodel.identification == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, - $"Identification of entity is (null); PUT cannot be performed."); - return; - } - - // datastructure update - if (this.Package == null || this.Package.AasEnv == null || this.Package.AasEnv.Assets == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures."); - return; - } - - // add Submodel - context.Server.Logger.Debug( - $"Adding Submodel with idShort {submodel.idShort ?? "--"} and " + - $"id {submodel.identification?.ToString()}"); - var existingSm = this.Package.AasEnv.FindSubmodel(submodel.identification); - if (existingSm != null) - this.Package.AasEnv.Submodels.Remove(existingSm); - this.Package.AasEnv.Submodels.Add(submodel); - - // add SubmodelRef to AAS - var newsmr = AdminShell.SubmodelRef.CreateNew( - "Submodel", true, submodel.identification.idType, submodel.identification.id); - var existsmr = aas.HasSubmodelRef(newsmr); - if (!existsmr) - { - context.Server.Logger.Debug( - $"Adding SubmodelRef to AAS with idShort {aas.idShort ?? "--"} and " + - $"id {aas.identification?.ToString() ?? "--"}"); - aas.AddSubmodelRef(newsmr); - } - - // simple OK - SendTextResponse(context, "OK" + ((existingSm != null) ? " (updated)" : " (new)")); - } - - public void EvalDeleteSubmodel(IHttpContext context, string aasid, string smid) - { - // first check - if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON."); - return; - } - - // access the AAS (absolutely mandatory) - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - if (aas == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found."); - return; - } - - // delete SubmodelRef 1st - var smref = this.FindSubmodelRefWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl); - if (smref != null) - { - context.Server.Logger.Debug( - $"Removing SubmodelRef {smid} from AAS with idShort {aas.idShort ?? "--"} and " + - $"id {aas.identification?.ToString() ?? "--"}"); - aas.submodelRefs.Remove(smref); - } - - // delete Submodel 2nd - var sm = this.FindSubmodelWithoutAas(smid, context.Request.QueryString, context.Request.RawUrl); - if (sm != null) - { - context.Server.Logger.Debug($"Removing Submodel {smid} from data structures."); - this.Package.AasEnv.Submodels.Remove(sm); - } - - // simple OK - var cmt = ""; - if (smref == null && sm == null) - cmt += " (nothing deleted)"; - cmt += ((smref != null) ? " (SubmodelRef deleted)" : "") + ((sm != null) ? " (Submodel deleted)" : ""); - SendTextResponse(context, "OK" + cmt); - } - - #endregion - - #region // Submodel Complete - - public void EvalGetSubmodelContents( - IHttpContext context, string aasid, string smid, bool deep = false, bool complete = false) - { - // access AAS and Submodel - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl); - if (sm == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found."); - return; - } - - // return as JSON - var cr = new AdminShellConverters.AdaptiveFilterContractResolver(deep: deep, complete: complete); - SendJsonResponse(context, sm, cr); - } - - public void EvalGetSubmodelContentsAsTable(IHttpContext context, string aasid, string smid) - { - // access AAS and Submodel - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl); - if (sm == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found."); - return; - } - - // AAS ENV - if (this.Package == null || this.Package.AasEnv == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.InternalServerError, - $"Error accessing internal data structures."); - return; - } - - // make a table - var table = new List(); - sm.RecurseOnSubmodelElements(null, (o, parents, sme) => - { - // start a row - dynamic row = new ExpandoObject(); - - // defaults - row.idShorts = ""; - row.typeName = ""; - row.semIdType = ""; - row.semId = ""; - row.shortName = ""; - row.unit = ""; - row.value = ""; - - // idShort is a concatenation - var path = ""; - foreach (var p in parents) - path += p.idShort + "/"; - - // SubnmodelElement general - row.idShorts = path + (sme.idShort ?? "(-)"); - row.typeName = sme.GetElementName(); - if (sme.semanticId == null || sme.semanticId.Keys == null) - { } - else if (sme.semanticId.Keys.Count > 1) - { - row.semId = "(complex)"; - } - else - { - row.semIdType = sme.semanticId.Keys[0].idType; - row.semId = sme.semanticId.Keys[0].value; - } - - // try find a concept description - if (sme.semanticId != null) - { - var cd = this.Package.AasEnv.FindConceptDescription(sme.semanticId.Keys); - if (cd != null) - { - var ds = cd.GetIEC61360(); - if (ds != null) - { - row.shortName = (ds.shortName == null ? "" : ds.shortName.GetDefaultStr()); - row.unit = ds.unit ?? ""; - } - } - } - - // try add a value - if (sme is AdminShell.Property) - { - var p = sme as AdminShell.Property; - row.value = "" + (p.value ?? "") + ((p.valueId != null) ? p.valueId.ToString() : ""); - } - - if (sme is AdminShell.File) - { - var p = sme as AdminShell.File; - row.value = "" + p.value; - } - - if (sme is AdminShell.Blob) - { - var p = sme as AdminShell.Blob; - if (p.value.Length < 128) - row.value = "" + p.value; - else - row.value = "(" + p.value.Length + " bytes)"; - } - - if (sme is AdminShell.ReferenceElement) - { - var p = sme as AdminShell.ReferenceElement; - row.value = "" + p.value.ToString(); - } - - if (sme is AdminShell.RelationshipElement) - { - var p = sme as AdminShell.RelationshipElement; - row.value = "" + (p.first?.ToString() ?? "(-)") + " <-> " + (p.second?.ToString() ?? "(-)"); - } - - // now, add the row - table.Add(row); - - // recurse - return true; - }); - - // return as JSON - SendJsonResponse(context, table); - } - - #endregion - - #region // Submodel Elements - - public void EvalGetSubmodelElementContents( - IHttpContext context, string aasid, string smid, string[] elemids, bool deep = false, - bool complete = false) - { - // access AAS and Submodel - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl); - if (sm == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found."); - return; - } - - // find the right SubmodelElement - var sme = this.FindSubmodelElement(sm, sm.submodelElements, elemids); - if (sme == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No matching element in Submodel found."); - return; - } - - // return as JSON - var cr = new AdminShellConverters.AdaptiveFilterContractResolver(deep: deep, complete: complete); - SendJsonResponse(context, sme, cr); - } - - public void EvalGetSubmodelElementsBlob(IHttpContext context, string aasid, string smid, string[] elemids) - { - // access AAS and Submodel - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl); - if (sm == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found."); - return; - } - - // find the right SubmodelElement - var fse = this.FindSubmodelElement(sm, sm.submodelElements, elemids); - var smeb = fse?.elem as AdminShell.Blob; - if (smeb == null || smeb.value == null || smeb.value == "") - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No matching Blob element in Submodel found."); - return; - } - - // return as TEXT - SendTextResponse(context, smeb.value, mimeType: smeb.mimeType); - } - - public void EvalGetSubmodelElementsProperty(IHttpContext context, string aasid, string smid, string[] elemids) - { - // access AAS and Submodel - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl); - if (sm == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found."); - return; - } - - // find the right SubmodelElement - var fse = this.FindSubmodelElement(sm, sm.submodelElements, elemids); - var smep = fse?.elem as AdminShell.Property; - if (smep == null || smep.value == null || smep.value == "") - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No matching Property element in Submodel found."); - return; - } - - // a little bit of demo - string strval = smep.value; - if (smep.HasQualifierOfType("DEMO") != null && smep.value != null && smep.valueType != null && - smep.valueType.Trim().ToLower() == "double" && - double.TryParse(smep.value, NumberStyles.Any, CultureInfo.InvariantCulture, out double dblval)) - { - dblval += Math.Sin((0.001 * DateTime.UtcNow.Millisecond) * 6.28); - strval = dblval.ToString(CultureInfo.InvariantCulture); - } - - // return as little dynamic object - dynamic res = new ExpandoObject(); - res.value = strval; - if (smep.valueId != null) - res.valueId = smep.valueId; - - // send - SendJsonResponse(context, res); - } - - public void EvalGetSubmodelElementsFile(IHttpContext context, string aasid, string smid, string[] elemids) - { - // access AAS and Submodel - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl); - if (sm == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found."); - return; - } - - // find the right SubmodelElement - var fse = this.FindSubmodelElement(sm, sm.submodelElements, elemids); - var smef = fse?.elem as AdminShell.File; - if (smef == null || smef.value == null || smef.value == "") - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No matching File element in Submodel found."); - return; - } - - // access - var packageStream = this.Package.GetLocalStreamFromPackage(smef.value); - if (packageStream == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No file contents available in package."); - return; - } - - // return as FILE - SendStreamResponse(context, packageStream, Path.GetFileName(smef.value)); - packageStream.Close(); - } - - public void EvalPutSubmodelElementContents(IHttpContext context, string aasid, string smid, string[] elemids) - { - // first check - if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON."); - return; - } - - // de-serialize SubmodelElement - AdminShell.SubmodelElement sme = null; - try - { - sme = Newtonsoft.Json.JsonConvert.DeserializeObject( - context.Request.Payload, new AdminShellConverters.JsonAasxConverter("modelType", "name")); - } - catch (Exception ex) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}."); - return; - } - - // need id for idempotent behaviour - if (sme?.idShort == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, - $"entity or idShort of entity is (null); PUT cannot be performed."); - return; - } - - // access AAS and Submodel - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl); - if (sm == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found."); - return; - } - - // special case: parent is Submodel itself - var updated = false; - if (elemids == null || elemids.Length < 1) - { - var existsmw = sm.FindSubmodelElementWrapper(sme.idShort); - if (existsmw != null) - { - updated = true; - context.Server.Logger.Debug($"Removing old SubmodelElement {sme.idShort} from Submodel {smid}."); - sm.submodelElements.Remove(existsmw); - } - - context.Server.Logger.Debug($"Adding new SubmodelElement {sme.idShort} to Submodel {smid}."); - sm.Add(sme); - } - else - { - // find the right SubmodelElement - var parent = this.FindSubmodelElement(sm, sm.submodelElements, elemids); - if (parent == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No matching element in Submodel found."); - return; - } - - if (parent.elem != null && parent.elem is AdminShell.SubmodelElementCollection parentsmc) - { - var existsmw = parentsmc.FindFirstIdShort(sme.idShort); - if (existsmw != null) - { - updated = true; - context.Server.Logger.Debug( - $"Removing old SubmodelElement {sme.idShort} from SubmodelCollection."); - parentsmc.value.Remove(existsmw); - } - - context.Server.Logger.Debug($"Adding new SubmodelElement {sme.idShort} to SubmodelCollection."); - parentsmc.Add(sme); - } - else - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, - $"Matching SubmodelElement in Submodel {smid} is not suitable to add childs."); - return; - } - - } - - // simple OK - SendTextResponse(context, "OK" + (updated ? " (with updates)" : "")); - } - - public void EvalDeleteSubmodelElementContents( - IHttpContext context, string aasid, string smid, string[] elemids) - { - // access AAS and Submodel - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl); - if (sm == null || elemids == null || elemids.Length < 1) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found or " + - $"no elements to delete specified."); - return; - } - - // OK, Submodel and Element existing - var fse = this.FindSubmodelElement(sm, sm.submodelElements, elemids); - if (fse == null || fse.elem == null || fse.parent == null || fse.wrapper == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No matching element in Submodel found."); - return; - } - - // where to delete? - var deleted = false; - var elinfo = string.Join(".", elemids); - if (fse.parent == sm) - { - context.Server.Logger.Debug($"Deleting specified SubmodelElement {elinfo} from Submodel {smid}."); - sm.submodelElements.Remove(fse.wrapper); - deleted = true; - } - - if (fse.parent is AdminShell.SubmodelElementCollection smc) - { - context.Server.Logger.Debug( - $"Deleting specified SubmodelElement {elinfo} from SubmodelElementCollection {smc.idShort}."); - smc.value.Remove(fse.wrapper); - deleted = true; - } - - // simple OK - SendTextResponse(context, "OK" + (!deleted ? " (but nothing deleted)" : "")); - } - - public void EvalInvokeSubmodelElementOperation( - IHttpContext context, string aasid, string smid, string[] elemids) - { - // access AAS and Submodel - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - var sm = this.FindSubmodelWithinAas(aas, smid, context.Request.QueryString, context.Request.RawUrl); - if (sm == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No AAS '{aasid}' or no Submodel with idShort '{smid}' found."); - return; - } - - // find the right SubmodelElement - var fse = this.FindSubmodelElement(sm, sm.submodelElements, elemids); - var smep = fse?.elem as AdminShell.Operation; - if (smep == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No matching Operation element in Submodel found."); - return; - } - - // make 1st expectation - int numExpectedInputArgs = smep.inputVariable?.Count ?? 0; - int numGivenInputArgs = 0; - int numExpectedOutputArgs = smep.outputVariable?.Count ?? 0; - var inputArguments = (new int[numExpectedInputArgs]).Select(x => "").ToList(); - var outputArguments = (new int[numExpectedOutputArgs]).Select(x => "my value").ToList(); - - // is a payload required? Always, if at least one input argument required - - if (smep.inputVariable != null && smep.inputVariable.Count > 0) - { - // payload present - if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, - $"No payload for Operation input argument or content type is not JSON."); - return; - } - - // de-serialize SubmodelElement - try - { - // serialize - var input = Newtonsoft.Json.JsonConvert.DeserializeObject>(context.Request.Payload); - - // set inputs - if (input != null && input.Count > 0) - { - numGivenInputArgs = input.Count; - for (int i = 0; i < numGivenInputArgs; i++) - inputArguments[i] = input[i]; - } - } - catch (Exception ex) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}."); - return; - } - } - - // do a check - if (numExpectedInputArgs != numGivenInputArgs) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, - $"Number of input arguments in payload does not fit expected input arguments of Operation."); - return; - } - - // just a test - if (smep.HasQualifierOfType("DEMO") != null) - { - for (int i = 0; i < Math.Min(numExpectedInputArgs, numExpectedOutputArgs); i++) - outputArguments[i] = "CALC on " + inputArguments[i]; - } - - // return as little dynamic object - SendJsonResponse(context, outputArguments); - } - - public void EvalGetAllCds(IHttpContext context, string aasid) - { - // access the AAS - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - if (aas == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found."); - return; - } - - // build a list of results - var res = new List(); - - // create a new, filtered AasEnv - // (this is expensive, but delivers us with a list of CDs which are in relation to the respective AAS) - var copyenv = AdminShell.AdministrationShellEnv.CreateFromExistingEnv( - this.Package.AasEnv, filterForAas: new List(new[] { aas })); - - // get all CDs and describe them - foreach (var cd in copyenv.ConceptDescriptions) - { - // describe - dynamic o = new ExpandoObject(); - o.idShort = cd.idShort; - o.shortName = cd.GetDefaultShortName(); - o.identification = cd.identification; - o.isCaseOf = cd.IsCaseOf; - - // add - res.Add(o); - } - - // return as JSON - SendJsonResponse(context, res); - } - - public void EvalGetCdContents(IHttpContext context, string aasid, string cdid) - { - // access AAS and CD - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - var cd = this.FindCdWithoutAas(aas, cdid, context.Request.QueryString, context.Request.RawUrl); - if (cd == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No AAS '{aasid}' or no ConceptDescription with id '{cdid}' found."); - return; - } - - // return as JSON - SendJsonResponse(context, cd); - } - - public void EvalDeleteSpecificCd(IHttpContext context, string aasid, string cdid) - { - // access AAS and CD - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - var cd = this.FindCdWithoutAas(aas, cdid, context.Request.QueryString, context.Request.RawUrl); - if (cd == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, - $"No AAS '{aasid}' or no ConceptDescription with id '{cdid}' found."); - return; - } - - // delete ?! - var deleted = false; - if (this.Package != null && this.Package.AasEnv != null && - this.Package.AasEnv.ConceptDescriptions.Contains(cd)) - { - this.Package.AasEnv.ConceptDescriptions.Remove(cd); - deleted = true; - } - - // return as JSON - SendTextResponse(context, "OK" + (!deleted ? " (but nothing deleted)" : "")); - } - - #endregion - - #region // GET + POST handles/identification - - public void EvalGetHandlesIdentification(IHttpContext context) - { - // get the list - var res = IdRefHandleStore.FindAll(); - - // return this list - SendJsonResponse(context, res); - } - - public void EvalPostHandlesIdentification(IHttpContext context) - { - // first check - if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON."); - return; - } - - // list of Identification - List ids = null; - try - { - ids = Newtonsoft.Json.JsonConvert.DeserializeObject>( - context.Request.Payload); - } - catch (Exception ex) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}."); - return; - } - if (ids == null || ids.Count < 1) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"No Identification entities in payload."); - return; - } - - // turn these list into a list of Handles - var res = new List(); - foreach (var id in ids) - { - var h = new AasxHttpHandleIdentification(id); - IdRefHandleStore.Add(h); - res.Add(h); - } - - // return this list - SendJsonResponse(context, res); - } - - #endregion - - #region // Server profile .. - - public void EvalGetServerProfile(IHttpContext context) - { - // get the list - dynamic res = new ExpandoObject(); - var capabilities = new List(new ulong[]{ - 80,81,82,10,11,12,13,15,16,20,21,30,31,40,41,42,43,50,51,52,53,54,55,56,57,58,59,60,61,70,71,72,73 - }); - res.apiversion = 1; - res.capabilities = capabilities; - - // return this list - SendJsonResponse(context, res); - } - - #endregion - - #region // Concept Descriptions - - public void EvalPutCd(IHttpContext context, string aasid) - { - // first check - if (context.Request.Payload == null || context.Request.ContentType != ContentType.JSON) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"No payload or content type is not JSON."); - return; - } - - // access the AAS - var aas = this.FindAAS(aasid, context.Request.QueryString, context.Request.RawUrl); - if (aas == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotFound, $"No AAS with idShort '{aasid}' found."); - return; - } - - // de-serialize CD - AdminShell.ConceptDescription cd = null; - try - { - cd = Newtonsoft.Json.JsonConvert.DeserializeObject( - context.Request.Payload); - } - catch (Exception ex) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, $"Cannot deserialize payload: {ex.Message}."); - return; - } - - // need id for idempotent behaviour - if (cd.identification == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.BadRequest, - $"Identification of entity is (null); PUT cannot be performed."); - return; - } - - // datastructure update - if (this.Package == null || this.Package.AasEnv == null || this.Package.AasEnv.Assets == null) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.InternalServerError, $"Error accessing internal data structures."); - return; - } - - // add Submodel - context.Server.Logger.Debug( - $"Adding ConceptDescription with idShort {cd.idShort ?? "--"} and " + - $"id {cd.identification.ToString()}"); - var existingCd = this.Package.AasEnv.FindConceptDescription(cd.identification); - if (existingCd != null) - this.Package.AasEnv.ConceptDescriptions.Remove(existingCd); - this.Package.AasEnv.ConceptDescriptions.Add(cd); - - // simple OK - SendTextResponse(context, "OK" + ((existingCd != null) ? " (updated)" : " (new)")); - } - - #endregion - } -} diff --git a/src/AasxRestServerLibrary/AasxHttpHandleStore.cs b/src/AasxRestServerLibrary/AasxHttpHandleStore.cs deleted file mode 100644 index 271c9206..00000000 --- a/src/AasxRestServerLibrary/AasxHttpHandleStore.cs +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright (c) 2018-2023 Festo AG & Co. KG -Author: Michael Hoffmeister - -This source code is licensed under the Apache License 2.0 (see LICENSE.txt). - -This source code may use other Open Source software components (see LICENSE.txt). -*/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using AasxCompatibilityModels; -using AdminShellNS; -using Newtonsoft.Json; - -/* -Please notice: -The API and REST routes implemented in this version of the source code are not specified and standardised by the -specification Details of the Administration Shell. The hereby stated approach is solely the opinion of its author(s). -*/ - -namespace AasxRestServerLibrary -{ - /// - /// Describes a handle to a Identification or Reference to be used in HTTP REST APIs - /// - public abstract class AasxHttpHandle - { - [JsonProperty(PropertyName = "key")] - public string Key; - [JsonIgnore] - public DateTime ExpiresInternal; - [JsonProperty(PropertyName = "expires")] - // http-date, see https://stackoverflow.com/questions/21120882/the-date-time-format-used-in-http-headers - public string Expires; - } - - /// - /// Describes a handle to a Identification to be used in HTTP REST APIs - /// - public class AasxHttpHandleIdentification : AasxHttpHandle - { - private static int counter = 1; - - public AdminShell.Identification identification = null; - - public AasxHttpHandleIdentification(AdminShell.Identification src, string keyPreset = null) - { - if (keyPreset == null) - this.Key = $"@ID{counter++:00000000}"; - else - this.Key = keyPreset; - this.ExpiresInternal = DateTime.UtcNow.AddMinutes(60); - this.Expires = this.ExpiresInternal.ToString("R"); - this.identification = new AdminShell.Identification(src); - } - } - - /// - /// This store stores AasxHttpHandle items in order to provide 'shortcuts' to AAS Identifications and - /// References in HTTP REST APIs - /// - public class AasxHttpHandleStore - { - private Dictionary storeItems = new Dictionary(); - - public void Add(AasxHttpHandle handle) - { - if (handle == null) - return; - storeItems.Add(handle.Key, handle); - } - - public AasxHttpHandle Resolve(string Key) - { - if (storeItems.ContainsKey(Key)) - return storeItems[Key]; - return null; - } - - public T ResolveSpecific(string Key, List specialHandles = null) where T : AasxHttpHandle - { - // trivial - if (Key == null) - return null; - Key = Key.Trim(); - if (Key == "" || !Key.StartsWith("@")) - return null; - - // search in specialHandles - if (specialHandles != null) - foreach (var sh in specialHandles) - if (sh.Key.Trim().ToLower() == Key.Trim().ToLower()) - return sh; - - // search in store - if (storeItems.ContainsKey(Key)) - return storeItems[Key] as T; - return null; - } - - public List FindAll() where T : class - { - var res = new List(); - foreach (var x in storeItems.Values) - if (x is T) - res.Add(x as T); - return res; - } - } -} diff --git a/src/AasxRestServerLibrary/AasxRestClient.cs b/src/AasxRestServerLibrary/AasxRestClient.cs deleted file mode 100644 index 6cf3b0f4..00000000 --- a/src/AasxRestServerLibrary/AasxRestClient.cs +++ /dev/null @@ -1,202 +0,0 @@ -/* -Copyright (c) 2018-2023 Festo AG & Co. KG -Author: Michael Hoffmeister - -This source code is licensed under the Apache License 2.0 (see LICENSE.txt). - -This source code may use other Open Source software components (see LICENSE.txt). -*/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net; -using System.Net.Http; -using System.Text; -using System.Threading.Tasks; -using AasxIntegrationBase; -using AdminShellNS; -using Grapevine.Client; -using Newtonsoft.Json.Linq; - -namespace AasxRestServerLibrary -{ - public class AasxRestClient : IAasxOnlineConnection - { - // Instance management - - private Uri uri = null; - private RestClient client = null; - private WebProxy proxy = null; - - public AasxRestClient(string hostpart) - { - this.uri = new Uri(hostpart.TrimEnd('/')); - this.client = new RestClient(); - this.client.Host = this.uri.Host; - this.client.Port = this.uri.Port; - if (File.Exists("C:\\dat\\proxy.dat")) - { - string proxyAddress = ""; - string username = ""; - string password = ""; - try - { // Open the text file using a stream reader. - using (StreamReader sr = new StreamReader("C:\\dat\\proxy.dat")) - { - proxyAddress = sr.ReadLine(); - username = sr.ReadLine(); - password = sr.ReadLine(); - } - } - catch (IOException e) - { - Console.WriteLine("The file C:\\dat\\proxy.dat could not be read:"); - Console.WriteLine(e.Message); - } - this.proxy = new WebProxy(); - Uri newUri = new Uri(proxyAddress); - this.proxy.Address = newUri; - this.proxy.Credentials = new NetworkCredential(username, password); - } - } - - // interface - - public bool IsValid() { return this.uri != null; } // assume validity - public bool IsConnected() { return true; } // always, as there is no open connection by principle - public string GetInfo() { return uri.ToString(); } - - public Stream GetThumbnailStream() - { - var request = new RestRequest("/aas/id/thumbnail"); - if (this.proxy != null) - request.Proxy = this.proxy; - var response = client.Execute(request); - if (response.StatusCode != Grapevine.Shared.HttpStatusCode.Ok) - throw new Exception( - $"REST {response.ResponseUri} response {response.StatusCode} with {response.StatusDescription}"); - - // Note: the normal response.GetContent() internally reads ContentStream as a string and - // screws up binary data. - // Necessary to access the real implementing object - var rr = response as RestResponse; - if (rr != null) - { - return rr.Advanced.GetResponseStream(); - } - return null; - } - - public string ReloadPropertyValue() - { - return ""; - } - - // utilities - - string BuildUriQueryPartId(string tag, AdminShell.Identifiable entity) - { - if (entity == null || entity.identification == null) - return ""; - var res = ""; - if (tag != null) - res += tag.Trim() + "="; - res += entity.identification.idType.Trim() + "," + entity.identification.id.Trim(); - return res; - } - - string BuildUriQueryString(params string[] parts) - { - if (parts == null) - return ""; - var res = "?"; - foreach (var p in parts) - { - if (res.Length > 1) - res += "&"; - res += p; - } - return res; - } - - // individual functions - - public AdminShellPackageEnv OpenPackageByAasEnv() - { - var request = new RestRequest("/aas/id/aasenv"); - if (this.proxy != null) - request.Proxy = this.proxy; - var respose = client.Execute(request); - if (respose.StatusCode != Grapevine.Shared.HttpStatusCode.Ok) - throw new Exception( - $"REST {respose.ResponseUri} response {respose.StatusCode} with {respose.StatusDescription}"); - var res = new AdminShellPackageEnv(); - res.LoadFromAasEnvString(respose.GetContent()); - return res; - } - - public string GetSubmodel(string name) - { - string fullname = "/aas/id/submodels/" + name + "/complete"; - var request = new RestRequest(fullname); - if (this.proxy != null) - request.Proxy = this.proxy; - var response = client.Execute(request); - if (response.StatusCode != Grapevine.Shared.HttpStatusCode.Ok) - throw new Exception( - $"REST {response.ResponseUri} response {response.StatusCode} with {response.StatusDescription}"); - return response.GetContent(); - } - - public async void PutSubmodelAsync(string payload) - { - string fullname = "/aas/id/submodels/"; - - var handler = new HttpClientHandler(); - handler.DefaultProxyCredentials = CredentialCache.DefaultCredentials; - handler.AllowAutoRedirect = false; - - var hClient = new HttpClient(handler) - { - BaseAddress = uri - }; - StringContent queryString = new StringContent(payload); - await hClient.PutAsync(fullname, queryString); - } - - public string UpdatePropertyValue( - AdminShell.AdministrationShellEnv env, AdminShell.Submodel submodel, AdminShell.SubmodelElement sme) - { - // trivial fails - if (env == null || sme == null) - return null; - - // need AAS, indirect - var aas = env.FindAASwithSubmodel(submodel.identification); - if (aas == null) - return null; - - // build path - var aasId = aas.idShort; - var submodelId = submodel.idShort; - var elementId = sme.CollectIdShortByParent(); - var reqpath = "./aas/" + aasId + "/submodels/" + submodelId + "/elements/" + elementId + "/property"; - - // request - var request = new RestRequest(reqpath); - if (this.proxy != null) - request.Proxy = this.proxy; - var respose = client.Execute(request); - if (respose.StatusCode != Grapevine.Shared.HttpStatusCode.Ok) - throw new Exception( - $"REST {respose.ResponseUri} response {respose.StatusCode} with {respose.StatusDescription}"); - - var json = respose.GetContent(); - var parsed = JObject.Parse(json); - var value = parsed.SelectToken("value").Value(); - return value; - } - } -} diff --git a/src/AasxRestServerLibrary/AasxRestServer.cs b/src/AasxRestServerLibrary/AasxRestServer.cs deleted file mode 100644 index 244e24a9..00000000 --- a/src/AasxRestServerLibrary/AasxRestServer.cs +++ /dev/null @@ -1,418 +0,0 @@ -/* -Copyright (c) 2018-2023 Festo AG & Co. KG -Author: Michael Hoffmeister - -This source code is licensed under the Apache License 2.0 (see LICENSE.txt). - -This source code may use other Open Source software components (see LICENSE.txt). -*/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Reflection; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using AdminShellNS; -using Grapevine.Interfaces.Server; -using Grapevine.Interfaces.Shared; -using Grapevine.Server; -using Grapevine.Server.Attributes; -using Grapevine.Shared; -using Newtonsoft.Json; - -/* -Please notice: -The API and REST routes implemented in this version of the source code are not specified and standardised by the -specification Details of the Administration Shell. The hereby stated approach is solely the opinion of its author(s). -*/ - -// ReSharper disable ClassNeverInstantiated.Global -//.. motivation: unsure what happens to reflection, when making class static .. - -namespace AasxRestServerLibrary -{ - public class AasxRestServer - { - [RestResource] - public class TestResource - { - public static AasxHttpContextHelper helper = null; - - // Basic AAS + Asset - - [RestRoute( - HttpMethod = HttpMethod.GET, - PathInfo = "^/aas/(id|([^/]+))(|/core|/complete|/thumbnail|/aasenv)(/|)$")] - public IHttpContext GetAasAndAsset(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 2) - { - if (helper.PathEndsWith(context, "thumbnail")) - { - helper.EvalGetAasThumbnail(context, m.Groups[1].ToString()); - } - else - if (helper.PathEndsWith(context, "aasenv")) - { - helper.EvalGetAasEnv(context, m.Groups[1].ToString()); - } - else - { - var complete = helper.PathEndsWith(context, "complete"); - helper.EvalGetAasAndAsset(context, m.Groups[1].ToString(), complete: complete); - } - } - return context; - } - - [RestRoute(HttpMethod = HttpMethod.PUT, PathInfo = "^/aas(/|)$")] - public IHttpContext PutAas(IHttpContext context) - { - helper.EvalPutAas(context); - return context; - } - - [RestRoute(HttpMethod = HttpMethod.DELETE, PathInfo = "^/aas/([^/]+)(/|)$")] - public IHttpContext DeleteAasAndAsset(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 2) - { - helper.EvalDeleteAasAndAsset(context, m.Groups[1].ToString(), deleteAsset: true); - } - return context; - } - - // Handles - - [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/handles/identification(/|)$")] - public IHttpContext GetHandlesIdentification(IHttpContext context) - { - helper.EvalGetHandlesIdentification(context); - return context; - } - - [RestRoute(HttpMethod = HttpMethod.POST, PathInfo = "^/handles/identification(/|)$")] - public IHttpContext PostHandlesIdentification(IHttpContext context) - { - helper.EvalPostHandlesIdentification(context); - return context; - } - - // Server - - [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/server/profile(/|)$")] - public IHttpContext GetServerProfile(IHttpContext context) - { - helper.EvalGetServerProfile(context); - return context; - } - - // Assets - - [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/assets/([^/]+)(/|)$")] - public IHttpContext GetAssets(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 2) - { - helper.EvalGetAssetLinks(context, m.Groups[1].ToString()); - } - return context; - } - - [RestRoute(HttpMethod = HttpMethod.PUT, PathInfo = "^/assets(/|)$")] - public IHttpContext PutAssets(IHttpContext context) - { - helper.EvalPutAsset(context); - return context; - } - - // List of Submodels - - [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/aas/(id|([^/]+))/submodels(/|)$")] - public IHttpContext GetSubmodels(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 2) - { - helper.EvalGetSubmodels(context, m.Groups[1].ToString()); - } - return context; - } - - [RestRoute(HttpMethod = HttpMethod.PUT, PathInfo = "^/aas/(id|([^/]+))/submodels(/|)$")] - public IHttpContext PutSubmodel(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 2) - { - helper.EvalPutSubmodel(context, m.Groups[1].ToString()); - } - return context; - } - - [RestRoute(HttpMethod = HttpMethod.DELETE, PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)(/|)$")] - public IHttpContext DeleteSubmodel(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 4) - { - helper.EvalDeleteSubmodel(context, m.Groups[1].ToString(), m.Groups[3].ToString()); - } - return context; - } - - // Contents of a Submodel - - [RestRoute( - HttpMethod = HttpMethod.GET, - PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)(|/core|/deep|/complete)(/|)$")] - public IHttpContext GetSubmodelContents(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 4) - { - var deep = helper.PathEndsWith(context, "deep"); - var complete = helper.PathEndsWith(context, "complete"); - helper.EvalGetSubmodelContents( - context, m.Groups[1].ToString(), m.Groups[3].ToString(), - deep: deep || complete, complete: complete); - } - return context; - } - - [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)/table(/|)$")] - public IHttpContext GetSubmodelContentsAsTable(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 4) - { - helper.EvalGetSubmodelContentsAsTable(context, m.Groups[1].ToString(), m.Groups[3].ToString()); - } - return context; - } - - // Contents of SubmodelElements - - [RestRoute( - HttpMethod = HttpMethod.GET, - PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)/elements(/([^/]+)){1,99}?" + - "(|/core|/complete|/deep|/file|/blob|/events|/property)(/|)$")] - public IHttpContext GetSubmodelElementsContents(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 6 && m.Groups[5].Captures.Count >= 1) - { - var aasid = m.Groups[1].ToString(); - var smid = m.Groups[3].ToString(); - var elemids = new List(); - for (int i = 0; i < m.Groups[5].Captures.Count; i++) - elemids.Add(m.Groups[5].Captures[i].ToString()); - - // special case?? - if (helper.PathEndsWith(context, "file")) - { - helper.EvalGetSubmodelElementsFile(context, aasid, smid, elemids.ToArray()); - } - else - if (helper.PathEndsWith(context, "blob")) - { - helper.EvalGetSubmodelElementsBlob(context, aasid, smid, elemids.ToArray()); - } - else - if (helper.PathEndsWith(context, "property")) - { - helper.EvalGetSubmodelElementsProperty(context, aasid, smid, elemids.ToArray()); - } - else - if (helper.PathEndsWith(context, "events")) - { - context.Response.SendResponse( - Grapevine.Shared.HttpStatusCode.NotImplemented, $"Events currently not implented."); - } - else - { - // more options - bool complete = false, deep = false; - if (helper.PathEndsWith(context, "deep")) - deep = true; - if (helper.PathEndsWith(context, "complete")) - { - deep = true; - complete = true; - } - - helper.EvalGetSubmodelElementContents(context, aasid, smid, elemids.ToArray(), deep, complete); - } - } - return context; - } - - [RestRoute( - HttpMethod = HttpMethod.POST, - PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)/elements(/([^/]+)){1,99}?/invoke(/|)$")] - public IHttpContext PostSubmodelElementsContents(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 6 && m.Groups[5].Captures.Count >= 1) - { - var aasid = m.Groups[1].ToString(); - var smid = m.Groups[3].ToString(); - var elemids = new List(); - for (int i = 0; i < m.Groups[5].Captures.Count; i++) - elemids.Add(m.Groups[5].Captures[i].ToString()); - - // special case?? - if (helper.PathEndsWith(context, "invoke")) - { - helper.EvalInvokeSubmodelElementOperation(context, aasid, smid, elemids.ToArray()); - } - } - return context; - } - - [RestRoute( - HttpMethod = HttpMethod.PUT, - PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)/elements(/([^/]+)){0,99}?(/|)$")] - public IHttpContext PutSubmodelElementsContents(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 6) - { - var aasid = m.Groups[1].ToString(); - var smid = m.Groups[3].ToString(); - var elemids = new List(); - for (int i = 0; i < m.Groups[5].Captures.Count; i++) - elemids.Add(m.Groups[5].Captures[i].ToString()); - - helper.EvalPutSubmodelElementContents(context, aasid, smid, elemids.ToArray()); - } - return context; - } - - [RestRoute( - HttpMethod = HttpMethod.DELETE, - PathInfo = "^/aas/(id|([^/]+))/submodels/([^/]+)/elements(/([^/]+)){0,99}?(/|)$")] - public IHttpContext DeleteSubmodelElementsContents(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 6) - { - var aasid = m.Groups[1].ToString(); - var smid = m.Groups[3].ToString(); - var elemids = new List(); - for (int i = 0; i < m.Groups[5].Captures.Count; i++) - elemids.Add(m.Groups[5].Captures[i].ToString()); - - helper.EvalDeleteSubmodelElementContents(context, aasid, smid, elemids.ToArray()); - } - return context; - } - - // concept descriptions - - [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/aas/(id|([^/]+))/cds(/|)$")] - public IHttpContext GetCds(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 2) - { - helper.EvalGetAllCds(context, m.Groups[1].ToString()); - } - return context; - } - - [RestRoute(HttpMethod = HttpMethod.PUT, PathInfo = "^/aas/(id|([^/]+))/cds(/|)$")] - public IHttpContext PutConceptDescription(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 2) - { - helper.EvalPutCd(context, m.Groups[1].ToString()); - } - return context; - } - - [RestRoute(HttpMethod = HttpMethod.GET, PathInfo = "^/aas/(id|([^/]+))/cds/([^/]+)(/|)$")] - public IHttpContext GetSpecificCd(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 4) - { - helper.EvalGetCdContents(context, m.Groups[1].ToString(), m.Groups[3].ToString()); - } - return context; - } - - [RestRoute(HttpMethod = HttpMethod.DELETE, PathInfo = "^/aas/(id|([^/]+))/cds/([^/]+)(/|)$")] - public IHttpContext DeleteSpecificCd(IHttpContext context) - { - var m = helper.PathInfoRegexMatch(MethodBase.GetCurrentMethod(), context.Request.PathInfo); - if (m.Success && m.Groups.Count >= 4) - { - helper.EvalDeleteSpecificCd(context, m.Groups[1].ToString(), m.Groups[3].ToString()); - } - return context; - } - - } - - private static RestServer startedRestServer = null; - - public static void Start( - AdminShellPackageEnv package, string host, string port, GrapevineLoggerSuper logger = null) - { - // if running, stop old server - Stop(); - - var helper = new AasxHttpContextHelper(); - helper.Package = package; - TestResource.helper = helper; - - var serverSettings = new ServerSettings(); - serverSettings.Host = host; - serverSettings.Port = port; - - if (logger != null) - logger.Warn( - "Please notice: the API and REST routes implemented in this version " + - "of the source code are not specified and standardised by the" + - "specification Details of the Administration Shell. " + - "The hereby stated approach is solely the opinion of its author(s)."); - - startedRestServer = new RestServer(serverSettings); - { - if (logger != null) - startedRestServer.Logger = logger; - startedRestServer.Start(); - } - - // tail of the messages, again - if (logger != null) - logger.Warn( - "Please notice: the API and REST routes implemented in this version " + - "of the source code are not specified and standardised by the" + - "specification Details of the Administration Shell. " + - "The hereby stated approach is solely the opinion of its author(s)."); - } - - public static void Stop() - { - if (startedRestServer != null) - try - { - startedRestServer.Stop(); - startedRestServer = null; - } - catch (Exception ex) - { - AdminShellNS.LogInternally.That.SilentlyIgnoredError(ex); - } - } - } -} diff --git a/src/AasxRestServerLibrary/AasxRestServerLibrary.csproj b/src/AasxRestServerLibrary/AasxRestServerLibrary.csproj deleted file mode 100644 index 3120bf28..00000000 --- a/src/AasxRestServerLibrary/AasxRestServerLibrary.csproj +++ /dev/null @@ -1,16 +0,0 @@ - - - net8.0 - Library - false - false - - - - - - - - - - diff --git a/src/AasxRestServerLibrary/Docs/REST_routes.xlsx b/src/AasxRestServerLibrary/Docs/REST_routes.xlsx deleted file mode 100644 index b3fd53dd245df8b6c0e5546435d5142744cf107b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 156220 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 Qs4#;DD+9wnpjHM302QnT^#A|> diff --git a/src/AasxRestServerLibrary/GrapevineLoggerConsumers.cs b/src/AasxRestServerLibrary/GrapevineLoggerConsumers.cs deleted file mode 100644 index 6bc4d442..00000000 --- a/src/AasxRestServerLibrary/GrapevineLoggerConsumers.cs +++ /dev/null @@ -1,123 +0,0 @@ -/* -Copyright (c) 2018-2023 Festo AG & Co. KG -Author: Michael Hoffmeister - -This source code is licensed under the Apache License 2.0 (see LICENSE.txt). - -This source code may use other Open Source software components (see LICENSE.txt). -*/ - -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Grapevine.Interfaces.Shared; - -/* -Please notice: -The API and REST routes implemented in this version of the source code are not specified and standardised by the -specification Details of the Administration Shell. The hereby stated approach is solely the opinion of its author(s). -*/ - -namespace AasxRestServerLibrary -{ - public class GrapevineLoggerSuper : IGrapevineLogger - { - // IGrapevineLogger side - - private LogLevel level = LogLevel.Trace; - - public LogLevel Level { get { return level; } set { level = value; } } - - public void Debug(object obj) { if (this.level >= LogLevel.Debug) this.Append("DBG: {0}", obj); } - public void Debug(string message) { if (this.level >= LogLevel.Debug) this.Append("DBG: {0}", message); } - public void Debug(string message, Exception ex) - { - if (this.level >= LogLevel.Debug) - this.Append("DBG: Exception when {0}: {1}", message, ex.ToString()); - } - public void Error(string message, Exception ex) - { - if (this.level >= LogLevel.Error) - this.Append("ERR: Exception when {0}: {1}", message, ex.ToString()); - } - public void Error(string message) { if (this.level >= LogLevel.Error) this.Append("ERR: {0}", message); } - public void Error(object obj) { if (this.level >= LogLevel.Error) this.Append("ERR: {0}", obj); } - public void Fatal(string message) { if (this.level >= LogLevel.Fatal) this.Append("FTL: {0}", message); } - public void Fatal(object obj) { if (this.level >= LogLevel.Fatal) this.Append("FTL: {0}", obj); } - public void Fatal(string message, Exception ex) - { - if (this.level >= LogLevel.Fatal) - this.Append("FTL: Exception when {0}: {1}", message, ex.ToString()); - } - public void Info(string message, Exception ex) - { - if (this.level >= LogLevel.Info) this.Append("INF: Exception when {0}: {1}", message, ex.ToString()); - } - public void Info(string message) - { - if (this.level >= LogLevel.Info) this.Append("INF: {0}", message); - } - public void Info(object obj) { if (this.level >= LogLevel.Info) this.Append("INF: {0}", obj); } - public void Log(LogEvent evt) { if (this.level >= evt.Level) this.Append("{0}", evt.Message); } - public void Trace(string message, Exception ex) - { - if (this.level >= LogLevel.Debug) this.Append("TRC: Exception when {0}: {1}", message, ex.ToString()); - } - public void Trace(string message) { if (this.level >= LogLevel.Trace) this.Append("TRC: {0}", message); } - public void Trace(object obj) { if (this.level >= LogLevel.Trace) this.Append("TRC: {0}", obj); } - public void Warn(string message) { if (this.level >= LogLevel.Warn) this.Append("WRN: {0}", message); } - public void Warn(string message, Exception ex) - { - if (this.level >= LogLevel.Warn) this.Append("WRN: Exception when {0}: {1}", message, ex.ToString()); - } - public void Warn(object obj) { if (this.level >= LogLevel.Warn) this.Append("WRN: {0}", obj); } - - // Consumer side - - public virtual void Append(string msg, params object[] args) - { - } - - } - - public class GrapevineLoggerToConsole : GrapevineLoggerSuper - { - public override void Append(string msg, params object[] args) - { - Console.Error.WriteLine(msg, args); - Console.Error.Flush(); - } - } - - public class GrapevineLoggerToListOfStrings : GrapevineLoggerSuper - { - private List list = new List(); - - public override void Append(string msg, params object[] args) - { - lock (list) - { - list.Add(string.Format(msg, args)); - } - } - - public string Pop() - { - if (list == null) - return null; - - lock (list) - { - if (list.Count < 1) - return null; - - var res = list[0]; - list.RemoveAt(0); - return res; - } - } - } - -} diff --git a/src/AasxRestServerLibrary/LICENSE.txt b/src/AasxRestServerLibrary/LICENSE.txt deleted file mode 100644 index 75f36a4f..00000000 --- a/src/AasxRestServerLibrary/LICENSE.txt +++ /dev/null @@ -1,1475 +0,0 @@ -Copyright (c) 2018-2023 Festo AG & Co. KG -, -author: Michael Hoffmeister - -Copyright (c) 2019-2021 PHOENIX CONTACT GmbH & Co. KG -, -author: Andreas Orzelski - -Copyright (c) 2019-2020 Fraunhofer IOSB-INA Lemgo, - eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft - zur Foerderung der angewandten Forschung e.V. - -Copyright (c) 2020 Schneider Electric Automation GmbH -, -author: Marco Mendes - -Copyright (c) 2020 SICK AG - -Copyright (c) 2021 KEB Automation KG - -Copyright (c) 2021 Lenze SE -author: Jonas Grote, Denis Göllner, Sebastian Bischof - -The AASX Package Explorer is licensed under the Apache License 2.0 -(Apache-2.0, see below). - -The AASX Package Explorer is a sample application for demonstration of the -features of the Asset Administration Shell. -The implementation uses the concepts of the document "Details of the Asset -Administration Shell" published on www.plattform-i40.de which is licensed -under Creative Commons CC BY-ND 3.0 DE. - -When using eCl@ss or IEC CDD data, please check the corresponding license -conditions. - -------------------------------------------------------------------------------- - -The components below are used in AASX Package Explorer. -The related licenses are listed for information purposes only. -Some licenses may only apply to their related plugins. - -The browser functionality is licensed under the cefSharp license (see below). - -The Newtonsoft.JSON serialization is licensed under the MIT License -(MIT, see below). - -The QR code generation is licensed under the MIT license (MIT, see below). - -The Zxing.Net Dot Matrix Code (DMC) generation is licensed under -the Apache License 2.0 (Apache-2.0, see below). - -The Grapevine REST server framework is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The AutomationML.Engine is licensed under the MIT license (MIT, see below). - -The MQTT server and client is licensed under the MIT license (MIT, see below). - -The ClosedXML Excel reader/writer is licensed under the MIT license (MIT, -see below). - -The CountryFlag WPF control is licensed under the Code Project Open License -(CPOL, see below). - -The DocumentFormat.OpenXml SDK is licensed under the MIT license (MIT, -see below). - -The ExcelNumberFormat number parser is licensed under the MIT license (MIT, -see below). - -The FastMember reflection access is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The IdentityModel OpenID client is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The jose-jwt object signing and encryption is licensed under the -MIT license (MIT, see below). - -The ExcelDataReader is licensed under the MIT license (MIT, see below). - -Portions copyright (c) by OPC Foundation, Inc. and licensed under the -Reciprocal Community License (RCL, see below) - -The OPC UA Example Code of OPC UA Standard is licensed under the MIT license -(MIT, see below). - -The MSAGL (Microsoft Automatic Graph Layout) is licensed under the MIT license -(MIT, see below) - -Glob (https://www.nuget.org/packages/Glob/) is licensed under the MIT license -(MIT, see below). - -The Magick.NET library is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The SSharp.NET library (https://github.com/PetroProtsyk/SSharp) is licensed -under Apache License 2.0 (Apache-2.0, see below). - -------------------------------------------------------------------------------- - - -With respect to AASX Package Explorer -===================================== - -(http://www.apache.org/licenses/LICENSE-2.0) - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -With respect to cefSharp -======================== - -(https://raw.githubusercontent.com/cefsharp/CefSharp/master/LICENSE) - -Copyright © The CefSharp Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google Inc. nor the name Chromium Embedded - Framework nor the name CefSharp nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -With respect to Newtonsoft.Json -=============================== - -(https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md) - -The MIT License (MIT) - -Copyright (c) 2007 James Newton-King - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to QRcoder -======================= - -(https://github.com/codebude/QRCoder/blob/master/LICENSE.txt) - -The MIT License (MIT) - -Copyright (c) 2013-2018 Raffael Herrmann - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to ZXing.Net -========================= -With respect to Grapevine -========================= -With respect to FastMember -========================== -With respect to IdentityModel -============================= - -(http://www.apache.org/licenses/LICENSE-2.0) - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -With respect to AutomationML.Engine -=================================== - -(https://raw.githubusercontent.com/AutomationML/AMLEngine2.1/master/license.txt) - -The MIT License (MIT) - -Copyright 2017 AutomationML e.V. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - -With respect to MQTTnet -======================= - -(https://github.com/chkr1011/MQTTnet/blob/master/LICENSE) - -MIT License - -MQTTnet Copyright (c) 2016-2019 Christian Kratky - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepct to ClosedXML -========================= - -(https://github.com/ClosedXML/ClosedXML/blob/develop/LICENSE) - -MIT License - -Copyright (c) 2016 ClosedXML - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepct to CountryFlag -=========================== - -(https://www.codeproject.com/Articles/190722/WPF-CountryFlag-Control) - -The Code Project Open License (CPOL) 1.02 - -Copyright © 2017 Meshack Musundi - -Preamble - -This License governs Your use of the Work. This License is intended to allow -developers to use the Source Code and Executable Files provided as part of -the Work in any application in any form. - -The main points subject to the terms of the License are: - - Source Code and Executable Files can be used in commercial applications; - Source Code and Executable Files can be redistributed; and - Source Code can be modified to create derivative works. - No claim of suitability, guarantee, or any warranty whatsoever is provided. - The software is provided "as-is". - The Article(s) accompanying the Work may not be distributed or republished - without the Author's consent - -This License is entered between You, the individual or other entity reading or -otherwise making use of the Work licensed pursuant to this License and the -individual or other entity which offers the Work under the terms of this -License ("Author"). - -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS -CODE PROJECT OPEN LICENSE ("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT -AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED -UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE -TO BE BOUND BY THE TERMS OF THIS LICENSE. THE AUTHOR GRANTS YOU THE RIGHTS -CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND -CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS -LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK. - -Definitions. - "Articles" means, collectively, all articles written by Author which -describes how the Source Code and Executable Files for the Work may -be used by a user. - "Author" means the individual or entity that offers the Work under -the terms of this License. - "Derivative Work" means a work based upon the Work or upon the Work -and other pre-existing works. - "Executable Files" refer to the executables, binary files, -configuration and any required data files included in the Work. - "Publisher" means the provider of the website, magazine, CD-ROM, -DVD or other medium from or by which the Work is obtained by You. - "Source Code" refers to the collection of source code and -configuration files used to create the Executable Files. - "Standard Version" refers to such a Work if it has not been modified, -or has been modified in accordance with the consent of the Author, -such consent being in the full discretion of the Author. - "Work" refers to the collection of files distributed by the Publisher, -including the Source Code, Executable Files, binaries, data files, -documentation, whitepapers and the Articles. - "You" is you, an individual or entity wishing to use the Work and -exercise your rights under this License. - -Fair Use/Fair Use Rights. Nothing in this License is intended to reduce, -limit, or restrict any rights arising from fair use, fair dealing, -first sale or other limitations on the exclusive rights of the -copyright owner under copyright law or other applicable laws. - -License Grant. Subject to the terms and conditions of this License, the -Author hereby grants You a worldwide, royalty-free, non-exclusive, -perpetual (for the duration of the applicable copyright) license -to exercise the rights in the Work as stated below: - You may use the standard version of the Source Code or Executable -Files in Your own applications. - You may apply bug fixes, portability fixes and other modifications -obtained from the Public Domain or from the Author. A Work modified -in such a way shall still be considered the standard version and will -be subject to this License. - You may otherwise modify Your copy of this Work (excluding the Articles) -in any way to create a Derivative Work, provided that You insert a prominent -notice in each changed file stating how, when and where You changed that file. - You may distribute the standard version of the Executable Files and Source -Code or Derivative Work in aggregate with other (possibly commercial) -programs as part of a larger (possibly commercial) software distribution. - The Articles discussing the Work published in any form by the author may -not be distributed or republished without the Author's consent. The author -retains copyright to any such Articles. You may use the Executable Files and -Source Code pursuant to this License but you may not repost or republish or -otherwise distribute or make available the Articles, without the prior written -consent of the Author. - -Any subroutines or modules supplied by You and linked into the Source Code -or Executable Files of this Work shall not be considered part of this Work -and will not be subject to the terms of this License. - -Patent License. Subject to the terms and conditions of this License, each -Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, -royalty-free, irrevocable (except as stated in this section) patent license -to make, have made, use, import, and otherwise transfer the Work. - -Restrictions. The license granted in Section 3 above is expressly made subject -to and limited by the following restrictions: - You agree not to remove any of the original copyright, patent, trademark, -and attribution notices and associated disclaimers that may appear in the -Source Code or Executable Files. - You agree not to advertise or in any way imply that this Work is a product -of Your own. - The name of the Author may not be used to endorse or promote products -derived from the Work without the prior written consent of the Author. - You agree not to sell, lease, or rent any part of the Work. This does -not restrict you from including the Work or any part of the Work inside -a larger software distribution that itself is being sold. The Work by itself, -though, cannot be sold, leased or rented. - You may distribute the Executable Files and Source Code only under the terms -of this License, and You must include a copy of, or the Uniform Resource -Identifier for, this License with every copy of the Executable Files or -Source Code You distribute and ensure that anyone receiving such Executable -Files and Source Code agrees that the terms of this License apply to such -Executable Files and/or Source Code. You may not offer or impose any terms -on the Work that alter or restrict the terms of this License or the -recipients' exercise of the rights granted hereunder. You may not sublicense -the Work. You must keep intact all notices that refer to this License and to -the disclaimer of warranties. You may not distribute the Executable Files or -Source Code with any technological measures that control access or use of the -Work in a manner inconsistent with the terms of this License. - You agree not to use the Work for illegal, immoral or improper -purposes, or on pages containing illegal, immoral or improper material. -The Work is subject to applicable export laws. You agree to comply with all -such laws and regulations that may apply to the Work after Your receipt of -the Work. - -Representations, Warranties and Disclaimer. THIS WORK IS PROVIDED "AS IS", -"WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR -CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, -INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC. -AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES -OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS -OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR -PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK -(OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES. -YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE -WORKS. - -Indemnity. You agree to defend, indemnify and hold harmless the Author and the -Publisher from and against any claims, suits, losses, damages, liabilities, -costs, and expenses (including reasonable legal or attorneys’ fees) -resulting from or relating to any use of the Work by You. - -Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, -IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL -THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY -DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE, -EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY -OF SUCH DAMAGES. - -Termination. - This License and the rights granted hereunder will terminate -automatically upon any breach by You of any term of this License. -Individuals or entities who have received Derivative Works from You under -this License, however, will not have their licenses terminated provided such -individuals or entities remain in full compliance with those licenses. -Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of -this License. - If You bring a copyright, trademark, patent or any other infringement -claim against any contributor over infringements You claim are made by the -Work, your License from such contributor to the Work ends automatically. - Subject to the above terms and conditions, this License is perpetual -(for the duration of the applicable copyright in the Work). -Notwithstanding the above, the Author reserves the right to release the Work -under different license terms or to stop distributing the Work at any time; -provided, however that any such election will not serve to withdraw this -License (or any other license that has been, or is required to be, -granted under the terms of this License), and this License will continue -in full force and effect unless terminated as stated above. - -Publisher. The parties hereby confirm that the Publisher shall not, under -any circumstances, be responsible for and shall not have any liability -in respect of the subject matter of this License. The Publisher makes no -warranty whatsoever in connection with the Work and shall not be liable -to You or any party on any legal theory for any damages whatsoever, including -without limitation any general, special, incidental or consequential damages -arising in connection to this license. The Publisher reserves the right to -cease making the Work available to You at any time without notice - -Miscellaneous - This License shall be governed by the laws of the location of the head -office of the Author or if the Author is an individual, the laws of -location of the principal place of residence of the Author. - If any provision of this License is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of the -remainder of the terms of this License, and without further action by the -parties to this License, such provision shall be reformed to the minimum -extent necessary to make such provision valid and enforceable. - No term or provision of this License shall be deemed waived and no -breach consented to unless such waiver or consent shall be in writing -and signed by the party to be charged with such waiver or consent. - This License constitutes the entire agreement between the parties -with respect to the Work licensed herein. There are no understandings, -agreements or representations with respect to the Work not specified herein. -The Author shall not be bound by any additional provisions that may appear -in any communication from You. This License may not be modified without -the mutual written agreement of the Author and You. - - -With respect to DocumentFormat.OpenXml -====================================== - -(https://github.com/OfficeDev/Open-XML-SDK/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With respect to ExcelNumberFormat -================================= - -(https://github.com/andersnm/ExcelNumberFormat/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2017 andersnm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With respect to jose-jwt -======================== - -(https://github.com/dvsekhvalnov/jose-jwt/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2014-2019 dvsekhvalnov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -With resepect to ExcelDataReader -================================ - -(https://github.com/ExcelDataReader/ExcelDataReader/blob/develop/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2014 ExcelDataReader - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepect to OPC UA Example Code -==================================== - - * Copyright (c) 2005-2019 The OPC Foundation, Inc. All rights reserved. - * - * OPC Foundation MIT License 1.00 - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * The complete license agreement can be found here: - * http://opcfoundation.org/License/MIT/1.00/ - - -With respect to OPC Foundation -============================== - -RCL License -Reciprocal Community License 1.00 (RCL1.00) -Version 1.00, June 24, 2009 -Copyright (C) 2008,2009 OPC Foundation, Inc., All Rights Reserved. - -https://opcfoundation.org/license/rcl.html - -Remark: PHOENIX CONTACT GmbH & Co. KG and Festo SE & Co. KG are members -of OPC foundation. - -With respect to MSAGL (Microsoft Automatic Graph Layout) -======================================================== -(see: https://github.com/microsoft/automatic-graph-layout/blob/master/LICENSE) - -Microsoft Automatic Graph Layout, MSAGL - -Copyright (c) Microsoft Corporation - -All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -""Software""), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -With respect to Glob (https://www.nuget.org/packages/Glob/) -=========================================================== -(see: https://raw.githubusercontent.com/kthompson/glob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2013-2019 Kevin Thompson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to Magick.NET -========================== - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -With respect to SSharp.NET library -================================== - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/src/AasxRestServerLibrary/Properties/AssemblyInfo.cs b/src/AasxRestServerLibrary/Properties/AssemblyInfo.cs deleted file mode 100644 index edad697f..00000000 --- a/src/AasxRestServerLibrary/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Allgemeine Informationen über eine Assembly werden über die folgenden -// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern, -// die einer Assembly zugeordnet sind. -[assembly: AssemblyTitle("AasxRestServerLibrary")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("AasxRestServerLibrary")] -[assembly: AssemblyCopyright("Copyright © 2019")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly -// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von -// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen. -[assembly: ComVisible(false)] - -// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird -[assembly: Guid("967e60e3-d668-42a3-aa0b-1a031c20d871")] - -// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten: -// -// Hauptversion -// Nebenversion -// Buildnummer -// Revision -// -// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden, -// indem Sie "*" wie unten gezeigt eingeben: -//// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/AasxSchemaExport.Tests/AasxSchemaExport.Tests.csproj b/src/AasxSchemaExport.Tests/AasxSchemaExport.Tests.csproj deleted file mode 100644 index 5512951d..00000000 --- a/src/AasxSchemaExport.Tests/AasxSchemaExport.Tests.csproj +++ /dev/null @@ -1,29 +0,0 @@ - - - net8.0 - Library - AasxSchemaExport.Tests - AasxSchemaExport.Tests - false - - - - - - - - - - - - - - - - - - PreserveNewest - - - - \ No newline at end of file diff --git a/src/AasxSchemaExport.Tests/AasxSchemaExport.Tests_bkp.csproj b/src/AasxSchemaExport.Tests/AasxSchemaExport.Tests_bkp.csproj deleted file mode 100644 index dc1df94c..00000000 --- a/src/AasxSchemaExport.Tests/AasxSchemaExport.Tests_bkp.csproj +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - Debug - AnyCPU - {BE68E42C-28CB-4298-9F34-A18AF92FC4DE} - Library - Properties - AasxSchemaExport.Tests - AasxSchemaExport.Tests - v4.7.2 - 512 - true - - - false - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\packages\Newtonsoft.Json.13.0.3\lib\net45\Newtonsoft.Json.dll - True - - - ..\packages\NUnit.3.12.0\lib\net45\nunit.framework.dll - - - - - ..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll - True - True - - - ..\packages\System.IO.Packaging.4.7.0\lib\net46\System.IO.Packaging.dll - - - - - - - - - - - - - - - - - - PreserveNewest - - - - - {7af15339-d2fb-45dc-8efe-a06f8b3709fa} - AasxSchemaExport - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file diff --git a/src/AasxSchemaExport.Tests/JTokenExtensions.cs b/src/AasxSchemaExport.Tests/JTokenExtensions.cs deleted file mode 100644 index 81af59c7..00000000 --- a/src/AasxSchemaExport.Tests/JTokenExtensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -/* -Copyright (c) 2022 PHOENIX CONTACT GmbH & Co. KG - -This source code is licensed under the Apache License 2.0 (see LICENSE.txt). - -This source code may use other Open Source software components (see LICENSE.txt). -*/ - -using System; -using Newtonsoft.Json.Linq; - -namespace AasxSchemaExport.Tests -{ - public static class JTokenExtensions - { - public static T GetValue(this JToken token, string path) - { - var targetToken = token.SelectToken(path); - if (targetToken == null) - throw new Exception($"Token with the path: {path} was not found."); - - return targetToken.Value(); - } - } -} diff --git a/src/AasxSchemaExport.Tests/LICENSE.txt b/src/AasxSchemaExport.Tests/LICENSE.txt deleted file mode 100644 index 75f36a4f..00000000 --- a/src/AasxSchemaExport.Tests/LICENSE.txt +++ /dev/null @@ -1,1475 +0,0 @@ -Copyright (c) 2018-2023 Festo AG & Co. KG -, -author: Michael Hoffmeister - -Copyright (c) 2019-2021 PHOENIX CONTACT GmbH & Co. KG -, -author: Andreas Orzelski - -Copyright (c) 2019-2020 Fraunhofer IOSB-INA Lemgo, - eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft - zur Foerderung der angewandten Forschung e.V. - -Copyright (c) 2020 Schneider Electric Automation GmbH -, -author: Marco Mendes - -Copyright (c) 2020 SICK AG - -Copyright (c) 2021 KEB Automation KG - -Copyright (c) 2021 Lenze SE -author: Jonas Grote, Denis Göllner, Sebastian Bischof - -The AASX Package Explorer is licensed under the Apache License 2.0 -(Apache-2.0, see below). - -The AASX Package Explorer is a sample application for demonstration of the -features of the Asset Administration Shell. -The implementation uses the concepts of the document "Details of the Asset -Administration Shell" published on www.plattform-i40.de which is licensed -under Creative Commons CC BY-ND 3.0 DE. - -When using eCl@ss or IEC CDD data, please check the corresponding license -conditions. - -------------------------------------------------------------------------------- - -The components below are used in AASX Package Explorer. -The related licenses are listed for information purposes only. -Some licenses may only apply to their related plugins. - -The browser functionality is licensed under the cefSharp license (see below). - -The Newtonsoft.JSON serialization is licensed under the MIT License -(MIT, see below). - -The QR code generation is licensed under the MIT license (MIT, see below). - -The Zxing.Net Dot Matrix Code (DMC) generation is licensed under -the Apache License 2.0 (Apache-2.0, see below). - -The Grapevine REST server framework is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The AutomationML.Engine is licensed under the MIT license (MIT, see below). - -The MQTT server and client is licensed under the MIT license (MIT, see below). - -The ClosedXML Excel reader/writer is licensed under the MIT license (MIT, -see below). - -The CountryFlag WPF control is licensed under the Code Project Open License -(CPOL, see below). - -The DocumentFormat.OpenXml SDK is licensed under the MIT license (MIT, -see below). - -The ExcelNumberFormat number parser is licensed under the MIT license (MIT, -see below). - -The FastMember reflection access is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The IdentityModel OpenID client is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The jose-jwt object signing and encryption is licensed under the -MIT license (MIT, see below). - -The ExcelDataReader is licensed under the MIT license (MIT, see below). - -Portions copyright (c) by OPC Foundation, Inc. and licensed under the -Reciprocal Community License (RCL, see below) - -The OPC UA Example Code of OPC UA Standard is licensed under the MIT license -(MIT, see below). - -The MSAGL (Microsoft Automatic Graph Layout) is licensed under the MIT license -(MIT, see below) - -Glob (https://www.nuget.org/packages/Glob/) is licensed under the MIT license -(MIT, see below). - -The Magick.NET library is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The SSharp.NET library (https://github.com/PetroProtsyk/SSharp) is licensed -under Apache License 2.0 (Apache-2.0, see below). - -------------------------------------------------------------------------------- - - -With respect to AASX Package Explorer -===================================== - -(http://www.apache.org/licenses/LICENSE-2.0) - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -With respect to cefSharp -======================== - -(https://raw.githubusercontent.com/cefsharp/CefSharp/master/LICENSE) - -Copyright © The CefSharp Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google Inc. nor the name Chromium Embedded - Framework nor the name CefSharp nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -With respect to Newtonsoft.Json -=============================== - -(https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md) - -The MIT License (MIT) - -Copyright (c) 2007 James Newton-King - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to QRcoder -======================= - -(https://github.com/codebude/QRCoder/blob/master/LICENSE.txt) - -The MIT License (MIT) - -Copyright (c) 2013-2018 Raffael Herrmann - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to ZXing.Net -========================= -With respect to Grapevine -========================= -With respect to FastMember -========================== -With respect to IdentityModel -============================= - -(http://www.apache.org/licenses/LICENSE-2.0) - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -With respect to AutomationML.Engine -=================================== - -(https://raw.githubusercontent.com/AutomationML/AMLEngine2.1/master/license.txt) - -The MIT License (MIT) - -Copyright 2017 AutomationML e.V. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - -With respect to MQTTnet -======================= - -(https://github.com/chkr1011/MQTTnet/blob/master/LICENSE) - -MIT License - -MQTTnet Copyright (c) 2016-2019 Christian Kratky - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepct to ClosedXML -========================= - -(https://github.com/ClosedXML/ClosedXML/blob/develop/LICENSE) - -MIT License - -Copyright (c) 2016 ClosedXML - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepct to CountryFlag -=========================== - -(https://www.codeproject.com/Articles/190722/WPF-CountryFlag-Control) - -The Code Project Open License (CPOL) 1.02 - -Copyright © 2017 Meshack Musundi - -Preamble - -This License governs Your use of the Work. This License is intended to allow -developers to use the Source Code and Executable Files provided as part of -the Work in any application in any form. - -The main points subject to the terms of the License are: - - Source Code and Executable Files can be used in commercial applications; - Source Code and Executable Files can be redistributed; and - Source Code can be modified to create derivative works. - No claim of suitability, guarantee, or any warranty whatsoever is provided. - The software is provided "as-is". - The Article(s) accompanying the Work may not be distributed or republished - without the Author's consent - -This License is entered between You, the individual or other entity reading or -otherwise making use of the Work licensed pursuant to this License and the -individual or other entity which offers the Work under the terms of this -License ("Author"). - -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS -CODE PROJECT OPEN LICENSE ("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT -AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED -UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE -TO BE BOUND BY THE TERMS OF THIS LICENSE. THE AUTHOR GRANTS YOU THE RIGHTS -CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND -CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS -LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK. - -Definitions. - "Articles" means, collectively, all articles written by Author which -describes how the Source Code and Executable Files for the Work may -be used by a user. - "Author" means the individual or entity that offers the Work under -the terms of this License. - "Derivative Work" means a work based upon the Work or upon the Work -and other pre-existing works. - "Executable Files" refer to the executables, binary files, -configuration and any required data files included in the Work. - "Publisher" means the provider of the website, magazine, CD-ROM, -DVD or other medium from or by which the Work is obtained by You. - "Source Code" refers to the collection of source code and -configuration files used to create the Executable Files. - "Standard Version" refers to such a Work if it has not been modified, -or has been modified in accordance with the consent of the Author, -such consent being in the full discretion of the Author. - "Work" refers to the collection of files distributed by the Publisher, -including the Source Code, Executable Files, binaries, data files, -documentation, whitepapers and the Articles. - "You" is you, an individual or entity wishing to use the Work and -exercise your rights under this License. - -Fair Use/Fair Use Rights. Nothing in this License is intended to reduce, -limit, or restrict any rights arising from fair use, fair dealing, -first sale or other limitations on the exclusive rights of the -copyright owner under copyright law or other applicable laws. - -License Grant. Subject to the terms and conditions of this License, the -Author hereby grants You a worldwide, royalty-free, non-exclusive, -perpetual (for the duration of the applicable copyright) license -to exercise the rights in the Work as stated below: - You may use the standard version of the Source Code or Executable -Files in Your own applications. - You may apply bug fixes, portability fixes and other modifications -obtained from the Public Domain or from the Author. A Work modified -in such a way shall still be considered the standard version and will -be subject to this License. - You may otherwise modify Your copy of this Work (excluding the Articles) -in any way to create a Derivative Work, provided that You insert a prominent -notice in each changed file stating how, when and where You changed that file. - You may distribute the standard version of the Executable Files and Source -Code or Derivative Work in aggregate with other (possibly commercial) -programs as part of a larger (possibly commercial) software distribution. - The Articles discussing the Work published in any form by the author may -not be distributed or republished without the Author's consent. The author -retains copyright to any such Articles. You may use the Executable Files and -Source Code pursuant to this License but you may not repost or republish or -otherwise distribute or make available the Articles, without the prior written -consent of the Author. - -Any subroutines or modules supplied by You and linked into the Source Code -or Executable Files of this Work shall not be considered part of this Work -and will not be subject to the terms of this License. - -Patent License. Subject to the terms and conditions of this License, each -Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, -royalty-free, irrevocable (except as stated in this section) patent license -to make, have made, use, import, and otherwise transfer the Work. - -Restrictions. The license granted in Section 3 above is expressly made subject -to and limited by the following restrictions: - You agree not to remove any of the original copyright, patent, trademark, -and attribution notices and associated disclaimers that may appear in the -Source Code or Executable Files. - You agree not to advertise or in any way imply that this Work is a product -of Your own. - The name of the Author may not be used to endorse or promote products -derived from the Work without the prior written consent of the Author. - You agree not to sell, lease, or rent any part of the Work. This does -not restrict you from including the Work or any part of the Work inside -a larger software distribution that itself is being sold. The Work by itself, -though, cannot be sold, leased or rented. - You may distribute the Executable Files and Source Code only under the terms -of this License, and You must include a copy of, or the Uniform Resource -Identifier for, this License with every copy of the Executable Files or -Source Code You distribute and ensure that anyone receiving such Executable -Files and Source Code agrees that the terms of this License apply to such -Executable Files and/or Source Code. You may not offer or impose any terms -on the Work that alter or restrict the terms of this License or the -recipients' exercise of the rights granted hereunder. You may not sublicense -the Work. You must keep intact all notices that refer to this License and to -the disclaimer of warranties. You may not distribute the Executable Files or -Source Code with any technological measures that control access or use of the -Work in a manner inconsistent with the terms of this License. - You agree not to use the Work for illegal, immoral or improper -purposes, or on pages containing illegal, immoral or improper material. -The Work is subject to applicable export laws. You agree to comply with all -such laws and regulations that may apply to the Work after Your receipt of -the Work. - -Representations, Warranties and Disclaimer. THIS WORK IS PROVIDED "AS IS", -"WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR -CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, -INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC. -AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES -OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS -OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR -PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK -(OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES. -YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE -WORKS. - -Indemnity. You agree to defend, indemnify and hold harmless the Author and the -Publisher from and against any claims, suits, losses, damages, liabilities, -costs, and expenses (including reasonable legal or attorneys’ fees) -resulting from or relating to any use of the Work by You. - -Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, -IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL -THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY -DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE, -EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY -OF SUCH DAMAGES. - -Termination. - This License and the rights granted hereunder will terminate -automatically upon any breach by You of any term of this License. -Individuals or entities who have received Derivative Works from You under -this License, however, will not have their licenses terminated provided such -individuals or entities remain in full compliance with those licenses. -Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of -this License. - If You bring a copyright, trademark, patent or any other infringement -claim against any contributor over infringements You claim are made by the -Work, your License from such contributor to the Work ends automatically. - Subject to the above terms and conditions, this License is perpetual -(for the duration of the applicable copyright in the Work). -Notwithstanding the above, the Author reserves the right to release the Work -under different license terms or to stop distributing the Work at any time; -provided, however that any such election will not serve to withdraw this -License (or any other license that has been, or is required to be, -granted under the terms of this License), and this License will continue -in full force and effect unless terminated as stated above. - -Publisher. The parties hereby confirm that the Publisher shall not, under -any circumstances, be responsible for and shall not have any liability -in respect of the subject matter of this License. The Publisher makes no -warranty whatsoever in connection with the Work and shall not be liable -to You or any party on any legal theory for any damages whatsoever, including -without limitation any general, special, incidental or consequential damages -arising in connection to this license. The Publisher reserves the right to -cease making the Work available to You at any time without notice - -Miscellaneous - This License shall be governed by the laws of the location of the head -office of the Author or if the Author is an individual, the laws of -location of the principal place of residence of the Author. - If any provision of this License is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of the -remainder of the terms of this License, and without further action by the -parties to this License, such provision shall be reformed to the minimum -extent necessary to make such provision valid and enforceable. - No term or provision of this License shall be deemed waived and no -breach consented to unless such waiver or consent shall be in writing -and signed by the party to be charged with such waiver or consent. - This License constitutes the entire agreement between the parties -with respect to the Work licensed herein. There are no understandings, -agreements or representations with respect to the Work not specified herein. -The Author shall not be bound by any additional provisions that may appear -in any communication from You. This License may not be modified without -the mutual written agreement of the Author and You. - - -With respect to DocumentFormat.OpenXml -====================================== - -(https://github.com/OfficeDev/Open-XML-SDK/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With respect to ExcelNumberFormat -================================= - -(https://github.com/andersnm/ExcelNumberFormat/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2017 andersnm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With respect to jose-jwt -======================== - -(https://github.com/dvsekhvalnov/jose-jwt/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2014-2019 dvsekhvalnov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -With resepect to ExcelDataReader -================================ - -(https://github.com/ExcelDataReader/ExcelDataReader/blob/develop/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2014 ExcelDataReader - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepect to OPC UA Example Code -==================================== - - * Copyright (c) 2005-2019 The OPC Foundation, Inc. All rights reserved. - * - * OPC Foundation MIT License 1.00 - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * The complete license agreement can be found here: - * http://opcfoundation.org/License/MIT/1.00/ - - -With respect to OPC Foundation -============================== - -RCL License -Reciprocal Community License 1.00 (RCL1.00) -Version 1.00, June 24, 2009 -Copyright (C) 2008,2009 OPC Foundation, Inc., All Rights Reserved. - -https://opcfoundation.org/license/rcl.html - -Remark: PHOENIX CONTACT GmbH & Co. KG and Festo SE & Co. KG are members -of OPC foundation. - -With respect to MSAGL (Microsoft Automatic Graph Layout) -======================================================== -(see: https://github.com/microsoft/automatic-graph-layout/blob/master/LICENSE) - -Microsoft Automatic Graph Layout, MSAGL - -Copyright (c) Microsoft Corporation - -All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -""Software""), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -With respect to Glob (https://www.nuget.org/packages/Glob/) -=========================================================== -(see: https://raw.githubusercontent.com/kthompson/glob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2013-2019 Kevin Thompson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to Magick.NET -========================== - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -With respect to SSharp.NET library -================================== - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/src/AasxSchemaExport.Tests/Properties/AssemblyInfo.cs b/src/AasxSchemaExport.Tests/Properties/AssemblyInfo.cs deleted file mode 100644 index 2c901b2e..00000000 --- a/src/AasxSchemaExport.Tests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("AasxSchemaExport.Tests")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("AasxSchemaExport.Tests")] -[assembly: AssemblyCopyright("Copyright © 2022")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("be68e42c-28cb-4298-9f34-a18af92fc4de")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/src/AasxSchemaExport.Tests/TestData/SubmodelTest.aasx b/src/AasxSchemaExport.Tests/TestData/SubmodelTest.aasx deleted file mode 100644 index 8e0d045070d63b1419e8d487d9f8b444291c3bb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2748 zcmb7G3p|ur8-LxeTOx9+#z-!$nZe|422Gemj9U^J3`TQnX57goB!$H8B7}BC2Bo5l zTa*$~E@ekwa!Ip<%3>(_Uh3PA-FCnI-uHLT`JLZ6&;OkBf6jUSkAtm%;AVhdR1~=9 zRqU*2!Mt(>G zqz@DVN14Lc9SgO>Dd+>xXY;yeT#D?c-X#kHK>cN5)lgTS;{*&30-q^};w zX=RJr+S*1+}g52%s*PH3k^F4VuI!rR^$^#u$WS*ky zAQENR_?ez4bv}9HhIw=O1XA_QoCB%aZ=MP^w+ub8_A+nYHsCWjEhC<|*sXXt_eoMo z20YyF=ju@ew};2aDIwlPPg8!Hk`pPlwrq9e4*SS1#=p=%0M*LwA1#p2xx&2YF%B)* z`Lx0Hdx2}eR4+d?r5!>Q@-o;)NvHb73MAvy0EOH$c$6($bmW-gxb9W|GVDo5N~Xsq z>MfQ|sIFj4i;7$c(hJ{ORY)piH>;>Cox3ZTTpN+{t~YyH{!-jf2eLAz?eyJ73i7}V4q zWb8fPvqDd*Cx;?PoUw>N&KyTE9aat8uOT;dW70Q-*Eubzxe$ukm%ETgVLHkK6Z2!{ zVb`T=pEXhFky$^42NWw}h+(98wZd(4iScExu(w<5EyA0OzXWAIG{|UEr!h z62Df0@4N1)WsDwve$Vb^f=|3c?A|?1kJADT@cU-^Oze7G!*62I6;5~Fg!YMHs>uw< zrnYT47pH_j?z8N2A63X_j%sfYzrOem-{vcg ziXENkZ7LdK*CfO>>%BTym|!Su$!$FtHPe*TYWdhOIpi2d!GEbE`c{7PjS?wi2^K46 zf?bZV?=(Q;@}mqlqh-tGr?FZFde=s%1b^fmErqL(ipq70ODhf4G0>@ICsl54$4uQG z+k*!b@*fd-VK0jor3?|jMvYQV4hnj3w6f~N zru)cdovIC%EDMx`Qu!^t0>|>o6wTmF-AVIOu}fpov*RxyMTv~s8KYBC!_uF#jO^~` zszr`Y)0)p6YI2cz16S^mT{7#q+Lmwwf%nMU%9*3>yHWfogbcBqjV*WL5)}MHb=l$k zw!*0lp3Lhoe)(4O!;Koe$YU|}Jdy0-!_xKQL#*A$(Gdn8c|=3~!BYb!ypiL4T;b#^ z_4(}<#}Y+2zkGj!wefwxZ^>yiwDC}{YRfFrphWk5NjXP}+V6JMMO`&(l;o0rWT2sX z+(bC2=k{_NMn11AZ;KIQ%7Mp3G1H85e6|FnEb+2T_4Yq)lT>QZZ}FPI(Hf-lh+f^F zKA74Jiq|Utn8h`ro=4|UEaE3C!df{+BA*s8Q>iZn=aB?E=hUu>viiRFy=4PUElCWi z{@{w|I+_%MGkcM9v@>Sv(PmkbZpn)5jOm`1 zSy&Dls=BiZ=hCH$_sHL&*BMu+neng1#v;inZ1B03J~!K!HD&&{8tUoYI~NzRR+Ef| z*@gNuRuUAqOF!t}_Cm4RIrYe(^l5jkN6rUjvD1MsI7@ovj*o|b>#UpE{w4DLu2yxY zqWi&!=K!jS(tp(Ii=?axtp8J8QqS7jw;-gFs(d5;d$Xi1)~=Hl%i6 z8zUu&w0p8Nb4$MmbpM9s%(3OD<2CDlEUw6dP}@z`<^UI+CFZc@GIhhHjB44EN^$-%y3vt#N#jw@bB2{JJOiEMdO@25GGFN*05$*GK=N}R(LTX

yL?u1qy}A?ppNq&Q&gKA@;TV@@oNkGRRZ+KBxhAx*IcbH)_;}WthM$AJ8P1i6~pb| zvftM59bYXWV0#^O*XpwWK&}5DMHdHF&;fuCkO!)`YSGqD`uT8%jXPG_>;m=EI$--J ya@M`KRr9Y^rSR8Xe*5+P5orBgTnjWH0(|RcI@k( - -This source code is licensed under the Apache License 2.0 (see LICENSE.txt). - -This source code may use other Open Source software components (see LICENSE.txt). -*/ - -using System.IO; -using System.Linq; -using AdminShellNS; -using Newtonsoft.Json.Linq; -using NUnit.Framework; - -namespace AasxSchemaExport.Tests -{ - [TestFixture] - public class TestJsonSchemaExport - { - private AdminShellV20.Submodel _submodel; - - [OneTimeSetUp] - public void Init() - { - var submodelTemplatePath = Path.Combine( - TestContext.CurrentContext.TestDirectory, - "TestData", - "SubmodelTest.aasx"); - - var packageEnv = new AdminShellPackageEnv(submodelTemplatePath); - _submodel = packageEnv.AasEnv.Submodels[0]; - } - - [Test] - public void Test_meta_information() - { - var schema = ExportSchema(); - - Assert.AreEqual( - schema.GetValue("$schema"), - "https://json-schema.org/draft/2019-09/schema", - "Exported schema must support the draft 2019-09 draft."); - - Assert.AreEqual( - schema.GetValue("title"), - "AssetAdministrationShellSubmodelTest", - "The title of the schema must contain the prefix AssetAdministrationShell plus the idShort of the submodel."); - } - - [Test] - public void Test_root_type_should_be_object() - { - var schema = ExportSchema(); - - Assert.AreEqual( - schema.GetValue("type"), - "object", - "The type of the root element must be object."); - } - - [Test] - public void Test_submodel_reference() - { - var schema = ExportSchema(); - - var definitionRef = FindObjectInArrayWithProperty( - schema.SelectToken($"{Tokens.AllOf}"), - $"{Tokens.Ref}", - $"{Constants.MetaModelSchemaUrl}{Constants.MetaModelSubmodelDefinitionPath}"); - - Assert.NotNull( - definitionRef, - "There must be a reference to the submodel definition."); - } - - [Test] - public void Test_identifiable_properties() - { - var schema = ExportSchema(); - - var definitionRef = FindObjectInArrayWithProperty( - schema.SelectToken($"{Tokens.AllOf}"), - $"{Tokens.Ref}", - $"#/{Tokens.Definitions}/{Tokens.Identifiable}"); - - var definition = GetDefinition(schema, Tokens.Identifiable); - - Assert.NotNull(definitionRef, "Must contain the reference to identifiable."); - Assert.AreEqual(definition.GetValue("" + - $"{Tokens.Properties}." + - $"{Tokens.ModelType}." + - $"{Tokens.Properties}." + - $"{Tokens.Name}." + - $"{Tokens.Const}") - , "Submodel"); - } - - [Test] - public void Test_multiplicity_zero_to_one() - { - var schema = ExportSchema(); - - var prop1Reference = GetSubmodelElementsAllOfItem(schema, "Prop1"); - - Assert.AreEqual(prop1Reference.GetValue(Tokens.MinContains), 0); - Assert.AreEqual(prop1Reference.GetValue(Tokens.MaxContains), 1); - } - - [Test] - public void Test_multiplicity_one() - { - var schema = ExportSchema(); - - var prop1Reference = GetSubmodelElementsAllOfItem(schema, "Prop2"); - - Assert.AreEqual(prop1Reference.GetValue(Tokens.MinContains), 1); - Assert.AreEqual(prop1Reference.GetValue(Tokens.MaxContains), 1); - } - - [Test] - public void Test_multiplicity_zero_to_many() - { - var schema = ExportSchema(); - - var prop1Reference = GetSubmodelElementsAllOfItem(schema, "Prop3"); - - Assert.AreEqual(prop1Reference.GetValue(Tokens.MinContains), 0); - Assert.IsNull(prop1Reference[Tokens.MaxContains]); - } - - [Test] - public void Test_multiplicity_one_to_many() - { - var schema = ExportSchema(); - - var prop1Reference = GetSubmodelElementsAllOfItem(schema, "Prop4"); - - Assert.AreEqual(prop1Reference.GetValue(Tokens.MinContains), 1); - Assert.IsNull(prop1Reference[Tokens.MaxContains]); - } - - [Test] - public void Test_submodel_element_definition_idShort() - { - var schema = ExportSchema(); - - var definition = GetDefinition(schema, "Prop1"); - var path = $"{Tokens.Properties}.{Tokens.IdShort}.{Tokens.Const}"; - - Assert.AreEqual(definition.GetValue(path), "Prop1"); - } - - [Test] - public void Test_submodel_element_definition_kind() - { - var schema = ExportSchema(); - - var definition = GetDefinition(schema, "Prop1"); - var path = $"{Tokens.Properties}.{Tokens.Kind}.{Tokens.Const}"; - - Assert.AreEqual(definition.GetValue(path), "Instance"); - } - - [Test] - public void Test_submodel_element_definition_modelType() - { - var schema = ExportSchema(); - - var definition = GetDefinition(schema, "Prop1"); - var path = $"{Tokens.Properties}.{Tokens.ModelType}.{Tokens.Properties}.{Tokens.Name}.{Tokens.Const}"; - - Assert.AreEqual(definition.GetValue(path), "Property"); - } - - [Test] - public void Test_submodel_element_definition_valueType() - { - var schema = ExportSchema(); - - var definition = GetDefinition(schema, "Prop6"); - var path = $"" + - $"{Tokens.Properties}." + - $"{Tokens.ValueType}." + - $"{Tokens.Properties}." + - $"{Tokens.DataObjectType}." + - $"{Tokens.Properties}." + - $"{Tokens.Name}." + - $"{Tokens.Const}"; - - Assert.AreEqual(definition.GetValue(path), "short"); - } - - - [Test] - public void Test_submodel_element_definition_semanticId() - { - var schema = ExportSchema(); - - var definition = GetDefinition(schema, "Prop5"); - var semanticIdAllOf = definition.SelectToken($"" + - $"{Tokens.Properties}." + - $"{Tokens.SemanticId}." + - $"{Tokens.Properties}." + - $"{Tokens.Keys}." + - $"{Tokens.AllOf}") as JArray; - - if (semanticIdAllOf == null || semanticIdAllOf.Count == 0) - { - Assert.Fail("SemanticId(s) were not found."); - } - - var keyItem = semanticIdAllOf[0][Tokens.Contains]; - - Assert.AreEqual(keyItem.GetValue($"{Tokens.Properties}.{Tokens.Type}.{Tokens.Const}"), "ConceptDescription"); - Assert.AreEqual(keyItem.GetValue($"{Tokens.Properties}.{Tokens.Local}.{Tokens.Const}"), true); - Assert.AreEqual(keyItem.GetValue($"{Tokens.Properties}.{Tokens.Value}.{Tokens.Const}"), "https://www.example.com/1"); - Assert.AreEqual(keyItem.GetValue($"{Tokens.Properties}.{Tokens.IdType}.{Tokens.Const}"), "IRI"); - } - - private JObject GetDefinition(JObject schema, string name) - { - var definition = schema.SelectToken($"{Tokens.Definitions}.{name}"); - return definition as JObject; - } - - - private JObject GetSubmodelElementsAllOfItem(JObject schema, string definitionName) - { - var allOf = schema.SelectToken($"" + - $"{Tokens.Definitions}." + - $"{Tokens.Elements}." + - $"{Tokens.Properties}." + - $"{Tokens.SubmodelElements}." + - $"{Tokens.AllOf}") as JArray; - - var result = allOf.FirstOrDefault(item => - item.GetValue($"{Tokens.Contains}.{Tokens.Ref}") == $"#/{Tokens.Definitions}/{definitionName}" - ) as JObject; - - return result; - } - - private object FindObjectInArrayWithProperty(JToken jArray, string propertyName, string propertyValue) - { - var result = jArray.FirstOrDefault(item => - item[propertyName] != null && - item[propertyName].Value() == propertyValue); - - return result; - } - - private JObject ExportSchema() - { - var exporter = new SubmodelTemplateJsonSchemaExporterV20(); - var schema = exporter.ExportSchema(_submodel); - return JObject.Parse(schema); - } - } -} diff --git a/src/AasxSchemaExport.Tests/packages.config b/src/AasxSchemaExport.Tests/packages.config deleted file mode 100644 index a9e521ed..00000000 --- a/src/AasxSchemaExport.Tests/packages.config +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/src/AasxSchemaExport/AasxSchemaExport.csproj b/src/AasxSchemaExport/AasxSchemaExport.csproj index 6e544da5..0d24c2a1 100644 --- a/src/AasxSchemaExport/AasxSchemaExport.csproj +++ b/src/AasxSchemaExport/AasxSchemaExport.csproj @@ -12,7 +12,6 @@ - diff --git a/src/AasxToolkit.Tests/AasxToolkit.Tests.csproj b/src/AasxToolkit.Tests/AasxToolkit.Tests.csproj deleted file mode 100644 index 88c87c64..00000000 --- a/src/AasxToolkit.Tests/AasxToolkit.Tests.csproj +++ /dev/null @@ -1,30 +0,0 @@ - - - net8.0-windows - Library - false - false - - - - - - - - - - - - - - - - Always - - - - - PreserveNewest - - - diff --git a/src/AasxToolkit.Tests/ConsoleCapture.cs b/src/AasxToolkit.Tests/ConsoleCapture.cs deleted file mode 100644 index 83584da2..00000000 --- a/src/AasxToolkit.Tests/ConsoleCapture.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Console = System.Console; -using IDisposable = System.IDisposable; -using StringWriter = System.IO.StringWriter; -using TextWriter = System.IO.TextWriter; - -namespace AasxToolkit.Test -{ - public class ConsoleCapture : IDisposable - { - private readonly StringWriter _writerOut; - private readonly StringWriter _writerError; - private readonly TextWriter _originalOutput; - private readonly TextWriter _originalError; - - public ConsoleCapture() - { - _writerOut = new StringWriter(); - _writerError = new StringWriter(); - - _originalOutput = Console.Out; - _originalError = Console.Error; - - Console.SetOut(_writerOut); - Console.SetError(_writerError); - } - - public string Output() - { - return _writerOut.ToString(); - } - - public string Error() - { - return _writerError.ToString(); - } - - public void Dispose() - { - Console.SetOut(_originalOutput); - Console.SetError(_originalError); - _writerOut.Dispose(); - _writerOut.Dispose(); - } - } -} diff --git a/src/AasxToolkit.Tests/DocTestCli.cs b/src/AasxToolkit.Tests/DocTestCli.cs deleted file mode 100644 index f5245feb..00000000 --- a/src/AasxToolkit.Tests/DocTestCli.cs +++ /dev/null @@ -1,39 +0,0 @@ -// This file was automatically generated by doctest-csharp. -// !!! DO NOT EDIT OR APPEND !!! - -using NUnit.Framework; - -namespace AasxToolkit.Tests -{ - public class DocTest_Cli_cs - { - [Test] - public void AtLine197AndColumn16() - { - Assert.AreEqual("", Cli.Indentation.Indent("", " ")); - } - - [Test] - public void AtLine198AndColumn16() - { - Assert.AreEqual(" test", Cli.Indentation.Indent("test", " ")); - } - - [Test] - public void AtLine199AndColumn16() - { - var nl = System.Environment.NewLine; - Assert.AreEqual($" test{nl} me", Cli.Indentation.Indent("test\nme", " ")); - } - - [Test] - public void AtLine203AndColumn16() - { - var nl = System.Environment.NewLine; - Assert.AreEqual($" test{nl} me", Cli.Indentation.Indent("test\r\nme", " ")); - } - } -} - -// This file was automatically generated by doctest-csharp. -// !!! DO NOT EDIT OR APPEND !!! diff --git a/src/AasxToolkit.Tests/LICENSE.txt b/src/AasxToolkit.Tests/LICENSE.txt deleted file mode 100644 index 75f36a4f..00000000 --- a/src/AasxToolkit.Tests/LICENSE.txt +++ /dev/null @@ -1,1475 +0,0 @@ -Copyright (c) 2018-2023 Festo AG & Co. KG -, -author: Michael Hoffmeister - -Copyright (c) 2019-2021 PHOENIX CONTACT GmbH & Co. KG -, -author: Andreas Orzelski - -Copyright (c) 2019-2020 Fraunhofer IOSB-INA Lemgo, - eine rechtlich nicht selbstaendige Einrichtung der Fraunhofer-Gesellschaft - zur Foerderung der angewandten Forschung e.V. - -Copyright (c) 2020 Schneider Electric Automation GmbH -, -author: Marco Mendes - -Copyright (c) 2020 SICK AG - -Copyright (c) 2021 KEB Automation KG - -Copyright (c) 2021 Lenze SE -author: Jonas Grote, Denis Göllner, Sebastian Bischof - -The AASX Package Explorer is licensed under the Apache License 2.0 -(Apache-2.0, see below). - -The AASX Package Explorer is a sample application for demonstration of the -features of the Asset Administration Shell. -The implementation uses the concepts of the document "Details of the Asset -Administration Shell" published on www.plattform-i40.de which is licensed -under Creative Commons CC BY-ND 3.0 DE. - -When using eCl@ss or IEC CDD data, please check the corresponding license -conditions. - -------------------------------------------------------------------------------- - -The components below are used in AASX Package Explorer. -The related licenses are listed for information purposes only. -Some licenses may only apply to their related plugins. - -The browser functionality is licensed under the cefSharp license (see below). - -The Newtonsoft.JSON serialization is licensed under the MIT License -(MIT, see below). - -The QR code generation is licensed under the MIT license (MIT, see below). - -The Zxing.Net Dot Matrix Code (DMC) generation is licensed under -the Apache License 2.0 (Apache-2.0, see below). - -The Grapevine REST server framework is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The AutomationML.Engine is licensed under the MIT license (MIT, see below). - -The MQTT server and client is licensed under the MIT license (MIT, see below). - -The ClosedXML Excel reader/writer is licensed under the MIT license (MIT, -see below). - -The CountryFlag WPF control is licensed under the Code Project Open License -(CPOL, see below). - -The DocumentFormat.OpenXml SDK is licensed under the MIT license (MIT, -see below). - -The ExcelNumberFormat number parser is licensed under the MIT license (MIT, -see below). - -The FastMember reflection access is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The IdentityModel OpenID client is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The jose-jwt object signing and encryption is licensed under the -MIT license (MIT, see below). - -The ExcelDataReader is licensed under the MIT license (MIT, see below). - -Portions copyright (c) by OPC Foundation, Inc. and licensed under the -Reciprocal Community License (RCL, see below) - -The OPC UA Example Code of OPC UA Standard is licensed under the MIT license -(MIT, see below). - -The MSAGL (Microsoft Automatic Graph Layout) is licensed under the MIT license -(MIT, see below) - -Glob (https://www.nuget.org/packages/Glob/) is licensed under the MIT license -(MIT, see below). - -The Magick.NET library is licensed under Apache License 2.0 -(Apache-2.0, see below). - -The SSharp.NET library (https://github.com/PetroProtsyk/SSharp) is licensed -under Apache License 2.0 (Apache-2.0, see below). - -------------------------------------------------------------------------------- - - -With respect to AASX Package Explorer -===================================== - -(http://www.apache.org/licenses/LICENSE-2.0) - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -With respect to cefSharp -======================== - -(https://raw.githubusercontent.com/cefsharp/CefSharp/master/LICENSE) - -Copyright © The CefSharp Authors. All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are -met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following disclaimer - in the documentation and/or other materials provided with the - distribution. - - * Neither the name of Google Inc. nor the name Chromium Embedded - Framework nor the name CefSharp nor the names of its contributors - may be used to endorse or promote products derived from this software - without specific prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -With respect to Newtonsoft.Json -=============================== - -(https://github.com/JamesNK/Newtonsoft.Json/blob/master/LICENSE.md) - -The MIT License (MIT) - -Copyright (c) 2007 James Newton-King - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to QRcoder -======================= - -(https://github.com/codebude/QRCoder/blob/master/LICENSE.txt) - -The MIT License (MIT) - -Copyright (c) 2013-2018 Raffael Herrmann - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to ZXing.Net -========================= -With respect to Grapevine -========================= -With respect to FastMember -========================== -With respect to IdentityModel -============================= - -(http://www.apache.org/licenses/LICENSE-2.0) - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - -With respect to AutomationML.Engine -=================================== - -(https://raw.githubusercontent.com/AutomationML/AMLEngine2.1/master/license.txt) - -The MIT License (MIT) - -Copyright 2017 AutomationML e.V. - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the "Software"), -to deal in the Software without restriction, including without limitation -the rights to use, copy, modify, merge, publish, distribute, sublicense, -and/or sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER -DEALINGS IN THE SOFTWARE. - - -With respect to MQTTnet -======================= - -(https://github.com/chkr1011/MQTTnet/blob/master/LICENSE) - -MIT License - -MQTTnet Copyright (c) 2016-2019 Christian Kratky - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepct to ClosedXML -========================= - -(https://github.com/ClosedXML/ClosedXML/blob/develop/LICENSE) - -MIT License - -Copyright (c) 2016 ClosedXML - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepct to CountryFlag -=========================== - -(https://www.codeproject.com/Articles/190722/WPF-CountryFlag-Control) - -The Code Project Open License (CPOL) 1.02 - -Copyright © 2017 Meshack Musundi - -Preamble - -This License governs Your use of the Work. This License is intended to allow -developers to use the Source Code and Executable Files provided as part of -the Work in any application in any form. - -The main points subject to the terms of the License are: - - Source Code and Executable Files can be used in commercial applications; - Source Code and Executable Files can be redistributed; and - Source Code can be modified to create derivative works. - No claim of suitability, guarantee, or any warranty whatsoever is provided. - The software is provided "as-is". - The Article(s) accompanying the Work may not be distributed or republished - without the Author's consent - -This License is entered between You, the individual or other entity reading or -otherwise making use of the Work licensed pursuant to this License and the -individual or other entity which offers the Work under the terms of this -License ("Author"). - -License - -THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS -CODE PROJECT OPEN LICENSE ("LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT -AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED -UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED. - -BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HEREIN, YOU ACCEPT AND AGREE -TO BE BOUND BY THE TERMS OF THIS LICENSE. THE AUTHOR GRANTS YOU THE RIGHTS -CONTAINED HEREIN IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND -CONDITIONS. IF YOU DO NOT AGREE TO ACCEPT AND BE BOUND BY THE TERMS OF THIS -LICENSE, YOU CANNOT MAKE ANY USE OF THE WORK. - -Definitions. - "Articles" means, collectively, all articles written by Author which -describes how the Source Code and Executable Files for the Work may -be used by a user. - "Author" means the individual or entity that offers the Work under -the terms of this License. - "Derivative Work" means a work based upon the Work or upon the Work -and other pre-existing works. - "Executable Files" refer to the executables, binary files, -configuration and any required data files included in the Work. - "Publisher" means the provider of the website, magazine, CD-ROM, -DVD or other medium from or by which the Work is obtained by You. - "Source Code" refers to the collection of source code and -configuration files used to create the Executable Files. - "Standard Version" refers to such a Work if it has not been modified, -or has been modified in accordance with the consent of the Author, -such consent being in the full discretion of the Author. - "Work" refers to the collection of files distributed by the Publisher, -including the Source Code, Executable Files, binaries, data files, -documentation, whitepapers and the Articles. - "You" is you, an individual or entity wishing to use the Work and -exercise your rights under this License. - -Fair Use/Fair Use Rights. Nothing in this License is intended to reduce, -limit, or restrict any rights arising from fair use, fair dealing, -first sale or other limitations on the exclusive rights of the -copyright owner under copyright law or other applicable laws. - -License Grant. Subject to the terms and conditions of this License, the -Author hereby grants You a worldwide, royalty-free, non-exclusive, -perpetual (for the duration of the applicable copyright) license -to exercise the rights in the Work as stated below: - You may use the standard version of the Source Code or Executable -Files in Your own applications. - You may apply bug fixes, portability fixes and other modifications -obtained from the Public Domain or from the Author. A Work modified -in such a way shall still be considered the standard version and will -be subject to this License. - You may otherwise modify Your copy of this Work (excluding the Articles) -in any way to create a Derivative Work, provided that You insert a prominent -notice in each changed file stating how, when and where You changed that file. - You may distribute the standard version of the Executable Files and Source -Code or Derivative Work in aggregate with other (possibly commercial) -programs as part of a larger (possibly commercial) software distribution. - The Articles discussing the Work published in any form by the author may -not be distributed or republished without the Author's consent. The author -retains copyright to any such Articles. You may use the Executable Files and -Source Code pursuant to this License but you may not repost or republish or -otherwise distribute or make available the Articles, without the prior written -consent of the Author. - -Any subroutines or modules supplied by You and linked into the Source Code -or Executable Files of this Work shall not be considered part of this Work -and will not be subject to the terms of this License. - -Patent License. Subject to the terms and conditions of this License, each -Author hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, -royalty-free, irrevocable (except as stated in this section) patent license -to make, have made, use, import, and otherwise transfer the Work. - -Restrictions. The license granted in Section 3 above is expressly made subject -to and limited by the following restrictions: - You agree not to remove any of the original copyright, patent, trademark, -and attribution notices and associated disclaimers that may appear in the -Source Code or Executable Files. - You agree not to advertise or in any way imply that this Work is a product -of Your own. - The name of the Author may not be used to endorse or promote products -derived from the Work without the prior written consent of the Author. - You agree not to sell, lease, or rent any part of the Work. This does -not restrict you from including the Work or any part of the Work inside -a larger software distribution that itself is being sold. The Work by itself, -though, cannot be sold, leased or rented. - You may distribute the Executable Files and Source Code only under the terms -of this License, and You must include a copy of, or the Uniform Resource -Identifier for, this License with every copy of the Executable Files or -Source Code You distribute and ensure that anyone receiving such Executable -Files and Source Code agrees that the terms of this License apply to such -Executable Files and/or Source Code. You may not offer or impose any terms -on the Work that alter or restrict the terms of this License or the -recipients' exercise of the rights granted hereunder. You may not sublicense -the Work. You must keep intact all notices that refer to this License and to -the disclaimer of warranties. You may not distribute the Executable Files or -Source Code with any technological measures that control access or use of the -Work in a manner inconsistent with the terms of this License. - You agree not to use the Work for illegal, immoral or improper -purposes, or on pages containing illegal, immoral or improper material. -The Work is subject to applicable export laws. You agree to comply with all -such laws and regulations that may apply to the Work after Your receipt of -the Work. - -Representations, Warranties and Disclaimer. THIS WORK IS PROVIDED "AS IS", -"WHERE IS" AND "AS AVAILABLE", WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OR -CONDITIONS OR GUARANTEES. YOU, THE USER, ASSUME ALL RISK IN ITS USE, -INCLUDING COPYRIGHT INFRINGEMENT, PATENT INFRINGEMENT, SUITABILITY, ETC. -AUTHOR EXPRESSLY DISCLAIMS ALL EXPRESS, IMPLIED OR STATUTORY WARRANTIES -OR CONDITIONS, INCLUDING WITHOUT LIMITATION, WARRANTIES OR CONDITIONS -OF MERCHANTABILITY, MERCHANTABLE QUALITY OR FITNESS FOR A PARTICULAR -PURPOSE, OR ANY WARRANTY OF TITLE OR NON-INFRINGEMENT, OR THAT THE WORK -(OR ANY PORTION THEREOF) IS CORRECT, USEFUL, BUG-FREE OR FREE OF VIRUSES. -YOU MUST PASS THIS DISCLAIMER ON WHENEVER YOU DISTRIBUTE THE WORK OR DERIVATIVE -WORKS. - -Indemnity. You agree to defend, indemnify and hold harmless the Author and the -Publisher from and against any claims, suits, losses, damages, liabilities, -costs, and expenses (including reasonable legal or attorneys’ fees) -resulting from or relating to any use of the Work by You. - -Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, -IN NO EVENT WILL THE AUTHOR OR THE PUBLISHER BE LIABLE TO YOU ON ANY LEGAL -THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY -DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK OR OTHERWISE, -EVEN IF THE AUTHOR OR THE PUBLISHER HAS BEEN ADVISED OF THE POSSIBILITY -OF SUCH DAMAGES. - -Termination. - This License and the rights granted hereunder will terminate -automatically upon any breach by You of any term of this License. -Individuals or entities who have received Derivative Works from You under -this License, however, will not have their licenses terminated provided such -individuals or entities remain in full compliance with those licenses. -Sections 1, 2, 6, 7, 8, 9, 10 and 11 will survive any termination of -this License. - If You bring a copyright, trademark, patent or any other infringement -claim against any contributor over infringements You claim are made by the -Work, your License from such contributor to the Work ends automatically. - Subject to the above terms and conditions, this License is perpetual -(for the duration of the applicable copyright in the Work). -Notwithstanding the above, the Author reserves the right to release the Work -under different license terms or to stop distributing the Work at any time; -provided, however that any such election will not serve to withdraw this -License (or any other license that has been, or is required to be, -granted under the terms of this License), and this License will continue -in full force and effect unless terminated as stated above. - -Publisher. The parties hereby confirm that the Publisher shall not, under -any circumstances, be responsible for and shall not have any liability -in respect of the subject matter of this License. The Publisher makes no -warranty whatsoever in connection with the Work and shall not be liable -to You or any party on any legal theory for any damages whatsoever, including -without limitation any general, special, incidental or consequential damages -arising in connection to this license. The Publisher reserves the right to -cease making the Work available to You at any time without notice - -Miscellaneous - This License shall be governed by the laws of the location of the head -office of the Author or if the Author is an individual, the laws of -location of the principal place of residence of the Author. - If any provision of this License is invalid or unenforceable under -applicable law, it shall not affect the validity or enforceability of the -remainder of the terms of this License, and without further action by the -parties to this License, such provision shall be reformed to the minimum -extent necessary to make such provision valid and enforceable. - No term or provision of this License shall be deemed waived and no -breach consented to unless such waiver or consent shall be in writing -and signed by the party to be charged with such waiver or consent. - This License constitutes the entire agreement between the parties -with respect to the Work licensed herein. There are no understandings, -agreements or representations with respect to the Work not specified herein. -The Author shall not be bound by any additional provisions that may appear -in any communication from You. This License may not be modified without -the mutual written agreement of the Author and You. - - -With respect to DocumentFormat.OpenXml -====================================== - -(https://github.com/OfficeDev/Open-XML-SDK/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) Microsoft Corporation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With respect to ExcelNumberFormat -================================= - -(https://github.com/andersnm/ExcelNumberFormat/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2017 andersnm - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With respect to jose-jwt -======================== - -(https://github.com/dvsekhvalnov/jose-jwt/blob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2014-2019 dvsekhvalnov - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -With resepect to ExcelDataReader -================================ - -(https://github.com/ExcelDataReader/ExcelDataReader/blob/develop/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2014 ExcelDataReader - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - - -With resepect to OPC UA Example Code -==================================== - - * Copyright (c) 2005-2019 The OPC Foundation, Inc. All rights reserved. - * - * OPC Foundation MIT License 1.00 - * - * Permission is hereby granted, free of charge, to any person - * obtaining a copy of this software and associated documentation - * files (the "Software"), to deal in the Software without - * restriction, including without limitation the rights to use, - * copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following - * conditions: - * - * The above copyright notice and this permission notice shall be - * included in all copies or substantial portions of the Software. - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES - * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT - * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, - * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR - * OTHER DEALINGS IN THE SOFTWARE. - * - * The complete license agreement can be found here: - * http://opcfoundation.org/License/MIT/1.00/ - - -With respect to OPC Foundation -============================== - -RCL License -Reciprocal Community License 1.00 (RCL1.00) -Version 1.00, June 24, 2009 -Copyright (C) 2008,2009 OPC Foundation, Inc., All Rights Reserved. - -https://opcfoundation.org/license/rcl.html - -Remark: PHOENIX CONTACT GmbH & Co. KG and Festo SE & Co. KG are members -of OPC foundation. - -With respect to MSAGL (Microsoft Automatic Graph Layout) -======================================================== -(see: https://github.com/microsoft/automatic-graph-layout/blob/master/LICENSE) - -Microsoft Automatic Graph Layout, MSAGL - -Copyright (c) Microsoft Corporation - -All rights reserved. - -MIT License - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -""Software""), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - - -With respect to Glob (https://www.nuget.org/packages/Glob/) -=========================================================== -(see: https://raw.githubusercontent.com/kthompson/glob/master/LICENSE) - -The MIT License (MIT) - -Copyright (c) 2013-2019 Kevin Thompson - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -With respect to Magick.NET -========================== - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -With respect to SSharp.NET library -================================== - - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/src/AasxToolkit.Tests/TemporaryDirectory.cs b/src/AasxToolkit.Tests/TemporaryDirectory.cs deleted file mode 100644 index 2ce30c52..00000000 --- a/src/AasxToolkit.Tests/TemporaryDirectory.cs +++ /dev/null @@ -1,23 +0,0 @@ -using IDisposable = System.IDisposable; - -namespace AasxToolkit.Tests -{ - class TemporaryDirectory : IDisposable - { - public readonly string Path; - - public TemporaryDirectory() - { - this.Path = System.IO.Path.Combine( - System.IO.Path.GetTempPath(), - System.IO.Path.GetRandomFileName()); - - System.IO.Directory.CreateDirectory(this.Path); - } - - public void Dispose() - { - System.IO.Directory.Delete(this.Path, true); - } - } -} diff --git a/src/AasxToolkit.Tests/TestCli.cs b/src/AasxToolkit.Tests/TestCli.cs deleted file mode 100644 index b9d45826..00000000 --- a/src/AasxToolkit.Tests/TestCli.cs +++ /dev/null @@ -1,167 +0,0 @@ -using System; -using System.Collections.Generic; -using NUnit.Framework; - -namespace AasxToolkit.Tests -{ - public class TestWithNoCommands - { - [Test] - public void TestWithNoArguments() - { - var cmdLine = Cli.DeclareCommandLine( - "test-program", - "Tests something.", - new List() - ); - - var parsing = Cli.ParseInstructions(cmdLine, new string[] { }); - Assert.IsNull(parsing.Errors); - Assert.IsEmpty(parsing.Instructions); - } - } - - public class TestWithACommand - { - private Cli.CommandLine setUpCommandLine() - { - // We use a subset of commands to make the testing simpler, in particular when it comes to testing - // the help message. - var cmdLoad = new Cli.Command( - "load", - "loads the AASX package into RAM.", - new[] - { - new Cli.Arg( - "package-file", - "Path to the AASX package."), - }, - (cmdArgs) => - { - var pth = cmdArgs[0]; - return new Cli.Parsing(new Instruction.Load(pth)); - } - ); - - var cmdLine = Cli.DeclareCommandLine( - "test-program", - "Tests something.", - new List { cmdLoad } - ); - - return cmdLine; - } - - [Test] - public void TestWithNoArguments() - { - var cmdLine = setUpCommandLine(); - - var parsing = Cli.ParseInstructions(cmdLine, new string[] { }); - Assert.IsNull(parsing.Errors); - Assert.IsEmpty(parsing.Instructions); - } - - [Test] - public void TestHelp() - { - var cmdLine = setUpCommandLine(); - - string help = Cli.GenerateUsageMessage(cmdLine); - - var nl = System.Environment.NewLine; - - Assert.AreEqual( - $"test-program:{nl}" + - $" Tests something.{nl}" + - $"{nl}" + - $"Usage:{nl}" + - $" test-program [list of commands]{nl}" + - $"{nl}" + - $"Commands:{nl}" + - $" load [package-file]{nl}" + - $" loads the AASX package into RAM.{nl}" + - $"{nl}" + - $" package-file:{nl}" + - $" Path to the AASX package.{nl}", - help); - } - - [Test] - public void TestParsingChainOfCommands() - { - var cmdLine = setUpCommandLine(); - - var parsing = Cli.ParseInstructions(cmdLine, new[] { "load", "one", "load", "two" }); - Assert.IsNull(parsing.Errors); - Assert.AreEqual(2, parsing.Instructions.Count); - - Assert.IsInstanceOf(parsing.Instructions[0]); - Assert.IsInstanceOf(parsing.Instructions[1]); - - var first = (Instruction.Load)parsing.Instructions[0]; - Assert.AreEqual("one", first.Path); - - var second = (Instruction.Load)parsing.Instructions[1]; - Assert.AreEqual("two", second.Path); - } - - [Test] - public void TestParsingNoArgumentsGivesEmptyInstructions() - { - var cmdLine = setUpCommandLine(); - - var args = new string[] { }; - var parsing = Cli.ParseInstructions(cmdLine, args); - Assert.IsEmpty(parsing.Instructions); - Assert.AreEqual(0, parsing.AcceptedArgs); - Assert.IsNull(parsing.Errors); - } - - [Test] - public void TestParsingFailedDueToTooFewArguments() - { - var cmdLine = setUpCommandLine(); - - var args = new[] { "load" }; - var parsing = Cli.ParseInstructions(cmdLine, args); - Assert.IsNull(parsing.Instructions); - Assert.AreEqual(0, parsing.AcceptedArgs); - - var errorMsg = Cli.FormatParsingErrors(args, parsing.AcceptedArgs, parsing.Errors); - - var nl = System.Environment.NewLine; - Assert.AreEqual( - $"The command-line arguments could not be parsed.{nl}" + - $"Arguments (vertically ordered):{nl}" + - $"load <<< PROBLEM <<<{nl}" + - nl + - "Too few arguments specified for the command load. It requires at least one argument.", - errorMsg); - } - - [Test] - public void TestParsingFailedDueToAnUnknownCommand() - { - var cmdLine = setUpCommandLine(); - - var args = new[] { "load", "one", "unknown-command", "foobar" }; - var parsing = Cli.ParseInstructions(cmdLine, args); - Assert.IsNull(parsing.Instructions); - - var errorMsg = Cli.FormatParsingErrors(args, parsing.AcceptedArgs, parsing.Errors); - - var nl = System.Environment.NewLine; - Assert.AreEqual( - $"The command-line arguments could not be parsed.{nl}" + - $"Arguments (vertically ordered):{nl}" + - $"load{nl}" + - $"one{nl}" + - $"unknown-command <<< PROBLEM <<<{nl}" + - $"foobar{nl}" + - $"{nl}" + - "Command unknown: unknown-command", - errorMsg); - } - } -} diff --git a/src/AasxToolkit.Tests/TestProgram.cs b/src/AasxToolkit.Tests/TestProgram.cs deleted file mode 100644 index dda1adf3..00000000 --- a/src/AasxToolkit.Tests/TestProgram.cs +++ /dev/null @@ -1,307 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using AasxToolkit.Test; -using NUnit.Framework; -using InvalidOperationException = System.InvalidOperationException; - -namespace AasxToolkit.Tests -{ - static class SamplesAasxDir - { - public static List ListAasxPaths() - { - var variable = "SAMPLE_AASX_DIR"; - - var sampleAasxDir = System.Environment.GetEnvironmentVariable(variable); - if (sampleAasxDir == null) - { - throw new InvalidOperationException( - $"The environment variable {variable} has not been set. " + - "Did you set it manually to the directory containing sample AASXs? " + - "Otherwise, run the test through Test.ps1?"); - } - - if (!System.IO.Directory.Exists(sampleAasxDir)) - { - throw new InvalidOperationException( - $"The directory containing the sample AASXs does not exist or is not a directory: " + - $"{sampleAasxDir}; did you download the samples with DownloadSamples.ps1?"); - } - - var result = System.IO.Directory.GetFiles(sampleAasxDir) - .Where(p => System.IO.Path.GetExtension(p) == ".aasx") - .ToList(); - - result.Sort(); - - return result; - } - } - - public class TestLoadSave - { - [Test] - public void TestNoErrorOnSamples() - { - foreach (string pth in SamplesAasxDir.ListAasxPaths()) - { - using (var tmpDir = new TemporaryDirectory()) - { - using (var consoleCap = new ConsoleCapture()) - { - int code = AasxToolkit.Program.MainWithExitCode( - new[] - { - "load", pth, - "save", Path.Combine(tmpDir.Path, "saved.xml") - }); - - if (consoleCap.Error() != "") - { - throw new AssertionException( - $"Expected no stderr, but got:{System.Environment.NewLine} " + - consoleCap.Error()); - } - - Assert.AreEqual(0, code); - } - } - } - } - } - - public class TestExportTemplate - { - [Test] - public void TestNoErrorOnSamples() - { - foreach (string pth in SamplesAasxDir.ListAasxPaths()) - { - using (var tmpDir = new TemporaryDirectory()) - { - string targetPth = Path.Combine(tmpDir.Path, "exported.template"); - - using (var consoleCap = new ConsoleCapture()) - { - int code = AasxToolkit.Program.MainWithExitCode( - new[] - { - "load", pth, - "export-template", targetPth - }); - - if (consoleCap.Error() != "") - { - throw new AssertionException( - $"Expected no stderr, but got:{System.Environment.NewLine}" + - consoleCap.Error() + - System.Environment.NewLine + - System.Environment.NewLine + - "The original command was:" + System.Environment.NewLine + - $"AasxToolkit load {pth} export-template {targetPth}"); - } - - Assert.AreEqual(0, code); - } - } - } - } - } - - public class TestLoadCheckSave - { - [Test] - public void TestNoErrorOnSamples() - { - foreach (string pth in SamplesAasxDir.ListAasxPaths()) - { - using (var tmpDir = new TemporaryDirectory()) - { - using (var consoleCap = new ConsoleCapture()) - { - string targetPth = Path.Combine(tmpDir.Path, "saved.xml"); - - int code = AasxToolkit.Program.MainWithExitCode( - new[] - { - "load", pth, - "check", - "save", targetPth - }); - - if (consoleCap.Error() != "") - { - throw new AssertionException( - $"Expected no stderr, but got:{System.Environment.NewLine}" + - consoleCap.Error() + - System.Environment.NewLine + - System.Environment.NewLine + - $"The executed command was: " + - $"AasxToolkit load {pth} check save {targetPth}"); - } - - Assert.AreEqual(0, code); - } - } - } - } - - public class TestLoadCheckAndFixSave - { - [Test] - public void TestNoErrorOnSamples() - { - foreach (string pth in SamplesAasxDir.ListAasxPaths()) - { - using (var tmpDir = new TemporaryDirectory()) - { - using (var consoleCap = new ConsoleCapture()) - { - int code = AasxToolkit.Program.MainWithExitCode( - new[] - { - "load", pth, - "check+fix", - "save", Path.Combine(tmpDir.Path, "saved.xml") - }); - - if (consoleCap.Error() != "") - { - throw new AssertionException( - $"Expected no stderr, but got:{System.Environment.NewLine}" + - consoleCap.Error()); - } - - Assert.AreEqual(0, code); - } - } - } - } - } - - public class TestHelp - { - [Test] - public void TestDisplayedWhenNoArguments() - { - using (var consoleCap = new ConsoleCapture()) - { - int code = AasxToolkit.Program.MainWithExitCode(new string[] { }); - - if (consoleCap.Error() != "") - { - throw new AssertionException( - $"Expected no stderr, but got:{System.Environment.NewLine}" + - consoleCap.Error()); - } - - Assert.AreEqual(0, code); - - Assert.IsTrue(consoleCap.Output().StartsWith("AasxToolkit:")); // Start of the help message - } - } - - [TestCase("help")] - [TestCase("-help")] - [TestCase("--help")] - [TestCase("/help")] - [TestCase("-h")] - [TestCase("/h")] - public void TestDisplayedWhenHelpArgument(string helpArg) - { - using (var consoleCap = new ConsoleCapture()) - { - int code = AasxToolkit.Program.MainWithExitCode(new[] { helpArg }); - - if (consoleCap.Error() != "") - { - throw new AssertionException( - $"Expected no stderr, but got:{System.Environment.NewLine}" + - consoleCap.Error()); - } - - Assert.AreEqual(0, code); - - Assert.IsTrue(consoleCap.Output().StartsWith("AasxToolkit:")); // Start of the help message - } - } - - [Test] - public void TestHelpTrumpsOtherArguments() - { - using (var consoleCap = new ConsoleCapture()) - { - int code = AasxToolkit.Program.MainWithExitCode( - new[] { "load", "doesnt-exist.aasx", "help" }); - - if (consoleCap.Error() != "") - { - throw new AssertionException( - $"Expected no stderr, but got:{System.Environment.NewLine}" + - consoleCap.Error()); - } - - Assert.AreEqual(0, code); - - Assert.IsTrue(consoleCap.Output().StartsWith("AasxToolkit:")); // Start of the help message - } - } - } - - public class TestValidation - { - [Test] - public void TestAgainstSampleData() - { - var samplePaths = new List - { - Path.Combine( - TestContext.CurrentContext.TestDirectory, - "TestResources\\AasxToolkit.Tests\\sample.xml") - /* - TODO (mristin, 2020-10-30): add json once the validation is in place. - Michael Hoffmeister had it almost done today. - - Path.Combine( - TestContext.CurrentContext.TestDirectory, - "TestResources\\AasxToolkit.Tests\\sample.json") - - dead-csharp ignore this comment - */ - }; - - foreach (string samplePath in samplePaths) - { - if (!File.Exists(samplePath)) - { - throw new FileNotFoundException($"The sample file could not be found: {samplePath}"); - } - - using (var tmpDir = new TemporaryDirectory()) - { - using (var consoleCap = new ConsoleCapture()) - { - string extension = Path.GetExtension(samplePath); - string tmpPath = Path.Combine(tmpDir.Path, $"to-be-validated{extension}"); - - int code = AasxToolkit.Program.MainWithExitCode( - new[] { "load", samplePath, "check+fix", "save", tmpPath, "validate", tmpPath }); - - if (consoleCap.Error() != "") - { - var nl = System.Environment.NewLine; - throw new AssertionException( - $"Expected no stderr for the sample file {samplePath}, but got:{nl}" + - $"{consoleCap.Error()}"); - } - - Assert.AreEqual(0, code); - } - } - } - } - } - } -} diff --git a/src/AasxToolkit.Tests/TestResources/AasxToolkit.Tests/sample.json b/src/AasxToolkit.Tests/TestResources/AasxToolkit.Tests/sample.json deleted file mode 100644 index 58cccd91..00000000 --- a/src/AasxToolkit.Tests/TestResources/AasxToolkit.Tests/sample.json +++ /dev/null @@ -1,18714 +0,0 @@ -{ - "assetAdministrationShells": [ - { - "asset": { - "keys": [ - { - "type": "Asset", - "local": true, - "value": "https://admin-shell.hitachi-industrial.eu/asset/000000001", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "Asset", - "local": true, - "value": "https://admin-shell.hitachi-industrial.eu/asset/000000001", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "Asset", - "local": true, - "value": "https://admin-shell.hitachi-industrial.eu/asset/000000001", - "index": 0, - "idType": "IRI" - } - }, - "submodels": [ - { - "keys": [ - { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/4343_5072_7091_3242", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/4343_5072_7091_3242", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/4343_5072_7091_3242", - "index": 0, - "idType": "IRI" - } - }, - { - "keys": [ - { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/2543_5072_7091_2660", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/2543_5072_7091_2660", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/2543_5072_7091_2660", - "index": 0, - "idType": "IRI" - } - }, - { - "keys": [ - { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/6053_5072_7091_5102", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/6053_5072_7091_5102", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/6053_5072_7091_5102", - "index": 0, - "idType": "IRI" - } - }, - { - "keys": [ - { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/6563_5072_7091_4267", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/6563_5072_7091_4267", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "Submodel", - "local": true, - "value": "www.company.com/ids/sm/6563_5072_7091_4267", - "index": 0, - "idType": "IRI" - } - }, - { - "keys": [ - { - "type": "Submodel", - "local": true, - "value": "https://automation.hitachi-industrial.eu/_Resources/Static/Packages/Moon.HitachiEurope/Downloads/automation/[2]%20Software/[5]%20Configuration%20Files/[1]%20Device%20Descriptions/Device%20files.zip", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "Submodel", - "local": true, - "value": "https://automation.hitachi-industrial.eu/_Resources/Static/Packages/Moon.HitachiEurope/Downloads/automation/[2]%20Software/[5]%20Configuration%20Files/[1]%20Device%20Descriptions/Device%20files.zip", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "Submodel", - "local": true, - "value": "https://automation.hitachi-industrial.eu/_Resources/Static/Packages/Moon.HitachiEurope/Downloads/automation/[2]%20Software/[5]%20Configuration%20Files/[1]%20Device%20Descriptions/Device%20files.zip", - "index": 0, - "idType": "IRI" - } - } - ], - "conceptDictionaries": [], - "identification": { - "idType": "IRI", - "id": "https://admin-shell.hitachi-industrial.eu/aas/1/1/000000001" - }, - "idShort": "000000001", - "modelType": { - "name": "AssetAdministrationShell" - } - } - ], - "assets": [ - { - "identification": { - "idType": "IRI", - "id": "https://admin-shell.hitachi-industrial.eu/asset/000000001" - }, - "idShort": "Hitachi_000000001", - "modelType": { - "name": "Asset" - }, - "kind": "Instance", - "descriptions": [ - { - "language": "EN", - "text": "Hitachi HX PLC" - }, - { - "language": "DE", - "text": "Hitachi HX SPS" - } - ] - } - ], - "submodels": [ - { - "semanticId": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/nameplate", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/nameplate", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/nameplate", - "index": 0, - "idType": "IRI" - } - }, - "qualifiers": [], - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/sm/4343_5072_7091_3242" - }, - "idShort": "Nameplate", - "modelType": { - "name": "Submodel" - }, - "kind": "Instance", - "submodelElements": [ - { - "value": "Hitachi Industrial Equipment Systems Co.,Ltd.", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO677#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO677#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO677#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "ManufacturerName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "HX-CP1H16", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAW338#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAW338#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAW338#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "ManufacturerProductDesignation", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/physicaladdress", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/physicaladdress", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/physicaladdress", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "PhysicalAddress", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "JP", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO730#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO730#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO730#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "CountryCode", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "AKS Bldg, 3 Kanda Neribei-cho", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO128#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO128#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO128#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "Street", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "101-0022", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO129#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO129#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO129#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "Zip", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Chiyoda-ku, Tokyo", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO132#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO132#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO132#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "CityTown", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Tokyo", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO133#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO133#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO133#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "StateCounty", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - } - ], - "kind": "Instance" - }, - { - "value": "PAC IoT Controller HX Series", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU731#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU731#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU731#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "ManufacturerProductFamily", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "HX-CP1H16", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAM556#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAM556#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAM556#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "SerialNumber", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "N/A", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAQ196#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAQ196#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAQ196#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "BatchNumber", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "JP", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO841#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO841#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO841#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "ProductCountryOfOrigin", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "2018", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAP906#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAP906#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAP906#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "YearOfConstruction", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "integer" - } - }, - "kind": "Instance" - }, - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/productmarking", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/productmarking", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/productmarking", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "Marking_CE", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "1", - "valueId": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "0173-1#07-CAA016#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "0173-1#07-CAA016#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "0173-1#07-CAA016#001", - "index": 0, - "idType": "IRDI" - } - }, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-BAF053#008", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-BAF053#008", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-BAF053#008", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "CEQualificationPresent", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "boolean" - } - }, - "kind": "Instance" - }, - { - "mimeType": "image/png", - "value": "/aasx/Nameplate/marking_ce.png", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "File", - "category": "PARAMETER", - "modelType": { - "name": "File" - }, - "kind": "Instance" - } - ], - "kind": "Instance" - }, - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/productmarking", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/productmarking", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/productmarking", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "Marking_CRUUS", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "1", - "valueId": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "0173-1#07-CAA016#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "0173-1#07-CAA016#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "0173-1#07-CAA016#001", - "index": 0, - "idType": "IRDI" - } - }, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAR528#005", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAR528#005", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAR528#005", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "CRUUSLabelingPresent", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "boolean" - } - }, - "kind": "Instance" - }, - { - "mimeType": "image/png", - "value": "/aasx/Nameplate/marking_cruus.jpg", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "File", - "category": "PARAMETER", - "modelType": { - "name": "File" - }, - "kind": "Instance" - } - ], - "kind": "Instance" - } - ] - }, - { - "semanticId": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/document", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/document", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/document", - "index": 0, - "idType": "IRI" - } - }, - "qualifiers": [], - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/sm/2543_5072_7091_2660" - }, - "idShort": "Document", - "modelType": { - "name": "Submodel" - }, - "kind": "Instance", - "submodelElements": [ - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "DeclarationCEMarking", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "Single", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_DomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Primary", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_IdType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentDomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Responsible", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Role", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Hitachi", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Hitachi Industrial Equipment Systems Co.,Ltd.", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationOfficialName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Description", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden." - } - ] - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentPartId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "02-04", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentClassification_ClassId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "eindeutige ID der Klasse in einer Klassifikation" - } - ] - }, - { - "value": "Zeugnisse, Zertifikate, Bescheinigungen", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ClassName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "VDI2770:2018", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "ClassificationSystem", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersionId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "en", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersion_LanguageCode", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "HX CE declaration", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Title", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Summary", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Keywords", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Released", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_StatusValue", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_SetDate", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Purpose", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_BasedOnProcedure", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Comments", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Product", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_Type", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_RefType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_ObjectId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "CE_DLR_EH-150_REV17.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "application/pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileFormat", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "mimeType": "application/pdf", - "value": "/aasx/Document/CE_DLR_EH-150_REV17.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "File", - "category": "PARAMETER", - "modelType": { - "name": "File" - }, - "kind": "Instance" - } - ], - "kind": "Instance" - }, - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "DeclarationRoHS", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "Single", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_DomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Primary", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_IdType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentDomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Responsible", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Role", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Hitachi", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Hitachi Industrial Equipment Systems Co.,Ltd.", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationOfficialName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Description", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden." - } - ] - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentPartId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "02-04", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentClassification_ClassId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "eindeutige ID der Klasse in einer Klassifikation" - } - ] - }, - { - "value": "Zeugnisse, Zertifikate, Bescheinigungen", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ClassName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "VDI2770:2018", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "ClassificationSystem", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersionId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "en", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersion_LanguageCode", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "RoHS 2011/65/EU Declaration of conformity", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Title", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Summary", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Keywords", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Released", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_StatusValue", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_SetDate", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Purpose", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_BasedOnProcedure", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Comments", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Product", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_Type", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_RefType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_ObjectId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "CE_DLR_EH-150_REV17.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "application/pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileFormat", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "mimeType": "application/pdf", - "value": "/aasx/Document/CE_DLR_EH-150_REV17.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "File", - "category": "PARAMETER", - "modelType": { - "name": "File" - }, - "kind": "Instance" - } - ], - "kind": "Instance" - }, - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "EN_Manual_Hitachi_HX_Hardware", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "Single", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_DomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Primary", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_IdType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "NJI-637(X)", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentDomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Responsible", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Role", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Hitachi", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Hitachi Industrial Equipment Systems Co.,Ltd.", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationOfficialName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Description", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden." - } - ] - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentPartId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "03-02", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentClassification_ClassId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "eindeutige ID der Klasse in einer Klassifikation" - } - ] - }, - { - "value": "Bedienung", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ClassName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "VDI2770:2018", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "ClassificationSystem", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "2016.11", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersionId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "en", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersion_LanguageCode", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "HX Series Application Manual (Hardware)", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Title", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "This application manual informs about the hardware of HX series which is a high-performance PAC system suitable for IoT. The contents relevant to programming has been separated as an application manual (software) and a command reference manual. ", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Summary", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Keywords", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Released", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_StatusValue", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_SetDate", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Purpose", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_BasedOnProcedure", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Comments", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Product", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_Type", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_RefType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_ObjectId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "NJI-637A(X)_HX-CPU_Hardware_Rev_01.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "application/pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileFormat", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "mimeType": "application/pdf", - "value": "/aasx/Document/NJI-637A(X)_HX-CPU_Hardware_Rev_01.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "File", - "category": "PARAMETER", - "modelType": { - "name": "File" - }, - "kind": "Instance" - } - ], - "kind": "Instance" - }, - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "EN_Manual_Hitachi_HX_Software", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "Single", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_DomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Primary", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_IdType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "NJI-638(X)", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentDomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Responsible", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Role", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Hitachi", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Hitachi Industrial Equipment Systems Co.,Ltd.", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationOfficialName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Description", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden." - } - ] - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentPartId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "03-02", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentClassification_ClassId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "eindeutige ID der Klasse in einer Klassifikation" - } - ] - }, - { - "value": "Bedienung", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ClassName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "VDI2770:2018", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "ClassificationSystem", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "2016.12 ", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersionId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "en", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersion_LanguageCode", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "HX Series Application Manual (Software) ", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Title", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "This application manual informs about the software of HX series which is a high-performance PAC system suitable for IoT. The contents relevant to installation has been separated as an hardware manual.", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Summary", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Keywords", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Released", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_StatusValue", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_SetDate", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Purpose", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_BasedOnProcedure", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Comments", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Product", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_Type", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_RefType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_ObjectId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "NJI-638X_HX-CPU_Software.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "application/pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileFormat", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "mimeType": "application/pdf", - "value": "/aasx/Document/NJI-638X_HX-CPU_Software.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "File", - "category": "PARAMETER", - "modelType": { - "name": "File" - }, - "kind": "Instance" - } - ], - "kind": "Instance" - }, - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "DE_CODESYS_V3_Installation_und_Erste_Schritte ", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "Single", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_DomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Primary", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_IdType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "0000000", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentDomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Responsible", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Role", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "3S-Smart Software Solutions GmbH ", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "3S-Smart Software Solutions GmbH ", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationOfficialName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Description", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden." - } - ] - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentPartId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "03-02", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentClassification_ClassId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "eindeutige ID der Klasse in einer Klassifikation" - } - ] - }, - { - "value": "Bedienung", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ClassName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "VDI2770:2018", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "ClassificationSystem", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "20XX", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersionId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "de", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersion_LanguageCode", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "CODESYS V3, Installation und Erste Schritte - Anwenderdokumentation ", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Title", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Summary", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Keywords", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Released", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_StatusValue", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_SetDate", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Purpose", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_BasedOnProcedure", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Comments", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Product", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_Type", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_RefType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_ObjectId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "CODESYS_Installation_und_Erste_Schritte_20V11.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "application/pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileFormat", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "mimeType": "application/pdf", - "value": "/aasx/Document/CODESYS_Installation_und_Erste_Schritte_V11.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "File", - "category": "PARAMETER", - "modelType": { - "name": "File" - }, - "kind": "Instance" - } - ], - "kind": "Instance" - }, - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD001#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "EN_Datasheet_IoT_PAC_Controller_HX_Series", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "Single", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_DomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Primary", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_IdType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentDomainId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Responsible", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Role", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Hitachi", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Hitachi Europe GmbH", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_OrganisationOfficialName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "The new Hitachi HX series PAC Controller combines powerful features and efficiency to meet the demands of a global supply chain in manufacturing industries. In addition, HX series is already prepared for the next generation requirements in automation thanks to its IoT capabilities. Manufacturing & service innovations can be achieved with integrated functions and seamless connectivity from field machine level to cloud services. ", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Description", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden." - } - ] - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentPartId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "03-02", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentClassification_ClassId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance", - "descriptions": [ - { - "language": "DE", - "text": "eindeutige ID der Klasse in einer Klassifikation" - } - ] - }, - { - "value": "Bedienung", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ClassName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "VDI2770:2018", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "ClassificationSystem", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "1.10", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersionId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "en", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DocumentVersion_LanguageCode", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Datasheet: IoT PAC Controller HX Series - Next generation industrial controller.", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Title", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Summary", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Keywords", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Released", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_StatusValue", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "2017.03", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_SetDate", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Purpose", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_BasedOnProcedure", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_Comments", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "Product", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_Type", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_RefType", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_ReferencedObject_ObjectId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "HX%20Datasheet.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "application/pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "VDI2770_FileFormat", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "mimeType": "application/pdf", - "value": "/aasx/Document/HX_Datasheet.pdf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAD005#008", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "File", - "category": "PARAMETER", - "modelType": { - "name": "File" - }, - "kind": "Instance" - } - ], - "kind": "Instance" - } - ] - }, - { - "semanticId": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/service", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/service", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/service", - "index": 0, - "idType": "IRI" - } - }, - "qualifiers": [], - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/sm/6053_5072_7091_5102" - }, - "idShort": "Service", - "modelType": { - "name": "Submodel" - }, - "kind": "Instance", - "submodelElements": [ - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/contactinfo", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/contactinfo", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/contactinfo", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "ContactInfo", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "Hitachi Europe GmbH", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO735#003", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO735#003", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO735#003", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "NameOfSupplier", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Sales organization", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/role", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/role", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/role", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "ContactInfo_Role", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/physicaladdress", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/physicaladdress", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/physicaladdress", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "PhysicalAddress", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "DE", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO730#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO730#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO730#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "CountryCode", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Niederkasseler Lohweg 191", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO128#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO128#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO128#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "Street", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "40547", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO129#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO129#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO129#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "Zip", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Düsseldorf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO132#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO132#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO132#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "CityTown", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "North Rhine-Westphalia", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO133#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO133#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO133#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "StateCounty", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - } - ], - "kind": "Instance" - }, - { - "value": "automation.industrial@hitachi-eu.com", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/email", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/email", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/email", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "Email", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "https://automation.hitachi-industrial.eu/", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO694#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO694#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO694#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "URL", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "+49-211-5283-0", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO136#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO136#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO136#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "PhoneNumber", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "+49-211-2049-049", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/fax", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/fax", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/fax", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "Fax", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - } - ], - "kind": "Instance" - } - ] - }, - { - "semanticId": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/identification", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/identification", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "https://www.hsu-hh.de/aut/aas/identification", - "index": 0, - "idType": "IRI" - } - }, - "qualifiers": [], - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/sm/6563_5072_7091_4267" - }, - "idShort": "Identification", - "modelType": { - "name": "Submodel" - }, - "kind": "Instance", - "submodelElements": [ - { - "value": "Hitachi Industrial Equipment Systems Co.,Ltd.", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO677#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO677#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO677#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "ManufacturerName", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "N/A", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAY812#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAY812#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAY812#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "GLNOfManufacturer", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "N/A", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAP796#004", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAP796#004", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAP796#004", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "SupplierOfTheIdentifier", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "1696-0702", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO676#003", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO676#003", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO676#003", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "MAN_PROD_NUM", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "HX-CP1H16", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAW338#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAW338#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAW338#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "ManufacturerProductDesignation", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "PLC Based PAC System for IoT Applications", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU734#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU734#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU734#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "ManufacturerProductDescription", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "langString" - } - }, - "kind": "Instance" - }, - { - "value": "Hitachi Europe GmbH", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO735#003", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO735#003", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO735#003", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "NameOfSupplier", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "N/A", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAY813#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAY813#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAY813#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "GLNOfSupplier", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "316033943", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/supplieridprovider", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/supplieridprovider", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/supplieridprovider", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "SupplierIdProvider", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "1696-0702", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO736#004", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO736#004", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO736#004", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "SUP_PROD_NUM", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "HX-CP1H16", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAM551#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAM551#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAM551#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "SupplierProductDesignation", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Programmable automation controller (PAC) System for IoT Applications", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU730#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU730#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU730#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "SupplierProductDescription", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "langString" - } - }, - "kind": "Instance" - }, - { - "value": "PAC IoT Controller HX Series", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU731#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU731#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAU731#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "ManufacturerProductFamily", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "eclass", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO715#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO715#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO715#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "ClassificationSystem", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/secondarykeytyp", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/secondarykeytyp", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/secondarykeytyp", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "SecondaryKeyTyp", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "mimeType": "image/png", - "value": "/HX_200432.png", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/thumbnail", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/thumbnail", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/thumbnail", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "TypThumbnail", - "category": "PARAMETER", - "modelType": { - "name": "File" - }, - "kind": "Instance" - }, - { - "value": "https://automation.hitachi-industrial.eu/demo/asset/0000_0000_0000_0000_0000", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/assetid", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/assetid", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/assetid", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "AssetId", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "anyURI" - } - }, - "kind": "Instance" - }, - { - "value": "1696-0702", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAM556#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAM556#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAM556#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "SerialNumber", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "N/A", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAQ196#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAQ196#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAQ196#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "BatchNumber", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/secondarykeyinstance", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/secondarykeyinstance", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/secondarykeyinstance", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "SecondaryKeyInstance", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "N/A", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAR972#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAR972#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAR972#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "DateOfManufacture", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "date" - } - }, - "kind": "Instance" - }, - { - "value": "N/A", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/devicerevision", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/devicerevision", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/devicerevision", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "DeviceRevision", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "3.5.13.40", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/softwarerevision", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/softwarerevision", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/softwarerevision", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "SoftwareRevision", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "value": "N/A", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/hardwarerevision", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/hardwarerevision", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/hardwarerevision", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "HardwareRevision", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "" - } - }, - "kind": "Instance" - }, - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/contactinfo", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/contactinfo", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/contactinfo", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "ContactInfo", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "Hitachi Europe GmbH", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO735#003", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO735#003", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO735#003", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "NameOfSupplier", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Manufacturer", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/role", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/role", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/role", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "ContactInfo_Role", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "ordered": false, - "allowDuplicates": false, - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/physicaladdress", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/physicaladdress", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/physicaladdress", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "PhysicalAddress", - "category": "PARAMETER", - "modelType": { - "name": "SubmodelElementCollection" - }, - "value": [ - { - "value": "DE", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO730#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO730#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO730#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "CountryCode", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Niederkasseler Lohweg 191", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO128#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO128#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO128#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "Street", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "langString" - } - }, - "kind": "Instance" - }, - { - "value": "40547", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO129#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO129#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO129#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "Zip", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "Düsseldorf", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO132#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO132#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO132#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "CityTown", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "North Rhine-Westphalia", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO133#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO133#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO133#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "StateCounty", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - } - ], - "kind": "Instance" - }, - { - "value": "automation.industrial@hitachi-eu.com", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/email", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/email", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/email", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "Email", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "https://automation.hitachi-industrial.eu/", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO694#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO694#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO694#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "URL", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "anyURI" - } - }, - "kind": "Instance" - }, - { - "value": "+49-211-5283-0", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO136#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO136#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO136#002", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "PhoneNumber", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - }, - { - "value": "+49-211-2049-049", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/fax", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/fax", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/fax", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "Fax", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "string" - } - }, - "kind": "Instance" - } - ], - "kind": "Instance" - }, - { - "mimeType": "image/png", - "value": "/aasx/assetIdentification/Hitachi_logo.png", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/companylogo", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/companylogo", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "https://www.hsu-hh.de/aut/aas/companylogo", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "CompanyLogo", - "category": "PARAMETER", - "modelType": { - "name": "File" - }, - "kind": "Instance" - }, - { - "value": "https://automation.hitachi-industrial.eu/demo/0000_0000_0000_0000_0000", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO694#001", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO694#001", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO694#001", - "index": 0, - "idType": "IRDI" - } - }, - "constraints": [], - "idShort": "URL", - "category": "PARAMETER", - "modelType": { - "name": "Property" - }, - "valueType": { - "dataObjectType": { - "name": "anyURI" - } - }, - "kind": "Instance" - } - ] - }, - { - "semanticId": { - "keys": [ - { - "type": "Submodel", - "local": false, - "value": "https://automation.hitachi-industrial.eu/en/products/software/configuration-files/device-descriptions", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "Submodel", - "local": false, - "value": "https://automation.hitachi-industrial.eu/en/products/software/configuration-files/device-descriptions", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "Submodel", - "local": false, - "value": "https://automation.hitachi-industrial.eu/en/products/software/configuration-files/device-descriptions", - "index": 0, - "idType": "IRI" - } - }, - "qualifiers": [], - "identification": { - "idType": "IRI", - "id": "https://automation.hitachi-industrial.eu/_Resources/Static/Packages/Moon.HitachiEurope/Downloads/automation/[2]%20Software/[5]%20Configuration%20Files/[1]%20Device%20Descriptions/Device%20files.zip" - }, - "idShort": "DeviceDescriptionFiles", - "modelType": { - "name": "Submodel" - }, - "kind": "Instance", - "submodelElements": [ - { - "mimeType": "application/general", - "value": "/aasx/Document/Device_files.zip", - "semanticId": { - "keys": [ - { - "type": "ConceptDescription", - "local": false, - "value": "http://admin-shell.io/sample/conceptdescriptions/437857438753457473", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": false, - "value": "http://admin-shell.io/sample/conceptdescriptions/437857438753457473", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": false, - "value": "http://admin-shell.io/sample/conceptdescriptions/437857438753457473", - "index": 0, - "idType": "IRI" - } - }, - "constraints": [], - "idShort": "CodeSysDD", - "modelType": { - "name": "File" - }, - "kind": "Instance" - } - ] - } - ], - "conceptDescriptions": [ - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO677#002" - }, - "idShort": "ManufacturerName", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Herstellername" - }, - { - "language": "EN", - "text": "Manufacturer Name" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Manufacturer Name" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Bezeichnung für eine natürliche oder juristische Person, die für die Auslegung, Herstellung und Verpackung sowie die Etikettierung eines Produkts im Hinblick auf das 'Inverkehrbringen' im eigenen Namen verantwortlich ist" - }, - { - "language": "EN", - "text": "legally valid designation of the natural or judicial person which is directly responsible for the design, production, packaging and labeling of a product in respect to its being brought into circulation" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAY812#001" - }, - "idShort": "GLNOfManufacturer", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "GLN of manufacturer" - }, - { - "language": "DE", - "text": "GLN des Herstellers" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "GLN of manufacturer" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "international eindeutige Nummer für den Geräte- oder Produkthersteller sowie für den Standort" - }, - { - "language": "EN", - "text": "internationally unique identification number for the manufacturer of the device or the product and for the physical location" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAP796#004" - }, - "idShort": "SupplierOfTheIdentifier", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Supplier of the identifier" - }, - { - "language": "DE", - "text": "Anbieter der Identifikationsnummer für Hersteller" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Supplier of the identifier" - } - ], - "unit": "", - "dataType": "STRING_TRANSLATABLE", - "definition": [ - { - "language": "EN", - "text": "DUNS-no., supplier number, or other number as identifier of an offeror or supplier of the identification" - }, - { - "language": "DE", - "text": "DUNS-Nr., Lieferantennummer oder andere Nummer zur Identifikation eines Anbieters bzw. Lieferanten der Identifikationsnummer" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO676#003" - }, - "idShort": "MAN_PROD_NUM", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "product article number of manufacturer" - }, - { - "language": "DE", - "text": "Herstellerartikelnummer" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "MAN_PROD_NUM" - } - ], - "unit": "", - "dataType": "STRING_TRANSLATABLE", - "definition": [ - { - "language": "DE", - "text": "eindeutiger Bestellschlüssel des Herstellers" - }, - { - "language": "EN", - "text": "unique product identifier of the manufacturer" - } - ] - } - } - ], - "descriptions": [ - { - "language": "EN", - "text": "product article number of manufacturer" - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAW338#001" - }, - "idShort": "ManufacturerProductDesignation", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Manufacturer product designation" - }, - { - "language": "DE", - "text": "Herstellerproduktbezeichnung" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "ManufacturerTypName" - } - ], - "unit": "", - "dataType": "STRING_TRANSLATABLE", - "definition": [ - { - "language": "DE", - "text": "Kurze Beschreibung des Produktes (Kurztext)" - }, - { - "language": "EN", - "text": "Short description of the product (short text)" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAU734#001" - }, - "idShort": "ManufacturerProductDescription", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Manufacturer product description" - }, - { - "language": "DE", - "text": "Herstellerproduktbeschreibung" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Manufacturer product description" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Beschreibung des Produktes, seiner technischen Eigenschaften und ggf. seiner Anwendung (Langtext)" - }, - { - "language": "EN", - "text": "Description of the product, it's technical features and implementation if needed (long text)" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO735#003" - }, - "administration": { - "version": "", - "revision": "" - }, - "idShort": "NameOfSupplier", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "name of supplier" - }, - { - "language": "DE", - "text": "Lieferantenname" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "name of supplier" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Name des Lieferanten, welcher dem Kunden ein Produkt oder eine Dienstleistung bereitstellt" - }, - { - "language": "EN", - "text": "name of supplier which provides the customer with a product or a service" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAY813#001" - }, - "idShort": "GLNOfSupplier", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "GLN of supplier" - }, - { - "language": "DE", - "text": "GLN des Lieferanten" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "GLN of supplier" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "international eindeutige Nummer für den Geräte- oder Produktlieferanten sowie für den Standort" - }, - { - "language": "EN", - "text": "internationally unique identification number for the supplier of the device or the product and for the physical location" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/supplieridprovider" - }, - "idShort": "SupplierIdProvider", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "SupplierIdProvider" - }, - { - "language": "DE", - "text": "Anbieter der Identifikationsnummer" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "SupplierIdProvider" - } - ], - "unit": "", - "dataType": "STRING_TRANSLATABLE", - "definition": [ - { - "language": "DE", - "text": "DUNS-Nr., Lieferantennummer oder andere Nummer zur Identifikation eines Anbieters bzw. Lieferanten der Identifikationsnummer" - }, - { - "language": "EN", - "text": "DUNS-no., supplier number, or other number as identifier of an offeror or supplier of the identification" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO736#004" - }, - "idShort": "SUP_PROD_NUM", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "product article number of supplier" - }, - { - "language": "DE", - "text": "Lieferantenartikelnummer" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "product article number of supplier" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "eindeutiger Bestellschlüssel des Lieferanten" - }, - { - "language": "EN", - "text": "unique product order identifier of the supplier" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAM551#002" - }, - "idShort": "SupplierProductDesignation", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Supplier product designation" - }, - { - "language": "DE", - "text": "Lieferantenproduktbezeichnung" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "SupplierTypName" - } - ], - "unit": "", - "dataType": "STRING_TRANSLATABLE", - "definition": [ - { - "language": "DE", - "text": "Kurze Beschreibung des Produktes (Kurztext)" - }, - { - "language": "EN", - "text": "Short description of the product (short text)" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAU730#001" - }, - "idShort": "SupplierProductDescription", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Supplier product description" - }, - { - "language": "DE", - "text": "Lieferantenproduktbeschreibung" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Supplier product description" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Beschreibung des Produktes, seiner technischen Eigenschaften und ggf. seiner Anwendung (Langtext)" - }, - { - "language": "EN", - "text": "Description of the product, it's technical features and implementation if needed (long text)" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAU731#001" - }, - "idShort": "ManufacturerProductFamily", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Manufacturer product family" - }, - { - "language": "DE", - "text": "Herstellerproduktfamilie" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "TypClass" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "2. Ebene einer 3 stufigen herstellerspezifischen Produkthierarchie" - }, - { - "language": "EN", - "text": "2nd level of a 3 level manufacturer specific product hierarchy" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO715#002" - }, - "idShort": "ClassificationSystem", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "classification system" - }, - { - "language": "DE", - "text": "Klassifizierungssystem" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "ClassificationSystem" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Klassifizierungssystem" - }, - { - "language": "EN", - "text": "Classification System" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/secondarykeytyp" - }, - "idShort": "SecondaryKeyTyp", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "SecondaryKeyTyp" - }, - { - "language": "DE", - "text": "Typnummer des IT Systems" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "SecondaryKeyTyp" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Führende technische ID im IT System des Typs" - }, - { - "language": "EN", - "text": "SecondaryKeyTyp" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/thumbnail" - }, - "idShort": "TypThumbnail", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "TypThumbnail" - }, - { - "language": "DE", - "text": "Vorschaubild" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "TypThumbnail" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Darstellung des Produkttyps in kleinem Format" - }, - { - "language": "EN", - "text": "Small picture of the product type" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/assetid" - }, - "idShort": "AssetId", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "AssetId" - }, - { - "language": "DE", - "text": "Asset ID" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "AssetId" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Global eindeutige ID eines Asset, die machienenlesbar oder durch Menschen lesbar ist." - }, - { - "language": "EN", - "text": "Global unique ID of an asset, which can be read by both human and machine." - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAM556#002" - }, - "idShort": "SerialNumber", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Serial number" - }, - { - "language": "DE", - "text": "Seriennummer" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "InstanceId" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "eindeutige Zahlen- und Buchstabenkombination mit der das Gerät nach seiner Herstellung identifiziert ist" - }, - { - "language": "EN", - "text": "unique combination of numbers and letters used to identify the device once it has been manufactured" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAQ196#001" - }, - "idShort": "BatchNumber", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Batch number" - }, - { - "language": "DE", - "text": "Chargen-Nummer" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "ChargeId" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Eine vom Hersteller eines Stoffes vergebene Nummer zur Identifikation einer Charge" - }, - { - "language": "EN", - "text": "Number assigned by the manufacturer of a material to identify the manufacturer's batch" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/secondarykeyinstance" - }, - "idShort": "SecondaryKeyInstance", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "SecondaryKeyInstance" - }, - { - "language": "DE", - "text": "Instanznummer des IT Systems" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "SecondaryKeyInstance" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Führende technische ID im IT System der Instanz" - }, - { - "language": "EN", - "text": "SecondaryKeyInstance" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAR972#002" - }, - "idShort": "DateOfManufacture", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Date of manufacture" - }, - { - "language": "DE", - "text": "Herstellungsdatum" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Date of manufacture" - } - ], - "unit": "", - "dataType": "DATE", - "definition": [ - { - "language": "DE", - "text": "Datum, ab der der Herstellungs- und/oder Entstehungsprozess abgeschlossen ist bzw. ab dem eine Dienstleistung vollständig erbracht ist" - }, - { - "language": "EN", - "text": "Date from which the production and / or development process is completed or from which a service is provided completely" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/devicerevision" - }, - "idShort": "DeviceRevision", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "DeviceRevision" - }, - { - "language": "DE", - "text": "DeviceRevision" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DeviceRevision" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "DeviceRevision" - }, - { - "language": "EN", - "text": "DeviceRevision" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/softwarerevision" - }, - "idShort": "SoftwareRevision", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "SoftwareRevision" - }, - { - "language": "EN", - "text": "SoftwareRevision" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "SoftwareRevision" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "SoftwareRevision" - }, - { - "language": "EN", - "text": "SoftwareRevision" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/hardwarerevision" - }, - "idShort": "HardwareRevision", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "HardwareRevision" - }, - { - "language": "EN", - "text": "HardwareRevision" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "HardwareRevision" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "HardwareRevision" - }, - { - "language": "EN", - "text": "HardwareRevision" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/qrcode" - }, - "idShort": "QrCode", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "QrCode" - }, - { - "language": "EN", - "text": "QrCode" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "QrCode" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "In dem QRCode ist die URL, die die Instanz des Assets genau beschreibt, hinterlegt." - }, - { - "language": "EN", - "text": "QrCode" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/contactinfo" - }, - "idShort": "OrganisationContactInfo", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Contact Info" - }, - { - "language": "DE", - "text": "Kontakt Info" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "OrganisationContactInfo" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Sammlung für die allgemeinen Kontaktdaten" - }, - { - "language": "EN", - "text": "Collection for general contact data" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/physicaladdress" - }, - "idShort": "PhysicalAddress", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "PhysicalAddress" - }, - { - "language": "DE", - "text": "Physische Adresse" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "PhysicalAddress" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Sammlung für reale physische Adresse" - }, - { - "language": "EN", - "text": "Collection for real physical address" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO730#001" - }, - "administration": { - "version": "", - "revision": "" - }, - "idShort": "CountryCode", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Landeskennung" - }, - { - "language": "EN", - "text": "Country code" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Country code" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Vereinbartes Merkmal zur eindeutigen Identifizierung eines Landes" - }, - { - "language": "EN", - "text": "agreed upon symbol for unambiguous identification of a country" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO128#001" - }, - "idShort": "Street", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Strasse" - }, - { - "language": "EN", - "text": "Street" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Street" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Name der Strasse und Hausnummer" - }, - { - "language": "EN", - "text": "Street name and house number" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO129#002" - }, - "idShort": "Zip", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Zip" - }, - { - "language": "DE", - "text": "Postleitzahl" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "PostalCode" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "EN", - "text": "ZIP code of address" - }, - { - "language": "DE", - "text": "Postleitzahl der Anschrift" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO132#001" - }, - "idShort": "CityTown", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Ort" - }, - { - "language": "EN", - "text": "City/town" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "City/town" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "EN", - "text": "Town or city of the company" - }, - { - "language": "DE", - "text": "Ortsangabe" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO133#002" - }, - "idShort": "StateCounty", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "state/county" - }, - { - "language": "DE", - "text": "Bundesland" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "StateCounty" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Bundesland" - }, - { - "language": "EN", - "text": "state/county" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/email" - }, - "idShort": "Email", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Emailadresse" - }, - { - "language": "EN", - "text": "Email address" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Email" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Emailadresse" - }, - { - "language": "EN", - "text": "Email address" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/ContactInfo/TelephoneContact" - }, - "idShort": "TelephoneContact", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Telephone Contact" - }, - { - "language": "DE", - "text": "Telefonkontakt" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "TelephoneContact" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Sammlung für Kontaktdaten über Telefon" - }, - { - "language": "EN", - "text": "Collection for contact data via telephone" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO136#002" - }, - "idShort": "PhoneNumber", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Telefonnummer" - }, - { - "language": "EN", - "text": "telephone number" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Phone" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "vollständige Telefonnummer unter der ein Geschäftspartner erreichbar ist" - }, - { - "language": "EN", - "text": "complete telephone number to be called to reach a business partner" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/companylogo" - }, - "idShort": "CompanyLogo", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Firmenlogo" - }, - { - "language": "EN", - "text": "CompanyLogo" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "CompanyLogo" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Firmenlogo" - }, - { - "language": "EN", - "text": "CompanyLogo" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO694#001" - }, - "idShort": "URL", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Internetadresse" - }, - { - "language": "EN", - "text": "Internet address" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "URL" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "EN", - "text": "stated as link to a home page. The home page is the starting page or table of contents of a web site with offerings. It usually has the name index.htm or index.html" - }, - { - "language": "DE", - "text": "Angabe als Link, um in eine Homepage zu gelangen. die Homepage ist die Start- beziehungsweise die Inhaltsseite eines Web-Angebots. Meistens trägt sie den Namen index.htm oder index.html" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAO841#001" - }, - "idShort": "ProductCountryOfOrigin", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Produkt Ursprungsland" - }, - { - "language": "EN", - "text": "Product country of origin" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "CountryOfOrigin" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Land in dem das Produkt hergestellt wurde (Hersteller Land)" - }, - { - "language": "EN", - "text": "Country in which the product is manufactured (manufacturer country)" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAP906#001" - }, - "idShort": "YearOfConstruction", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "Year of construction" - }, - { - "language": "DE", - "text": "Baujahr" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "YearOfConstruction" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Jahreszahl als Datumsangabe für die Fertigstellung des Objektes" - }, - { - "language": "EN", - "text": "Year as completion date of object" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAD005#008" - }, - "idShort": "File", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Enthaltene Doku. Datei" - }, - { - "language": "EN", - "text": "Embedded Doc. file" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "File" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Verweis/ BLOB auf enthaltene Dokumentations-Datei." - }, - { - "language": "EN", - "text": "Reference/ BLOB to embedded documentation file." - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/productmarking" - }, - "idShort": "ProductMarking", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Produktkennzeichnung" - }, - { - "language": "EN", - "text": "Product Marking" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "ProductMarking" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Sammlungsdatei für Produktkennzeichnung" - }, - { - "language": "EN", - "text": "Collection file for product marking" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-BAF053#008" - }, - "idShort": "CEQualificationPresent", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "CE-Kennzeichnung vorhanden" - }, - { - "language": "EN", - "text": "CE- qualification present" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "CEMarkingPresent" - } - ], - "unit": "", - "dataType": "BOOLEAN", - "definition": [ - { - "language": "EN", - "text": "whether CE- qualification is present" - }, - { - "language": "DE", - "text": "Angabe, ob CE-Kennzeichnung vorhanden ist" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAR528#005" - }, - "idShort": "CRUUSLabelingPresent", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Kennzeichnung (RCM) vorhanden" - }, - { - "language": "EN", - "text": "RCM labeling present" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "CRUUSLabelingPresent" - } - ], - "unit": "", - "dataType": "BOOLEAN", - "definition": [ - { - "language": "EN", - "text": "indication whether the product is equipped with a specified RCM labeling" - }, - { - "language": "DE", - "text": "Angabe, ob das Produkt mit einer spezifizierten RCM-Kennzeichnung ausgestattet ist" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId" - }, - "idShort": "DocumentClassification_ClassId", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Dokumentkategorie" - }, - { - "language": "EN", - "text": "Document category" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Dokumentkategorie nach VDI 2770:2018/10" - }, - { - "language": "EN", - "text": "Document category after VDI 2770:2018/10" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId" - }, - "idShort": "DocumentId", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "EN", - "text": "DocumentId" - }, - { - "language": "DE", - "text": "Dokumenten-Nummer" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocumentId" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Die Dokument ID stellt eine eindeutige Identifizierung des Dokuments innerhalb einer Domäne sicher." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId" - }, - "idShort": "VDI2770_DomainId", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Domain-Nummer" - }, - { - "language": "EN", - "text": "DomainId" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DomainId" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Kennung oder Kennzeichen einer Domäne, in der eine DocumentId eineindeutig ist." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType" - }, - "idShort": "VDI2770_IdType", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Nummerntyp" - }, - { - "language": "EN", - "text": "IdType" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "IdType" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Besitzt ein Dokument mehrere Identifikationsnummern, muss mithilfe dieser Eigenschaft die führende ID angegeben werden. Der Wert „Primary“ ist für diese ID zu setzen." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/4490_8182_7091_6124" - }, - "idShort": "ValString", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Wert" - }, - { - "language": "EN", - "text": "Value String" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "ValString" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Ausdruck für den Wert der übergeordneten Collection." - }, - { - "language": "EN", - "text": "Value string for the collection value on the next superordinate level" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRDI", - "id": "0173-1#02-AAD001#001" - }, - "idShort": "DocumentationItem", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Dokumentationsgruppe" - }, - { - "language": "EN", - "text": "Documentation item" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocumentationItem" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Gruppe von Merkmalen, die Zugriff gibt auf eine Dokumentation für ein Asset, beispielhaft struktuiert nach VDI 2770." - }, - { - "language": "EN", - "text": "Collection of properties, which gives access to documentation of an asset, structured exemplary-wise according to VDI 2770." - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/6003_8182_7091_9350" - }, - "idShort": "DocumentIdDomain", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "DocumentIdDomain" - }, - { - "language": "EN", - "text": "DocumentIdDomain" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocumentIdDomain" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Angabe einer Liste von Domänen, in de-nen die DocumentIds des Dokuments eindeutig sind" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId" - }, - "idShort": "DocumentDomainId", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "DocumentDomainId" - }, - { - "language": "EN", - "text": "DocumentDomainId" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocumentDomainId" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Kennung oder Kennzeichen einer Domäne" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/3153_8182_7091_4327" - }, - "idShort": "VDI2770_Party", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Party" - }, - { - "language": "EN", - "text": "Party" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Party" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Verweis auf eine Party (siehe VDI 2770 Anhang C1.17), die für diese Domäne verantwortlich ist" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role" - }, - "idShort": "VDI2770_Role", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Rolle" - }, - { - "language": "EN", - "text": "Role" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Role" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Festlegung einer Rolle für die Organisation gemäß der folgenden Auswahlliste: Author (Autor), Customer (Kunde), Supplier (Zulieferer, Anbieter), Manufacturer (Hersteller), Responsible (Verantwortlicher)" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/9214_8182_7091_6391" - }, - "idShort": "VDI2770_Organisation", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Organisation" - }, - { - "language": "EN", - "text": "Organisation" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Organisation" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Angabe einer Organisation" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId" - }, - "idShort": "VDI2770_OrganisationId", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Organisation ID" - }, - { - "language": "EN", - "text": "Organisation ID" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "OrganisationId" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "eindeutige ID für die Organisation" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName" - }, - "idShort": "VDI2770_OrganisationName", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "OrganisationName" - }, - { - "language": "EN", - "text": "OrganisationName" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "OrganisationName" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "gebräuchliche Bezeichnung für die Organisation" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName" - }, - "idShort": "VDI2770_OrganisationOfficialName", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Offizieller Name der Organisation" - }, - { - "language": "EN", - "text": "Organisation Official Name" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "OrganisationOfficialName" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "offizieller Name der Organisation" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId" - }, - "idShort": "DocumentPartId", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Dokumenten-Teilnummer" - }, - { - "language": "EN", - "text": "DocumentPartId" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocumentPartId" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Ist das Dokument ein zusammengesetztes Dokument, können mithilfe dieser Eigenschaft eindeutige Dokumententeile IDs eingetragen werden, um das Dokument von den anderen Dokumenten zu unterscheiden." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/Description" - }, - "idShort": "VDI2770_Description", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Beschreibung" - }, - { - "language": "EN", - "text": "Description" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Description" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Beschreibung für die nächste übergeordnete Collection" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName" - }, - "idShort": "VDI2770_ClassName", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Klassenname" - }, - { - "language": "EN", - "text": "Class Name" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "ClassName" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Liste von sprachabhängigen Namen zur ClassId. Für die Klassennamen nach VDI 2770 müssen die Werte aus Tabelle 1 in Abschnitt 8.5 angewendet werden." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode" - }, - "idShort": "DocumentVersion_LanguageCode", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Sprachenschlüssel" - }, - { - "language": "EN", - "text": "LanguageCode" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "LanguageCode" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Angabe eines Sprachcodes gemäss ISO 639-1 oder -2" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem" - }, - "idShort": "VDI2770_ClassificationSystem", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Klassifizierungssystem" - }, - { - "language": "EN", - "text": "classification system" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "ClassificationSystem" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Eindeutige Kennung für ein Klassifikationssystem. Für Klassifikationen nach VDI 2770 muss „VDI2770:2018“ verwenden werden." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/2580_0282_7091_6213" - }, - "idShort": "DocumentVersion", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Dokumenten-Version" - }, - { - "language": "EN", - "text": "DocumentVersion" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocumentVersion" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Zu jedem Dokument muss eine Menge von mindestens einer Dokumentenversion existieren. Es können auch mehrere Dokumentenversionen ausgeliefert werden." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId" - }, - "idShort": "DocumentVersionId", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Dokumenten-Versionsnummer" - }, - { - "language": "EN", - "text": "DocumentVersionId" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocumentVersionId" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Identifikationsnummer zur Dokumenten-version. Verweist ein Document (siehe Anhang C1.1, Eigenschaft DocumentVersion) auf diese Dokumentenversion, muss die Kombination aus DocumentId und DocumentVersionId eindeutig sein." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/0231_0282_7091_5062" - }, - "idShort": "VDI2770_Language", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Sprache" - }, - { - "language": "EN", - "text": "Language" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Language" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Liste der im Dokument verwendeten Sprachen" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/9151_0282_7091_8032" - }, - "idShort": "DocumentVersion_Description", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Beschreibung zur DocumentVersion" - }, - { - "language": "EN", - "text": "DocumentVersion Description" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocumentVersion_Description" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Zusammenfassende Beschreibungen zur Dokumentenversion in ggf. unterschiedlichen Sprachen." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title" - }, - "idShort": "VDI2770_Title", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Titel" - }, - { - "language": "EN", - "text": "Title" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "VDI2770_Title" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "sprachabhängiger Titel des Dokuments" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary" - }, - "idShort": "VDI2770_Summary", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Zusammenfassung" - }, - { - "language": "EN", - "text": "Summary" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Summary" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "sprachabhängige, aussagekräftige Zusammenfassung des Dokumenteninhalts" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords" - }, - "idShort": "VDI2770_Keywords", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Schlagwörter" - }, - { - "language": "EN", - "text": "Keywords" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Keywords" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "sprachabhängige, durch Komma getrennte Liste von Schlagwörtern" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/0282_0282_7091_7878" - }, - "idShort": "VDI2770_LifeCycleStatus", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Lebenszyklus Status" - }, - { - "language": "EN", - "text": "LifeCycleStatus" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "LifeCycleStatus" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Liste von Statusdefinitionen mit Bezug zum Dokumentenlebenszyklus inklusive der Angabe der Beteiligten und einem zugehörigen Zeitstempel" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue" - }, - "idShort": "VDI2770_StatusValue", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Statuswert" - }, - { - "language": "EN", - "text": "StatusValue" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "StatusValue" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Jede Dokumentenversion stellt einen Zeitpunkt im Dokumentenlebenszyklus dar. Dieser Statuswert bezieht sich auf die Meilensteine im Dokumentenlebenszyklus. Für die Anwendung dieser Richtlinie sind die beiden folgenden Status zu verwenden. InReview (in Prüfung), Released (freigegeben)" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate" - }, - "idShort": "VDI2770_SetDate", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Erstellungsdatum" - }, - { - "language": "EN", - "text": "Set Date" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "SetDate" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Datum und Uhrzeit, an dem der Status festgelegt wurde Es muss das Datumsformat „YYYY-MM-dd“ verwendet werden (Y = Jahr, M = Monat, d = Tag, siehe DIN ISO 8601)." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose" - }, - "idShort": "VDI2770_Purpose", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Zweck" - }, - { - "language": "EN", - "text": "Purpose" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Purpose" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Hier kann ein Zweck zum Meilenstein angegeben werden, z. B. „zur Weiterleitung an den Kunden“." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure" - }, - "idShort": "VDI2770_BasedOnProcedure", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Prozedur" - }, - { - "language": "EN", - "text": "Procedure" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "BasedOnProcedure" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "textueller Bezug auf ein Verfahren, das der Festlegung dieses Status zugrunde liegt" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments" - }, - "idShort": "VDI2770_Comments", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Kommentar" - }, - { - "language": "EN", - "text": "Comments" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Comments" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "textuelle Bemerkungen und Anmerkungen zum Status" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/1204_0282_7091_7896" - }, - "idShort": "DocumentRelationship", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Dokumenten-Beziehung" - }, - { - "language": "EN", - "text": "Document Relationship" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocumentRelationship" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Liste von Beziehungen zu anderen Dokumenten. Es ist möglich, auf einen Dokument, ein Dokument in einer spezifischen Dokumentenversion oder auch ein Teildokument zu verweisen." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/5044_0282_7091_6924" - }, - "idShort": "DocumentRelationship_Type", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Typ der Dokumenten-Beziehung" - }, - { - "language": "EN", - "text": "DocumentRelationship_Type" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocumentRelationship_Type" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Typisierung der Beziehung zwischen den beiden DocumentVersions. Folgende Beziehungsarten können verwendet werden: Affecting (hat Auswirkungen auf), ReferesTo (bezieht sich auf), BasedOn (basiert auf)" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/3094_0282_7091_2090" - }, - "idShort": "StoredDocumentRepresentation", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "StoredDocumentRepresentation" - }, - { - "language": "EN", - "text": "StoredDocumentRepresentation" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "StoredDocumentRepresentation" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Liste von digitalen Repräsentationen zur DocumentVersion" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/2305_0282_7091_2077" - }, - "idShort": "VDI2770_DigitalFile", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Digitaler-File" - }, - { - "language": "EN", - "text": "DigitalFile" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DigitalFile" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Datei, die die DocumentVersion (siehe VDI 2770:2018 Anhang C1.5) repräsentiert Neben der obligatorischen PDF/A-Datei können weitere Dateien angegeben werden." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId" - }, - "idShort": "VDI2770_FileId", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "ID der Datei" - }, - { - "language": "EN", - "text": "File ID" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "FileId" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "eindeutige ID für die Datei" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName" - }, - "idShort": "VDI2770_FileName", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Dateiname" - }, - { - "language": "EN", - "text": "File name" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "FileName" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Name der Datei inkl. einer Dateiendung (sofern vorhanden) Es ist nicht notwendig, einen Pfad für die Datei anzugeben." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat" - }, - "idShort": "VDI2770_FileFormat", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Datei Format" - }, - { - "language": "EN", - "text": "File format" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "FileFormat" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Angabe eines Media Typs gemäß der Liste der IANA" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType" - }, - "idShort": "DocumentType", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Dokumententyp" - }, - { - "language": "EN", - "text": "Document Type" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocumentType" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Festlegung des Typs des Dokuments im Sinne der DIN EN 82045-1: a) Single (Einzeldokument) b) Aggregate (Sammeldokument) c) DocumentSet (Dokumentensatz) d) CompoundDoc (Mischdokument)" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/2570_2282_7091_0055" - }, - "idShort": "VDI2770_ReferencedObject", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "ReferencedObject" - }, - { - "language": "EN", - "text": "ReferencedObject" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "ReferencedObject" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Liste von IDs für ein Objekt, auf das sich das Dokument bezieht" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType" - }, - "idShort": "VDI2770_ReferencedObject_Type", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Typ" - }, - { - "language": "EN", - "text": "Type" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Type" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Für Type des Objekts muss immer Product angegeben werden." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType" - }, - "idShort": "VDI2770_ReferencedObject_RefType", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "RefType" - }, - { - "language": "EN", - "text": "RefType" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "RefType" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Angabe einer Typisierung zur Kennung des technischen Objekts. Folgende Werte sind möglich, ProductId (Produktnummer), SerialId (Seriennummer)" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId" - }, - "idShort": "VDI2770_ReferencedObject_ObjectId", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "ObjectId" - }, - { - "language": "EN", - "text": "ObjectId" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "ObjectId" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Angabe der Identifikationsnummer zum Objekt" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/role" - }, - "idShort": "ContactInfo_Role", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Rolle" - }, - { - "language": "EN", - "text": "Role" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Role" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Angabe zur Spezifizierung der Rolle, die die Organisation aus ContactInfo einnimmt" - }, - { - "language": "EN", - "text": "Information to specify the role which the organisation of ContactInfo plays" - } - ] - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "https://www.hsu-hh.de/aut/aas/fax" - }, - "idShort": "Fax", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "Fax" - }, - { - "language": "EN", - "text": "Fax" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "Fax" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Faxnummer" - }, - { - "language": "EN", - "text": "Fax number" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO136#002", - "index": 0, - "idType": "IRDI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO136#002", - "index": 0, - "idType": "IRDI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "0173-1#02-AAO136#002", - "index": 0, - "idType": "IRDI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/1420_0113_7091_0891" - }, - "idShort": "DocGroup_01", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "01 Identifikation" - }, - { - "language": "EN", - "text": "01 Identification" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocGroup_01" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Gruppe „Identifikation“ werden alle Dokumente zugeordnet, die der Identifikation des Objekts dienen, zu dem die Herstellerdokumentation gehört. Sie enthält insbesondere Informationen, die die elektronische Datenverarbeitung unterstützen und die es dem Hersteller und dem Nutzer erlauben, das Objekt in ihren jeweiligen elektronischen Datenverarbeitungssystemen zu identifizieren." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/4323_0113_7091_2591" - }, - "idShort": "DocGroup_02", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "02 Technische Beschaffenheit" - }, - { - "language": "EN", - "text": "02 Technical characteristics" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocGroup_02" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Die Gruppe „Technische Beschaffenheit“ beinhaltet alle Dokumente, die die technischen Anforderungen, deren Erfüllung und die Bescheinigung der Eigenschaften eines Objekts betreffen." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/5053_0113_7091_5741" - }, - "idShort": "DocGroup_03", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "03 Tätigkeitsbezogene Dokumente" - }, - { - "language": "EN", - "text": "03 Work-related documents" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocGroup_03" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Die Gruppe „Tätigkeitsbezogene Dokumente“ beinhaltet alle Dokumente, die Anforderungen, Hinweise und Hilfestellungen für Tätigkeiten an und mit dem Objekt nach der Übergabe an den Nutzer betreffen." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/5473_0113_7091_1588" - }, - "idShort": "DocGroup_04", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "04 Vertragsunterlagen" - }, - { - "language": "EN", - "text": "04 Contract documents" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocGroup_04" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Gruppe „Vertragsunterlagen“ werden alle Dokumente zugeordnet, die im Zusammenhang mit der kaufmännischen Abwicklung eines Vertrages stehen, aber nicht selbst Gegenstand des Vertrags sind und lediglich zur Erfüllung des Vertrags dienen." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/9593_0113_7091_2401" - }, - "idShort": "DocCategory_01-01", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "01-01 Identifikation" - }, - { - "language": "EN", - "text": "01-01 Identification" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_01-01" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Identifikation“ werden alle Dokumente zugeordnet, die der Identifikation des Objekts dienen, zu dem die Herstellerdokumentation gehört. Sie enthält insbesondere Informationen, die die elektronische Datenverarbeitung unterstützen und die es dem Hersteller und dem Nutzer erlauben, das Objekt in ihren jeweiligen elektronischen Datenverarbeitungssystemen zu identifizieren." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/5314_0113_7091_8640" - }, - "idShort": "DocCategory_02-01", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "02-01 Techn. Spezifikation" - }, - { - "language": "EN", - "text": "02-01 Technical specification" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_02-01" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Technische Spezifikation“ werden alle Dokumente zugeordnet, die die Anforderungen an ein Objekt sowie dessen Eigenschaften beschreiben. Dazu gehören die Auslegungsdaten, Berechnungen (Verfahrenstechnik, Festigkeit usw.) sowie alle relevanten Eigenschaften des übergebenen Objekts." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/5515_0113_7091_8581" - }, - "idShort": "DocCategory_02-02", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "02-02 Zeichnungen, Pläne" - }, - { - "language": "EN", - "text": "02-02 Drawings and diagrams" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_02-02" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Zeichnungen, Pläne“ werden alle Dokumente zugeordnet, die Zeichnungscharakter haben, das heißt eine grafische Darstellung zur Übermittlung von Information nutzen." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/0335_0113_7091_0312" - }, - "idShort": "DocCategory_02-03", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "02-03 Bauteile" - }, - { - "language": "EN", - "text": "02-03 Components" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_02-03" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Bauteile“ werden alle Dokumente zugeordnet, die eine strukturierte Auflistung der Teile eines Objekts beinhalten." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/2155_0113_7091_3955" - }, - "idShort": "DocCategory_02-04", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "02-04 Zeugnisse, Zertifikate, Bescheinigungen" - }, - { - "language": "EN", - "text": "02-04 Reports, Certificates, declarations" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_02-04" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Zeugnisse, Zertifikate, Bescheinigungen“ werden alle Dokumente zugeordnet, die Urkundencharakter haben." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/3565_0113_7091_2704" - }, - "idShort": "DocCategory_03-01", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "03-01 Montage, Inbetriebnahme, Demontage" - }, - { - "language": "EN", - "text": "03-01 Assembly, commissioning, disassembly" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_03-01" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Montage, Demontage“ werden alle Dokumente zugeordnet, die Tätigkeiten und Maßnahmen beschreiben, die erforderlich sind, um ein Objekt: zu transportieren oder zu lagern, als Ganzes in ein übergeordnetes Objekt einzubauen, auszubauen oder an dieses anzuschließen, so weit vorzubereiten, dass es zur Inbetriebnahme bereitsteht, nach Abschluss der Nutzungsphase zu demontieren und zu entsorgen" - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/4290_1113_7091_7266" - }, - "idShort": "DocCategory_03-02", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "03-02 Bedienung" - }, - { - "language": "EN", - "text": "03-02 Operation" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_03-02" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Bedienung“ werden Dokumente zur bestimmungsgemäßen Verwendung und sicheren Bedienung eines Objekts zugeordnet." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/2211_1113_7091_3911" - }, - "idShort": "DocCategory_03-03", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "03-03 Allgemeine Sicherheit" - }, - { - "language": "EN", - "text": "03-03 Safety in general" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_03-03" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Allgemeine Sicherheit“ werden Dokumente zugeordnet, die Sicherheitshinweise auf mögliche Gefährdungen bei der Verwendung des Objekts geben." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/7521_1113_7091_4471" - }, - "idShort": "DocCategory_03-04", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "03-04 Inspektion, Wartung, Prüfung" - }, - { - "language": "EN", - "text": "03-04 Inspection, maintenance, test" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_03-04" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Inspektion, Wartung, Prüfung“ werden alle Dokumente zugeordnet, die vom Hersteller vorgeschlagene wiederkehrende Maßnahmen zur Feststellung oder zum Erhalt des funktionsfähigen Zustands beschreiben." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/5161_1113_7091_0458" - }, - "idShort": "DocCategory_03-05", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "03-05 Instandsetzung" - }, - { - "language": "EN", - "text": "03-05 Repair" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_03-05" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Instandsetzung“ werden alle Dokumente zugeordnet, die Maßnahmen zur Wiederherstellung der Funktion eines Objekts betreffen." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/2181_1113_7091_5948" - }, - "idShort": "DocCategory_03-06", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "03-06 Ersatzteile" - }, - { - "language": "EN", - "text": "03-06 Spare parts" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_03-06" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Ersatzteile“ werden Dokumente zugeordnet, die Informationen zu Ersatzteilen und Hilfs- und Betriebsstoffen enthalten." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - }, - { - "identification": { - "idType": "IRI", - "id": "www.company.com/ids/cd/5391_1113_7091_8996" - }, - "idShort": "DocCategory_04-01", - "modelType": { - "name": "ConceptDescription" - }, - "embeddedDataSpecifications": [ - { - "dataSpecification": { - "keys": [ - { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "GlobalReference", - "local": false, - "value": "http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0", - "index": 0, - "idType": "IRI" - } - }, - "dataSpecificationContent": { - "preferredName": [ - { - "language": "DE", - "text": "04-01 Vertragsunterlagen" - }, - { - "language": "EN", - "text": "04-01 Contract documents" - } - ], - "shortName": [ - { - "language": "EN?", - "text": "DocCategory_04-01" - } - ], - "unit": "", - "dataType": "STRING", - "definition": [ - { - "language": "DE", - "text": "Der Kategorie „Vertragsunterlagen“ werden alle Dokumente zugeordnet, die im Zusammenhang mit der kaufmännischen Abwicklung eines Vertrages stehen, aber nicht selbst Gegenstand des Vertrags sind und lediglich zur Erfüllung des Vertrags dienen." - }, - { - "language": "EN", - "text": "TBD" - } - ] - } - } - ], - "isCaseOf": [ - { - "keys": [ - { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - ], - "First": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - }, - "Last": { - "type": "ConceptDescription", - "local": true, - "value": "http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId", - "index": 0, - "idType": "IRI" - } - } - ] - } - ] -} \ No newline at end of file diff --git a/src/AasxToolkit.Tests/TestResources/AasxToolkit.Tests/sample.xml b/src/AasxToolkit.Tests/TestResources/AasxToolkit.Tests/sample.xml deleted file mode 100644 index 1bdf3c9b..00000000 --- a/src/AasxToolkit.Tests/TestResources/AasxToolkit.Tests/sample.xml +++ /dev/null @@ -1,7185 +0,0 @@ - - - - - 000000001 - https://admin-shell.hitachi-industrial.eu/aas/1/1/000000001 - - - https://admin-shell.hitachi-industrial.eu/asset/000000001 - - - - - - www.company.com/ids/sm/4343_5072_7091_3242 - - - - - www.company.com/ids/sm/2543_5072_7091_2660 - - - - - www.company.com/ids/sm/6053_5072_7091_5102 - - - - - www.company.com/ids/sm/6563_5072_7091_4267 - - - - - https://automation.hitachi-industrial.eu/_Resources/Static/Packages/Moon.HitachiEurope/Downloads/automation/[2]%20Software/[5]%20Configuration%20Files/[1]%20Device%20Descriptions/Device%20files.zip - - - - - - - - - Hitachi_000000001 - - Hitachi HX PLC - Hitachi HX SPS - - https://admin-shell.hitachi-industrial.eu/asset/000000001 - Instance - - - - - Nameplate - www.company.com/ids/sm/4343_5072_7091_3242 - Instance - - - https://www.hsu-hh.de/aut/aas/nameplate - - - - - - - ManufacturerName - PARAMETER - Instance - - - 0173-1#02-AAO677#002 - - - - string - Hitachi Industrial Equipment Systems Co.,Ltd. - - - - - ManufacturerProductDesignation - PARAMETER - Instance - - - 0173-1#02-AAW338#001 - - - - string - HX-CP1H16 - - - - - PhysicalAddress - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/physicaladdress - - - - - - - CountryCode - PARAMETER - Instance - - - 0173-1#02-AAO730#001 - - - - string - JP - - - - - Street - PARAMETER - Instance - - - 0173-1#02-AAO128#001 - - - - string - AKS Bldg, 3 Kanda Neribei-cho - - - - - Zip - PARAMETER - Instance - - - 0173-1#02-AAO129#002 - - - - string - 101-0022 - - - - - CityTown - PARAMETER - Instance - - - 0173-1#02-AAO132#001 - - - - string - Chiyoda-ku, Tokyo - - - - - StateCounty - PARAMETER - Instance - - - 0173-1#02-AAO133#002 - - - - string - Tokyo - - - - false - false - - - - - ManufacturerProductFamily - PARAMETER - Instance - - - 0173-1#02-AAU731#001 - - - - - PAC IoT Controller HX Series - - - - - SerialNumber - PARAMETER - Instance - - - 0173-1#02-AAM556#002 - - - - string - HX-CP1H16 - - - - - BatchNumber - PARAMETER - Instance - - - 0173-1#02-AAQ196#001 - - - - string - N/A - - - - - ProductCountryOfOrigin - PARAMETER - Instance - - - 0173-1#02-AAO841#001 - - - - string - JP - - - - - YearOfConstruction - PARAMETER - Instance - - - 0173-1#02-AAP906#001 - - - - integer - 2018 - - - - - Marking_CE - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/productmarking - - - - - - - CEQualificationPresent - PARAMETER - Instance - - - 0173-1#02-BAF053#008 - - - - boolean - 1 - - - 0173-1#07-CAA016#001 - - - - - - - File - PARAMETER - Instance - - - 0173-1#02-AAD005#008 - - - - image/png - /aasx/Nameplate/marking_ce.png - - - - false - false - - - - - Marking_CRUUS - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/productmarking - - - - - - - CRUUSLabelingPresent - PARAMETER - Instance - - - 0173-1#02-AAR528#005 - - - - boolean - 1 - - - 0173-1#07-CAA016#001 - - - - - - - File - PARAMETER - Instance - - - 0173-1#02-AAD005#008 - - - - image/png - /aasx/Nameplate/marking_cruus.jpg - - - - false - false - - - - - - Document - www.company.com/ids/sm/2543_5072_7091_2660 - Instance - - - https://www.hsu-hh.de/aut/aas/document - - - - - - - DeclarationCEMarking - PARAMETER - Instance - - - 0173-1#02-AAD001#001 - - - - - - - DocumentType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType - - - - string - Single - - - - - VDI2770_DomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId - - - - - - - - - - VDI2770_IdType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType - - - - string - Primary - - - - - DocumentId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId - - - - - - - - - - DocumentDomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId - - - - - - - - - - VDI2770_Role - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role - - - - string - Responsible - - - - - VDI2770_OrganisationId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId - - - - - - - - - - VDI2770_OrganisationName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName - - - - string - Hitachi - - - - - VDI2770_OrganisationOfficialName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName - - - - string - Hitachi Industrial Equipment Systems Co.,Ltd. - - - - - VDI2770_Description - PARAMETER - - Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden. - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description - - - - - - - - - - DocumentPartId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId - - - - - - - - - - DocumentClassification_ClassId - PARAMETER - - eindeutige ID der Klasse in einer Klassifikation - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - string - 02-04 - - - - - VDI2770_ClassName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName - - - - string - Zeugnisse, Zertifikate, Bescheinigungen - - - - - ClassificationSystem - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem - - - - string - VDI2770:2018 - - - - - DocumentVersionId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId - - - - - - - - - - DocumentVersion_LanguageCode - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode - - - - string - en - - - - - VDI2770_Title - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title - - - - string - HX CE declaration - - - - - VDI2770_Summary - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary - - - - - - - - - - VDI2770_Keywords - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords - - - - - - - - - - VDI2770_StatusValue - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue - - - - string - Released - - - - - VDI2770_SetDate - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate - - - - - - - - - - VDI2770_Purpose - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose - - - - - - - - - - VDI2770_BasedOnProcedure - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure - - - - - - - - - - VDI2770_Comments - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments - - - - - - - - - - VDI2770_ReferencedObject_Type - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType - - - - string - Product - - - - - VDI2770_ReferencedObject_RefType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType - - - - - - - - - - VDI2770_ReferencedObject_ObjectId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId - - - - - - - - - - VDI2770_FileId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId - - - - - - - - - - VDI2770_FileName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName - - - - string - CE_DLR_EH-150_REV17.pdf - - - - - VDI2770_FileFormat - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat - - - - string - application/pdf - - - - - File - PARAMETER - Instance - - - 0173-1#02-AAD005#008 - - - - application/pdf - /aasx/Document/CE_DLR_EH-150_REV17.pdf - - - - false - false - - - - - DeclarationRoHS - PARAMETER - Instance - - - 0173-1#02-AAD001#001 - - - - - - - DocumentType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType - - - - string - Single - - - - - VDI2770_DomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId - - - - - - - - - - VDI2770_IdType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType - - - - string - Primary - - - - - DocumentId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId - - - - - - - - - - DocumentDomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId - - - - - - - - - - VDI2770_Role - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role - - - - string - Responsible - - - - - VDI2770_OrganisationId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId - - - - - - - - - - VDI2770_OrganisationName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName - - - - string - Hitachi - - - - - VDI2770_OrganisationOfficialName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName - - - - string - Hitachi Industrial Equipment Systems Co.,Ltd. - - - - - VDI2770_Description - PARAMETER - - Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden. - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description - - - - - - - - - - DocumentPartId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId - - - - - - - - - - DocumentClassification_ClassId - PARAMETER - - eindeutige ID der Klasse in einer Klassifikation - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - string - 02-04 - - - - - VDI2770_ClassName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName - - - - string - Zeugnisse, Zertifikate, Bescheinigungen - - - - - ClassificationSystem - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem - - - - string - VDI2770:2018 - - - - - DocumentVersionId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId - - - - - - - - - - DocumentVersion_LanguageCode - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode - - - - string - en - - - - - VDI2770_Title - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title - - - - string - RoHS 2011/65/EU Declaration of conformity - - - - - VDI2770_Summary - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary - - - - - - - - - - VDI2770_Keywords - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords - - - - - - - - - - VDI2770_StatusValue - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue - - - - string - Released - - - - - VDI2770_SetDate - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate - - - - - - - - - - VDI2770_Purpose - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose - - - - - - - - - - VDI2770_BasedOnProcedure - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure - - - - - - - - - - VDI2770_Comments - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments - - - - - - - - - - VDI2770_ReferencedObject_Type - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType - - - - string - Product - - - - - VDI2770_ReferencedObject_RefType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType - - - - - - - - - - VDI2770_ReferencedObject_ObjectId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId - - - - - - - - - - VDI2770_FileId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId - - - - - - - - - - VDI2770_FileName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName - - - - string - CE_DLR_EH-150_REV17.pdf - - - - - VDI2770_FileFormat - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat - - - - string - application/pdf - - - - - File - PARAMETER - Instance - - - 0173-1#02-AAD005#008 - - - - application/pdf - /aasx/Document/CE_DLR_EH-150_REV17.pdf - - - - false - false - - - - - EN_Manual_Hitachi_HX_Hardware - PARAMETER - Instance - - - 0173-1#02-AAD001#001 - - - - - - - DocumentType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType - - - - string - Single - - - - - VDI2770_DomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId - - - - - - - - - - VDI2770_IdType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType - - - - string - Primary - - - - - DocumentId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId - - - - - NJI-637(X) - - - - - DocumentDomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId - - - - - - - - - - VDI2770_Role - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role - - - - string - Responsible - - - - - VDI2770_OrganisationId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId - - - - - - - - - - VDI2770_OrganisationName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName - - - - string - Hitachi - - - - - VDI2770_OrganisationOfficialName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName - - - - string - Hitachi Industrial Equipment Systems Co.,Ltd. - - - - - VDI2770_Description - PARAMETER - - Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden. - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description - - - - - - - - - - DocumentPartId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId - - - - - - - - - - DocumentClassification_ClassId - PARAMETER - - eindeutige ID der Klasse in einer Klassifikation - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - string - 03-02 - - - - - VDI2770_ClassName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName - - - - string - Bedienung - - - - - ClassificationSystem - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem - - - - string - VDI2770:2018 - - - - - DocumentVersionId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId - - - - - 2016.11 - - - - - DocumentVersion_LanguageCode - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode - - - - string - en - - - - - VDI2770_Title - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title - - - - string - HX Series Application Manual (Hardware) - - - - - VDI2770_Summary - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary - - - - - This application manual informs about the hardware of HX series which is a high-performance PAC system suitable for IoT. The contents relevant to programming has been separated as an application manual (software) and a command reference manual. - - - - - VDI2770_Keywords - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords - - - - - - - - - - VDI2770_StatusValue - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue - - - - string - Released - - - - - VDI2770_SetDate - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate - - - - - - - - - - VDI2770_Purpose - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose - - - - - - - - - - VDI2770_BasedOnProcedure - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure - - - - - - - - - - VDI2770_Comments - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments - - - - - - - - - - VDI2770_ReferencedObject_Type - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType - - - - string - Product - - - - - VDI2770_ReferencedObject_RefType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType - - - - - - - - - - VDI2770_ReferencedObject_ObjectId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId - - - - - - - - - - VDI2770_FileId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId - - - - - - - - - - VDI2770_FileName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName - - - - string - NJI-637A(X)_HX-CPU_Hardware_Rev_01.pdf - - - - - VDI2770_FileFormat - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat - - - - string - application/pdf - - - - - File - PARAMETER - Instance - - - 0173-1#02-AAD005#008 - - - - application/pdf - /aasx/Document/NJI-637A(X)_HX-CPU_Hardware_Rev_01.pdf - - - - false - false - - - - - EN_Manual_Hitachi_HX_Software - PARAMETER - Instance - - - 0173-1#02-AAD001#001 - - - - - - - DocumentType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType - - - - string - Single - - - - - VDI2770_DomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId - - - - - - - - - - VDI2770_IdType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType - - - - string - Primary - - - - - DocumentId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId - - - - - NJI-638(X) - - - - - DocumentDomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId - - - - - - - - - - VDI2770_Role - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role - - - - string - Responsible - - - - - VDI2770_OrganisationId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId - - - - - - - - - - VDI2770_OrganisationName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName - - - - string - Hitachi - - - - - VDI2770_OrganisationOfficialName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName - - - - string - Hitachi Industrial Equipment Systems Co.,Ltd. - - - - - VDI2770_Description - PARAMETER - - Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden. - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description - - - - - - - - - - DocumentPartId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId - - - - - - - - - - DocumentClassification_ClassId - PARAMETER - - eindeutige ID der Klasse in einer Klassifikation - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - string - 03-02 - - - - - VDI2770_ClassName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName - - - - string - Bedienung - - - - - ClassificationSystem - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem - - - - string - VDI2770:2018 - - - - - DocumentVersionId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId - - - - - 2016.12 - - - - - DocumentVersion_LanguageCode - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode - - - - string - en - - - - - VDI2770_Title - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title - - - - string - HX Series Application Manual (Software) - - - - - VDI2770_Summary - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary - - - - - This application manual informs about the software of HX series which is a high-performance PAC system suitable for IoT. The contents relevant to installation has been separated as an hardware manual. - - - - - VDI2770_Keywords - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords - - - - - - - - - - VDI2770_StatusValue - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue - - - - string - Released - - - - - VDI2770_SetDate - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate - - - - - - - - - - VDI2770_Purpose - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose - - - - - - - - - - VDI2770_BasedOnProcedure - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure - - - - - - - - - - VDI2770_Comments - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments - - - - - - - - - - VDI2770_ReferencedObject_Type - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType - - - - string - Product - - - - - VDI2770_ReferencedObject_RefType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType - - - - - - - - - - VDI2770_ReferencedObject_ObjectId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId - - - - - - - - - - VDI2770_FileId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId - - - - - - - - - - VDI2770_FileName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName - - - - string - NJI-638X_HX-CPU_Software.pdf - - - - - VDI2770_FileFormat - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat - - - - string - application/pdf - - - - - File - PARAMETER - Instance - - - 0173-1#02-AAD005#008 - - - - application/pdf - /aasx/Document/NJI-638X_HX-CPU_Software.pdf - - - - false - false - - - - - DE_CODESYS_V3_Installation_und_Erste_Schritte - PARAMETER - Instance - - - 0173-1#02-AAD001#001 - - - - - - - DocumentType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType - - - - string - Single - - - - - VDI2770_DomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId - - - - - - - - - - VDI2770_IdType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType - - - - string - Primary - - - - - DocumentId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId - - - - - 0000000 - - - - - DocumentDomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId - - - - - - - - - - VDI2770_Role - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role - - - - string - Responsible - - - - - VDI2770_OrganisationId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId - - - - - - - - - - VDI2770_OrganisationName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName - - - - string - 3S-Smart Software Solutions GmbH - - - - - VDI2770_OrganisationOfficialName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName - - - - string - 3S-Smart Software Solutions GmbH - - - - - VDI2770_Description - PARAMETER - - Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden. - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description - - - - - - - - - - DocumentPartId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId - - - - - - - - - - DocumentClassification_ClassId - PARAMETER - - eindeutige ID der Klasse in einer Klassifikation - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - string - 03-02 - - - - - VDI2770_ClassName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName - - - - string - Bedienung - - - - - ClassificationSystem - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem - - - - string - VDI2770:2018 - - - - - DocumentVersionId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId - - - - - 20XX - - - - - DocumentVersion_LanguageCode - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode - - - - string - de - - - - - VDI2770_Title - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title - - - - string - CODESYS V3, Installation und Erste Schritte - Anwenderdokumentation - - - - - VDI2770_Summary - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary - - - - - - - - - - VDI2770_Keywords - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords - - - - - - - - - - VDI2770_StatusValue - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue - - - - string - Released - - - - - VDI2770_SetDate - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate - - - - - - - - - - VDI2770_Purpose - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose - - - - - - - - - - VDI2770_BasedOnProcedure - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure - - - - - - - - - - VDI2770_Comments - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments - - - - - - - - - - VDI2770_ReferencedObject_Type - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType - - - - string - Product - - - - - VDI2770_ReferencedObject_RefType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType - - - - - - - - - - VDI2770_ReferencedObject_ObjectId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId - - - - - - - - - - VDI2770_FileId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId - - - - - - - - - - VDI2770_FileName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName - - - - string - CODESYS_Installation_und_Erste_Schritte_20V11.pdf - - - - - VDI2770_FileFormat - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat - - - - string - application/pdf - - - - - File - PARAMETER - Instance - - - 0173-1#02-AAD005#008 - - - - application/pdf - /aasx/Document/CODESYS_Installation_und_Erste_Schritte_V11.pdf - - - - false - false - - - - - EN_Datasheet_IoT_PAC_Controller_HX_Series - PARAMETER - Instance - - - 0173-1#02-AAD001#001 - - - - - - - DocumentType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType - - - - string - Single - - - - - VDI2770_DomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId - - - - - - - - - - VDI2770_IdType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType - - - - string - Primary - - - - - DocumentId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId - - - - - - - - - - DocumentDomainId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId - - - - - - - - - - VDI2770_Role - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role - - - - string - Responsible - - - - - VDI2770_OrganisationId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId - - - - - - - - - - VDI2770_OrganisationName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName - - - - string - Hitachi - - - - - VDI2770_OrganisationOfficialName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName - - - - string - Hitachi Europe GmbH - - - - - VDI2770_Description - PARAMETER - - Eine Beschreibung zur Dokumententeile ID. Da eine Sprachangabe nicht möglich ist, sollte die Sprache für dieses Metadatum vor der Lieferung abgestimmt werden. - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description - - - - - The new Hitachi HX series PAC Controller combines powerful features and efficiency to meet the demands of a global supply chain in manufacturing industries. In addition, HX series is already prepared for the next generation requirements in automation thanks to its IoT capabilities. Manufacturing & service innovations can be achieved with integrated functions and seamless connectivity from field machine level to cloud services. - - - - - DocumentPartId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId - - - - - - - - - - DocumentClassification_ClassId - PARAMETER - - eindeutige ID der Klasse in einer Klassifikation - - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - string - 03-02 - - - - - VDI2770_ClassName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName - - - - string - Bedienung - - - - - ClassificationSystem - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem - - - - string - VDI2770:2018 - - - - - DocumentVersionId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId - - - - - 1.10 - - - - - DocumentVersion_LanguageCode - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode - - - - string - en - - - - - VDI2770_Title - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title - - - - string - Datasheet: IoT PAC Controller HX Series - Next generation industrial controller. - - - - - VDI2770_Summary - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary - - - - - - - - - - VDI2770_Keywords - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords - - - - - - - - - - VDI2770_StatusValue - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue - - - - string - Released - - - - - VDI2770_SetDate - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate - - - - - 2017.03 - - - - - VDI2770_Purpose - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose - - - - - - - - - - VDI2770_BasedOnProcedure - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure - - - - - - - - - - VDI2770_Comments - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments - - - - - - - - - - VDI2770_ReferencedObject_Type - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType - - - - string - Product - - - - - VDI2770_ReferencedObject_RefType - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType - - - - - - - - - - VDI2770_ReferencedObject_ObjectId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId - - - - - - - - - - VDI2770_FileId - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId - - - - - - - - - - VDI2770_FileName - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName - - - - string - HX%20Datasheet.pdf - - - - - VDI2770_FileFormat - PARAMETER - Instance - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat - - - - string - application/pdf - - - - - File - PARAMETER - Instance - - - 0173-1#02-AAD005#008 - - - - application/pdf - /aasx/Document/HX_Datasheet.pdf - - - - false - false - - - - - - Service - www.company.com/ids/sm/6053_5072_7091_5102 - Instance - - - https://www.hsu-hh.de/aut/aas/service - - - - - - - ContactInfo - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/contactinfo - - - - - - - NameOfSupplier - PARAMETER - Instance - - - 0173-1#02-AAO735#003 - - - - string - Hitachi Europe GmbH - - - - - ContactInfo_Role - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/role - - - - string - Sales organization - - - - - PhysicalAddress - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/physicaladdress - - - - - - - CountryCode - PARAMETER - Instance - - - 0173-1#02-AAO730#001 - - - - string - DE - - - - - Street - PARAMETER - Instance - - - 0173-1#02-AAO128#001 - - - - string - Niederkasseler Lohweg 191 - - - - - Zip - PARAMETER - Instance - - - 0173-1#02-AAO129#002 - - - - string - 40547 - - - - - CityTown - PARAMETER - Instance - - - 0173-1#02-AAO132#001 - - - - string - Düsseldorf - - - - - StateCounty - PARAMETER - Instance - - - 0173-1#02-AAO133#002 - - - - string - North Rhine-Westphalia - - - - false - false - - - - - Email - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/email - - - - string - automation.industrial@hitachi-eu.com - - - - - URL - PARAMETER - Instance - - - 0173-1#02-AAO694#001 - - - - string - https://automation.hitachi-industrial.eu/ - - - - - PhoneNumber - PARAMETER - Instance - - - 0173-1#02-AAO136#002 - - - - string - +49-211-5283-0 - - - - - Fax - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/fax - - - - string - +49-211-2049-049 - - - - false - false - - - - - - Identification - www.company.com/ids/sm/6563_5072_7091_4267 - Instance - - - https://www.hsu-hh.de/aut/aas/identification - - - - - - - ManufacturerName - PARAMETER - Instance - - - 0173-1#02-AAO677#002 - - - - string - Hitachi Industrial Equipment Systems Co.,Ltd. - - - - - GLNOfManufacturer - PARAMETER - Instance - - - 0173-1#02-AAY812#001 - - - - string - N/A - - - - - SupplierOfTheIdentifier - Instance - - - 0173-1#02-AAP796#004 - - - - - N/A - - - - - MAN_PROD_NUM - Instance - - - 0173-1#02-AAO676#003 - - - - - 1696-0702 - - - - - ManufacturerProductDesignation - PARAMETER - Instance - - - 0173-1#02-AAW338#001 - - - - string - HX-CP1H16 - - - - - ManufacturerProductDescription - PARAMETER - Instance - - - 0173-1#02-AAU734#001 - - - - langString - PLC Based PAC System for IoT Applications - - - - - NameOfSupplier - PARAMETER - Instance - - - 0173-1#02-AAO735#003 - - - - string - Hitachi Europe GmbH - - - - - GLNOfSupplier - PARAMETER - Instance - - - 0173-1#02-AAY813#001 - - - - string - N/A - - - - - SupplierIdProvider - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/supplieridprovider - - - - - 316033943 - - - - - SUP_PROD_NUM - PARAMETER - Instance - - - 0173-1#02-AAO736#004 - - - - - 1696-0702 - - - - - SupplierProductDesignation - Instance - - - 0173-1#02-AAM551#002 - - - - string - HX-CP1H16 - - - - - SupplierProductDescription - PARAMETER - Instance - - - 0173-1#02-AAU730#001 - - - - langString - Programmable automation controller (PAC) System for IoT Applications - - - - - ManufacturerProductFamily - PARAMETER - Instance - - - 0173-1#02-AAU731#001 - - - - string - PAC IoT Controller HX Series - - - - - ClassificationSystem - PARAMETER - Instance - - - 0173-1#02-AAO715#002 - - - - string - eclass - - - - - SecondaryKeyTyp - Instance - - - https://www.hsu-hh.de/aut/aas/secondarykeytyp - - - - - - - - - - TypThumbnail - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/thumbnail - - - - image/png - /HX_200432.png - - - - - AssetId - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/assetid - - - - anyURI - https://automation.hitachi-industrial.eu/demo/asset/0000_0000_0000_0000_0000 - - - - - SerialNumber - PARAMETER - Instance - - - 0173-1#02-AAM556#002 - - - - string - 1696-0702 - - - - - BatchNumber - PARAMETER - Instance - - - 0173-1#02-AAQ196#001 - - - - - N/A - - - - - SecondaryKeyInstance - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/secondarykeyinstance - - - - - - - - - - DateOfManufacture - PARAMETER - Instance - - - 0173-1#02-AAR972#002 - - - - date - N/A - - - - - DeviceRevision - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/devicerevision - - - - - N/A - - - - - SoftwareRevision - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/softwarerevision - - - - - 3.5.13.40 - - - - - HardwareRevision - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/hardwarerevision - - - - - N/A - - - - - ContactInfo - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/contactinfo - - - - - - - NameOfSupplier - PARAMETER - Instance - - - 0173-1#02-AAO735#003 - - - - string - Hitachi Europe GmbH - - - - - ContactInfo_Role - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/role - - - - string - Manufacturer - - - - - PhysicalAddress - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/physicaladdress - - - - - - - CountryCode - PARAMETER - Instance - - - 0173-1#02-AAO730#001 - - - - string - DE - - - - - Street - PARAMETER - Instance - - - 0173-1#02-AAO128#001 - - - - langString - Niederkasseler Lohweg 191 - - - - - Zip - PARAMETER - Instance - - - 0173-1#02-AAO129#002 - - - - string - 40547 - - - - - CityTown - PARAMETER - Instance - - - 0173-1#02-AAO132#001 - - - - string - Düsseldorf - - - - - StateCounty - PARAMETER - Instance - - - 0173-1#02-AAO133#002 - - - - string - North Rhine-Westphalia - - - - false - false - - - - - Email - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/email - - - - string - automation.industrial@hitachi-eu.com - - - - - URL - PARAMETER - Instance - - - 0173-1#02-AAO694#001 - - - - anyURI - https://automation.hitachi-industrial.eu/ - - - - - PhoneNumber - PARAMETER - Instance - - - 0173-1#02-AAO136#002 - - - - string - +49-211-5283-0 - - - - - Fax - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/fax - - - - string - +49-211-2049-049 - - - - false - false - - - - - CompanyLogo - PARAMETER - Instance - - - https://www.hsu-hh.de/aut/aas/companylogo - - - - image/png - /aasx/assetIdentification/Hitachi_logo.png - - - - - URL - PARAMETER - Instance - - - 0173-1#02-AAO694#001 - - - - anyURI - https://automation.hitachi-industrial.eu/demo/0000_0000_0000_0000_0000 - - - - - - DeviceDescriptionFiles - https://automation.hitachi-industrial.eu/_Resources/Static/Packages/Moon.HitachiEurope/Downloads/automation/[2]%20Software/[5]%20Configuration%20Files/[1]%20Device%20Descriptions/Device%20files.zip - Instance - - - https://automation.hitachi-industrial.eu/en/products/software/configuration-files/device-descriptions - - - - - - - CodeSysDD - Instance - - - http://admin-shell.io/sample/conceptdescriptions/437857438753457473 - - - - application/general - /aasx/Document/Device_files.zip - - - - - - - - ManufacturerName - 0173-1#02-AAO677#002 - - - - - Herstellername - Manufacturer Name - - - Manufacturer Name - - - STRING - - Bezeichnung für eine natürliche oder juristische Person, die für die Auslegung, Herstellung und Verpackung sowie die Etikettierung eines Produkts im Hinblick auf das 'Inverkehrbringen' im eigenen Namen verantwortlich ist - legally valid designation of the natural or judicial person which is directly responsible for the design, production, packaging and labeling of a product in respect to its being brought into circulation - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - GLNOfManufacturer - 0173-1#02-AAY812#001 - - - - - GLN of manufacturer - GLN des Herstellers - - - GLN of manufacturer - - - STRING - - international eindeutige Nummer für den Geräte- oder Produkthersteller sowie für den Standort - internationally unique identification number for the manufacturer of the device or the product and for the physical location - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - SupplierOfTheIdentifier - 0173-1#02-AAP796#004 - - - - - Supplier of the identifier - Anbieter der Identifikationsnummer für Hersteller - - - Supplier of the identifier - - - STRING_TRANSLATABLE - - DUNS-no., supplier number, or other number as identifier of an offeror or supplier of the identification - DUNS-Nr., Lieferantennummer oder andere Nummer zur Identifikation eines Anbieters bzw. Lieferanten der Identifikationsnummer - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - MAN_PROD_NUM - - product article number of manufacturer - - 0173-1#02-AAO676#003 - - - - - product article number of manufacturer - Herstellerartikelnummer - - - MAN_PROD_NUM - - - STRING_TRANSLATABLE - - eindeutiger Bestellschlüssel des Herstellers - unique product identifier of the manufacturer - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - ManufacturerProductDesignation - 0173-1#02-AAW338#001 - - - - - Manufacturer product designation - Herstellerproduktbezeichnung - - - ManufacturerTypName - - - STRING_TRANSLATABLE - - Kurze Beschreibung des Produktes (Kurztext) - Short description of the product (short text) - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - ManufacturerProductDescription - 0173-1#02-AAU734#001 - - - - - Manufacturer product description - Herstellerproduktbeschreibung - - - Manufacturer product description - - - STRING - - Beschreibung des Produktes, seiner technischen Eigenschaften und ggf. seiner Anwendung (Langtext) - Description of the product, it's technical features and implementation if needed (long text) - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - NameOfSupplier - 0173-1#02-AAO735#003 - - - - - - - - - name of supplier - Lieferantenname - - - name of supplier - - - STRING - - Name des Lieferanten, welcher dem Kunden ein Produkt oder eine Dienstleistung bereitstellt - name of supplier which provides the customer with a product or a service - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - GLNOfSupplier - 0173-1#02-AAY813#001 - - - - - GLN of supplier - GLN des Lieferanten - - - GLN of supplier - - - STRING - - international eindeutige Nummer für den Geräte- oder Produktlieferanten sowie für den Standort - internationally unique identification number for the supplier of the device or the product and for the physical location - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - SupplierIdProvider - https://www.hsu-hh.de/aut/aas/supplieridprovider - - - - - SupplierIdProvider - Anbieter der Identifikationsnummer - - - SupplierIdProvider - - - STRING_TRANSLATABLE - - DUNS-Nr., Lieferantennummer oder andere Nummer zur Identifikation eines Anbieters bzw. Lieferanten der Identifikationsnummer - DUNS-no., supplier number, or other number as identifier of an offeror or supplier of the identification - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - SUP_PROD_NUM - 0173-1#02-AAO736#004 - - - - - product article number of supplier - Lieferantenartikelnummer - - - product article number of supplier - - - STRING - - eindeutiger Bestellschlüssel des Lieferanten - unique product order identifier of the supplier - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - SupplierProductDesignation - 0173-1#02-AAM551#002 - - - - - Supplier product designation - Lieferantenproduktbezeichnung - - - SupplierTypName - - - STRING_TRANSLATABLE - - Kurze Beschreibung des Produktes (Kurztext) - Short description of the product (short text) - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - SupplierProductDescription - 0173-1#02-AAU730#001 - - - - - Supplier product description - Lieferantenproduktbeschreibung - - - Supplier product description - - - STRING - - Beschreibung des Produktes, seiner technischen Eigenschaften und ggf. seiner Anwendung (Langtext) - Description of the product, it's technical features and implementation if needed (long text) - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - ManufacturerProductFamily - 0173-1#02-AAU731#001 - - - - - Manufacturer product family - Herstellerproduktfamilie - - - TypClass - - - STRING - - 2. Ebene einer 3 stufigen herstellerspezifischen Produkthierarchie - 2nd level of a 3 level manufacturer specific product hierarchy - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - ClassificationSystem - 0173-1#02-AAO715#002 - - - - - classification system - Klassifizierungssystem - - - ClassificationSystem - - - STRING - - Klassifizierungssystem - Classification System - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - SecondaryKeyTyp - https://www.hsu-hh.de/aut/aas/secondarykeytyp - - - - - SecondaryKeyTyp - Typnummer des IT Systems - - - SecondaryKeyTyp - - - STRING - - Führende technische ID im IT System des Typs - SecondaryKeyTyp - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - TypThumbnail - https://www.hsu-hh.de/aut/aas/thumbnail - - - - - TypThumbnail - Vorschaubild - - - TypThumbnail - - - STRING - - Darstellung des Produkttyps in kleinem Format - Small picture of the product type - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - AssetId - https://www.hsu-hh.de/aut/aas/assetid - - - - - AssetId - Asset ID - - - AssetId - - - STRING - - Global eindeutige ID eines Asset, die machienenlesbar oder durch Menschen lesbar ist. - Global unique ID of an asset, which can be read by both human and machine. - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - SerialNumber - 0173-1#02-AAM556#002 - - - - - Serial number - Seriennummer - - - InstanceId - - - STRING - - eindeutige Zahlen- und Buchstabenkombination mit der das Gerät nach seiner Herstellung identifiziert ist - unique combination of numbers and letters used to identify the device once it has been manufactured - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - BatchNumber - 0173-1#02-AAQ196#001 - - - - - Batch number - Chargen-Nummer - - - ChargeId - - - STRING - - Eine vom Hersteller eines Stoffes vergebene Nummer zur Identifikation einer Charge - Number assigned by the manufacturer of a material to identify the manufacturer's batch - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - SecondaryKeyInstance - https://www.hsu-hh.de/aut/aas/secondarykeyinstance - - - - - SecondaryKeyInstance - Instanznummer des IT Systems - - - SecondaryKeyInstance - - - STRING - - Führende technische ID im IT System der Instanz - SecondaryKeyInstance - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DateOfManufacture - 0173-1#02-AAR972#002 - - - - - Date of manufacture - Herstellungsdatum - - - Date of manufacture - - - DATE - - Datum, ab der der Herstellungs- und/oder Entstehungsprozess abgeschlossen ist bzw. ab dem eine Dienstleistung vollständig erbracht ist - Date from which the production and / or development process is completed or from which a service is provided completely - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DeviceRevision - https://www.hsu-hh.de/aut/aas/devicerevision - - - - - DeviceRevision - DeviceRevision - - - DeviceRevision - - - STRING - - DeviceRevision - DeviceRevision - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - SoftwareRevision - https://www.hsu-hh.de/aut/aas/softwarerevision - - - - - SoftwareRevision - SoftwareRevision - - - SoftwareRevision - - - STRING - - SoftwareRevision - SoftwareRevision - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - HardwareRevision - https://www.hsu-hh.de/aut/aas/hardwarerevision - - - - - HardwareRevision - HardwareRevision - - - HardwareRevision - - - STRING - - HardwareRevision - HardwareRevision - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - QrCode - https://www.hsu-hh.de/aut/aas/qrcode - - - - - QrCode - QrCode - - - QrCode - - - STRING - - In dem QRCode ist die URL, die die Instanz des Assets genau beschreibt, hinterlegt. - QrCode - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - OrganisationContactInfo - https://www.hsu-hh.de/aut/aas/contactinfo - - - - - Contact Info - Kontakt Info - - - OrganisationContactInfo - - - STRING - - Sammlung für die allgemeinen Kontaktdaten - Collection for general contact data - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - PhysicalAddress - https://www.hsu-hh.de/aut/aas/physicaladdress - - - - - PhysicalAddress - Physische Adresse - - - PhysicalAddress - - - STRING - - Sammlung für reale physische Adresse - Collection for real physical address - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - CountryCode - 0173-1#02-AAO730#001 - - - - - - - - - Landeskennung - Country code - - - Country code - - - STRING - - Vereinbartes Merkmal zur eindeutigen Identifizierung eines Landes - agreed upon symbol for unambiguous identification of a country - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - Street - 0173-1#02-AAO128#001 - - - - - Strasse - Street - - - Street - - - STRING - - Name der Strasse und Hausnummer - Street name and house number - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - Zip - 0173-1#02-AAO129#002 - - - - - Zip - Postleitzahl - - - PostalCode - - - STRING - - ZIP code of address - Postleitzahl der Anschrift - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - CityTown - 0173-1#02-AAO132#001 - - - - - Ort - City/town - - - City/town - - - STRING - - Town or city of the company - Ortsangabe - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - StateCounty - 0173-1#02-AAO133#002 - - - - - state/county - Bundesland - - - StateCounty - - - STRING - - Bundesland - state/county - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - Email - https://www.hsu-hh.de/aut/aas/email - - - - - Emailadresse - Email address - - - Email - - - STRING - - Emailadresse - Email address - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - TelephoneContact - https://www.hsu-hh.de/aut/aas/ContactInfo/TelephoneContact - - - - - Telephone Contact - Telefonkontakt - - - TelephoneContact - - - STRING - - Sammlung für Kontaktdaten über Telefon - Collection for contact data via telephone - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - PhoneNumber - 0173-1#02-AAO136#002 - - - - - Telefonnummer - telephone number - - - Phone - - - STRING - - vollständige Telefonnummer unter der ein Geschäftspartner erreichbar ist - complete telephone number to be called to reach a business partner - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - CompanyLogo - https://www.hsu-hh.de/aut/aas/companylogo - - - - - Firmenlogo - CompanyLogo - - - CompanyLogo - - - STRING - - Firmenlogo - CompanyLogo - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - URL - 0173-1#02-AAO694#001 - - - - - Internetadresse - Internet address - - - URL - - - STRING - - stated as link to a home page. The home page is the starting page or table of contents of a web site with offerings. It usually has the name index.htm or index.html - Angabe als Link, um in eine Homepage zu gelangen. die Homepage ist die Start- beziehungsweise die Inhaltsseite eines Web-Angebots. Meistens trägt sie den Namen index.htm oder index.html - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - ProductCountryOfOrigin - 0173-1#02-AAO841#001 - - - - - Produkt Ursprungsland - Product country of origin - - - CountryOfOrigin - - - STRING - - Land in dem das Produkt hergestellt wurde (Hersteller Land) - Country in which the product is manufactured (manufacturer country) - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - YearOfConstruction - 0173-1#02-AAP906#001 - - - - - Year of construction - Baujahr - - - YearOfConstruction - - - STRING - - Jahreszahl als Datumsangabe für die Fertigstellung des Objektes - Year as completion date of object - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - File - 0173-1#02-AAD005#008 - - - - - Enthaltene Doku. Datei - Embedded Doc. file - - - File - - - STRING - - Verweis/ BLOB auf enthaltene Dokumentations-Datei. - Reference/ BLOB to embedded documentation file. - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - ProductMarking - https://www.hsu-hh.de/aut/aas/productmarking - - - - - Produktkennzeichnung - Product Marking - - - ProductMarking - - - STRING - - Sammlungsdatei für Produktkennzeichnung - Collection file for product marking - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - CEQualificationPresent - 0173-1#02-BAF053#008 - - - - - CE-Kennzeichnung vorhanden - CE- qualification present - - - CEMarkingPresent - - - BOOLEAN - - whether CE- qualification is present - Angabe, ob CE-Kennzeichnung vorhanden ist - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - CRUUSLabelingPresent - 0173-1#02-AAR528#005 - - - - - Kennzeichnung (RCM) vorhanden - RCM labeling present - - - CRUUSLabelingPresent - - - BOOLEAN - - indication whether the product is equipped with a specified RCM labeling - Angabe, ob das Produkt mit einer spezifizierten RCM-Kennzeichnung ausgestattet ist - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentClassification_ClassId - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - Dokumentkategorie - Document category - - - DocCategory - - - STRING - - Dokumentkategorie nach VDI 2770:2018/10 - Document category after VDI 2770:2018/10 - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentId - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId - - - - - DocumentId - Dokumenten-Nummer - - - DocumentId - - - STRING - - Die Dokument ID stellt eine eindeutige Identifizierung des Dokuments innerhalb einer Domäne sicher. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_DomainId - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/DomainId - - - - - Domain-Nummer - DomainId - - - DomainId - - - STRING - - Kennung oder Kennzeichen einer Domäne, in der eine DocumentId eineindeutig ist. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_IdType - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentId/IdType - - - - - Nummerntyp - IdType - - - IdType - - - STRING - - Besitzt ein Dokument mehrere Identifikationsnummern, muss mithilfe dieser Eigenschaft die führende ID angegeben werden. Der Wert „Primary“ ist für diese ID zu setzen. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - ValString - www.company.com/ids/cd/4490_8182_7091_6124 - - - - - Wert - Value String - - - ValString - - - STRING - - Ausdruck für den Wert der übergeordneten Collection. - Value string for the collection value on the next superordinate level - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentationItem - 0173-1#02-AAD001#001 - - - - - Dokumentationsgruppe - Documentation item - - - DocumentationItem - - - STRING - - Gruppe von Merkmalen, die Zugriff gibt auf eine Dokumentation für ein Asset, beispielhaft struktuiert nach VDI 2770. - Collection of properties, which gives access to documentation of an asset, structured exemplary-wise according to VDI 2770. - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentIdDomain - www.company.com/ids/cd/6003_8182_7091_9350 - - - - - DocumentIdDomain - DocumentIdDomain - - - DocumentIdDomain - - - STRING - - Angabe einer Liste von Domänen, in de-nen die DocumentIds des Dokuments eindeutig sind - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentDomainId - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentIdDomain/DocumentDomainId - - - - - DocumentDomainId - DocumentDomainId - - - DocumentDomainId - - - STRING - - Kennung oder Kennzeichen einer Domäne - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_Party - www.company.com/ids/cd/3153_8182_7091_4327 - - - - - Party - Party - - - Party - - - STRING - - Verweis auf eine Party (siehe VDI 2770 Anhang C1.17), die für diese Domäne verantwortlich ist - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_Role - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Role - - - - - Rolle - Role - - - Role - - - STRING - - Festlegung einer Rolle für die Organisation gemäß der folgenden Auswahlliste: Author (Autor), Customer (Kunde), Supplier (Zulieferer, Anbieter), Manufacturer (Hersteller), Responsible (Verantwortlicher) - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_Organisation - www.company.com/ids/cd/9214_8182_7091_6391 - - - - - Organisation - Organisation - - - Organisation - - - STRING - - Angabe einer Organisation - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_OrganisationId - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationId - - - - - Organisation ID - Organisation ID - - - OrganisationId - - - STRING - - eindeutige ID für die Organisation - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_OrganisationName - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationName - - - - - OrganisationName - OrganisationName - - - OrganisationName - - - STRING - - gebräuchliche Bezeichnung für die Organisation - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_OrganisationOfficialName - http://www.vdi.de/2770/AssetDocumentation/Document/Party/Organisation/OrganisationOfficialName - - - - - Offizieller Name der Organisation - Organisation Official Name - - - OrganisationOfficialName - - - STRING - - offizieller Name der Organisation - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentPartId - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentPartId - - - - - Dokumenten-Teilnummer - DocumentPartId - - - DocumentPartId - - - STRING - - Ist das Dokument ein zusammengesetztes Dokument, können mithilfe dieser Eigenschaft eindeutige Dokumententeile IDs eingetragen werden, um das Dokument von den anderen Dokumenten zu unterscheiden. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_Description - http://www.vdi.de/2770/AssetDocumentation/Document/Description - - - - - Beschreibung - Description - - - Description - - - STRING - - Beschreibung für die nächste übergeordnete Collection - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_ClassName - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassName - - - - - Klassenname - Class Name - - - ClassName - - - STRING - - Liste von sprachabhängigen Namen zur ClassId. Für die Klassennamen nach VDI 2770 müssen die Werte aus Tabelle 1 in Abschnitt 8.5 angewendet werden. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentVersion_LanguageCode - http://www.vdi.de/2770/AssetDocumentation/Document/LanguageCode - - - - - Sprachenschlüssel - LanguageCode - - - LanguageCode - - - STRING - - Angabe eines Sprachcodes gemäss ISO 639-1 oder -2 - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_ClassificationSystem - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassificationSystem - - - - - Klassifizierungssystem - classification system - - - ClassificationSystem - - - STRING - - Eindeutige Kennung für ein Klassifikationssystem. Für Klassifikationen nach VDI 2770 muss „VDI2770:2018“ verwenden werden. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentVersion - www.company.com/ids/cd/2580_0282_7091_6213 - - - - - Dokumenten-Version - DocumentVersion - - - DocumentVersion - - - STRING - - Zu jedem Dokument muss eine Menge von mindestens einer Dokumentenversion existieren. Es können auch mehrere Dokumentenversionen ausgeliefert werden. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentVersionId - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersionId - - - - - Dokumenten-Versionsnummer - DocumentVersionId - - - DocumentVersionId - - - STRING - - Identifikationsnummer zur Dokumenten-version. Verweist ein Document (siehe Anhang C1.1, Eigenschaft DocumentVersion) auf diese Dokumentenversion, muss die Kombination aus DocumentId und DocumentVersionId eindeutig sein. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_Language - www.company.com/ids/cd/0231_0282_7091_5062 - - - - - Sprache - Language - - - Language - - - STRING - - Liste der im Dokument verwendeten Sprachen - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentVersion_Description - www.company.com/ids/cd/9151_0282_7091_8032 - - - - - Beschreibung zur DocumentVersion - DocumentVersion Description - - - DocumentVersion_Description - - - STRING - - Zusammenfassende Beschreibungen zur Dokumentenversion in ggf. unterschiedlichen Sprachen. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_Title - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Title - - - - - Titel - Title - - - VDI2770_Title - - - STRING - - sprachabhängiger Titel des Dokuments - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_Summary - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Summary - - - - - Zusammenfassung - Summary - - - Summary - - - STRING - - sprachabhängige, aussagekräftige Zusammenfassung des Dokumenteninhalts - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_Keywords - http://www.vdi.de/2770/AssetDocumentation/Document/Description/Keywords - - - - - Schlagwörter - Keywords - - - Keywords - - - STRING - - sprachabhängige, durch Komma getrennte Liste von Schlagwörtern - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_LifeCycleStatus - www.company.com/ids/cd/0282_0282_7091_7878 - - - - - Lebenszyklus Status - LifeCycleStatus - - - LifeCycleStatus - - - STRING - - Liste von Statusdefinitionen mit Bezug zum Dokumentenlebenszyklus inklusive der Angabe der Beteiligten und einem zugehörigen Zeitstempel - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_StatusValue - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/StatusValue - - - - - Statuswert - StatusValue - - - StatusValue - - - STRING - - Jede Dokumentenversion stellt einen Zeitpunkt im Dokumentenlebenszyklus dar. Dieser Statuswert bezieht sich auf die Meilensteine im Dokumentenlebenszyklus. Für die Anwendung dieser Richtlinie sind die beiden folgenden Status zu verwenden. InReview (in Prüfung), Released (freigegeben) - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_SetDate - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/SetDate - - - - - Erstellungsdatum - Set Date - - - SetDate - - - STRING - - Datum und Uhrzeit, an dem der Status festgelegt wurde Es muss das Datumsformat „YYYY-MM-dd“ verwendet werden (Y = Jahr, M = Monat, d = Tag, siehe DIN ISO 8601). - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_Purpose - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Purpose - - - - - Zweck - Purpose - - - Purpose - - - STRING - - Hier kann ein Zweck zum Meilenstein angegeben werden, z. B. „zur Weiterleitung an den Kunden“. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_BasedOnProcedure - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/BasedOnProcedure - - - - - Prozedur - Procedure - - - BasedOnProcedure - - - STRING - - textueller Bezug auf ein Verfahren, das der Festlegung dieses Status zugrunde liegt - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_Comments - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/LifeCycleStatus/Comments - - - - - Kommentar - Comments - - - Comments - - - STRING - - textuelle Bemerkungen und Anmerkungen zum Status - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentRelationship - www.company.com/ids/cd/1204_0282_7091_7896 - - - - - Dokumenten-Beziehung - Document Relationship - - - DocumentRelationship - - - STRING - - Liste von Beziehungen zu anderen Dokumenten. Es ist möglich, auf einen Dokument, ein Dokument in einer spezifischen Dokumentenversion oder auch ein Teildokument zu verweisen. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentRelationship_Type - www.company.com/ids/cd/5044_0282_7091_6924 - - - - - Typ der Dokumenten-Beziehung - DocumentRelationship_Type - - - DocumentRelationship_Type - - - STRING - - Typisierung der Beziehung zwischen den beiden DocumentVersions. Folgende Beziehungsarten können verwendet werden: Affecting (hat Auswirkungen auf), ReferesTo (bezieht sich auf), BasedOn (basiert auf) - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - StoredDocumentRepresentation - www.company.com/ids/cd/3094_0282_7091_2090 - - - - - StoredDocumentRepresentation - StoredDocumentRepresentation - - - StoredDocumentRepresentation - - - STRING - - Liste von digitalen Repräsentationen zur DocumentVersion - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_DigitalFile - www.company.com/ids/cd/2305_0282_7091_2077 - - - - - Digitaler-File - DigitalFile - - - DigitalFile - - - STRING - - Datei, die die DocumentVersion (siehe VDI 2770:2018 Anhang C1.5) repräsentiert Neben der obligatorischen PDF/A-Datei können weitere Dateien angegeben werden. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_FileId - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileId - - - - - ID der Datei - File ID - - - FileId - - - STRING - - eindeutige ID für die Datei - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_FileName - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileName - - - - - Dateiname - File name - - - FileName - - - STRING - - Name der Datei inkl. einer Dateiendung (sofern vorhanden) Es ist nicht notwendig, einen Pfad für die Datei anzugeben. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_FileFormat - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentVersion/StoredDocumentRepresentation/DigitalFile/FileFormat - - - - - Datei Format - File format - - - FileFormat - - - STRING - - Angabe eines Media Typs gemäß der Liste der IANA - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - DocumentType - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentType - - - - - Dokumententyp - Document Type - - - DocumentType - - - STRING - - Festlegung des Typs des Dokuments im Sinne der DIN EN 82045-1: a) Single (Einzeldokument) b) Aggregate (Sammeldokument) c) DocumentSet (Dokumentensatz) d) CompoundDoc (Mischdokument) - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_ReferencedObject - www.company.com/ids/cd/2570_2282_7091_0055 - - - - - ReferencedObject - ReferencedObject - - - ReferencedObject - - - STRING - - Liste von IDs für ein Objekt, auf das sich das Dokument bezieht - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_ReferencedObject_Type - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ReferencedObjectType - - - - - Typ - Type - - - Type - - - STRING - - Für Type des Objekts muss immer Product angegeben werden. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_ReferencedObject_RefType - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/RefType - - - - - RefType - RefType - - - RefType - - - STRING - - Angabe einer Typisierung zur Kennung des technischen Objekts. Folgende Werte sind möglich, ProductId (Produktnummer), SerialId (Seriennummer) - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - VDI2770_ReferencedObject_ObjectId - http://www.vdi.de/2770/AssetDocumentation/Document/ReferencedObject/ObjectId - - - - - ObjectId - ObjectId - - - ObjectId - - - STRING - - Angabe der Identifikationsnummer zum Objekt - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - ContactInfo_Role - https://www.hsu-hh.de/aut/aas/role - - - - - Rolle - Role - - - Role - - - STRING - - Angabe zur Spezifizierung der Rolle, die die Organisation aus ContactInfo einnimmt - Information to specify the role which the organisation of ContactInfo plays - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - Fax - https://www.hsu-hh.de/aut/aas/fax - - - - - Fax - Fax - - - Fax - - - STRING - - Faxnummer - Fax number - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - 0173-1#02-AAO136#002 - - - - - DocGroup_01 - www.company.com/ids/cd/1420_0113_7091_0891 - - - - - 01 Identifikation - 01 Identification - - - DocGroup_01 - - - STRING - - Der Gruppe „Identifikation“ werden alle Dokumente zugeordnet, die der Identifikation des Objekts dienen, zu dem die Herstellerdokumentation gehört. Sie enthält insbesondere Informationen, die die elektronische Datenverarbeitung unterstützen und die es dem Hersteller und dem Nutzer erlauben, das Objekt in ihren jeweiligen elektronischen Datenverarbeitungssystemen zu identifizieren. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocGroup_02 - www.company.com/ids/cd/4323_0113_7091_2591 - - - - - 02 Technische Beschaffenheit - 02 Technical characteristics - - - DocGroup_02 - - - STRING - - Die Gruppe „Technische Beschaffenheit“ beinhaltet alle Dokumente, die die technischen Anforderungen, deren Erfüllung und die Bescheinigung der Eigenschaften eines Objekts betreffen. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocGroup_03 - www.company.com/ids/cd/5053_0113_7091_5741 - - - - - 03 Tätigkeitsbezogene Dokumente - 03 Work-related documents - - - DocGroup_03 - - - STRING - - Die Gruppe „Tätigkeitsbezogene Dokumente“ beinhaltet alle Dokumente, die Anforderungen, Hinweise und Hilfestellungen für Tätigkeiten an und mit dem Objekt nach der Übergabe an den Nutzer betreffen. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocGroup_04 - www.company.com/ids/cd/5473_0113_7091_1588 - - - - - 04 Vertragsunterlagen - 04 Contract documents - - - DocGroup_04 - - - STRING - - Der Gruppe „Vertragsunterlagen“ werden alle Dokumente zugeordnet, die im Zusammenhang mit der kaufmännischen Abwicklung eines Vertrages stehen, aber nicht selbst Gegenstand des Vertrags sind und lediglich zur Erfüllung des Vertrags dienen. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_01-01 - www.company.com/ids/cd/9593_0113_7091_2401 - - - - - 01-01 Identifikation - 01-01 Identification - - - DocCategory_01-01 - - - STRING - - Der Kategorie „Identifikation“ werden alle Dokumente zugeordnet, die der Identifikation des Objekts dienen, zu dem die Herstellerdokumentation gehört. Sie enthält insbesondere Informationen, die die elektronische Datenverarbeitung unterstützen und die es dem Hersteller und dem Nutzer erlauben, das Objekt in ihren jeweiligen elektronischen Datenverarbeitungssystemen zu identifizieren. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_02-01 - www.company.com/ids/cd/5314_0113_7091_8640 - - - - - 02-01 Techn. Spezifikation - 02-01 Technical specification - - - DocCategory_02-01 - - - STRING - - Der Kategorie „Technische Spezifikation“ werden alle Dokumente zugeordnet, die die Anforderungen an ein Objekt sowie dessen Eigenschaften beschreiben. Dazu gehören die Auslegungsdaten, Berechnungen (Verfahrenstechnik, Festigkeit usw.) sowie alle relevanten Eigenschaften des übergebenen Objekts. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_02-02 - www.company.com/ids/cd/5515_0113_7091_8581 - - - - - 02-02 Zeichnungen, Pläne - 02-02 Drawings and diagrams - - - DocCategory_02-02 - - - STRING - - Der Kategorie „Zeichnungen, Pläne“ werden alle Dokumente zugeordnet, die Zeichnungscharakter haben, das heißt eine grafische Darstellung zur Übermittlung von Information nutzen. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_02-03 - www.company.com/ids/cd/0335_0113_7091_0312 - - - - - 02-03 Bauteile - 02-03 Components - - - DocCategory_02-03 - - - STRING - - Der Kategorie „Bauteile“ werden alle Dokumente zugeordnet, die eine strukturierte Auflistung der Teile eines Objekts beinhalten. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_02-04 - www.company.com/ids/cd/2155_0113_7091_3955 - - - - - 02-04 Zeugnisse, Zertifikate, Bescheinigungen - 02-04 Reports, Certificates, declarations - - - DocCategory_02-04 - - - STRING - - Der Kategorie „Zeugnisse, Zertifikate, Bescheinigungen“ werden alle Dokumente zugeordnet, die Urkundencharakter haben. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_03-01 - www.company.com/ids/cd/3565_0113_7091_2704 - - - - - 03-01 Montage, Inbetriebnahme, Demontage - 03-01 Assembly, commissioning, disassembly - - - DocCategory_03-01 - - - STRING - - Der Kategorie „Montage, Demontage“ werden alle Dokumente zugeordnet, die Tätigkeiten und Maßnahmen beschreiben, die erforderlich sind, um ein Objekt: zu transportieren oder zu lagern, als Ganzes in ein übergeordnetes Objekt einzubauen, auszubauen oder an dieses anzuschließen, so weit vorzubereiten, dass es zur Inbetriebnahme bereitsteht, nach Abschluss der Nutzungsphase zu demontieren und zu entsorgen - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_03-02 - www.company.com/ids/cd/4290_1113_7091_7266 - - - - - 03-02 Bedienung - 03-02 Operation - - - DocCategory_03-02 - - - STRING - - Der Kategorie „Bedienung“ werden Dokumente zur bestimmungsgemäßen Verwendung und sicheren Bedienung eines Objekts zugeordnet. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_03-03 - www.company.com/ids/cd/2211_1113_7091_3911 - - - - - 03-03 Allgemeine Sicherheit - 03-03 Safety in general - - - DocCategory_03-03 - - - STRING - - Der Kategorie „Allgemeine Sicherheit“ werden Dokumente zugeordnet, die Sicherheitshinweise auf mögliche Gefährdungen bei der Verwendung des Objekts geben. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_03-04 - www.company.com/ids/cd/7521_1113_7091_4471 - - - - - 03-04 Inspektion, Wartung, Prüfung - 03-04 Inspection, maintenance, test - - - DocCategory_03-04 - - - STRING - - Der Kategorie „Inspektion, Wartung, Prüfung“ werden alle Dokumente zugeordnet, die vom Hersteller vorgeschlagene wiederkehrende Maßnahmen zur Feststellung oder zum Erhalt des funktionsfähigen Zustands beschreiben. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_03-05 - www.company.com/ids/cd/5161_1113_7091_0458 - - - - - 03-05 Instandsetzung - 03-05 Repair - - - DocCategory_03-05 - - - STRING - - Der Kategorie „Instandsetzung“ werden alle Dokumente zugeordnet, die Maßnahmen zur Wiederherstellung der Funktion eines Objekts betreffen. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_03-06 - www.company.com/ids/cd/2181_1113_7091_5948 - - - - - 03-06 Ersatzteile - 03-06 Spare parts - - - DocCategory_03-06 - - - STRING - - Der Kategorie „Ersatzteile“ werden Dokumente zugeordnet, die Informationen zu Ersatzteilen und Hilfs- und Betriebsstoffen enthalten. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - DocCategory_04-01 - www.company.com/ids/cd/5391_1113_7091_8996 - - - - - 04-01 Vertragsunterlagen - 04-01 Contract documents - - - DocCategory_04-01 - - - STRING - - Der Kategorie „Vertragsunterlagen“ werden alle Dokumente zugeordnet, die im Zusammenhang mit der kaufmännischen Abwicklung eines Vertrages stehen, aber nicht selbst Gegenstand des Vertrags sind und lediglich zur Erfüllung des Vertrags dienen. - TBD - - - - - - http://admin-shell.io/DataSpecificationTemplates/DataSpecificationIEC61360/2/0 - - - - - - http://www.vdi.de/2770/AssetDocumentation/Document/DocumentClassification/ClassId - - - - - \ No newline at end of file diff --git a/src/AasxToolkit.Tests/ValidateSampleAAS.ps1 b/src/AasxToolkit.Tests/ValidateSampleAAS.ps1 deleted file mode 100644 index ea8ad1ff..00000000 --- a/src/AasxToolkit.Tests/ValidateSampleAAS.ps1 +++ /dev/null @@ -1,29 +0,0 @@ -<# -.SYNOPSIS -This script runs a validation on schedma violations for all .AASX files in the directory "aasx-package-explorer\sample-aasx". -The sample files can be downloaded via "aasx-package-explorer\DownloadSamples.ps1". -#> - -$ErrorActionPreference = "Stop" - -function LogAndExecute($Expression) -{ - Write-Host "---" - Write-Host "Running: $Expression" - Write-Host "---" - - Invoke-Expression $Expression -} - -function Main -{ - Get-ChildItem -File -Path ..\..\..\..\sample-aasx -Filter *.aasx | Foreach-Object { - # Write-Host "$($_.Fullname)" - $cmd = ".\AasxToolkit.exe load `"$($_.Fullname)`" check+fix save sample.xml validate sample.xml" - Write-Host "" - Write-Host -ForegroundColor Yellow "Executing: $cmd" - Invoke-Expression $cmd - } -} - -$previousLocation = Get-Location; try { Main } finally { Set-Location $previousLocation }