如何确保一个属性的值在另一个属性的值集中?
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。
这是参数配置。
<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。