Skip to content

Commit b46306f

Browse files
authored
Merge pull request #54 from Martin187187/add-fragment-fieldidentifiers
2 parents f74d61a + 64bb15f commit b46306f

6 files changed

Lines changed: 115 additions & 40 deletions

File tree

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Major Changes:
1717

1818
* changed: <ReferenceAttribute> with more detailed definition in BNF Grammar and JSON Schema
1919
* changed: <IdentifiableObject>, <ReferableObject>, <FragmentObject>, <DescriptorObject> with more detailed definition in BNF Grammar and JSON Schema
20+
* added: Query Filter and FragmentFieldIdentifiers (https://github.com/admin-shell-io/aas-specs-api/issues/517)
2021

2122
Minor Changes:
2223

documentation/IDTA-01004/modules/ROOT/partials/bnf/access-rule-model.bnf

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@
1313
( <UseObjectGroup> <ws> )*
1414
( ( "FORMULA:" <ws> <logicalExpression> <ws> ) | ( <UseFormula> <ws> ) )
1515
( "FILTER:" <ws> <SecurityQueryFilter> )?
16+
( "FILTERLIST:" <ws> ( <SecurityQueryFilter> <ws> )* )?

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

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,10 @@
1313
( <UseObjectGroup> <ws> )*
1414
( ( "FORMULA:" <ws> <logicalExpression> <ws> ) | ( <UseFormula> <ws> ) )
1515
( "FILTER:" <ws> <SecurityQueryFilter> )?
16+
( "FILTERLIST:" <ws> ( <SecurityQueryFilter> <ws> )* )?
1617

1718
<SecurityQueryFilter> ::=
18-
<FragmentObject> <ws>
19+
( "FRAGMENT:" <FieldIdentifierFragment> <ws> )
1920
( ( "CONDITION:" <ws> <logicalExpression> <ws> ) | ( <UseFormula> <ws> ) )
2021

2122
<ACL> ::=
@@ -72,10 +73,10 @@
7273

7374
<ReferableObject> ::=
7475
"REFERABLE" <ws> "$sme" <IdentifierInstanceOrAll> "." <idShortPath>
75-
76-
<FragmentObject> ::=
77-
"FRAGMENT" <ws> "$sme" <IdentifierInstanceOrAll> "." <idShortPath> ( <ws> <StringLiteral> )+
7876

77+
<FragmentObject> ::=
78+
"FRAGMENT" <ws> <FragmentLiteral> <ws>
79+
7980
<DescriptorObject> ::=
8081
"DESCRIPTOR" <ws> ("$aasdesc" | "$smdesc") <IdentifierInstanceOrAll>
8182

@@ -199,18 +200,44 @@
199200
<BoolLiteral> ::= "true" | "false"
200201

201202
<FieldIdentifier> ::= <FieldIdentifierAAS> | <FieldIdentifierSM> | <FieldIdentifierSME> | <FieldIdentifierCD> | <FieldIdentifierAasDescriptor> | <FieldIdentifierSmDescriptor>
202-
<FieldIdentifierAAS> ::= "$aas#" ( "idShort" | "id" | "assetInformation.assetKind" | "assetInformation.assetType" | "assetInformation.globalAssetId" | "assetInformation." <SpecificAssetIdsClause> | "submodels" ( "[" ( [0-9]* ) "]" ) "." <ReferenceClause> )
203-
<FieldIdentifierSM> ::= "$sm#" ( <SemanticIdClause> | "idShort" | "id" )
204-
<FieldIdentifierSME> ::= "$sme" ( "." <idShortPath> )? "#" ( <SemanticIdClause> | "idShort" | "value" | "valueType" | "language" )
205-
<FieldIdentifierCD> ::= "$cd#" ( "idShort" | "id" ) <ws>
206-
<FieldIdentifierAasDescriptor> ::= "$aasdesc#" ( "idShort" | "id" | "assetKind" | "assetType" | "globalAssetId" | <SpecificAssetIdsClause> | "endpoints" ( "[" ( [0-9]* ) "]" ) "." <EndpointClause> | "submodelDescriptors" ( "[" ( [0-9]* ) "]" ) "." <SmDescriptorClause> )
203+
204+
<FieldIdentifierAAS> ::= "$aas#" <FieldsAAS>
205+
<FieldIdentifierSM> ::= "$sm#" <FieldsSM>
206+
<FieldIdentifierSME> ::= "$sme" ( "." <idShortPath> )? "#" <FieldsSME>
207+
<FieldIdentifierCD> ::= "$cd#" <FieldsCD> <ws>
208+
<FieldIdentifierAasDescriptor> ::= "$aasdesc#" <FieldsAasDescriptor>
207209
<FieldIdentifierSmDescriptor> ::= "$smdesc#" <SmDescriptorClause>
210+
211+
<FieldsAAS> ::= "idShort" | "id" | "assetInformation.assetKind" | "assetInformation.assetType" | "assetInformation.globalAssetId" | "assetInformation." <SpecificAssetIdsClause> | "submodels" ( "[" ( [0-9]* ) "]" ) "." <ReferenceClause>
212+
<FieldsSM> ::= <SemanticIdClause> | "idShort" | "id"
213+
<FieldsSME> ::= <SemanticIdClause> | "idShort" | "value" | "valueType" | "language"
214+
<FieldsCD> ::= "idShort" | "id"
215+
<FieldsAasDescriptor> ::= "idShort" | "id" | "assetKind" | "assetType" | "globalAssetId" | <SpecificAssetIdsClause> | "endpoints" ( "[" ( [0-9]* ) "]" ) "." <EndpointClause> | "submodelDescriptors" ( "[" ( [0-9]* ) "]" ) "." <SmDescriptorClause>
208216
<SmDescriptorClause> ::= ( <SemanticIdClause> | "idShort" | "id" | "endpoints" ( "[" ( [0-9]* ) "]" ) "." <EndpointClause> )
209217
<EndpointClause> ::= "interface" | "protocolinformation.href"
210218

211219
<ReferenceClause> ::= ( "type" | "keys" ( "[" ( [0-9]* ) "]" ) ( ".type" | ".value" ) )
212220
<SemanticIdClause> ::= ( "semanticId" | "semanticId." <ReferenceClause> )
213221
<SpecificAssetIdsClause> ::= ( "specificAssetIds" ( "[" ( [0-9]* ) "]" ) ( ".name" | ".value" | ".externalSubjectId" | ".externalSubjectId." <ReferenceClause> ) )
222+
223+
224+
<FieldIdentifierFragment> ::= <FieldIdentifierAASFragment> | <FieldIdentifierSMFragment> | <FieldIdentifierSMEFragment> | <FieldIdentifierCDFragment> | <FieldIdentifierAasDescriptorFragment> | <FieldIdentifierSmDescriptorFragment>
225+
226+
<FieldIdentifierAASFragment> ::= "$aas#" ( "idShort" | "assetInformation.assetType" | "assetInformation.globalAssetId" | "assetInformation." <SpecificAssetIdsClauseFragment> | "submodels" ( "[" ( [0-9]* ) "]" ) ("." <ReferenceClauseFragment>)? )
227+
<FieldIdentifierSMFragment> ::= "$sm#" ( <SemanticIdClauseFragment> | "idShort" | "id" )
228+
<FieldIdentifierSMEFragment> ::= "$sme" ( "." <idShortPath> )? ( "#" ( <SemanticIdClauseFragment> | "idShort" | "value" | "valueType" | "language" ))?
229+
<FieldIdentifierCDFragment> ::= "$cd#" ( "idShort" ) <ws>
230+
<FieldIdentifierAasDescriptorFragment> ::= "$aasdesc#" ( "idShort" | "description" | "displayName" | "extension" | "administration" | "assetKind" | "assetType" | "globalAssetId" | <SpecificAssetIdsClauseFragment> | <EndpointClauseFragment> | "submodelDescriptors[" ( [0-9]* ) "]" ("." <SmDescriptorClauseFragment>)? )
231+
<FieldIdentifierSmDescriptorFragment> ::= "$smdesc#" <SmDescriptorClauseFragment>
232+
233+
<SpecificAssetIdsClauseFragment> ::= "specificAssetIds" ( "[" ( [0-9]* ) "]" ) (".externalSubjectId" | ".externalSubjectId." <ReferenceClauseFragment>)?
234+
<SmDescriptorClauseFragment> ::= ( <SemanticIdClauseFragment> | "idShort" | <EndpointClauseFragment> )
235+
<EndpointClauseFragment> ::= "endpoints" ( "[" ( [0-9]* ) "]" )
236+
237+
<SemanticIdClauseFragment> ::= "semanticId" | "semanticId." <ReferenceClauseFragment>
238+
<ReferenceClauseFragment> ::= "keys[" ( [0-9]* ) "]"
239+
240+
214241
<idShortPath> ::= ( <idShort> ("[" ( [0-9]* ) "]" )* ( "." <idShortPath> )* )
215242
<idShort> ::= ( ( [a-z] | [A-Z] ) (( [a-z] | [A-Z] | [0-9] | "_" | "-" )* ( [a-z] | [A-Z] | [0-9] | "_" ) )? )
216243

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
"REFERABLE" <ws> "$sme" <IdentifierInstanceOrAll> "." <idShortPath>
1515

1616
<FragmentObject> ::=
17-
"FRAGMENT" <ws> "$sme" <IdentifierInstanceOrAll> "." <idShortPath> ( <ws> <StringLiteral> )+
18-
17+
"FRAGMENT" <ws> <FragmentLiteral> <ws>
18+
1919
<DescriptorObject> ::=
2020
"DESCRIPTOR" <ws> ("$aasdesc" | "$smdesc") <IdentifierInstanceOrAll>
2121

documentation/IDTA-01004/modules/ROOT/partials/json/aas-queries-and-access-rules-schema.json

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,14 @@
88
"type": "string",
99
"pattern": "^[A-Za-z0-9/\\*\\[\\]\\(\\) _@#\\\\+\\-\\.,:\\$\\^]+$"
1010
},
11-
"FieldIdentifierAAS": {
11+
"FieldIdentifier": {
1212
"type": "string",
1313
"pattern": "^(?:\\$aas#(?:idShort|id|assetInformation\\.assetKind|assetInformation\\.assetType|assetInformation\\.globalAssetId|assetInformation\\.specificAssetIds\\[[0-9]*\\]\\.(?:name|value|externalSubjectId(?:\\.(?:type|keys\\[[0-9]*\\]\\.(?:type|value)))?)|submodels\\[[0-9]*\\]\\.(?:type|keys\\[[0-9]*\\]\\.(?:type|value)))|\\$sm#(?:semanticId(?:\\.(?:type|keys\\[[0-9]*\\]\\.(?:type|value)))?|idShort|id)|\\$sme(?:\\.[A-Za-z](?:[A-Za-z0-9_-]*[A-Za-z0-9_])?(?:\\[[0-9]*\\])*(?:\\.[A-Za-z](?:[A-Za-z0-9_-]*[A-Za-z0-9_])?(?:\\[[0-9]*\\])*)*)?#(?:semanticId(?:\\.(?:type|keys\\[[0-9]*\\]\\.(?:type|value)))?|idShort|value|valueType|language)|\\$cd#(?:idShort|id)|\\$aasdesc#(?:idShort|id|assetKind|assetType|globalAssetId|specificAssetIds\\[[0-9]*\\]\\.(?:name|value|externalSubjectId(?:\\.(?:type|keys\\[[0-9]*\\]\\.(?:type|value)))?)|endpoints\\[[0-9]*\\]\\.(?:interface|protocolinformation\\.href)|submodelDescriptors\\[[0-9]*\\]\\.(?:semanticId(?:\\.(?:type|keys\\[[0-9]*\\]\\.(?:type|value)))?|idShort|id|endpoints\\[[0-9]*\\]\\.(?:interface|protocolinformation\\.href)))|\\$smdesc#(?:semanticId(?:\\.(?:type|keys\\[[0-9]*\\]\\.(?:type|value)))?|idShort|id|endpoints\\[[0-9]*\\]\\.(?:interface|protocolinformation\\.href)))$"
1414
},
15+
"FragmentFieldIdentifier": {
16+
"type": "string",
17+
"pattern": "^(?:\\$aas#(?:idShort|assetInformation\\.assetType|assetInformation\\.globalAssetId|assetInformation\\.specificAssetIds\\[[0-9]*\\](?:\\.externalSubjectId(?:\\.keys\\[[0-9]*\\])?)?|submodels\\[[0-9]*\\](?:\\.keys\\[[0-9]*\\])?)|\\$sm#(?:semanticId(?:\\.keys\\[[0-9]*\\])?|idShort|id)|\\$sme(?:\\.[A-Za-z](?:[A-Za-z0-9_-]*[A-Za-z0-9_])?(?:\\[[0-9]*\\])*(?:\\.[A-Za-z](?:[A-Za-z0-9_-]*[A-Za-z0-9_])?(?:\\[[0-9]*\\])*)*)?(?:#(?:semanticId(?:\\.keys\\[[0-9]*\\])?|idShort|value|valueType|language))?|\\$cd#idShort|\\$aasdesc#(?:idShort|description|displayName|extension|administration|assetKind|assetType|globalAssetId|specificAssetIds\\[[0-9]*\\](?:\\.externalSubjectId(?:\\.keys\\[[0-9]*\\])?)?|endpoints\\[[0-9]*\\]|submodelDescriptors\\[[0-9]*\\](?:\\.(?:semanticId(?:\\.keys\\[[0-9]*\\])?|idShort|endpoints\\[[0-9]*\\]))?)|\\$smdesc#(?:semanticId(?:\\.keys\\[[0-9]*\\])?|idShort|endpoints\\[[0-9]*\\]))$"
18+
},
1519
"hexLiteralPattern": {
1620
"type": "string",
1721
"pattern": "^16#[0-9A-F]+$"
@@ -653,6 +657,12 @@
653657
"FILTER": {
654658
"$ref": "#/definitions/SecurityQueryFilter",
655659
"additionalProperties": false
660+
},
661+
"FILTERLIST": {
662+
"type": "array",
663+
"items": {
664+
"$ref": "#/definitions/SecurityQueryFilter"
665+
}
656666
}
657667
},
658668
"allOf": [
@@ -705,7 +715,7 @@
705715
"type": "object",
706716
"properties": {
707717
"FRAGMENT": {
708-
"type": "string"
718+
"$ref": "#/definitions/FragmentFieldIdentifier"
709719
},
710720
"CONDITION": {
711721
"$ref": "#/definitions/logicalExpression"
@@ -731,6 +741,22 @@
731741
],
732742
"additionalProperties": false
733743
},
744+
"QueryFilter": {
745+
"type": "object",
746+
"properties": {
747+
"$fragment": {
748+
"$ref": "#/definitions/FragmentFieldIdentifier"
749+
},
750+
"$condition": {
751+
"$ref": "#/definitions/logicalExpression"
752+
}
753+
},
754+
"required": [
755+
"$fragment",
756+
"$condition"
757+
],
758+
"additionalProperties": false
759+
},
734760
"Query": {
735761
"type": "object",
736762
"properties": {
@@ -740,6 +766,12 @@
740766
},
741767
"$condition": {
742768
"$ref": "#/definitions/logicalExpression"
769+
},
770+
"$filters": {
771+
"type": "array",
772+
"items": {
773+
"$ref": "#/definitions/QueryFilter"
774+
}
743775
}
744776
},
745777
"required": [

documentation/IDTA-01004/modules/ROOT/partials/json/access-rule-model.json

Lines changed: 41 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -173,41 +173,55 @@
173173
"FILTER": {
174174
"$ref": "#/definitions/SecurityQueryFilter",
175175
"additionalProperties": false
176-
}
177-
},
178-
"oneOf": [
179-
{
180-
"required": [
181-
"ACL"
182-
]
183176
},
184-
{
185-
"required": [
186-
"USEACL"
187-
]
177+
"FILTERLIST": {
178+
"type": "array",
179+
"items": {
180+
"$ref": "#/definitions/SecurityQueryFilter"
181+
}
188182
}
189-
],
190-
"oneOf": [
183+
},
184+
"allOf": [
191185
{
192-
"required": [
193-
"OBJECTS"
186+
"oneOf": [
187+
{
188+
"required": [
189+
"ACL"
190+
]
191+
},
192+
{
193+
"required": [
194+
"USEACL"
195+
]
196+
}
194197
]
195198
},
196199
{
197-
"required": [
198-
"USEOBJECTS"
199-
]
200-
}
201-
],
202-
"oneOf": [
203-
{
204-
"required": [
205-
"FORMULA"
200+
"oneOf": [
201+
{
202+
"required": [
203+
"OBJECTS"
204+
]
205+
},
206+
{
207+
"required": [
208+
"USEOBJECTS"
209+
]
210+
}
206211
]
207212
},
208213
{
209-
"required": [
210-
"USEFORMULA"
214+
"oneOf": [
215+
{
216+
"required": [
217+
"FORMULA"
218+
]
219+
},
220+
{
221+
"required": [
222+
"USEFORMULA"
223+
]
224+
}
211225
]
212226
}
213227
],
@@ -217,7 +231,7 @@
217231
"type": "object",
218232
"properties": {
219233
"FRAGMENT": {
220-
"type": "string"
234+
"$ref": "#/definitions/FragmentFieldIdentifier"
221235
},
222236
"CONDITION": {
223237
"$ref": "#/definitions/logicalExpression"

0 commit comments

Comments
 (0)