what's the reason for mixed data?

james anderson (mecom-gmbh@mixx.de)
Mon, 17 Nov 97 12:21:58 +0100


greetings,

we're trying to understand why the XML spec (wrt
"http://www.w3.org/TR/WD-xml-970807.html")
specifies a special status for elements which contain mixed data. to make
it specific, why is

[43] cp ::= (Name | choice | seq) ('?' | '*' | '+')?

not

[43] cp ::= (#PCDATA | CDATA | Name | choice | seq) ('?' | '*' | '+')?

?

what's the reason to specify a form (mixed data) which <EM>must</EM>
permit repetition and
arbitrary order as soon as PCDATA is allowed?

to give an example of the problem, assume the following CLOS declarations:

(defClass class-1 ()
((slot-1 :type string)))
(defClass class-2 ()
((slot-2 :type (or string class-1))))

how would this be declared?

<!ELEMENT class-1 (slot-1)>
<!ELEMENT class-2 (slot-2)>
<!ELEMENT slot-1 #PCDATA>
<!ELEMENT slot-2 (#PCDATA | class-1)>

makes sense, but would seem to be disallowed by

[50] Mixed ::= '(' S? %( %'#PCDATA' (S? '|' S? %Mtoks)* ) S? ')*'
| '(' S? %('#PCDATA') S? ')'

which would appear to stipulate the repetition as soon as elements and
PCDATA appear together. on the other hand,

<!ELEMENT slot-2 (#PCDATA | class-1)*>

would not be a correct translation, since that is the equivalent of

(defClass class-2 ()
((slot-2 :type (list (or string class-1)))))

can anyone explain the ')*' requirement in [50]?

thanks, james.