I am reading a Request for Comments (RFC).
The RFC says that Name must occur *1 times, where *1 is defined as “Exactly one instance MAY be present.” I interpret that to mean minOccurs=0 and maxOccurs=1.
So, this is valid because there is only one occurrence:
<Name>Boss</Name>
This is invalid because there is more than one occurrence:
<Name>Boss</Name>
<Name>Patron</Name>However, things aren’t so simple……
In fact, this is valid:
<Name altid=”1” lang=”en”>Boss</Name>
<Name altid=”1” lang=”fr”>Patron</Name>Those two occurrences represent the same logical thing -- they are both expressing the same name in English and French. In effect, there is just one occurrence!
Per the RFC: Two elements are considered alternative representations of the same logical thing if the value of their altid attributes are identical.
How to declare Name in an XML Schema?
Answer: Set maxOccurs="unbounded" like so:
<xs:element name="Name" minOccurs="0" maxOccurs="unbounded" type="Name-Type"/>
Then supplement with a Schematron rule which expresses this constraint: The Name element may occur more than once only if all occurrences have an altid attribute and their values are identical.
Neat!
/Roger