[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] variables in XSD?
- From: Michael Kay <mike@saxonica.com>
- To: xml-dev@lists.xml.org
- 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]