以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  请教大家关于Schema验证中Key的使用范围----------急,在线等待!  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=11116)


--  作者:moon1128
--  发布时间:10/19/2004 8:33:00 AM

--  请教大家关于Schema验证中Key的使用范围----------急,在线等待!
小弟,需要做一个组织机构的验证,但是遇到key的问题。
详细如下:
<Staff Id="1" />
<Role>
  <Staff>1</Staff>
</Role>

需要设定Id为Key。关键是Role中的Staff元素要引用Id的Key值。也就是说上例中的1(first)必须等于1(next)。
我看了一些资料,Key和KeyRef都是应用于两个元素属性,不知道能否实现这个例子。
谢谢好心人帮忙!


--  作者:moon1128
--  发布时间:10/19/2004 9:54:00 AM

--  
刚才自己解决了问题。Happy!!!
看来是Xpath掌握的不好。看了w3c的文档,才明白。
问题虽小,但是我认为还是文档研究的不够。
--  作者:doubleG
--  发布时间:10/19/2004 10:35:00 AM

--  
按照上面的XML写了个简单例子,不知合意不,写的不太好,呵呵
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="staffs">
   
  <xs:complexType>
   <xs:sequence>
    <xs:element name="Staff">
     <xs:complexType>
      <xs:attribute name="Id" type="xs:string"/>        </xs:complexType>
    </xs:element>
    <xs:element name="Role" type="staffType">
     <xs:keyref name="staffkey2" refer="staffKey">
       <xs:selector xpath="."/>
       <xs:field xpath="Staff"/>
     </xs:keyref>
    </xs:element>
   </xs:sequence>
  </xs:complexType>
  <xs:key name="staffKey">
   <xs:selector xpath="Staff"/>
   <xs:field xpath="@Id"/>
   </xs:key>
  
 </xs:element>
 <xs:complexType name="staffType">
  <xs:sequence>
   <xs:element name="Staff">
   </xs:element>
  </xs:sequence>
 </xs:complexType>
</xs:schema>

--  作者:doubleG
--  发布时间:10/19/2004 10:35:00 AM

--  
呵呵 恭喜!!
--  作者:moon1128
--  发布时间:10/20/2004 8:20:00 AM

--  
谢谢doubleG!!!
我实现的和你做的有一点不一样。就是我的keyref,是在Role元素外面。
不知道是不是作用域有区别。上面的staffkey2应该不能在Role元素外部使用吧。
还有一个问题,全局的和内部的key性能上面的影响大么?
--  作者:doubleG
--  发布时间:10/20/2004 9:08:00 AM

--  
对,keyref的要根据XPath来定位,所以我上面写的那个staffkey2的XPath是以Role为当前节点定位的,放在外面的话,就要看是在哪个<xs:element...之下,改动对应的XPath就可以了。因为是以XPath定位,所以效率上应该没有很大的差别。
--  作者:moon1128
--  发布时间:10/21/2004 4:01:00 PM

--  
谢谢doubleG!!!
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms