如何确保另一个属性的值集中的属性值?

时间:2015-02-02 05:49:28

标签: xml xsd schema

这是参数配置。

<params>
  <param name="use-schema" />
  <param name="schema-domain" relyon="use-schema" />
  <param name="schema-file" relyon="use-schema" />
</params>

这是XSD内容的一部分。

<xs:element name="param">
    <xs:complexType>
        <xs:attribute name="name" type="xs:string" use="required"/>
        <xs:attribute name="relyon" type="xs:string" />
    </xs:complexType>
</xs:element>

我写了一些基本的xsd,但对relyon没有限制,如何编写XSD以确保relyon中宣布属性params/param/@name的值?

根据迈克尔的指示,我完成了任务。

这是XML文件

<?xml version="1.0" encoding="UTF-8"?>
<params
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="params.xsd">
  <param name="use-schema" />
  <param name="schema-domain" relyon="use-schema" />
  <param name="schema-file" relyon="use-schema" />
</params>

这是XSD文件。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="params">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="param" minOccurs="0" maxOccurs="100">
                    <xs:complexType>
                        <xs:attribute name="name" type="xs:string" use="required" />
                        <xs:attribute name="relyon" type="xs:string" />
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
        <xs:key name="paramName">
            <xs:selector xpath="./param" />
            <xs:field xpath="@name" />
        </xs:key>
        <xs:keyref name="relyon" refer="paramName">
            <xs:selector xpath="./param" />
            <xs:field xpath="@relyon" />
        </xs:keyref>
    </xs:element>
</xs:schema>

1 个答案:

答案 0 :(得分:1)

使用xs:key和xs:keyref。在params的元素声明中,使用选择器声明一个键xpath =&#34; param&#34;,field xpath =&#34; @ name&#34;,以及一个带选择器xpath =&#34; param&#的相应keyref 34;,字段xpath =&#34; @ relyon&#34;。