provided_interface_implementation
datastore grammar version 85
model | 105 | application |
---|---|---|
interface | 20 | interface |
auto-webclient | xindi.1 | generator_settings |
generator_annotations | ||
phrases | ||
query | ||
translations | ||
parameters | ||
connector | 36.5 | processor |
variables | ||
datastore | 113 | consumed_interfaces_mapping |
provided_interface_implementation | ||
migration_mapping | ||
regular_expression_engine | ||
relational-database-bridge | 109 | database |
database_transformation | ||
sql-mirror | 109.1 | sql_mapping |
webclient | xindi.1.1 | views |
widget | ||
client bindings | ||
gui_model | ||
phrases | ||
translations | ||
settings | ||
parameters | ||
project-build-environment | 41 | wiring |
deployment |
- The minimal implementation
- Context identification path
- Node type mapping
- Command mapping expressions
- Property mapping expressions
- Navigation expressions
- Expressions for mapping safety
The minimal implementation
Every provided interface implementation contains at least
root = root /* context path goes here */ ( /* node type mapping */ )
'variable assignment': [ root = root ] component 'optional variable assignment'
'application root node': component 'interface context id path'
'root': component 'node type mapping'
Context identification path
This path can be used for expressing the context node for an interface (the interface root
).
'interface context id path' {
'has steps': stategroup (
'no' { }
'yes' {
'type': stategroup (
'collection entry' {
'collection': [ ., [ ] reference
'id': [ @, ] ] reference
}
'group' { [ + ]
'group': reference
}
'state' { [ ? ]
'state group': reference
'state': [ | ] reference
}
)
'variable assignment': component 'optional variable assignment'
'tail': component 'interface context id path'
}
)
}
Node type mapping
'node type mapping' { [ (, ) ]
'attributes': dictionary {
'type': [ : ] stategroup (
'command' { [ command ]
'implementation': component 'command mapping'
}
'property' {
'type': stategroup (
'collection' { [ collection ]
'type': stategroup (
'empty' { [ = empty ] }
'dynamic' {
'key constraint': stategroup (
'no' { [ = ]
'key constructor': component 'key constructor'
}
'yes' { [ ->, = ]
'referencer': group {
'head': component 'singular imp node path'
'collection': [ . ] reference
'branches': [ (, ) ] dictionary { [ -| ]
'tail': component 'conditional descendant imp node path'
}
}
}
)
'has branch': stategroup = node-switch .'branches' (
| nodes = 'yes' { 'first' = first }
| none = 'no'
)
'branches': [ (, ) ] dictionary {
'has successor': stategroup = node-switch successor (
| node = 'yes' { 'successor' = successor }
| none = 'no'
)
'expression': [ = ] component 'collection expression'
'key constraint': stategroup (
'no' { }
'yes' { [ (, ) ]
'branch': [ from ] reference
'key path': [ >[, ] ] component 'collection key node path'
}
)
'node': component 'node type mapping'
}
}
)
}
'group' { [ group ]
'expression': [ = ] component 'group expression'
'node': component 'node type mapping'
}
'number' { [ number ]
'expression': [ = ] component 'number expression'
}
'state group' { [ stategroup ]
'expression': [ = ] component 'state expression'
}
'text' { [ text ]
'has constraint': stategroup (
'no' {
'expression': [ = ] component 'text expression'
}
'yes' {
'referencer': [ -> ] group {
'head': component 'singular imp node path'
'collection': [ . ] reference
'branch': [ -| ] reference
'tail': component 'conditional descendant imp node path'
}
'expression': [ = ] component 'reference expression'
}
)
}
'file' { [ file ]
'expression': [ = ] component 'file expression'
}
)
}
)
}
}
Command mapping expressions
'command mapping' { [ do ]
'path': [ on ] component 'singular node path'
'command': [ ( ] reference
'parameter mapping': [ with, ) ] component 'parameter mapping'
}
'parameter mapping' { [ (, ) ]
'properties': dictionary {
'type': [ : ] stategroup (
'group' { [ group = ]
'group': [ @ . ] reference
'parameter mapping': component 'parameter mapping'
}
'collection' { [ collection ]
'collection': [ = map @ . ] reference
'parameter mapping': component 'parameter mapping'
}
'number' { [ number ]
'number': [ = @ # ] reference
}
'text' { [ text ]
'type': [ = ] stategroup (
'parameter' {
'text': [ @ . ] reference
}
'variable' {
'path': component 'context node path'
}
)
}
'file' { [ file ]
'file': [ = @ / ] reference
}
'state group' { [ stategroup ]
'type': [ = ] stategroup (
'fixed' {
'state': reference
'parameter mapping': component 'parameter mapping'
}
'map' { [ switch @ ]
'state group': [ ? ] reference
'mapping': [ (, ) ] dictionary { [ | ]
'mapped state': [ = ] reference
'parameter mapping': component 'parameter mapping'
}
}
'match branch' { [ match-branch ]
'path': group {
'head': component 'parametrized singular imp node path'
'collection': [ . ] reference
'reference': [ [ @ >, ] ] reference
}
'branches': [ (, ) ] dictionary { [ | ]
'state mapping context variable': stategroup (
'current variable' { }
'branch context variable' { [ bind $ ] }
)
'state': [ = ] reference
'parameter mapping': component 'parameter mapping'
}
}
)
}
)
}
}
Property mapping expressions
Texts, numbers, files, and references
'text expression' {
'path': component 'singular node path'
'text': [ . ] reference
}
'number expression' {
'path': component 'singular node path'
'number': [ # ] reference
}
'file expression' {
'path': component 'singular node path'
'file': [ / ] reference
}
'reference expression' {
'path': component 'singular node path'
'text': [ > ] reference
'key path': [ (, ) ] component 'collection key node path'
}
Collections
'key separator' {
'separator': [ join ] stategroup (
'dot' { [ . ] }
'dash' { [ - ] }
'colon' { [ : ] }
'greater than' { [ > ] }
'space' { [ space ] }
)
}
'key constructor' {
'branch concatenation': stategroup (
'yes' {
'type': stategroup (
'prepend' { [ prepend-branch ] }
'append' { [ append-branch ] }
)
}
'no' { }
)
'key separator': stategroup (
'yes' {
'key separator': component 'key separator'
}
'no' { }
)
}
'collection expression' {
'head': component 'context node path'
'tail': component 'collection expression tail'
}
'collection expression tail' {
'has steps': stategroup (
'no' {
'filter': component 'filter expression'
}
'yes' {
'type': stategroup (
'singular' {
'step': component 'singular node step'
}
'conditional' {
'step': component 'conditional descendant node step'
}
'plural' {
'step': component 'plural descendant node step'
}
)
'variable assignment': component 'optional variable assignment'
'tail': component 'collection expression tail'
}
)
}
'filter expression' {
'has filter': stategroup (
'no' { }
'yes' { [ where ]
'has filters': stategroup = node-switch .'filters' (
| nodes = 'yes' { 'first' = first }
| none = 'no'
)
'filters': [ (, ) ] dictionary { [ $ ]
'has successor': stategroup = node-switch successor (
| node = 'yes' { 'successor' = successor }
| none = 'no'
)
'type': stategroup (
'singular result' {
'path': [ = ] component 'conditional node path'
}
'equality' { [ = equal ]
'left path': [ ( ] component 'singular node path'
'right path': [ ,, ) ] component 'singular node path'
}
)
}
}
)
}
Groups and stategroups
'group expression' {
'type': stategroup (
'none' { }
'bound' {
'path': component 'singular node path'
'variable assignment': component 'variable assignment'
}
)
}
'state expression' {
'type': stategroup (
'static' {
'state': reference
'node': component 'node type mapping'
}
'dynamic' { [ switch ]
'path': component 'singular node path'
'state group': [ ? ] reference
'states': [ (, ) ] dictionary { [ | ]
'variable assignment': component 'optional variable assignment'
'state': [ = ] reference
'node': component 'node type mapping'
}
}
)
}
Navigation expressions
'optional variable assignment' {
'has assignment': stategroup (
'no' { }
'yes' {
'assignment': component 'variable assignment'
}
)
}
'variable assignment' { [ as $ ] }
'ancestor variable path' {
'has steps': stategroup (
'no' { [ $ ] }
'yes' { [ $^ ]
'tail': component 'ancestor variable path'
}
)
}
'context node path' {
'type': stategroup (
'root' { [ root ] }
'variable' {
'head': component 'ancestor variable path'
'type': stategroup (
'variable' { }
'filter' {
'filter': reference
}
)
}
)
}
'singular node path' {
'head': component 'context node path'
'tail': component 'singular node path tail'
}
'singular node path tail' {
'has steps': stategroup (
'no' { }
'yes' {
'step': component 'singular node step'
'tail': component 'singular node path tail'
}
)
}
'singular node step' {
'type': stategroup (
'group' { [ + ]
'group': reference
}
'reference' {
'text': [ > ] reference
}
'reference rule' {
'text': [ . ] reference
'rule': [ & ] reference
}
'state rule' {
'rule': [ & ] reference
}
)
}
'conditional node path' {
'head': component 'context node path'
'tail': component 'conditional node path tail'
}
'conditional node path tail' {
'head': component 'singular node path tail'
'has steps': stategroup (
'no' { }
'yes' {
'step': component 'conditional descendant node step'
'tail': component 'conditional node path tail'
}
)
}
'conditional descendant node step' {
'type': stategroup (
'state' {
'state group': [ ? ] reference
'state': [ | ] reference
}
'collection entry' {
'collection': [ . ] reference
'key': [ [, ] ] group {
'path': component 'singular node path'
'key source': stategroup (
'link' {
'text': [ |> ] reference
}
'node' { }
)
}
}
)
}
'plural descendant node step' {
'collection': [ ., * ] reference
'legacy annotation': stategroup (
'base' { }
'derived' { [ (derived) ] }
)
}
Expressions for mapping safety
'collection key node path' {
'has steps': stategroup (
'no' { }
'yes' {
'type': stategroup (
'reference' { [ > ]
'text': reference
}
'parent' { [ ^ ] }
'filter' { [ $ ]
'filter': reference
}
)
'tail': component 'collection key node path'
}
)
}
'conditional descendant branch imp node path' {
'type': stategroup (
'static' { }
'dynamic' {
'state': [ | ] reference
}
)
}
'conditional descendant imp node path' {
'has steps': stategroup (
'no' { }
'yes' {
'type': stategroup (
'state' { [ ? ]
'state group': reference
'path': component 'conditional descendant branch imp node path'
}
'group' { [ + ]
'group': reference
}
)
'tail': component 'conditional descendant imp node path'
}
)
}
'singular imp node path' {
'has steps': stategroup (
'no' { }
'yes' {
'type': stategroup (
'parent' { [ ^ ] }
'group' { [ + ]
'group': reference
}
'reference' { [ > ]
'reference': reference
}
)
'tail': component 'singular imp node path'
}
)
}
'ancestor parameter path' {
'has steps': stategroup (
'no' { [ @ ] }
'yes' {
'type': stategroup (
'state parent' { [ @?^ ] }
'collection parent' { [ @.^ ] }
)
'tail': component 'ancestor parameter path'
}
)
}
'parametrized singular imp node path' {
'has steps': stategroup (
'no' { }
'yes' {
'type': stategroup (
'collection entry' {
'collection': [ . ] reference
'single branch': stategroup (
'yes' { }
)
'key': [ [, ] ] group {
'path': component 'ancestor parameter path'
'reference': [ > ] reference
}
}
'group' {
'group': [ + ] reference
}
)
'tail': component 'parametrized singular imp node path'
}
)
}