这是参数配置。
<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>
答案 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;。