Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,8 @@ Minor Changes:

* fix: Wrong ServiceSpecificationProfileEnum values for v3.0 profiles. (https://github.com/admin-shell-io/aas-specs-api/issues/526[#526])
* remove: Remove TREE. (https://github.com/admin-shell-io/aas-specs-api/issues/537)

* fix: fixed FILTER object in json schema & fixed inconsistencies in BNF (https://github.com/admin-shell-io/aas-specs-api/issues/547)
* fix: aligned BNF and json schema with security BNF and json schema


=== Operation Changes w.r.t. V3.1 to V3.1.1
Expand Down
53 changes: 28 additions & 25 deletions documentation/IDTA-01002-3/modules/ROOT/pages/json-grammar.txt
Original file line number Diff line number Diff line change
Expand Up @@ -136,11 +136,15 @@
| ( "," <ws> "\"USEOBJECTS\":" <ws> <string_array> <ws> ) )
( ( "," <ws> "\"FORMULA\":" <ws> <logical_expression> <ws> )
| ("," <ws> "\"USEFORMULA\":" <ws> <StringLiteral> <ws> ) )
("," <ws> "\"FRAGMENT\":" <ws> <StringLiteral> <ws> )?
( ( "," <ws> "\"FILTER\":" <ws> <logical_expression> <ws> )
| ("," <ws> "\"USEFILTER\":" <ws> <StringLiteral> <ws> ) )?
( "," <ws> "\"FILTER\":" <ws> <security_query_filter> <ws> )?
"}"

<security_query_filter> ::= "{" <ws>
( ( "\"FRAGMENT\":" <ws> <StringLiteral> <ws>
"," <ws> "\"CONDITION\":" <ws> <logical_expression> <ws> )
| ( "\"USEFORMULA\":" <ws> <StringLiteral> <ws> ) )
"}"

<acl> ::= "{" <ws>
( ( "\"ATTRIBUTES\":" <ws> <attribute_array> <ws> )
| ( "\"USEATTRIBUTES\":" <ws> <string_array> <ws> ) )
Expand Down Expand Up @@ -200,20 +204,20 @@
<boolean> ::= ("true" | "false")
<DateTimeLiteral> ::= "\"" <datetime> "\"" <ws>
<TimeLiteral> ::= "\"" <time> "\"" <ws>
<datetime> ::= <date> <ws> ( "T" | " " ) <ws> <time> <ws> ( <timezone> <ws> )?
<date> ::= <year> <ws> "-" <ws> <month> <ws> "-" <ws> <day> <ws>
<year> ::= <digit> <ws> <digit> <ws> <digit> <ws> <digit> <ws>
<month> ::= <digit> <ws> <digit> <ws>
<day> ::= <digit> <ws> <digit> <ws>
<time> ::= <hour> <ws> ":" <ws> <minute> <ws> ( ":" <ws> <second> <ws> )? ( "." <ws> <fraction> <ws> )?
<timezone> ::= ( "Z" | ( "+" | "-" ) <ws> <hour> <ws> ":" <ws> <minute> <ws> )
<hour> ::= <digit> <ws> <digit> <ws>
<minute> ::= <digit> <ws> <digit> <ws>
<second> ::= <digit> <ws> <digit> <ws>
<fraction> ::= <digit>+ <ws>

<digit> ::= [0-9] <ws>
<StringLiteral> ::= "\"" ( [A-Z] | [a-z] | [0-9] | "/" | "*" | "[" | "]" | "(" | ")" | " " | "_" | "@" | "#" | "\\" | "+" | "-" | "." | "," | ":" | "$" | "^" | "*" )+ "\""
<datetime> ::= <date> ( "T" )? <time> ( <timezone> )?
<date> ::= <year> "-" <month> "-" <day>
<year> ::= <digit> <digit> <digit> <digit>
<month> ::= <digit> <digit>
<day> ::= <digit> <digit>
<time> ::= <hour> ":" <minute> ( ":" <second> )? ( "." <fraction> )?
<timezone> ::= ( "Z" | ( "+" | "-" ) <hour> ":" <minute> )
<hour> ::= <digit> <digit>
<minute> ::= <digit> <digit>
<second> ::= <digit> <digit>
<fraction> ::= <digit>+

<digit> ::= [0-9]
<StringLiteral> ::= "\"" ( [A-Z] | [a-z] | [0-9] | "/" | "*" | "[" | "]" | "(" | ")" | " " | "_" | "@" | "#" | "\\" | "+" | "-" | "." | "," | ":" | "$" | "^" )+ "\""
<ClaimLiteral> ::= <StringLiteral>
<ReferenceLiteral> ::= <StringLiteral>
<RouteLiteral> ::= <StringLiteral>
Expand All @@ -225,20 +229,19 @@
<HexLiteral> ::= "\"" "16#" ( [0-9] | [A-F] )+ "\""
<BoolLiteral> ::= "true" | "false"

<FieldIdentifier> ::= "\"" <FieldIdentifierString> "\""
<FieldIdentifierString> ::= <FieldIdentifierAAS> | <FieldIdentifierSM> | <FieldIdentifierSME> | <FieldIdentifierCD> | <FieldIdentifierAasDescriptor> | <FieldIdentifierSmDescriptor>
<FieldIdentifier> ::= "\"" ( <FieldIdentifierAAS> | <FieldIdentifierSM> | <FieldIdentifierSME> | <FieldIdentifierCD> | <FieldIdentifierAasDescriptor> | <FieldIdentifierSmDescriptor> ) "\""
<FieldIdentifierAAS> ::= "$aas#" ( "idShort" | "id" | "assetInformation.assetKind" | "assetInformation.assetType" | "assetInformation.globalAssetId" | "assetInformation." <SpecificAssetIdsClause> | "submodels." <ReferenceClause> )
<FieldIdentifierSM> ::= "$sm#" ( <SemanticIdClause> | "idShort" | "id" )
<FieldIdentifierSME> ::= "$sme" ( "." <idShortPath> )? "#" ( <SemanticIdClause> | "idShort" | "value" | "valueType" | "language" )
<FieldIdentifierCD> ::= "$cd#" ( "idShort" | "id" ) <ws>
<FieldIdentifierAasDescriptor> ::= "$aasdesc#" ( "idShort" | "id" | "assetKind" | "assetType" | "globalAssetId" | <SpecificAssetIdsClause> | "endpoints" ( "[" ( [0-9]* ) "]" )? "." <EndpointClause> | "submodelDescriptors" ( "[" ( [0-9]* ) "]" )? "." <SmDescriptorClause> )
<FieldIdentifierAasDescriptor> ::= "$aasdesc#" ( "idShort" | "id" | "assetKind" | "assetType" | "globalAssetId" | <SpecificAssetIdsClause> | "endpoints" ( "[" ( [0-9]* ) "]" ) "." <EndpointClause> | "submodelDescriptors" ( "[" ( [0-9]* ) "]" ) "." <SmDescriptorClause> )
<FieldIdentifierSmDescriptor> ::= "$smdesc#" <SmDescriptorClause>
<SmDescriptorClause> ::= ( <SemanticIdClause> | "idShort" | "id" | "endpoints" ( "[" ( [0-9]* ) "]" )? "." <EndpointClause> )
<SmDescriptorClause> ::= ( <SemanticIdClause> | "idShort" | "id" | "endpoints" ( "[" ( [0-9]* ) "]" ) "." <EndpointClause> )
<EndpointClause> ::= "interface" | "protocolinformation.href"
<ReferenceClause> ::= ( "type" | "keys" ( "[" ( [0-9]* ) "]" )? ( ".type" | ".value" ) )
<ReferenceClause> ::= ( "type" | "keys" ( "[" ( [0-9]* ) "]" ) ( ".type" | ".value" ) )
<SemanticIdClause> ::= ( "semanticId" | "semanticId." <ReferenceClause> )
<SpecificAssetIdsClause> ::= ( "specificAssetIds" ( "[" ( [0-9]* ) "]" )? ( ".name" | ".value" | ".externalSubjectId" | ".externalSubjectId." <ReferenceClause> ) )
<idShortPath> ::= ( <idShort> ("[" ( [0-9]* ) "]" )? ( "." <idShortPath> )* )
<idShort> ::= ( ( [a-z] | [A-Z] ) ( [a-z] | [A-Z] | [0-9] | "_" )* )
<SpecificAssetIdsClause> ::= ( "specificAssetIds" ( "[" ( [0-9]* ) "]" ) ( ".name" | ".value" | ".externalSubjectId" | ".externalSubjectId." <ReferenceClause> ) )
<idShortPath> ::= ( <idShort> ("[" ( [0-9]* ) "]" )* ( "." <idShortPath> )* )
<idShort> ::= ( ( [a-z] | [A-Z] ) (( [a-z] | [A-Z] | [0-9] | "_" | "-" )* ( [a-z] | [A-Z] | [0-9] | "_" ) )? )

<ws> ::= ( " " | "\t" | "\r" | "\n" )*
82 changes: 57 additions & 25 deletions documentation/IDTA-01002-3/modules/ROOT/pages/schema.adoc
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,19 @@
},
"modelStringPattern": {
"type": "string",
"pattern": "^((?:\\$aas#(?:idShort|id|assetInformation\\.assetKind|assetInformation\\.assetType|assetInformation\\.globalAssetId|assetInformation\\.(?:specificAssetIds(\\[[0-9]*\\])(?:\\.(?:name|value|externalSubjectId(?:\\.type|\\.keys\\[\\d*\\](?:\\.(?:type|value))?)?)?)|submodels\\.(?:type|keys\\[\\d*\\](?:\\.(?:type|value))?))|submodels\\.(type|keys\\[\\d*\\](?:\\.(type|value))?)))|(?:\\$sm#(?:semanticId(?:\\.type|\\.keys\\[\\d*\\](?:\\.(type|value))?)?|idShort|id))|(?:\\$sme(?:\\.[a-zA-Z][a-zA-Z0-9_]*(\\[[0-9]*\\])?(?:\\.[a-zA-Z][a-zA-Z0-9_]*(\\[[0-9]*\\])?)*)?#(?:semanticId(?:\\.type|\\.keys\\[\\d*\\](?:\\.(type|value))?)?|idShort|value|valueType|language))|(?:\\$cd#(?:idShort|id))|(?:\\$aasdesc#(?:idShort|id|assetKind|assetType|globalAssetId|specificAssetIds(\\[[0-9]*\\])?(?:\\.(name|value|externalSubjectId(?:\\.type|\\.keys\\[\\d*\\](?:\\.(type|value))?)?)?)|endpoints(\\[[0-9]*\\])\\.(interface|protocolinformation\\.href)|submodelDescriptors(\\[[0-9]*\\])\\.(semanticId(?:\\.type|\\.keys\\[\\d*\\](?:\\.(type|value))?)?|idShort|id|endpoints(\\[[0-9]*\\])\\.(interface|protocolinformation\\.href))))|(?:\\$smdesc#(?:semanticId(?:\\.type|\\.keys\\[\\d*\\](?:\\.(type|value))?)?|idShort|id|endpoints(\\[[0-9]*\\])\\.(interface|protocolinformation\\.href))))$"
"pattern": "^(?:\\$aas#(?:idShort|id|assetInformation\\.assetKind|assetInformation\\.assetType|assetInformation\\.globalAssetId|assetInformation\\.specificAssetIds\\[[0-9]*\\](?:\\.(?:name|value|externalSubjectId(?:\\.(?:type|keys\\[[0-9]*\\]\\.(?:type|value)))?))?|submodels\\.(?: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)))$"
},
"hexLiteralPattern": {
"type": "string",
"pattern": "^16#[0-9A-F]+$"
},
"dateTimeLiteralPattern": {
"type": "string",
"format": "date-time"
"pattern": "^[0-9]{4}-[0-9]{2}-[0-9]{2}(?:T)?[0-9]{2}:[0-9]{2}(?::[0-9]{2})?(?:\\.[0-9]+)?(?:Z|[+\\-][0-9]{2}:[0-9]{2})?$"
},
"timeLiteralPattern": {
"type": "string",
"pattern": "^[0-9][0-9]:[0-9][0-9](:[0-9][0-9])?$"
"pattern": "^[0-9]{2}:[0-9]{2}(?::[0-9]{2})?(?:\\.[0-9]+)?$"
},
"Value": {
"type": "object",
Expand Down Expand Up @@ -650,45 +650,77 @@
"USEFORMULA": {
"type": "string"
},
"FRAGMENT": {
"type": "string"
},
"FILTER": {
"$ref": "#/definitions/logicalExpression",
"$ref": "#/definitions/SecurityQueryFilter",
"additionalProperties": false
},
"USEFILTER": {
"type": "string"
}
},
"oneOf": [
"allOf": [
{
"required": [
"ACL"
"oneOf": [
{
"required": [
"ACL"
]
},
{
"required": [
"USEACL"
]
}
]
},
{
"required": [
"USEACL"
]
}
],
"oneOf": [
{
"required": [
"OBJECTS"
"oneOf": [
{
"required": [
"OBJECTS"
]
},
{
"required": [
"USEOBJECTS"
]
}
]
},
{
"required": [
"USEOBJECTS"
"oneOf": [
{
"required": [
"FORMULA"
]
},
{
"required": [
"USEFORMULA"

Check warning on line 696 in documentation/IDTA-01002-3/modules/ROOT/pages/schema.adoc

View workflow job for this annotation

GitHub Actions / qodana

Typo

Typo: In word 'USEFORMULA'
]
}
]
}
],
"additionalProperties": false
},
"SecurityQueryFilter": {
"type": "object",
"properties": {
"FRAGMENT": {
"type": "string"
},
"CONDITION": {
"$ref": "#/definitions/logicalExpression"
},
"USEFORMULA": {

Check warning on line 713 in documentation/IDTA-01002-3/modules/ROOT/pages/schema.adoc

View workflow job for this annotation

GitHub Actions / qodana

Typo

Typo: In word 'USEFORMULA'
"type": "string"
}
},
"required": [
"FRAGMENT"
],
"oneOf": [
{
"required": [
"FORMULA"
"CONDITION"
]
},
{
Expand Down
65 changes: 33 additions & 32 deletions documentation/IDTA-01002-3/modules/ROOT/partials/bnf/grammar.bnf
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,13 @@
<stringComparison> ::=
( ( "$starts-with" | "$ends-with" | "$contains" | "$regex") <ws> "(" <ws> <stringOperand> <ws> "," <ws> <stringOperand> <ws> ")" <ws> ) |
( <stringOperand> <ws> <allComparisons> <ws> <stringOperand> <ws> ) |
( <stringOperand> <ws> <allComparisons> <ws> <FieldIdentifierString> <ws> ) |
( <FieldIdentifierString> <ws> <allComparisons> <ws> <stringOperand> <ws> )
( <stringOperand> <ws> <allComparisons> <ws> <FieldIdentifier> <ws> ) |
( <FieldIdentifier> <ws> <allComparisons> <ws> <stringOperand> <ws> )

<numericalComparison> ::=
( <numericalOperand> <ws> <allComparisons> <ws> <numericalOperand> <ws> ) |
( <numericalOperand> <ws> <allComparisons> <ws> <FieldIdentifierString> <ws> ) |
( <FieldIdentifierString> <ws> <allComparisons> <ws> <numericalOperand> <ws> )
( <numericalOperand> <ws> <allComparisons> <ws> <FieldIdentifier> <ws> ) |
( <FieldIdentifier> <ws> <allComparisons> <ws> <numericalOperand> <ws> )

<hexComparison> ::=
<hexOperand> <ws> <allComparisons> <ws> <hexOperand> <ws>
Expand All @@ -51,7 +51,7 @@
<operand> ::= <stringOperand> | <numericalOperand> | <hexOperand> | <boolOperand> | <dateTimeOperand> | <timeOperand>

<stringOperand> ::=
<FieldIdentifierString> | <StringLiteral> | <castToString> | <SingleAttribute>
<FieldIdentifier> | <StringLiteral> | <castToString> | <SingleAttribute>

<numericalOperand> ::=
<NumericalLiteral> | <castToNumerical> | <dateTimeToNum>
Expand Down Expand Up @@ -90,7 +90,7 @@
( "DEFATTRIBUTES" <ws> <StringLiteral> <ws> <AttributeGroup> <ws> )*
( "DEFACLS" <ws> <StringLiteral> <ws> <ACL> <ws> )*
( "DEFOBJECTS" <ws> <StringLiteral> <ws> <ObjectGroup> <ws> )*
( "DEFFORMULAS" <ws> <StringLiteral> <ws> <Condition> <ws> )*
( "DEFFORMULAS" <ws> <StringLiteral> <ws> <logicalExpression> <ws> )*
( <AccessPermissionRule> <ws> )*

<AccessPermissionRule> ::=
Expand All @@ -99,9 +99,12 @@
"OBJECTS:" <ws>
( <SingleObject> <ws> )*
( <UseObjectGroup> <ws> )*
"FORMULA:" <ws>
( <Condition> | <UseFormula> ) <ws>
( "FILTER:" <ws> <FragmentObject> <ws> ( <Condition> | <UseFormula> ) <ws> )?
( "FORMULA:" <ws> <logicalExpression> <ws> ) | <UseFormula>
( "FILTER:" <ws> <SecurityQueryFilter> )?

<SecurityQueryFilter> ::=
<FragmentObject> <ws>
( "CONDITION:" <ws> <logicalExpression> <ws> ) | <UseFormula>

<ACL> ::=
"ATTRIBUTES:" <ws>
Expand All @@ -111,7 +114,7 @@
"ACCESS:" <ws> <Access> <ws>

<UseACL> ::=
"USEACLS" <ws> <StringLiteral> <ws>
"USEACL" <ws> <StringLiteral> <ws>

Check warning on line 117 in documentation/IDTA-01002-3/modules/ROOT/partials/bnf/grammar.bnf

View workflow job for this annotation

GitHub Actions / qodana

Typo

Typo: In word 'USEACL'
Copy link
Copy Markdown
Collaborator

@BirgitBoss BirgitBoss Mar 24, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why singular, it is also USEFORMULAS, no? Examples in Annex seem not to be updated yet?


<Right> ::=
"CREATE" | "READ" | "UPDATE" | "DELETE" | "EXECUTE" | "VIEW" | "ALL"
Expand Down Expand Up @@ -164,26 +167,24 @@
"USEOBJECTS" <ws> <StringLiteral> <ws>

<UseFormula> ::=
"USEFORMULAS" <ws> <StringLiteral> <ws>

<Condition> ::= <logicalExpression> <ws>
"USEFORMULA" <ws> <StringLiteral> <ws>

Check warning on line 170 in documentation/IDTA-01002-3/modules/ROOT/partials/bnf/grammar.bnf

View workflow job for this annotation

GitHub Actions / qodana

Typo

Typo: In word 'USEFORMULA'

<DateTimeLiteral> ::= <datetime> <ws>
<TimeLiteral> ::= <time> <ws>
<datetime> ::= <date> <ws> ( "T" | " " ) <ws> <time> <ws> ( <timezone> <ws> )?
<date> ::= <year> <ws> "-" <ws> <month> <ws> "-" <ws> <day> <ws>
<year> ::= <digit> <ws> <digit> <ws> <digit> <ws> <digit> <ws>
<month> ::= <digit> <ws> <digit> <ws>
<day> ::= <digit> <ws> <digit> <ws>
<time> ::= <hour> <ws> ":" <ws> <minute> <ws> ( ":" <ws> <second> <ws> )? ( "." <ws> <fraction> <ws> )?
<timezone> ::= ( "Z" | ( "+" | "-" ) <ws> <hour> <ws> ":" <ws> <minute> <ws> )
<hour> ::= <digit> <ws> <digit> <ws>
<minute> ::= <digit> <ws> <digit> <ws>
<second> ::= <digit> <ws> <digit> <ws>
<fraction> ::= <digit>+ <ws>
<digit> ::= [0-9] <ws>
<StringLiteral> ::= "\"" ( [A-Z] | [a-z] | [0-9] | "/" | "*" | "[" | "]" | "(" | ")" | " " | "_" | "@" | "#" | "\\" | "+" | "-" | "." | "," | ":" | "$" | "^" | "*" )+ "\""
<datetime> ::= <date> ( "T" )? <time> ( <timezone> )?
<date> ::= <year> "-" <month> "-" <day>
<year> ::= <digit> <digit> <digit> <digit>
<month> ::= <digit> <digit>
<day> ::= <digit> <digit>
<time> ::= <hour> ":" <minute> ( ":" <second> )? ( "." <fraction> )?
<timezone> ::= ( "Z" | ( "+" | "-" ) <hour> ":" <minute> )
<hour> ::= <digit> <digit>
<minute> ::= <digit> <digit>
<second> ::= <digit> <digit>
<fraction> ::= <digit>+

<digit> ::= [0-9]
<StringLiteral> ::= "\"" ( [A-Z] | [a-z] | [0-9] | "/" | "*" | "[" | "]" | "(" | ")" | " " | "_" | "@" | "#" | "\\" | "+" | "-" | "." | "," | ":" | "$" | "^" )+ "\""
<ClaimLiteral> ::= <StringLiteral>
<ReferenceLiteral> ::= <StringLiteral>
<RouteLiteral> ::= <StringLiteral>
Expand All @@ -194,8 +195,8 @@
<NumericalLiteral> ::= ( "+" | "-" )? ( [0-9]+ ( "." [0-9]* )? | "." [0-9]+ ) ( ( "e" | "E" )? [0-9]+ )
<HexLiteral> ::= "16#" ( [0-9] | [A-F] )+
<BoolLiteral> ::= "true" | "false"
<FieldIdentifier> ::= <FieldIdentifierString>
<FieldIdentifierString> ::= <FieldIdentifierAAS> | <FieldIdentifierSM> | <FieldIdentifierSME> | <FieldIdentifierCD> | <FieldIdentifierAasDescriptor> | <FieldIdentifierSmDescriptor>

<FieldIdentifier> ::= <FieldIdentifierAAS> | <FieldIdentifierSM> | <FieldIdentifierSME> | <FieldIdentifierCD> | <FieldIdentifierAasDescriptor> | <FieldIdentifierSmDescriptor>
<FieldIdentifierAAS> ::= "$aas#" ( "idShort" | "id" | "assetInformation.assetKind" | "assetInformation.assetType" | "assetInformation.globalAssetId" | "assetInformation." <SpecificAssetIdsClause> | "submodels." <ReferenceClause> )
<FieldIdentifierSM> ::= "$sm#" ( <SemanticIdClause> | "idShort" | "id" )
<FieldIdentifierSME> ::= "$sme" ( "." <idShortPath> )? "#" ( <SemanticIdClause> | "idShort" | "value" | "valueType" | "language" )
Expand All @@ -208,7 +209,7 @@
<ReferenceClause> ::= ( "type" | "keys" ( "[" ( [0-9]* ) "]" ) ( ".type" | ".value" ) )
<SemanticIdClause> ::= ( "semanticId" | "semanticId." <ReferenceClause> )
<SpecificAssetIdsClause> ::= ( "specificAssetIds" ( "[" ( [0-9]* ) "]" ) ( ".name" | ".value" | ".externalSubjectId" | ".externalSubjectId." <ReferenceClause> ) )
<idShortPath> ::= ( <idShort> ("[" ( [0-9]* ) "]" )? ( "." <idShortPath> )* )
<idShort> ::= ( ( [a-z] | [A-Z] ) ( [a-z] | [A-Z] | [0-9] | "_" )* )
<idShortPath> ::= ( <idShort> ("[" ( [0-9]* ) "]" )* ( "." <idShortPath> )* )
<idShort> ::= ( ( [a-z] | [A-Z] ) (( [a-z] | [A-Z] | [0-9] | "_" | "-" )* ( [a-z] | [A-Z] | [0-9] | "_" ) )? )

<ws> ::= ( " " | "\t" | "\r" | "\n" )+
<ws> ::= ( " " | "\t" | "\r" | "\n" )*
Loading
Loading