我写了一个包含多个“页面”元素的XML。 Page包含两个子元素“parse”& “行动”。
“parse”元素包含参数& “action”元素包含“func”。我想对“参数”的内容应用身份约束。 “功能”。
如下面的xml&它的架构。
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="test.xsd">
<page>
<parse>
<parameter>request_id</parameter>
<parameter>auth_key</parameter>
</parse>
<action>
<func>auth_key</func>
</action>
</page>
<page>
<parse>
<parameter>request_id</parameter>
<parameter>config_1</parameter>
</parse>
<action>
<func>config_1</func>
</action>
</page>
</test>
其XML架构是
<xs:element name="test">
<xs:complexType>
<xs:sequence>
<xs:element ref="page" maxOccurs="32"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="page">
<xs:complexType>
<xs:sequence>
<xs:element ref="parse"/>
<xs:element ref="action"/>
</xs:sequence>
</xs:complexType>
<xs:keyref name="arg_key_ref" refer="arg_key">
<xs:selector xpath="action/func"/>
<xs:field xpath="."/>
</xs:keyref>
<xs:key name="arg_key">
<xs:selector xpath="parse"/>
<xs:field xpath="parameter"/>
</xs:key>
</xs:element>
<xs:element name="parse">
<xs:complexType>
<xs:sequence>
<xs:element name="parameter" type="xs:string" maxOccurs="32"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="action">
<xs:complexType>
<xs:sequence>
<xs:element name="func" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</test>
问题是我得到Field "./parameter" of identity constraint "arg_key" matches more than one value within the scope of its selector; fields must match unique values
错误
因为 request_id 出现在两个“页面”元素中。是否可以仅在页面元素中限制选择器范围?
提前致谢, 基肖尔马布。
答案 0 :(得分:1)
密钥已经限定在页面级别,问题在于定义。
<xs:key name="arg_key">
<xs:selector xpath="parse"/>
<xs:field xpath="parameter"/>
</xs:key>
表示此parse
中的page
元素必须相对于其parameter
值唯一。但是field
xpath表达式必须与单个节点相对于selector
匹配,并且在您的情况下,每个parameter
元素中有多个parse
相反,你需要
<xs:key name="arg_key">
<xs:selector xpath="parse/parameter"/>
<xs:field xpath="."/>
</xs:key>
要求此parameter
中的所有page
元素在其自己的值方面都是唯一的。