[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] Re: Schemas and mixed content with Relax NG and W3C XML Schema
(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/
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] |
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
|