<book>The Mill on the Floss</book>
</
<book author="Eliot">. . .</book>
<!ELEMENT book (title, subTitle?, author+)> <!ATTLIST book volumes NMTOKEN #IMPLIED inPrint (true|false) #REQUIRED>
<xs:element name="book" type="my:publType"> <xs:complexType name="publType"> <xs:sequence> <xs:element ref="my:title" minOccurs="0"> . . .
(wb)*w?
?
, +
and
*
, but qualitatively different
(a1..2,b?)2
<xs:all>
))min-
and maxOccurs
maxOccurs
is
unbounded
vs. when it's numeric.
unbounded
, we start with the published
conversion:maxOccurs
is numeric, we start with a chain of
maxOccurs-minOccurs
term machines, with a
judicious use of lambda. For example for maxOccurs-minOccurs=2
:minOccurs>0
, we add a further,
non-optional, chain of minOccurs
term machines at the front.d
variables are in the tree to be validated, the
g
variables are in the grammar components.
We write d in g if forest d matches group g.
Empty:
e in e
Sequence:
d1 in g1 d2 in g2
d1 , d2 in g1 , g2
Choice 1:
d in g1
d in g1 | g2
Choice 2:
d in g2
d in g1 | g2
Interleave:
d |?inter d'1;d"2 d1 in g1 d2 in g2
d in g1 & g2
Putting the above notations together, here is an example of an inference rule that occurs later in this document:
This rule is read as follows: if two expressions Expr1 and Expr2 are known to have the static types types Type1 and Type2 (the two premises above the line), then it is the case that the expression below the line "Expr1 , Expr2" must have the static type "Type1, Type2", which is the sequence of types Type1 and Type2.
- old
- Two distinct attribute declarations in the {attribute uses} must not have identical {name}s and {target namespace}s.
- new
- ∀ a1, a2 ∈ C∙attribute uses ,
(a1∙name = a2∙name ∧ a1∙target namespace = a2∙target namespace) ⇒ a1 = a2Only one attribute declaration per qualified name.