2011-10-10 18 views
10

Hãy nói rằng tôi có tập tin XML sau đây:chế độc đáo trong XML Schema

<authors> 
    <author>a1</author> 
    <author>a2</author> 
    <lastmodified>2010</lastmodified> 
</authors> 

và một đoạn lược đồ XML:

<xs:element name="authors" maxOccurs="1"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="author" maxOccurs="unbounded" type="xs:string"> </xs:element> 
     <xs:element name="lastmodified" type="xs:date" minOccurs="0"/> 
    </xs:sequence> 
    </xs:complexType> 
    <xs:unique name="uniqueAuthor"> 
    <xs:selector xpath="."/> 
    <xs:field xpath="author"/> 
    </xs:unique> 
</xs:element> 

Những gì tôi muốn là làm cho một hạn chế đó sẽ không cho phép hai giống hệt nhau giá trị tác giả, nhưng giá trị trên không hoạt động theo cách đó. Tôi đang làm gì sai?

Trả lời

16

selector XPath chọn các nút phải là duy nhất (trong trường hợp đó, nó nên chọn các nút tác giả).

field XPath chọn "làm cho chúng độc đáo" (trong trường hợp đó, sử dụng . sẽ gây ra giá trị đã nhập, trong trường hợp văn bản giữa các thẻ, được coi là chuỗi).

Tài liệu

<?xml version="1.0" encoding="UTF-8"?> 
<authors> 
    <author>a1</author> 
    <author>a2</author> 
    <lastmodified>2010-01-01</lastmodified> 
</authors> 

nên có giá trị dựa trên giản đồ sau:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="authors"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="author" maxOccurs="unbounded" type="xs:string"/> 
     <xs:element name="lastmodified" type="xs:date" minOccurs="0"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:unique name="uniqueAuthor"> 
     <xs:selector xpath="author"/> 
     <xs:field xpath="."/> 
    </xs:unique> 
    </xs:element> 
</xs:schema> 

trong khi cái này không nên:

<?xml version="1.0" encoding="UTF-8"?> 
<authors> 
    <author>a1</author> 
    <author>a1</author> 
    <lastmodified>2010-01-01</lastmodified> 
</authors> 
1

Bạn có thể sử dụng type = "xs: ID" trên phần tử tác giả. Ngoài ra còn có loại IDREF để tham chiếu đến một ID.

+0

chế độc đáo có một số ưu điểm so với 'xs: ID ', xem http://www.xml.com/pub/a/2002/11/20/schemas.html#identity_constraints – DaveFar