[XML-DEV Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

Re: One problem about XSD

  • From: Eric van der Vlist <vdv@d...>
  • To: xml-dev@l...
  • Date: Fri, 20 Oct 2006 10:29:51 +0200

xsd element any processcontents
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]


PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
 

Stylus Studio has published XML-DEV in RSS and ATOM formats, enabling users to easily subcribe to the list from their preferred news reader application.


Stylus Studio Sponsored Links are added links designed to provide related and additional information to the visitors of this website. they were not included by the author in the initial post. To view the content without the Sponsor Links please click here.

Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.