文本节点上的XSD唯一约束

时间:2013-12-26 12:05:07

标签: xml xpath xsd unique xsd-validation

我正在尝试使用xsd schema

阻止我的“Shelf”属性中的相同文本值

我的xml文件

<?xml version="1.0" encoding="UTF-8" ?>

<BookTree >
<Shelf name="detective" isSport="false">
    <BookRef>Night Story</BookRef>      
</Shelf>
<Shelf name="sport" isSport="true">
    <BookRef>Basketball</BookRef>
    <BookRef>FootballAmerican</BookRef>
    <BookRef>FootballEurope</BookRef>
</Shelf>
    <Book name="Night Story" displayName="Night Story">Very Scary Story at Night</Book>
    <Book name="Basketball" displayName="Basketball">My Team</Book>
    <Book name="FootballAmerican" displayName="FootballAmerican">My style</Book>
    <Book name="FootballEurope" displayName="FootballEurope">Great team</Book>  
</BookTree>

我的xsd如下

 <?xml version="1.0" encoding="UTF-8"?>
  <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" >
 <xs:element name="BookTree">
 <xs:complexType>
   <xs:sequence>
    <xs:element maxOccurs="unbounded" ref="Shelf"/>
    <xs:element maxOccurs="unbounded" ref="Book"/>
  </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:element name="Shelf">
 <xs:complexType>
  <xs:sequence>
    <xs:element maxOccurs="unbounded" ref="BookRef"/>
  </xs:sequence>
  <xs:attribute name="isSport" use="required" type="xs:boolean"/>
  <xs:attribute name="name" use="required" type="xs:NCName"/>
  </xs:complexType>
 <xs:unique name="UniqueText">
  <xs:selector xpath="BookRef" /> 
  <xs:field xpath="@text" /> 
 </xs:unique>
 </xs:element>
 <xs:element name="BookRef" type="xs:string"/>
 <xs:element name="Book">
   <xs:complexType mixed="true">
    <xs:attribute name="displayName" use="required"/>
     <xs:attribute name="name" use="required"/>
      </xs:complexType>
    </xs:element>
  </xs:schema>

我试图阻止这样的情况:在同一架子“侦探”的Book属性中同样的文字“夜间非常可怕的故事”,另一个例子在同一个架子上的“FootballEurope”和“FoolballAmerican”中的同一文本“My style”

<Book name="Night Story" displayName="Night Story">Very Scary Story at Night</Book>
<Book name="Day Story" displayName="Night Story">Very Scary Story at Night</Book>
<Book name="Basketball" displayName="Basketball">My Team</Book>
<Book name="FootballAmerican" displayName="FootballAmerican">My style</Book>
<Book name="FootballEurope" displayName="FootballEurope">My style</Book> 

感谢您的帮助

0 个答案:

没有答案