Altova Mailing List Archives>Archive Index >xml-dev Archive Home >Recent entries >Thread Prev - Schemas and mixed content with Relax NG and W3C XML Schema [Thread Next] Re: [xml-dev] Schemas and mixed content with Relax NG and W3C XML SchemaTo: "Philippe Poulard" <philippe.poulard@------.-----.--> Date: 7/16/2008 3:55:00 PM (replying on-list this time) > I know that with DTDs, when a text is allowed with elements, the best we can > do is to allow it everywhere between other elements that can be repeated at > any place in the text : > > <!ELEMENT p (#PCDATA|a|ul|b|i|em)*> > > unfortunately, we can't enforce the text to be at a given place : > > <person>Mr <firstname>John</firstname><lastname>Doe</lastname></person> > > the following DTD is invalid, but explain what we'd like to have : > <!ELEMENT person (#PCDATA,firstname,lastname)> How about (xsd 1.1): <xs:complexType name="person" mixed="true"> <xs:sequence> <xs:element ref="firstname"/> <xs:element ref="lastname"/> </xs:sequence> <xs:assert test="text() eq node()[1]"/> </xs:complexType> ...which should check that the only text() node is the first child. I guess you could also do: <xs:assert test="not(text() >> firstname)"/> to make sure there are no text() nodes after the firstname element... If you wanted to enforce the positions of the text nodes you could do: <xs:assert test="text()[1] is node()[1]"/> <xs:assert test="text()[2] is node()[3]"/> etc -- Andrew Welch http://andrewjwelch.com Kernow: http://kernowforsaxon.sf.net/ | ||||||
| Company | Legal | Press | Partners | Careers | Sitemap | Contact Us | Altova Blog | Mobile | Full Site | |||
|
