繁体   English   中英

XML模式两级键/键引用约束

[英]XML schema two-level key/keyref constraints

给定以下xml:

<root>
  <families>
     <family familyname="Flintstone">
         <member name="Fred"/>
         <member name="Wilma"/>
     </family>
     <family familyname="Rubble">
         <member name="Barney"/>
         <member name="Betty"/>
         <member name="Bamm-Bamm"/>
     </family>
  </families>
  <employees>
     <employee name="Fred" familyname="Flintstone"/>
  <employees>
</root>

是否可以在xsd中构建密钥/密钥引用约束以验证雇员的有效性?

以下内容不适用于密钥(keyref向前转发):

<xs:key name="Individuals">
    <xs:selector xpath="./families/family/member"/>
    <xs:field xpath="@name"/>
    <xs:field xpath="../@familyname"/>
</xs:key>

有没有有效的替代方法?

不,如上所述是不可能的。 我假设“有效的替代方案”可以实现您的意图,即使它涉及对XML的更改。

在这种情况下,只需将新的必需属性添加到成员元素(以@key为例)。 这意味着您应该删除员工的姓名和姓氏,然后添加密钥。

它会更像一个“数据库” ...好处:

  • 较小的尺寸
  • 规范化设计
  • 键/ keyref容易做到
  • 毕竟,姓氏+成员/ @名称可能并不总是唯一的。 使用密钥,您就不会遇到这个问题,因为您实际上是在确定一个成员(不是一个人,因为同一人可能涉及两个不同的家庭,一个儿子,另一个丈夫)。

我意识到您的插图是真实世界场景的模型,因此我的最后收益可能与您的实际情况无关。 尽管如此,这仍是一种适用的思维方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM