[XML-DEV Mailing List Archive Home]
[By Thread]
[By Date]
Re: [xml-dev] One problem about XSD
- From: Eric van der Vlist <vdv@...>
- To: xml-dev@...
- Date: Fri, 20 Oct 2006 10:29:51 +0200
Hi Rick,
Le vendredi 20 octobre 2006 à 18:00 +1000, Rick Jelliffe a écrit :
> You might try
> <xsd:all>
> <xsd:element name="a">...</xsd:element>
> <xsd:element name="b">...</xsd:element>
> <xsd:element name="c">...</xsd:element>
> <xsd:element name="d">...</xsd:element>
> <xsd:any namespace="##any" processContents="skip" />
> </xsd:all>
>
> If that doesn't work (I presume it doesn't)
No, it doesn't: xs:any isn't allowed within xs:all :) ...
> you could try unfolding it
> to give every
> permutation. Or just do something like the following
>
> <xsd:choice maxOccurs="unbounded">
> <xsd:element name="a">...</xsd:element>
> <xsd:element name="b">...</xsd:element>
> <xsd:element name="c">...</xsd:element>
> <xsd:element name="d">...</xsd:element>
> <xsd:any namespace="##any" processContents="skip" />
> </xsd:choice>
This is violating the UPS rule and doesn't work either...
Instead of that, you need to use xs:any with processContents set to
"lax" so that validation is applied only yo elements that are defined:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="EleParent">
<xs:complexType>
<xs:sequence>
<xs:any namespace="##any" processContents="lax" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="a"/>
<xs:element name="b"/>
<xs:element name="c"/>
<xs:element name="d"/>
</xs:schema>
> then use a Schematron schema to enforce the single rule
>
> <sch:rule context="whatever">
> <sch:assert test="count(a)=1">There should be one a</sch:assert>
> <sch:assert test="count(b)=1">There should be one b</sch:assert>
> <sch:assert test="count(c)=1">There should be one c</sch:assert>
> <sch:assert test="count(d)=1">There should be one d</sch:assert>
> </sch:rule>
This is still needed with the schema that I am proposing, and in
addition, you might want to check that <EleParent/> isn't included
within <EleParent/> (which is allowed by this schema) and write:
<sch:report test="EleParent">EleParent shouldn't be included
there!</sch:assert>
Of course, all that becomes simpler if you only allow elements from
foreign namespaces.
Hope this helps.
Eric
--
GPG-PGP: 2A528005
Le premier annuaire des apiculteurs 100% XML!
http://apiculteurs.info/
------------------------------------------------------------------------
Eric van der Vlist http://xmlfr.org http://dyomedea.com
(ISO) RELAX NG ISBN:0-596-00421-4 http://oreilly.com/catalog/relax
(W3C) XML Schema ISBN:0-596-00252-1 http://oreilly.com/catalog/xmlschema
------------------------------------------------------------------------
Ceci est une partie de message=?ISO-8859-1?Q?num=E9riquement?= =?ISO-8859-1?Q?_sign=E9e?=
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
|