如何在XML架构的.xsd上的2个声明元素的1个属性上设置(use =“required”)

时间:2014-12-08 19:13:29

标签: xml xsd xml-validation

示例:您使用required属性声明element1(因为它需要它),之后,您声明element2没有required属性,因为它在您的应用程序中不需要它...所以解决方案是删除'要求'''opcional'

问题是:如何在有时需要属性的同一元素上有所作为? (取决于你的应用程序).​​.....它甚至可能吗?

<xs:element name="DataSink" minOccurs="0" maxOccurs="unbounded">
<xs:complexType>
    <xs:attribute name="name" type="xs:ID" use="required">
        <xs:annotation>
            <xs:documentation>unique name of the data sink used also in code generation</xs:documentation>
        </xs:annotation>
    </xs:attribute>
    <xs:attribute name="timer" use="required">
        <xs:annotation>
            <xs:documentation>timer for datasink</xs:documentation>
        </xs:annotation>
    </xs:attribute>
</xs:complexType>

例如,在最后一个代码块中,DataSink元素需要'timer',但我的app中需要的一些Datasinks不需要该属性,因此我不会在我的XML上声明它并抛出异常< / p>

1 个答案:

答案 0 :(得分:0)

您似乎发现指定必需属性的类型与逻辑上不需要该属性的元素不匹配。

如果您希望有问题的两个元素共享一个类型,或者至少要使用类型层次结构中相关的类型,那么

  1. 声明属性为optional的类型。将它用于元素2。

  2. 通过限制从第一种类型派生第二种类型。在此类型上创建所需的属性。将此类型用于元素1.