是否有可能定义xs:any里面有必须要素?

时间:2011-10-07 11:53:21

标签: xml xsd any

我对结构为的XML文件感兴趣:

<resource>
    <type>STRING</type>
    <metadata>
        <ANY_EXTERNAL_ELEMENT1>
            <value>STRING</value> 
        </ANY_EXTERNAL_ELEMENT1>
        <ANY_EXTERNAL_ELEMENT2>
            <reference>STRING</reference> 
        </ANY_EXTERNAL_ELEMENT2>
        <ANY_EXTERNAL_ELEMENT3>
            <value>STRING</value> 
        </ANY_EXTERNAL_ELEMENT3>
    </metadata>
</resource>

元数据元素需要至少有一个ANY_EXTERNAL_ELEMENT子项,该子项只需要一个名为set {“reference”,“value”}的子元素。

是否可以在XMLSchema中实现它?

我尝试了什么:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="resource">
        <xs:complexType>
            <xs:all>
                <xs:element name="type" type="xs:string"/>
                <xs:element name="metadata">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:any minOccurs="1">
                                <xs:complexType>
                                    <xs:choice>
                                        <xs:element name="reference"/>
                                        <xs:element name="value"/>
                                    </xs:choice>
                                </xs:complexType>
                            </xs:any>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:all>
        </xs:complexType>
    </xs:element>

</xs:schema>

但它无效。 我需要帮助。

提前致谢。

2 个答案:

答案 0 :(得分:2)

不,你不能限制像这样的“外部”元素。 &lt; any&gt;的内容模型仅允许&lt; annotation&gt;。反转结构会不会更自然:

<resource>
<type>STRING</type>
<metadata>
    <external value="STRING">
        <ANY-EXTERNAL-ELEMENT-1/>
    </external>
    <external ref="STRING">
        <ANY-EXTERNAL-ELEMENT-2/>
    </external>
</metadata>
</resource>

但是,当然,我不知道你的用例是什么。

答案 1 :(得分:1)

我认为你必须在xs:choice中枚举可能的元素(ANY-EXTERNAL-ELEMENT-1等),或者如果你想包含它们的类型,可以通过替换组枚举。