2010-11-24 43 views
4

我一些XML驗證創建XSD模式XML架構檢查限制枚舉值僅occrus一次

我想限制XML,所以它不是更多鈔票來輸入同一項目兩次:

<branches> 
    <branche>Bank</branche> 
    <branche>Bank</branche> 
</branches> 

但必須更多鈔票使用2個不同的項目:

<branches> 
    <branche>Bank</branche> 
    <branche>Insurance</branche> 
</branches> 

所以我有以下代碼:

<!-- definition of simple elements --> 
    <xs:simpleType name="branche"> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="Bank" maxOccurs="1"/> 
      <xs:enumeration value="Insurance" maxOccurs="1"/> 
     </xs:restriction> 
    </xs:simpleType> 

    <xs:element name="branches" minOccurs="0"> <!-- minOccurs becouse i want it to be posible to leave out the whole <branches> tag --> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="branche" type="branche" minOccurs="0" maxOccurs="2" /> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

使用maxOccurs="1"不會將其限制爲僅一個值,因爲'branche'標記可能會出現兩次。

我希望值(<branche>value</branche>)是唯一的。

thnx!

回答

4

查看關於身份限制的示例here。例如:

<xs:element name="branches" ...> 
    <xs:unique name="..."> 
    <xs:selector xpath="branche"/> 
    <xs:field xpath="."/> 
    </xs:key> 
</xs:element> 

不太確定的語法,但你明白了。

+0

我得到的基本理念,但它不工作。 我覺得'選擇器'是錯誤的,並且分支必須是complexType因爲它有子元素。我仍然試圖解決這個問題。會及時向大家發佈 – FLY 2010-11-24 14:56:04

3

通過使用下面的代碼固定它:

<xs:element name="branches" minOccurs="0"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="branche" type="branche" minOccurs="0" maxOccurs="2" /> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:unique name="brancheUnique"> 
     <xs:selector xpath="branche"/> 
     <xs:field xpath="."/> 
    </xs:unique> 
</xs:element> 

日Thnx lexicore指着我在正確的方向