Skip to content

Commit 0e6d3e6

Browse files
authored
Merge pull request #38 from admin-shell-io/aorzelski/extensionsWG24
Aorzelski/extensions wg24
2 parents 9ace0f4 + 536e964 commit 0e6d3e6

23 files changed

+320
-100
lines changed

README.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,19 @@ The following release contains the latest version of the AAS schemas
2828
(see also the [releases](https://github.com/admin-shell-io/aas-specs-security/releases)
2929
section of this repository):
3030

31-
* [3.0.0](https://github.com/admin-shell-io/aas-specs-security/releases/tag/v3.0.0)
32-
is the latest release for the `V3.0.0` version of the AAS Security,
31+
* [3.0.1](https://github.com/admin-shell-io/aas-specs-security/releases/tag/v3.0.1)
32+
is the latest bugfix release for the `V3.0.1` version of the AAS Security,
3333
containing the normative sources for the published document
34-
"Specification of the Asset Administration Shell: Part 4 - **Version 3.0.0**".
34+
"Specification of the Asset Administration Shell: Part 4 - **Version 3.0.1**".
3535
*Use this release if you want to work with the latest specified AAS version.*
3636

37+
Previous releases:
38+
39+
* [3.0.0](https://github.com/admin-shell-io/aas-specs-security/releases/tag/v3.0.0)
40+
is the first release for the `V3.0` version of the AAS Security,
41+
containing the normative sources for the published document
42+
"Specification of the Asset Administration Shell: Part 4 - Version 3.0.0".
43+
3744
## Contributing
3845

3946
Feature requests, reports about inconsistencies, mistakes *etc.* are highly

documentation/IDTA-01004/modules/ROOT/pages/access-rule-model.adoc

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -174,8 +174,6 @@ Global Attributes are:
174174

175175
* *ANONYMOUS* - Tag for anonymous and non-authenticated user, i.e. no access token
176176

177-
References in ReferenceAttributes are defined in Section xref:access-rule-model.adoc#text-serialization-of-values-of-type-reference[Text Serialization of Values of Type Reference].
178-
179177

180178
==== Objects
181179

@@ -188,8 +186,6 @@ Objects to be protected are either API Routes, Identifiables (e.g. AAS or Submod
188186

189187
Routes may use * or end with a *, which means that all routes with a given prefix are valid.
190188

191-
References to IdentifiableObjects, ReferableObjects, FragmentObjects and DescriptorObjects are defined in Section xref:access-rule-model.adoc#text-serialization-of-values-of-type-reference[Text Serialization of Values of Type Reference].
192-
193189
An Object Group defines a list of single objects and/or a list of names of other object groups.
194190

195191
==== Formulas
@@ -218,18 +214,6 @@ This enables access rules related to week days or specific times in the year.
218214
An important special operation is $match, which can be used with any element containing a list of elements, e.g. semanticId[], specificAssetId[], SubmodelElementList or SubmodelElementCollection.
219215
The list element is written with [] to express, that $match shall check if a certain expression is true for at least one element in the list.
220216

221-
[[text-serialization-of-values-of-type-reference]]
222-
==== Text Serialization of Values of Type Reference
223-
224-
References are used in ReferenceAttributes, IdentifiableObjects, ReferableObjects, FragmentObjects and DescriptorObjects for the corresponding ReferenceLiterals, IdentifiableLiterals, ReferableLiterals, FragmentLiterals and DescriptorLiterals.
225-
226-
Such references use the link:https://industrialdigitaltwin.io/aas-specifications/IDTA-01001/v3.1/mappings/mappings.html#reference-serialization[Part 1 Mapping in Section "Text Serialization of Values of Type Reference"] for specific instances of elements, e.g. an AAS, a Submodel, a ConceptDescription or a specific SubmodelElement.
227-
228-
Access Rules may also be defined for all Identifiables of the Keytypes AssetAdministrationShell, Submodel or ConceptDescription.
229-
In this case an IdentifiableLiteral uses the format "(AssetAdministrationShell)\*", "(Submodel)*" and "(ConceptDescription)*".
230-
231-
Access Rules extend the Keytypes of Part 1 by "(aasDesc)" for AAS Descriptors and "(smdesc)" for submodel descriptors.
232-
To define all descriptors "(aasDesc)\*" or "(smdesc)*" may be used in DescriptorLiterals accordingly.
233217

234218
[[json-serialization]]
235219
== JSON Serialization of Access Rule Model

documentation/IDTA-01004/modules/ROOT/pages/annex/text-access-rule-examples.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ include::partial$examples/bpn.bnf[]
6161
include::partial$examples/allow-read-all-users-of-company-for-submodel.bnf[]
6262
----
6363

64+
[[allow-read-submodels-id-pattern]]
6465
== Allow READ to all Submodels with ID pattern for all authenticated users of a company for submodels with Nameplate and TechnicalData from 9:00-17:00
6566

6667
[source,bnf,linenums]

documentation/IDTA-01004/modules/ROOT/pages/changelog.adoc

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,30 @@ SPDX-License-Identifier: CC-BY-4.0
88

99
////
1010

11+
[[change-notes]]
1112
= Change Notes
1213

13-
This is the first Release.
14+
== Changes w.r.t. V3.1 vs. V3.0.1
15+
16+
*changed: <ReferenceAttribute> with more detailed definition in BNF Grammar and JSON Schema
17+
*changed: <IdentifiableObject>, <ReferableObject>, <FragmentObject>, <DescriptorObject> with more detailed definition in BNF Grammar and JSON Schema
18+
19+
20+
== Changes w.r.t. V3.0.1 vs. V3.0
21+
22+
Bugfixes:
23+
24+
* changed: Removed incorrect but required whitespaces from grammar and examples [#477 of API](https://github.com/admin-shell-io/aas-specs-api/issues/477)
25+
* changed: fixed idShortPath definition in the BNF Grammar for the Query Language [#34](https://github.com/admin-shell-io/aas-specs-security/issues/34)
26+
* changed: xref:access-rule-model.adoc#text-serialization-of-values-of-type-reference[text serialization of Reference] does not follow text serialization of Part 1 of References, the updated grammar will be added in the V3.1 [#33](https://github.com/admin-shell-io/aas-specs-security/issues/33)
27+
28+
29+
Minor Changes:
30+
31+
* changed: correct xref:annex/text-access-rule-examples.adoc#allow-read-submodels-id-pattern[example] in Annex
32+
* removed: remove <FieldIdentifierString> in grammar and use <FieldIdentifier> directly
33+
34+
35+
== Changes V3.0
36+
37+
This is the first release

documentation/IDTA-01004/modules/ROOT/pages/index.adoc

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,31 +18,37 @@ This specification is part of the https://industrialdigitaltwin.org/en/content-h
1818

1919
== Version
2020

21-
This is version 3.0 of the specification IDTA-01004.
21+
This is version 3.0.1 of the specification IDTA-01004.
22+
23+
Previous version: 3.0.
2224

2325
[#metamodel-versions]
2426
== Metamodel Versions
2527

26-
This document (version 3.0) uses the following parts of the “Specification of the Asset Administration Shell” series:
28+
This document uses the following parts and versions of the “Specification of the Asset Administration Shell” series:
2729

2830
* IDTA-01001 Part 1: Metamodel in version 3.1 xref:bibliography.adoc#bib1[[1\]]
2931
* IDTA-01002 Part 2: Application Programming Interfaces in version 3.1 xref:bibliography.adoc#bib2[[2\]]
3032
* IDTA-01003-a Part 3a: Data Specification – IEC 61360 in version 3.1 xref:bibliography.adoc#bib3[[3\]]
3133

34+
If there are bugfixes of the parts, these shall be used.
35+
3236
== Notice
3337

3438
Copyright: Industrial Digital Twin Association e.V. (IDTA)
3539

36-
DOI: https://doi.org/10.62628/IDTA.01004-3-0
40+
DOI: https://doi.org/10.62628/IDTA.01004-3-0-1
41+
42+
IDTA Number: IDTA-01004
3743

38-
IDTA Document Number: IDTA-01004-3-0
44+
Version: 3.0.1
3945

4046
This work is licensed under a
4147
https://creativecommons.org/licenses/by/4.0/[Creative Commons Attribution 4.0 International License].
4248

4349
SPDX-License-Identifier: CC-BY-4.0
4450

45-
May 2025
51+
July 2025
4652

4753
== How to Get in Contact
4854

documentation/IDTA-01004/modules/ROOT/partials/bnf/access-rules.bnf

Lines changed: 45 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,12 @@
4141
"GLOBAL" <ws> "(" <ws> ( "LOCALNOW" | "UTCNOW" | "CLIENTNOW" | "ANONYMOUS" ) <ws> ")"
4242

4343
<ReferenceAttribute> ::=
44-
"REFERENCE" <ws> "(" <ws> <ReferenceLiteral> <ws> ")"
44+
"REFERENCE(" (
45+
("$aas" <IdentifierInstance> "#" <FieldsAAS> ) |
46+
("$sm" <IdentifierInstance> "#" <FieldsSM> ) |
47+
("$cd" <IdentifierInstance> "#" <FieldsCD> ) |
48+
("$sme" <IdentifierInstance> "." <idShortPath> "#" <FieldsSME> )
49+
) ")"
4550

4651
<AttributeGroup> ::=
4752
( <SingleAttribute> <ws> )*
@@ -56,17 +61,20 @@
5661
<RouteObject> ::=
5762
"ROUTE" <ws> <RouteLiteral> <ws>
5863

64+
<IdentifierInstance> ::= "(" <StringLiteral> ")"
65+
<IdentifierInstanceOrAll> ::= <IdentifierInstance> | "(\"*\")"
66+
5967
<IdentifiableObject> ::=
60-
"IDENTIFIABLE" <ws> <IdentifiableLiteral> <ws>
68+
"IDENTIFIABLE" <ws> ("$aas" | "$sm" | "$cd") <IdentifierInstanceOrAll>
6169

6270
<ReferableObject> ::=
63-
"REFERABLE" <ws> <ReferableLiteral> <ws>
71+
"REFERABLE" <ws> "$sme" <IdentifierInstanceOrAll> "." <idShortPath>
6472

6573
<FragmentObject> ::=
66-
"FRAGMENT" <ws> <FragmentLiteral> <ws>
67-
74+
"FRAGMENT" <ws> "$sme" <IdentifierInstanceOrAll> "." <idShortPath> ( <ws> <StringLiteral> )+
75+
6876
<DescriptorObject> ::=
69-
"DESCRIPTOR" <ws> <DescriptorLiteral> <ws>
77+
"DESCRIPTOR" <ws> ("$aasdesc" | "$smdesc") <IdentifierInstanceOrAll>
7078

7179
<ObjectGroup> ::=
7280
( <SingleObject> <ws> )*
@@ -103,13 +111,13 @@
103111
<stringComparison> ::=
104112
( ( "$starts-with" | "$ends-with" | "$contains" | "$regex") <ws> "(" <ws> <stringOperand> <ws> "," <ws> <stringOperand> <ws> ")" <ws> ) |
105113
( <stringOperand> <ws> <allComparisons> <ws> <stringOperand> <ws> ) |
106-
( <stringOperand> <ws> <allComparisons> <ws> <FieldIdentifierString> <ws> ) |
107-
( <FieldIdentifierString> <ws> <allComparisons> <ws> <stringOperand> <ws> )
114+
( <stringOperand> <ws> <allComparisons> <ws> <FieldIdentifier> <ws> ) |
115+
( <FieldIdentifier> <ws> <allComparisons> <ws> <stringOperand> <ws> )
108116

109117
<numericalComparison> ::=
110118
( <numericalOperand> <ws> <allComparisons> <ws> <numericalOperand> <ws> ) |
111-
( <numericalOperand> <ws> <allComparisons> <ws> <FieldIdentifierString> <ws> ) |
112-
( <FieldIdentifierString> <ws> <allComparisons> <ws> <numericalOperand> <ws> )
119+
( <numericalOperand> <ws> <allComparisons> <ws> <FieldIdentifier> <ws> ) |
120+
( <FieldIdentifier> <ws> <allComparisons> <ws> <numericalOperand> <ws> )
113121

114122
<hexComparison> ::=
115123
<hexOperand> <ws> <allComparisons> <ws> <hexOperand> <ws>
@@ -129,7 +137,7 @@
129137
<operand> ::= <stringOperand> | <numericalOperand> | <hexOperand> | <boolOperand> | <dateTimeOperand> | <timeOperand>
130138

131139
<stringOperand> ::=
132-
<FieldIdentifierString> | <StringLiteral> | <castToString> | <SingleAttribute>
140+
<FieldIdentifier> | <StringLiteral> | <castToString> | <SingleAttribute>
133141

134142
<numericalOperand> ::=
135143
<NumericalLiteral> | <castToNumerical> | <dateTimeToNum>
@@ -164,25 +172,23 @@
164172
<castToTime> ::=
165173
"time" <ws> "(" <ws> ( <stringOperand> | <dateTimeOperand> ) <ws> ")" <ws>
166174

167-
168175
<DateTimeLiteral> ::= <datetime> <ws>
169176
<TimeLiteral> ::= <time> <ws>
170-
<datetime> ::= <date> <ws> ( "T" | " " ) <ws> <time> <ws> ( <timezone> <ws> )?
171-
<date> ::= <year> <ws> "-" <ws> <month> <ws> "-" <ws> <day> <ws>
172-
<year> ::= <digit> <ws> <digit> <ws> <digit> <ws> <digit> <ws>
173-
<month> ::= <digit> <ws> <digit> <ws>
174-
<day> ::= <digit> <ws> <digit> <ws>
175-
<time> ::= <hour> <ws> ":" <ws> <minute> <ws> ( ":" <ws> <second> <ws> )? ( "." <ws> <fraction> <ws> )?
176-
<timezone> ::= ( "Z" | ( "+" | "-" ) <ws> <hour> <ws> ":" <ws> <minute> <ws> )
177-
<hour> ::= <digit> <ws> <digit> <ws>
178-
<minute> ::= <digit> <ws> <digit> <ws>
179-
<second> ::= <digit> <ws> <digit> <ws>
180-
<fraction> ::= <digit>+ <ws>
181-
182-
<digit> ::= [0-9] <ws>
177+
<datetime> ::= <date> ( "T" | "" ) <time> ( <timezone> )?
178+
<date> ::= <year> "-" <month> "-" <day>
179+
<year> ::= <digit> <digit> <digit> <digit>
180+
<month> ::= <digit> <digit>
181+
<day> ::= <digit> <digit>
182+
<time> ::= <hour> ":" <minute> ( ":" <second> )? ( "." <fraction> )?
183+
<timezone> ::= ( "Z" | ( "+" | "-" ) <hour> ":" <minute> )
184+
<hour> ::= <digit> <digit>
185+
<minute> ::= <digit> <digit>
186+
<second> ::= <digit> <digit>
187+
<fraction> ::= <digit>+
188+
189+
<digit> ::= [0-9]
183190
<StringLiteral> ::= "\"" ( [A-Z] | [a-z] | [0-9] | "/" | "*" | "[" | "]" | "(" | ")" | " " | "_" | "@" | "#" | "\\" | "+" | "-" | "." | "," | ":" | "$" | "^" )+ "\""
184191
<ClaimLiteral> ::= <StringLiteral>
185-
<ReferenceLiteral> ::= <StringLiteral>
186192
<RouteLiteral> ::= <StringLiteral>
187193
<IdentifiableLiteral> ::= <StringLiteral>
188194
<ReferableLiteral> ::= <StringLiteral>
@@ -191,12 +197,16 @@
191197
<NumericalLiteral> ::= ( "+" | "-" )? ( [0-9]+ ( "." [0-9]* )? | "." [0-9]+ ) ( ( "e" | "E" )? [0-9]+ )
192198
<HexLiteral> ::= "16#" ( [0-9] | [A-F] )+
193199
<BoolLiteral> ::= "true" | "false"
194-
<FieldIdentifier> ::= <FieldIdentifierString>
195-
<FieldIdentifierString> ::= <FieldIdentifierAAS> | <FieldIdentifierSM> | <FieldIdentifierSME> | <FieldIdentifierCD> | <FieldIdentifierAasDescriptor> | <FieldIdentifierSmDescriptor>
196-
<FieldIdentifierAAS> ::= "$aas#" ( "idShort" | "id" | "assetInformation.assetKind" | "assetInformation.assetType" | "assetInformation.globalAssetId" | "assetInformation." <SpecificAssetIdsClause> | "submodels." <ReferenceClause> )
197-
<FieldIdentifierSM> ::= "$sm#" ( <SemanticIdClause> | "idShort" | "id" )
198-
<FieldIdentifierSME> ::= "$sme" ( "." <idShortPath> )? "#" ( <SemanticIdClause> | "idShort" | "value" | "valueType" | "language" )
199-
<FieldIdentifierCD> ::= "$cd#" ( "idShort" | "id" ) <ws>
200+
201+
<FieldIdentifier> ::= <FieldIdentifierAAS> | <FieldIdentifierSM> | <FieldIdentifierSME> | <FieldIdentifierCD> | <FieldIdentifierAasDescriptor> | <FieldIdentifierSmDescriptor>
202+
<FieldIdentifierAAS> ::= "$aas#" <FieldsAAS>
203+
<FieldsAAS> ::= "idShort" | "id" | "assetInformation.assetKind" | "assetInformation.assetType" | "assetInformation.globalAssetId" | "assetInformation." <SpecificAssetIdsClause> | "submodels." <ReferenceClause>
204+
<FieldIdentifierSM> ::= "$sm#" <FieldsSM>
205+
<FieldsSM> ::= <SemanticIdClause> | "idShort" | "id"
206+
<FieldIdentifierCD> ::= "$cd#" <FieldsCD>
207+
<FieldsCD> ::= "idShort" | "id"
208+
<FieldIdentifierSME> ::= "$sme" ( "." <idShortPath> )? "#" <FieldsSME>
209+
<FieldsSME> ::= <SemanticIdClause> | "idShort" | "value" | "valueType" | "language"
200210
<FieldIdentifierAasDescriptor> ::= "$aasdesc#" ( "idShort" | "id" | "assetKind" | "assetType" | "globalAssetId" | <SpecificAssetIdsClause> | "endpoints" ( "[" ( [0-9]* ) "]" ) "." <EndpointClause> | "submodelDescriptors" ( "[" ( [0-9]* ) "]" ) "." <SmDescriptorClause> )
201211
<FieldIdentifierSmDescriptor> ::= "$smdesc#" <SmDescriptorClause>
202212
<SmDescriptorClause> ::= ( <SemanticIdClause> | "idShort" | "id" | "endpoints" ( "[" ( [0-9]* ) "]" ) "." <EndpointClause> )
@@ -205,7 +215,7 @@
205215
<ReferenceClause> ::= ( "type" | "keys" ( "[" ( [0-9]* ) "]" ) ( ".type" | ".value" ) )
206216
<SemanticIdClause> ::= ( "semanticId" | "semanticId." <ReferenceClause> )
207217
<SpecificAssetIdsClause> ::= ( "specificAssetIds" ( "[" ( [0-9]* ) "]" ) ( ".name" | ".value" | ".externalSubjectId" | ".externalSubjectId." <ReferenceClause> ) )
208-
<idShortPath> ::= ( <idShort> ("[" ( [0-9]* ) "]" ) ( "." <idShortPath> )* )
209-
<idShort> ::= ( ( [a-z] | [A-Z] ) ( [a-z] | [A-Z] | [0-9] | "_" )* )
218+
<idShortPath> ::= ( <idShort> ("[" ( [0-9]* ) "]" )* ( "." <idShortPath> )* )
219+
<idShort> ::= ( ( [a-z] | [A-Z] ) (( [a-z] | [A-Z] | [0-9] | "_" | "-" )* ( [a-z] | [A-Z] | [0-9] | "_" ) )? )
210220

211-
<ws> ::= ( " " | "\t" | "\r" | "\n" )+
221+
<ws> ::= ( " " | "\t" | "\r" | "\n" )*

documentation/IDTA-01004/modules/ROOT/partials/bnf/attributes.bnf

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@
88
"GLOBAL" <ws> "(" <ws> ( "LOCALNOW" | "UTCNOW" | "CLIENTNOW" | "ANONYMOUS" ) <ws> ")"
99

1010
<ReferenceAttribute> ::=
11-
"REFERENCE" <ws> "(" <ws> <ReferenceLiteral> <ws> ")"
11+
"REFERENCE(" (
12+
("$aas" <IdentifierInstance> "#" <FieldsAAS> ) |
13+
("$sm" <IdentifierInstance> "#" <FieldsSM> ) |
14+
("$cd" <IdentifierInstance> "#" <FieldsCD> ) |
15+
("$sme" <IdentifierInstance> "." <idShortPath> "#" <FieldsSME> )
16+
) ")"
1217

1318
<AttributeGroup> ::=
1419
( <SingleAttribute> <ws> )*

documentation/IDTA-01004/modules/ROOT/partials/bnf/objects.bnf

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,20 @@
44
<RouteObject> ::=
55
"ROUTE" <ws> <RouteLiteral> <ws>
66

7+
<IdentifierInstance> ::= "(" <StringLiteral> ")"
8+
<IdentifierInstanceOrAll> ::= <IdentifierInstance> | "(\"*\")"
9+
710
<IdentifiableObject> ::=
8-
"IDENTIFIABLE" <ws> <IdentifiableLiteral> <ws>
11+
"IDENTIFIABLE" <ws> ("$aas" | "$sm" | "$cd") <IdentifierInstanceOrAll>
912

1013
<ReferableObject> ::=
11-
"REFERABLE" <ws> <ReferableLiteral> <ws>
14+
"REFERABLE" <ws> "$sme" <IdentifierInstanceOrAll> "." <idShortPath>
1215

1316
<FragmentObject> ::=
14-
"FRAGMENT" <ws> <FragmentLiteral> <ws>
15-
17+
"FRAGMENT" <ws> "$sme" <IdentifierInstanceOrAll> "." <idShortPath> ( <ws> <StringLiteral> )+
18+
1619
<DescriptorObject> ::=
17-
"DESCRIPTOR" <ws> <DescriptorLiteral> <ws>
20+
"DESCRIPTOR" <ws> ("$aasdesc" | "$smdesc") <IdentifierInstanceOrAll>
1821

1922
<ObjectGroup> ::=
2023
( <SingleObject> <ws> )*

documentation/IDTA-01004/modules/ROOT/partials/examples/allow-read-all-users-of-company-for-submodel.bnf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ ACCESSRULE:
44
RIGHTS: READ
55
ACCESS: ALLOW
66
OBJECTS:
7-
IDENTIFIABLE "(Submodel)*"
7+
IDENTIFIABLE $sm("*")
88
FORMULA:
99
$and(
1010
$or(

documentation/IDTA-01004/modules/ROOT/partials/examples/allow-read-all-users-of-company-for-submodel.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
},
1616
"OBJECTS": [
1717
{
18-
"IDENTIFIABLE": "(Submodel)*"
18+
"IDENTIFIABLE": "$sm(\"*\")"
1919
}
2020
],
2121
"FORMULA": {

0 commit comments

Comments
 (0)