XML Unique

最近一直很忙,一直没有空写blog

最近XML用的比较多,本来我以为XML不能实现类似数据库唯一主键的用途,查了下资料,找到Key和Unique这两个关键字可以实现这样的功能;指定unique的selector xpath(具体选择的xpath)和field(比对的字段)

<xsd:element name="root" type="myList">
  <xsd:unique name="myId">
   <xsd:selector xpath="./a"/>
   <xsd:field xpath="@ida"/>
  </xsd:unique>
 </xsd:element>
 <xsd:complexType name="myList">
  <xsd:sequence>
   <xsd:element name="a" maxOccurs="unbounded">
    <xsd:complexType>
     <xsd:attribute name="ida" type="xsd:NCName"/>
    </xsd:complexType>
   </xsd:element>
  </xsd:sequence>
 </xsd:complexType>

可以看出关键就是在他的父亲里面通过xpath定位到需要unique的字段,也就是这里的 ./a 和字段@ida的组合

但是如果在schema 里面指定了namespace,如:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.upzone.net/MSNRobot"  targetNamespace="http://www.upzone.net/MSNRobot" elementFormDefault="qualified">
这里targetNamespace和xmlns一至,而且指定elementFormDefault=qualified

同样情况指定unique时候xpath这样写:
<xs:unique name="testUnique">
   <xs:selector xpath="./Test"/>
   <xs:field xpath="@id"/>
  </xs:unique>
但是  schema验证时候unique并没有起作用,后来怀疑是命名空间的问题
于是修改schema,添加了一个前缀pdb指向相同的命名空间,  xmlns:pdb="http://www.upzone.net/MSNRobot",
unique把相应的prefix加上去 unique就起作用了,注意field也要加上pdb前缀
<xs:unique name="testUnique">
   <xs:selector xpath="./pdb:Test"/>
   <xs:field xpath="@id"/>
  </xs:unique>
  <xs:unique name="cmdUnique">
   <xs:selector xpath="./pdb:Command"/>
   <xs:field xpath="pdb:Title"/>
  </xs:unique>

转载于:https://www.cnblogs.com/upzone/archive/2006/10/25/539479.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值