Re: Attribute use depending on another attribute value

Here it is an working example of XML Schema with embedded ISO Schematron 
rules that allow the display attribute only if type is 1:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
   <xs:element name="root">
     <xs:complexType>
       <xs:sequence>
         <xs:element maxOccurs="unbounded" ref="test"/>
       </xs:sequence>
     </xs:complexType>
   </xs:element>
   <xs:element name="test">
     <xs:annotation>
       <xs:appinfo>
         <pattern xmlns="http://purl.oclc.org/dsdl/schematron" 
id="testDisplay">
         <rule context="test">
           <assert test="(@type!='1' and not(@display)) or 
@type='1'">The 'display' atribute can be used only if the value for the 
'type' attribute is 1!</assert>
         </rule></pattern>
       </xs:appinfo>
     </xs:annotation>
     <xs:complexType>
       <xs:attribute name="display" type="xs:NCName" use="optional"/>
       <xs:attribute name="type" use="required" type="xs:integer"/>
       <xs:attribute name="value" use="required" type="xs:integer"/>
     </xs:complexType>
   </xs:element>
</xs:schema>


Best Regards,
George
---------------------------------------------------------------------
George Cristian Bina - http://aboutxml.blogspot.com/
<oXygen/> XML Editor, Schema Editor and XSLT Editor/Debugger
http://www.oxygenxml.com


Michael Kay wrote:
> You can't: it's a classic example of a co-occurrence constraint, which XML
> Schema 1.0 doesn't support. Wait for 1.1, or use Relax NG or schematron, or
> change the attribute name from "type" to "xsi:type".
>  
> The content model for an element can only depend on the element name and the
> value of its xsi:type attribute.
>  
> Michael Kay
> http://www.saxonica.com/
> 
> 
>   _____  
> 
> From: xmlschema-dev-request@w3.org [mailto:xmlschema-dev-request@w3.org] On
> Behalf Of Jan Vosloo
> Sent: 17 May 2007 13:06
> To: xmlschema-dev@w3.org
> Subject: Attribute use depending on another attribute value
> 
> 
>   _____  
> 
> Click here to view our e-mail legal notice:
> http://www.mxit.co.za/pdfs/mxit_legal.pdf or call: +27 21 888 7000
> 
>   _____  
> 
> 
> Hi, 
> 
> I just want to know how I would do the following:
> 
>  
> 
> <root>
> 
>   <test type="1" value="1" display="disp"/>
> 
>   <test type="2" value="100" />
> 
> </root>
> 
>  
> 
> I want the 'display' attribute to be available for use depending on what the
> value for the 'type' attribute is.
> 
>  
> 
> How can I do this in a XSD (XML schema)??
> 
>  
> 
> Thanks you in advance  
> 
>  
> 
> 
> 
> Jan Vosloo | Developer
> 
> 
> Tel: +27 21 888 7000 | Fax: +27 21 883 8123 
> 
> 
> 
> 
>  
> 
> 

Received on Thursday, 17 May 2007 14:43:39 UTC