2012-03-01 34 views
9

Tôi có một cấu trúc XML đơn giản:XML Schema Unique Cùng trên hai thuộc tính

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

Tôi muốn rowcolumn của bar phải là duy nhất với nhau. Vì vậy, ví dụ trên xác thực, trong khi các ví dụ sau không hợp lệ:

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

Tôi đã cố gắng thêm khóa vào lược đồ sau, nhưng tôi chưa tìm thấy giải pháp nào.

<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> 

Trả lời

10

Tôi hy vọng những điều sau đây sẽ thực hiện.

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

Đường viền duy nhất nằm trong phần khai báo phần tử cho phạm vi duy nhất, tôi phỏng đoán là foo. Nếu cấu trúc của bạn là thực sự giống như:

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

Và bạn muốn sự độc đáo là toàn cầu, sau đó hạn chế nên đi trên root.

Các vấn đề liên quan