将元素值限制为其他元素XSD中的值

时间:2012-10-18 15:57:10

标签: xsd referential-integrity

给出以下类型:

<xsd:complexType name="Options">
    <xsd:sequence>
        <xsd:element name="option" maxOccurs="unbounded">
            <xsd:complexType>
                <xsd:all>
                    <xsd:element name="id" type="xsd:integer" />
                    <xsd:element name="label" type="xsd:string" />
                    <xsd:element name="value" type="xsd:string" minOccurs="0" />
                    <xsd:element name="dependency" type="xsd:integer" minOccurs="0" />
                </xsd:all>
            </xsd:complexType>
        </xsd:element>
    </xsd:sequence>
</xsd:complexType>

我如何表达dependency一个option必须作为id的{​​{1}}存在?

我想我应该使用optionxsd:key,但无法理解如何使用它们。

2 个答案:

答案 0 :(得分:0)

XSD 1.0不支持此功能。 XSD 1.1支持Conditional Types and assertions,这可能允许您这样做。对于xsd 1.0,您可以使用Schematron来实现此目的。

答案 1 :(得分:0)

约束只能在元素的上下文中表达。

<?xml version="1.0" encoding="utf-8" ?>
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)-->
<xsd:schema elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="Options">
        <xsd:sequence>
            <xsd:element name="option" maxOccurs="unbounded">
                <xsd:complexType>
                    <xsd:all>
                        <xsd:element name="id" type="xsd:integer"/>
                        <xsd:element name="label" type="xsd:string"/>
                        <xsd:element name="value" type="xsd:string" minOccurs="0"/>
                        <xsd:element name="dependency" type="xsd:integer" minOccurs="0"/>
                    </xsd:all>
                </xsd:complexType>
            </xsd:element>
        </xsd:sequence>
    </xsd:complexType>
    <xsd:element name="Options" type="Options">
        <xsd:key name="PK">
            <xsd:selector xpath="option"/>
            <xsd:field xpath="id"/>
        </xsd:key>
        <xsd:keyref name="FK" refer="PK">
            <xsd:selector xpath="option"/>
            <xsd:field xpath="dependency"/>
        </xsd:keyref>
    </xsd:element>
</xsd:schema>

enter image description here

如果您希望在多个实例中引用此类型以及您指定的约束,则必须始终定义全局元素,然后在特定上下文中引用该元素。

我想提一下,理解你在问题中使用“不同”这个词是非常重要的。如果你真的是这个意思,那么以上内容并没有给你这个意义。