Properties can be atomic or complex:
| Syntax | Description | Example |
prop |
Atomic property without type specification (undefined type) |
birthDate |
type prop |
Typed property (simple or complex) |
date birthDate address shippingAddress |
| Syntax | Description | Example |
prop() |
Empty property | |
prop(...) |
Complex property, consisting of property name and a particle containing sub-properties. | see following rows. |
(...) |
A property particle. The parentheses contain nested expressions consisting of the following structures. | |
(sub,...,sub) |
Sequence (ordered list) |
author(name(first,last),birthDate)
Property author consists of sub-property name, followed by sub-property birthDate. Property name consists of sub-property first followed by sub-property last. |
(sub&...&sub) |
Bag (unordered list) |
part(id,(maker&grade))
Property part consists of sub-properties id, maker and grade with id always in the first position and maker and grade following in any order. |
(sub|...|sub) |
Choice (alternative) |
speaker((bass,middle,treble) | (low,high))
A speaker system is either a three way bass-middle-treble system or a two way low-high system. |
Property names can be suffixed with a subject ID or a list of subject IDs:
| Syntax | Description | Example |
<subjectID,...> |
List of subject IDs. Subject IDs may be prefixed with declared subject ontology prefixes | address<cac:Address>(street<cbc:StreetName>, |
Both properties and particles can be suffixed with one of the following modifiers:
| Syntax | Description | Example |
| (no modifier) | mandatory [1..1] |
A last name is always required. |
? |
optional [0..1] |
middle?
Not everybody has a middle name, so we make this property optional. |
+ |
repeated [1..n] |
phoneNo+
At least one phone number is required |
* |
optional and repeated [0..n] |
sponsor(name,url)*
an arbitrary number of sponsors |
[n..m] |
a minimum of n occurrences and a maximum of m occurrences with 0 <= n <= m |
phoneNo[1..4]
if we want to restrict the number of phone numbers to 4. |
Labeling and substitution:
| Syntax | Description | Example |
label{}
|
Establishes a reference point
for the expression within the curly brackets. Unlike a tag, a label does
not appear in instances. It is a pure meta-notation. |
sect{title,para*}
represents the property sequence title,para* and allows to reference this sequence by sect. |
label |
Refers to an earlier defined reference point. The current label occurrence is substituted with the expression designated by the earlier label definition. |
block(sect{title,para*},anno,sect,sect)
is equivalent to: block(title,para*,anno,title,para*,title,para*) |
| In
particular, labeling allows the definition of recursive structures.
Note: |
recur{part(recur*)}
is a typical tree-like part list: part(part(part(...)*)*)* Note that the use of a modifier such as * or ? is essential here. It ensures that the production can end. In contrast, the expression: recur{part(recur+)} would have only infinite productions. |
| Home | Definition | Step-by-Step | Example | Downloads |
Contact: info@aoModeling.org