XML.orgXML.org
FOCUS AREAS |XML-DEV |XML.org DAILY NEWSLINK |REGISTRY |RESOURCES |ABOUT
OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.

 


Help: OASIS Mailing Lists Help | MarkMail Help

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]
Re: [xml-dev] One problem about XSD

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]


News | XML in Industry | Calendar | XML Registry
Marketplace | Resources | MyXML.org | Sponsors | Privacy Statement

Copyright 1993-2007 XML.org. This site is hosted by OASIS