1

I'm trying to make an XSD to validate some XML I'm getting back from a web service. It looks something like this:

<values>
    <value_1>asdf</value_1>
    <value_2>asdf</value_2>
    <value_3>asdf</value_3>
    <value_4>asdf</value_4>
    <value_5>asdf</value_5>
</values>

The number of inner value nodes is unbounded, but they always end with the _ + number suffix. Is it possible to to write an XSD that validates the node names themselves?

chinabuffet
  • 5,066
  • 7
  • 37
  • 60
  • I don't think you can manage number iterations in names with XSD, though I could be wrong. Usually, a classic form for that kind of XML is simply `...`, which you can easily point out in XSD. – Kilazur Aug 29 '14 at 12:54
  • See http://stackoverflow.com/questions/13935527/can-i-use-regular-expressions-in-xml-schema-element-names (but kudos to kjhughes for seeing an alternative solution!). – C. M. Sperberg-McQueen Aug 29 '14 at 14:20

2 Answers2

4

XSD 1.1 solution

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="values">
    <xs:complexType>
        <xs:sequence>
            <xs:any maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:assert test="every $e in * 
                         satisfies matches(local-name($e), 'value_[0-9]+')"/>
    </xs:complexType>
  </xs:element>
</xs:schema>
kjhughes
  • 98,039
  • 18
  • 159
  • 218
0

It is not possible with XSD 1.0. Elements must be always listed explicitly.

MiMo
  • 11,553
  • 1
  • 28
  • 46
  • It is [possible](http://stackoverflow.com/a/25569476/290085) with XSD 1.1 using assertions over `xs:any` elements. – kjhughes Aug 29 '14 at 13:39