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,278
  • 9
  • 40
  • 64
  • 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
  • 106,133
  • 27
  • 181
  • 240
0

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

MiMo
  • 11,793
  • 1
  • 33
  • 48
  • 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