2012-10-18 58 views
0

考慮以下類型:限值看重其他元素XSD

<xsd:complexType name="Options"> 
    <xsd:sequence> 
     <xsd:element name="option" maxOccurs="unbounded"> 
      <xsd:complexType> 
       <xsd:all> 
        <xsd:element name="id" type="xsd:integer" /> 
        <xsd:element name="label" type="xsd:string" /> 
        <xsd:element name="value" type="xsd:string" minOccurs="0" /> 
        <xsd:element name="dependency" type="xsd:integer" minOccurs="0" /> 
       </xsd:all> 
      </xsd:complexType> 
     </xsd:element> 
    </xsd:sequence> 
</xsd:complexType> 

我怎樣才能表達一個optiondependency必須存在爲不同optionid

我想我應該使用xsd:keyxsd:keyref,但無法理解如何使用它們。

+0

通過「不同的選項」,你的意思是你也想強制你不能擁有自引用的選項? –

+0

@PetruGardea這真的很好,但首先我只是在這個問題的參考部分:) – Svish

回答

0

約束條件只能在元素的上下文中表達。

<?xml version="1.0" encoding="utf-8" ?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:complexType name="Options"> 
     <xsd:sequence> 
      <xsd:element name="option" maxOccurs="unbounded"> 
       <xsd:complexType> 
        <xsd:all> 
         <xsd:element name="id" type="xsd:integer"/> 
         <xsd:element name="label" type="xsd:string"/> 
         <xsd:element name="value" type="xsd:string" minOccurs="0"/> 
         <xsd:element name="dependency" type="xsd:integer" minOccurs="0"/> 
        </xsd:all> 
       </xsd:complexType> 
      </xsd:element> 
     </xsd:sequence> 
    </xsd:complexType> 
    <xsd:element name="Options" type="Options"> 
     <xsd:key name="PK"> 
      <xsd:selector xpath="option"/> 
      <xsd:field xpath="id"/> 
     </xsd:key> 
     <xsd:keyref name="FK" refer="PK"> 
      <xsd:selector xpath="option"/> 
      <xsd:field xpath="dependency"/> 
     </xsd:keyref> 
    </xsd:element> 
</xsd:schema> 

enter image description here

如果你想有這種類型的多個實例引用,與你指定的限制一起,那麼你就必須始終定義一個全局元素,然後參考該元素你的具體情況。

我想提一下,理解你在你的問題中使用「不同」這個詞是非常重要的。如果你確實是這個意思,那麼上面的內容並不能給你。

+0

因此,給定的元素'選項'和'選項'key'和'keyref'必須定義爲「選項」,父母,而不是「選項」,孩子? – Svish

+0

@Svish,是的,你必須在選項級別。這是從規範:'{選擇器}指定一個有限的XPath([XPath])表達式相對於被聲明的元素的實例。這必須標識約束條件適用的從屬元素的節點集合(即包含在聲明的元素中)。「你基本上試圖限制'option'元素,這意味着你必須向上移動一層。 –