xsd

2017-02-28 70 views
1

全局鍵/統一屬性全局鍵我試圖找到一種方法來創建一個全局屬性,該全局屬性將被架構中的所有元素使用,並將充當它們的關鍵/唯一屬性。 看起來接下來的例子:xsd

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" 
attributeFormDefault="unqualified" targetNamespace="http://www.NameSpace/Family" xmlns:tns="http://www.NameSpace/Family"> 
<xs:attribute name="id" type="xs:string"/> 
<xs:complexType name="parentType"> 
    <xs:sequence> 
    <xs:element name="Name" type="xs:string"/> 
    <xs:element name="Child" type="tns:childType" minOccurs="1" maxOccurs="unbounded"/> 
    </xs:sequence> 
    <xs:attribute ref="tns:id" use="required"/> 
</xs:complexType> 
<xs:complexType name="childType"> 
    <xs:sequence> 
    <xs:element name="Name" type="xs:string"/> 
    </xs:sequence> 
    <xs:attribute ref="tns:id" use="required"/> 
</xs:complexType> 
<xs:element name="Family"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="Parent" type="tns:parentType" minOccurs="1" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

現在可以說,例如,我創建1父與2名孩子,我想你定義一個鍵/上id屬性唯一的,這樣所有元素的ID(父母的孩子們)將會彼此不同

回答

1

你可以聲明id具有這樣的類型xsd:ID

<xs:attribute name="id" type="xs:ID"/> 

然後你引用聲明的屬性(如你已經這樣做了):

<xs:complexType name="parentType"> 
... 
    <xs:attribute ref="tns:id" use="required"/> 
</xs:complexType> 

你也可以只申報id屬性直接在類型或元素上。

xs:ID類型強制ID全局語義在文檔中的所有ID聲明的屬性。

0

要創建密鑰,請使用<xs:key>元素。在你的情況下,你想要在<Family>元素內的一組元素上建立一個密鑰。因此,您的密鑰將位於<xs:element>標籤內,該標籤定義爲Family

<xs:element name="Family"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="Parent" type="tns:parentType" minOccurs="1" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 

    <!-- SOMETHING LIKE THIS WILL DO --> 
    <xs:key name="id"> 
    <xs:selector xpath="tns:Parent|tns:Parent/tns:Child" /> 
    <xs:field xpath="@tns:id" /> 
    </xs:key> 
</xs:element> 

你也可以使用<xs:unique>代替<xs:key>。兩者之間的唯一區別是<xs:unique>允許該字段是可選的。在你的情況下,根據模式的定義,你的id屬性是必需的,使用<xs:unique><xs:key>將不會有差異。

+0

另請注意,我編輯了您的帖子以修復XSD中的5個拼寫錯誤。 –