|
[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Constraining a "mixed" mixed content model (XHTML <div>)
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@f...] > Sent: 12 September 2005 02:03 > To: xml-dev@l... > Subject: 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@f... > > -- > 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> > >
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|
|||||||||

Cart








