[Home] [By Thread] [By Date] [Recent Entries]

  • From: Michael Kay <mike@s...>
  • To: xml-dev@l...
  • Date: Wed, 23 Mar 2011 17:28:58 +0000

On 23/03/2011 16:48, trubliphone wrote:
> Hello.  Is there any way to use variables w/in XSD?
>
> I would like to bind the maxOccurs attribute of an element to a value
> defined elsewhere in the XSD file.  It could either be defined as its
> own variable or as a computed value.  I've been working in XSL for so
> long, I just sort of assumed I could do this:
>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
>
>    <xs:element name="root">
>      <xs:complexContent>
>        <xs:sequence>
>          <xs:element name="foo" minOccurs="0" maxOccurs="$n"/>
>        </xs:sequence>
>      </xs:complexContent>
>    </xs:element>
>
>    <!-- I know this is wrong -->
>    <xs:variable name="n">23</xs:variable>
>
> </xs:schema>
>
> Obviously, this won't work.  But is there any way it could work?  I
> don't think so, I just thought I'd double-check.
>

I've been experimenting with the following extension to XSD 1.1:

<saxon:param name="n" select="23"/>

   <xs:complexType name="rootType">
     <xs:restriction base="xs:anyType">
       <xs:sequence>
         <xs:element name="foo" minOccurs="0" maxOccurs="unbounded"/>
       </xs:sequence>
       <xs:assert test="count(foo) le $n"/>
     </xs:restriction>
   </xs:complexType>

which is close to what you are looking for (with the value of n supplied from the command line or via the invokation API). I had this working in some simple cases, but found problems when used in conjunction with multi-document schemas, so I pulled it before the 9.3 release: however, I hope to put it back some time. I think the idea of being able to parameterize schema validation is a very powerful one.

Michael Kay
Saxonica




[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index]


Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member