2012-03-01 13 views
9

Tengo una sencilla estructura XML:esquema XML único Juntos en dos atributos

<foo> 
    <bar row="42" column="2"></bar> 
    <bar row="42" column="3"></bar> 
</foo> 

me gustaría row y columnbar de ser único juntos. Así que el ejemplo anterior valida, mientras que el siguiente no:

<foo> 
    <bar row="42" column="2"></bar> 
    <bar row="42" column="3"></bar> 
    <bar row="42" column="3"></bar> 
</foo> 

He estado tratando de añadir una clave para el siguiente esquema, pero no he encontrado todavía una solución.

<xs:element name="foo"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="bar" minOccurs="1" maxOccurs="unbounded"> 
       <xs:complexType> 
        <xs:simpleContent> 
         <xs:extension base="xs:string"> 
          <xs:attribute name="row" type="xs:positiveInteger" use="required"/> 
          <xs:attribute name="column" type="xs:positiveInteger" use="required"/> 
         </xs:extension> 
        </xs:simpleContent> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 

Respuesta

10

Me esperaba lo siguiente para hacerlo.

<xsd:element name="foo"> 
    ... 
    <xsd:unique name="rowcol"> 
    <xsd:selector xpath="bar"/> 
    <xsd:field xpath="@row"/> 
    <xsd:field xpath="@column"/> 
    </xsd:unique> 
</xsd:element> 

El contraint singularidad va dentro de la declaración de elemento para alcance singularidad, que conjeturo es foo. Si la estructura es en realidad más como:

<root> 
    <foo> ... </foo> 
    <foo> ... </foo> 
</root> 

y desea que la singularidad de ser global, entonces la restricción debería ir en root.

Cuestiones relacionadas