由于字段评估到我的实例中的节点集,我无法生成标识约束。
给出一组XML样本:
<data>
<Clusters>
<Cluster FileID="0" Function="1">
<Isotopes>
<Isotope StickID="0"/>
<Isotope StickID="1"/>
</Isotopes>
</Cluster>
<Cluster FileID="0" Function="2">
<Isotopes>
<Isotope StickID="2"/>
</Isotopes>
</Cluster>
</Clusters>
</data>
我正在尝试创建一个约束,以便对于给定的Isotope元素,@ StickID与祖父父集群的@FileID和@Function的每个组合必须形成一个唯一的密钥。
如果从数据上下文中,我在Cluster上定义了选择器:
<xs:key name="ClusterStickRefIdentity">
<xs:selector xpath="Clusters"/>
<xs:field xpath="Cluster/Isotopes/Isotope/@StickID"/>
<xs:field xpath="@Function"/>
<xs:field xpath="@FileID"/>
</xs:key>
正如预期的那样,在验证实例时会产生错误,该实例称第一个字段的计算结果为具有多个成员的节点集,因为Isotopes元素可以包含无限数量的Isotope元素。
我的印象是字段只能应用于子上下文,这意味着我无法将我的选择器定义到比Cluster更深的任何节点,或者我可以吗?是否有可能建立我正在寻找的约束?