RE: Repeating elements with fixed attribute values

It's a good error message because it describes the problem precisely:
Elements with the same name and in the same scope must have the same type
 
You can't do this in XML Schema 1.0, which assumes that the structure will
be in the element names, not in attribute values.
 
Some of the options open to you are:
 
(a) Use Schematron
 
(b) Use the xs:assert facility of XML Schema 1.1, which is implemented in
the current Saxon release
 
(c) Do validation as a two-step operation: first transform to a structure
that can be described in XML Schema, then perform XML Schema validation on
the result.
 
Using xs:assert it would look something like this:
 
<xs:complexType>
  <xs:sequence>
    <xs:element name="field" type="fieldType" minOcccurs="3" maxOccurs="3"/>
  </xs:sequence>
  <xs:assert test="field[1][@name = 'field1' and @value='1']"/>
  <xs:assert test="field[2][@name = 'field2' and @value='2']"/>
  <xs:assert test="field[3][@name = 'field3' and @value='3']"/>
</xs:complexType>
 
Michael Kay
http://www.saxonica.com/
 
 


  _____  

From: xmlschema-dev-request@w3.org [mailto:xmlschema-dev-request@w3.org] On
Behalf Of King, Jeffrey (Mission Systems)
Sent: 04 January 2008 14:29
To: xmlschema-dev@w3.org
Subject: Repeating elements with fixed attribute values




I have an xml document similar to this: 

<root> 
  <word name="one"> 
    <field name="field1" number="1">any string here</field> 
    <field name="field2" number="2">any string here</field> 
    <field name="field3" number="3">any string here</field> 
    . 
  </word> 
  <word name="two"> 
    <field name="field4" number="4">any string here</field> 
    <field name="field5" number="5">any string here</field> 
    <field name="field6" number="6">any string here</field> 
    . 
  </word> 
</root> 

The attributes have fixed values.  I am struggling to create a schema for
this. 

If I take this approach: 

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="root"> 
    <xs:complexType> 
      <xs:sequence> 
        <xs:element maxOccurs="1" minOccurs="1" name="word"> 
           <xs:complexType> 
             <xs:sequence> 
                                                                
             <xs:element maxOccurs="1" minOccurs="1" name="field"> 
               <xs:complexType> 
                  <xs:simpleContent> 
                     <xs:extension base="xs:string"> 
                       <xs:attribute name="name" type="xs:string"
use="required" fixed="field1" /> 
                       <xs:attribute name="number" type="xs:unsignedShort"
use="required" fixed="1" /> 
                     </xs:extension> 
                 </xs:simpleContent> 
              </xs:complexType> 
             </xs:element> 
                                                        
        <xs:element maxOccurs="1" minOccurs="1" name="field"> 
             <xs:complexType> 
                    <xs:simpleContent> 
                       <xs:extension base="xs:string"> 
                          <xs:attribute name="name" type="xs:string"
use="required" fixed="field2" /> 
                          <xs:attribute name="number"
type="xs:unsignedShort" use="required" fixed="2" /> 
                       </xs:extension> 
               </xs:simpleContent> 
                </xs:complexType> 
              </xs:element> 
            ... 
          etc. 

I get an error stating: "Elements with the same name and in the same scope
must have the same type".  I'm not sure what approach to take here.  I think
this is pretty elementary, but any help with finding a solution would be
appreciated.

Thank you. 

Jeffrey 

Received on Friday, 4 January 2008 15:27:50 UTC