[
Lists Home |
Date Index |
Thread Index
]
DTDs have the limitation that if an element allows PCDATA content (that is,
text nodes as immediate children) then you can say which elements may appear
as children, but you can't place any constraints on their order,
cardinality, or coexistence.
You can do a bit better than this in XML Schema, but not as much better as
one would like. If an element allows PCDATA content then you can't constrain
where it appears relative to the child elements, or what the PCDATA actually
contains.
Why not use two different elements, <block> which only allow block-level
elements, and <text> which only allows inline-level elements?
Michael Kay
http://www.saxonica.com/
> -----Original Message-----
> From: Mark O. Zorro [mailto:markozorro@fastmail.fm]
> Sent: 12 September 2005 02:03
> To: xml-dev@lists.xml.org
> Subject: [xml-dev] Constraining a "mixed" mixed content model
> (XHTML <div>)
>
> In XHTML, several elements, such as <div>, may contain what's called
> mixed content. Here's the mixed content model for <div>:
>
> <!ELEMENT div (#PCDATA | %Block.class; | %Inline.class;)*>
>
> %Block.class; includes several block-level (structural) elements, and
> %Inline.class includes several inline-level (text) elements.
>
> The mixed content model for <div> allows strange combinations which
> are valid but which are definitely unacceptable. For example, the
> following is valid XHTML, but definitely not very pretty:
>
> <div>Some text.<p>Some more text.</p> And <em>more</em> text.</div>
>
> I'd like to constrain the DTD content model, if at all possible, so
> <div> may have one, and only one, of the following:
>
> Either 1) (%Block.class)*
> Or 2) (#PCDATA | %Inline.class;)*
>
> (Thereby the "mixed" mixed content example given above will not
> validate to the constrained DTD content model I seek.)
>
> Anyway, I did some experimentation with some content models. Here's
> one content model I tried which, in a purely logical way, makes sense:
>
> <!ELEMENT div (((#PCDATA | %Inline.class;)*) | ((%Block.class;)*))>
>
> However, it definitely caused problems with TurboXML which analyzed it
> and gave the following error message:
>
> "#PCDATA may only appear in the top-level group of a content model"
>
> I'm getting the sinking feeling there's no way to build the content
> model I'd like in XML, at least which would work in a DTD. If not,
> why not? Would XML Schema or RelaxNG resolve the issue?
>
> Thanks in advance...
>
> Mark
> --
> Mark O. Zorro
> markozorro@fastmail.fm
>
> --
> http://www.fastmail.fm - Same, same, but different.
>
>
> -----------------------------------------------------------------
> The xml-dev list is sponsored by XML.org <http://www.xml.org>, an
> initiative of OASIS <http://www.oasis-open.org>
>
> The list archives are at http://lists.xml.org/archives/xml-dev/
>
> To subscribe or unsubscribe from this list use the subscription
> manager: <http://www.oasis-open.org/mlmanage/index.php>
>
>
|