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

how to ensure the value of an attribute in the set of values of another attribute?

这是参数配置。

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

使用 xs:key 和 xs:keyref。在 params 的元素声明中,使用选择器 xpath="param"、字段 xpath="@name" 声明一个键,并使用选择器 xpath="param"、字段 xpath="@relyon" 声明相应的 keyref。