[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] Schemas and mixed content with Relax NG and W3C XML Schema
- From: "Andrew Welch" <andrew.j.welch@gmail.com>
- To: "Philippe Poulard" <philippe.poulard@sophia.inria.fr>
- Date: Wed, 16 Jul 2008 16:55:14 +0100
(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]