2010-04-14 101 views
4

的存在,我有以下XML行:XML模式 - 如何綁定一個屬性的存在另一個屬性

<customer id="3" phone="123456" city="" /> <!--OK--> 
<customer id="4" />       <!--OK--> 
<customer id="3" phone="123456" />   <!--ERROR--> 
<customer id="3" city="" />     <!--ERROR--> 

「手機」和「城市」屬性都是可選的,但如果「手機」的存在,也應該存在「城市」,反之亦然。是否可以將這種限制插入到XML模式中?

謝謝。

回答

2

XML中的依賴關係(您稱爲「綁定」)的概念通過嵌套來管理。所以如果你想讓兩個字段相互依賴,你應該將它們定義爲嵌套的可選元素的強制屬性。

所以,如果你有超過架構的結構完全控制,你可以做這樣的事情:

<customer id="1"> 
    <contact city="Gotham" phone="batman's red phone" /> 
</customer> 

contact元素是內customer可選的,但cityphone不到contact強制性的。

該結構的相應的XSD將是這樣的:

<xs:element name="customer"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="contact" minOccurs="0"> 
      <xs:complexType> 
      <xs:attribute name="city" type="xs:string" use="required"/> 
      <xs:attribute name="phone" type="xs:string" use="required"/> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
     <xs:attribute name="id" type="xs:string"/> 
    </xs:complexType> 
    </xs:element> 
+0

也許使用=「需要」被需要「id」屬性 - 和xs:長應該是它的類型很好的猜測。 – 2010-04-14 12:19:58

+1

如果您不完全控制架構的結構會怎麼樣?是否可以使用原始文章的結構來做到這一點? – 2011-03-01 18:55:22

相關問題