2010-04-14 107 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

相关问题