From 6c94151fbb38f6ea71b87ea2368ac8ca56e18832 Mon Sep 17 00:00:00 2001 From: Yauhenikapl Date: Mon, 18 Mar 2024 11:33:58 +0300 Subject: [PATCH] Specify namespace in URN structure Fixes #285 --- .../2.2.0/aspect-meta-model-shapes.ttl | 2 +- .../org/eclipse/esmf/samm/NamespaceTest.java | 29 +++++++++++++++++-- .../1.0.0/TestNamespaceInvalidUrn.ttl | 2 +- .../1.0.0/TestNamespaceInvalidUrnVersion.ttl | 20 +++++++++++++ .../1.0.0/TestNamespaceValidWithDash.ttl | 20 +++++++++++++ .../TestNamespaceValidWithUnderscore.ttl | 20 +++++++++++++ 6 files changed, 89 insertions(+), 4 deletions(-) create mode 100644 esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceInvalidUrnVersion.ttl create mode 100644 esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceValidWithDash.ttl create mode 100644 esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceValidWithUnderscore.ttl diff --git a/esmf-semantic-aspect-meta-model/src/main/resources/samm/meta-model/2.2.0/aspect-meta-model-shapes.ttl b/esmf-semantic-aspect-meta-model/src/main/resources/samm/meta-model/2.2.0/aspect-meta-model-shapes.ttl index ce1f5b81..cc6a7c90 100644 --- a/esmf-semantic-aspect-meta-model/src/main/resources/samm/meta-model/2.2.0/aspect-meta-model-shapes.ttl +++ b/esmf-semantic-aspect-meta-model/src/main/resources/samm/meta-model/2.2.0/aspect-meta-model-shapes.ttl @@ -64,7 +64,7 @@ samm:NamespaceShape select $this ?value ?code where { bind( str( $this ) as ?value ) - filter( !regex( ?value, "^urn:samm:[^:]+:[0-9]+.[0-9]+.[0-9]+#$" )) + filter( !regex( ?value, "^urn:samm:[a-zA-Z0-9._-]+:[0-9]+.[0-9]+.[0-9]+#$" )) bind( 'ERR_WRONG_URN' as ?code ) } """ ; diff --git a/esmf-semantic-aspect-meta-model/src/test/java/org/eclipse/esmf/samm/NamespaceTest.java b/esmf-semantic-aspect-meta-model/src/test/java/org/eclipse/esmf/samm/NamespaceTest.java index a7c480c4..637c245c 100644 --- a/esmf-semantic-aspect-meta-model/src/test/java/org/eclipse/esmf/samm/NamespaceTest.java +++ b/esmf-semantic-aspect-meta-model/src/test/java/org/eclipse/esmf/samm/NamespaceTest.java @@ -24,14 +24,39 @@ void testEmptyPropertiesExpectFailureSamm_2_2_0( final KnownVersion metaModelVer @ParameterizedTest @MethodSource( value = "versionsStartingWith2_2_0") - void testNamespaceInvalidUrn( final KnownVersion metaModelVersion) { + void testNamespaceInvalidUrnPattern( final KnownVersion metaModelVersion) { final String focusNode = "urn:samm:org.eclipse.esmf.samm.test:1.q.0#"; final SemanticError resultForInvalidUrnNamespace = new SemanticError( "Namespace '' uses an invalid URN pattern", focusNode, "", violationUrn, focusNode ); - expectSemanticValidationErrors( "namespace", "TestNamespaceInvalidUrn", + expectSemanticValidationErrors( "namespace", "TestNamespaceInvalidUrnVersion", metaModelVersion, resultForInvalidUrnNamespace ); } + + @ParameterizedTest + @MethodSource( value = "versionsStartingWith2_2_0") + void testNamespaceInvalidUrn( final KnownVersion metaModelVersion) { + final String focusNode = "urn:samm:org.eclipse.esmf.samm+test:1.0.0#"; + + final SemanticError resultForInvalidUrnNamespace = new SemanticError( + "Namespace '' uses an invalid URN pattern", + focusNode, "", violationUrn, focusNode + ); + expectSemanticValidationErrors( "namespace", "TestNamespaceInvalidUrn", + metaModelVersion, resultForInvalidUrnNamespace ); + } + + @ParameterizedTest + @MethodSource( value = "versionsStartingWith2_2_0") + void testNamespaceValidWithDash( final KnownVersion metaModelVersion) { + checkValidity( "namespace", "TestNamespaceValidWithDash", metaModelVersion ); + } + + @ParameterizedTest + @MethodSource( value = "versionsStartingWith2_2_0") + void testNamespaceValidWithUnderscore( final KnownVersion metaModelVersion) { + checkValidity( "namespace", "TestNamespaceValidWithUnderscore", metaModelVersion ); + } } diff --git a/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceInvalidUrn.ttl b/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceInvalidUrn.ttl index 9dcb0745..e776e497 100644 --- a/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceInvalidUrn.ttl +++ b/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceInvalidUrn.ttl @@ -10,7 +10,7 @@ # # SPDX-License-Identifier: MPL-2.0 # -@prefix : . +@prefix : . @prefix samm: . @prefix samm-c: . @prefix xsd: . diff --git a/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceInvalidUrnVersion.ttl b/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceInvalidUrnVersion.ttl new file mode 100644 index 00000000..9dcb0745 --- /dev/null +++ b/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceInvalidUrnVersion.ttl @@ -0,0 +1,20 @@ +# +# Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH +# +# See the AUTHORS file(s) distributed with this work for additional +# information regarding authorship. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +@prefix : . +@prefix samm: . +@prefix samm-c: . +@prefix xsd: . + +: a samm:Namespace ; + samm:preferredName "Test Preferred Name"@en ; + samm:description "Test description"@en ; diff --git a/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceValidWithDash.ttl b/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceValidWithDash.ttl new file mode 100644 index 00000000..99b40e24 --- /dev/null +++ b/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceValidWithDash.ttl @@ -0,0 +1,20 @@ +# +# Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH +# +# See the AUTHORS file(s) distributed with this work for additional +# information regarding authorship. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +@prefix : . +@prefix samm: . +@prefix samm-c: . +@prefix xsd: . + +: a samm:Namespace ; + samm:preferredName "Test Preferred Name"@en ; + samm:description "Test description"@en ; diff --git a/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceValidWithUnderscore.ttl b/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceValidWithUnderscore.ttl new file mode 100644 index 00000000..ed11092d --- /dev/null +++ b/esmf-semantic-aspect-meta-model/src/test/resources/samm_2_2_0/namespace/org.eclipse.esmf.test/1.0.0/TestNamespaceValidWithUnderscore.ttl @@ -0,0 +1,20 @@ +# +# Copyright (c) 2023 Robert Bosch Manufacturing Solutions GmbH +# +# See the AUTHORS file(s) distributed with this work for additional +# information regarding authorship. +# +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at https://mozilla.org/MPL/2.0/. +# +# SPDX-License-Identifier: MPL-2.0 +# +@prefix : . +@prefix samm: . +@prefix samm-c: . +@prefix xsd: . + +: a samm:Namespace ; + samm:preferredName "Test Preferred Name"@en ; + samm:description "Test description"@en ;