2013-10-08 117 views
0

我有一个元素“方法”和“名称”,如下所示: 我想要将“名称”中从“group1”的ref更改为“group2” “方法”,因为我想改变限制。根据其他元素值更改XSD中的限制

有没有可能这样做?

<xs:element name="Method" type="xs:string" /> 

<xs:element name="Name"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:choice maxOccurs="unbounded"> 
       <xs:element ref="group1" /> 
      </xs:choice> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 


<xs:element name="group1"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="ABC" /> 
      <xs:enumeration value="PQR" /> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

<xs:element name="group2"> 
    <xs:simpleType> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="XYZ" /> 
      <xs:enumeration value="ABC" /> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:element> 

回答

1

对于XSD 1.0,你必须验证XML架构之外的这样的限制。考虑使用XSLT进行额外的验证或Schematron。

对于XSD 1.1,您可以使用条件类型分配。请参阅xs:alternative。但是请注意,你将不得不进行重组。 xs:alternative测试可以引用元素本身和常量上的属性,而不引用文档中的任意元素;甚至不允许相对引用其他元素或属性。

相关问题