0

给定以下类型:

<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>

我如何表达 a dependencyof oneoption必须作为 an idof a different存在option

我想我应该使用xsd:keyand xsd:keyref,但无法理解如何使用它们。

4

2 回答 2

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>

在此处输入图像描述

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

我要提到的是,了解您在问题中使用“不同”一词非常重要。如果你真的是认真的,那么上面的内容并没有给你。

于 2012-10-18T16:28:30.203 回答
0

XSD 1.0 不支持这一点。XSD 1.1 支持可能允许您执行此操作的条件类型和断言。对于 xsd 1.0,您可以使用Schematron来实现这一点。

于 2012-10-18T16:25:20.877 回答