新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> DTD, XML Schema(XMLS), RELAX NG
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DTD/XML Schema 』 → schema中key、keyref怎么确定唯一性约束啊? 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 11047 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: schema中key、keyref怎么确定唯一性约束啊? 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     cnsyEric 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:0
      积分:54
      门派:XML.ORG.CN
      注册:2005/11/6

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给cnsyEric发送一个短消息 把cnsyEric加入好友 查看cnsyEric的个人资料 搜索cnsyEric在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看cnsyEric的博客楼主
    发贴心情 schema中key、keyref怎么确定唯一性约束啊?

    我在一个XML文档bookinfor.xml中引用了一个bookinfor.xsd的schema,schema中使用了key、keyref等来定义关键字,xml文档中的bookid有重复,在xml spy中验证为什么通过了呢?
    bookinfor.xsd
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by  () -->
    <!-- edited with XML Spy 2005  by Eric HONG Oct 29 2005 -->
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"; elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="BookInfor">
      <xs:annotation>
       <xs:documentation>The information of a book</xs:documentation>
      </xs:annotation>
      <xs:complexType>
       <xs:sequence>
        <xs:element ref="BookItem" maxOccurs="unbounded"/>
        <xs:element ref="BookSort" maxOccurs="unbounded"/>
        <xs:element ref="BookQuantity" maxOccurs="unbounded"/>
       </xs:sequence>
      </xs:complexType>
    </xs:element>
    <xs:element name="BookItem">
      <xs:annotation>
       <xs:documentation>Basic infor of a book</xs:documentation>
      </xs:annotation>
      <xs:complexType>
       <xs:sequence>
        <xs:element name="BookId" type="xs:positiveInteger"/>
        <xs:element name="Nane" type="xs:string"/>
        <xs:element name="Sort" type="xs:positiveInteger"/>
        <xs:element name="Isbn" type="xs:string"/>
        <xs:element name="PubDate" type="xs:gYearMonth"/>
        <xs:element name="Author" type="xs:string"/>
        <xs:element name="Price">
         <xs:simpleType>
          <xs:restriction base="xs:decimal">
           <xs:fractionDigits value="2"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:element>
       </xs:sequence>
      </xs:complexType>
      <xs:key name="BookItem_BookId">
       <xs:selector xpath="BookItem"/>
       <xs:field xpath="@BookId"/>
      </xs:key>
      <xs:keyref name="BookItem_Sort" refer="BookSort_SortId">
       <xs:selector xpath="BookSort"/>
       <xs:field xpath="@Sort"/>
      </xs:keyref>
      <xs:unique name="BookItem_Id">
       <xs:selector xpath="BookItem"/>
       <xs:field xpath="@BookId"/>
      </xs:unique>
    </xs:element>
    <xs:element name="BookSort">
      <xs:annotation>
       <xs:documentation>sort of a book</xs:documentation>
      </xs:annotation>
      <xs:complexType>
       <xs:sequence>
        <xs:element name="SortId" type="xs:positiveInteger"/>
        <xs:element name="Name" type="xs:string"/>
        <xs:element name="Code" type="xs:string"/>
        <xs:element name="Remark" type="xs:string"/>
       </xs:sequence>
      </xs:complexType>
      <xs:key name="BookSort_SortId">
       <xs:selector xpath="BookSort"/>
       <xs:field xpath="@SortId"/>
      </xs:key>
    </xs:element>
    <xs:element name="BookQuantity">
      <xs:annotation>
       <xs:documentation>Quantity of a  sort of book</xs:documentation>
      </xs:annotation>
      <xs:complexType>
       <xs:sequence>
        <xs:element name="PriKey" type="xs:positiveInteger"/>
        <xs:element name="BookId" type="xs:positiveInteger"/>
        <xs:element name="Quantity">
         <xs:simpleType>
          <xs:restriction base="xs:integer">
           <xs:minInclusive value="0"/>
          </xs:restriction>
         </xs:simpleType>
        </xs:element>
        <xs:element name="RecDate" type="xs:date"/>
       </xs:sequence>
      </xs:complexType>
      <xs:keyref name="BookQuantity_BookId" refer="BookItem_BookId">
       <xs:selector xpath="BookItem"/>
       <xs:field xpath="@BookId"/>
      </xs:keyref>
      <xs:key name="BookQuantity_PriKey">
       <xs:selector xpath="BookQuantity"/>
       <xs:field xpath="@PriKey"/>
      </xs:key>
    </xs:element>
    </xs:schema>


    bookinfor.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- edited with XMLSpy v2005 rel. 3 U (http://www.altova.com) by  () -->
    <BookInfor xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"; xsi:noNamespaceSchemaLocation="C:\Documents and Settings\hy\桌面\spy\BookInfor.xsd">
    <BookItem>
      <BookId>1</BookId>
      <Nane>Java与XML数据库整合应用</Nane>
      <Sort>1</Sort>
      <Isbn>7-900637-51-6</Isbn>
      <PubDate>2002-01</PubDate>
      <Author>沈兆阳</Author>
      <Price>49.00</Price>
    </BookItem>
    <BookItem>
      <BookId>2</BookId>
      <Nane>XML Schema数据库编程指南</Nane>
      <Sort>1</Sort>
      <Isbn>7-5053-7674-8</Isbn>
      <PubDate>2002-05</PubDate>
      <Author>Chelsea Valentine</Author>
      <Price>48.00</Price>
    </BookItem>
    <BookItem>
      <BookId>2</BookId>
      <Nane>离散数学</Nane>
      <Sort>2</Sort>
      <Isbn>7-80513-069-8/O.04</Isbn>
      <PubDate>2005-01</PubDate>
      <Author>左孝凌</Author>
      <Price>16.00</Price>
    </BookItem>
    <BookItem>
      <BookId>4</BookId>
      <Nane>At Middle Age</Nane>
      <Sort>3</Sort>
      <Isbn>0-8351-1609-3</Isbn>
      <PubDate>1987-12</PubDate>
      <Author>Shen Rong</Author>
      <Price>35.00</Price>
    </BookItem>
    <BookSort>
      <SortId>1</SortId>
      <Name>XML相关</Name>
      <Code>TN-05-829</Code>
      <Remark>计算机-语言-学习</Remark>
    </BookSort>
    <BookSort>
      <SortId>2</SortId>
      <Name>数学教材</Name>
      <Code>JY-01-021</Code>
      <Remark>数学教材</Remark>
    </BookSort>
    <BookSort>
      <SortId>2</SortId>
      <Name>英文小说</Name>
      <Code>AD-02-03</Code>
      <Remark>英文小说</Remark>
    </BookSort>
    <BookQuantity>
      <PriKey>1</PriKey>
      <BookId>1</BookId>
      <Quantity>3</Quantity>
      <RecDate>2005-10-28</RecDate>
    </BookQuantity>
    <BookQuantity>
      <PriKey>2</PriKey>
      <BookId>2</BookId>
      <Quantity>6</Quantity>
      <RecDate>2005-10-28</RecDate>
    </BookQuantity>
    <BookQuantity>
      <PriKey>3</PriKey>
      <BookId>3</BookId>
      <Quantity>29</Quantity>
      <RecDate>2005-10-28</RecDate>
    </BookQuantity>
    <BookQuantity>
      <PriKey>4</PriKey>
      <BookId>4</BookId>
      <Quantity>6</Quantity>
      <RecDate>2005-10-28</RecDate>
    </BookQuantity>
    </BookInfor>


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/11/6 12:52:00
     
     jinx 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:0
      积分:54
      门派:XML.ORG.CN
      注册:2005/11/11

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给jinx发送一个短消息 把jinx加入好友 查看jinx的个人资料 搜索jinx在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看jinx的博客2
    发贴心情 
    肯定不行,因为Key约束里面指定的是@BookID
    <xs:unique name="BookItem_Id">
       <xs:selector xpath="BookItem"/>
       <xs:field xpath="@BookId"/>
    </xs:unique>
    而你的xml的结构却不是这样,数据是存放在BookId元素中而不是属性
    <BookItem>
      <BookId>1</BookId>
      <Nane>Java与XML数据库整合应用</Nane>
      <Sort>1</Sort>
      <Isbn>7-900637-51-6</Isbn>
      <PubDate>2002-01</PubDate>
      <Author>沈兆阳</Author>
      <Price>49.00</Price>
    </BookItem>
    所以根本就没有对BookId的内容进行验证,那当然能够通过验证了!
    所以大概应该改为:
    <xs:unique name="BookItem_Id">
       <xs:selector xpath="BookItem"/>
       <xs:field xpath="BookId"/>
    </xs:unique>
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/11/11 11:46:00
     
     cnEric 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:0
      积分:56
      门派:XML.ORG.CN
      注册:2005/10/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给cnEric发送一个短消息 把cnEric加入好友 查看cnEric的个人资料 搜索cnEric在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看cnEric的博客3
    发贴心情 
    也不行啊?
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/11/27 9:25:00
     
     yiyanxiyin 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:10
      积分:85
      门派:XML.ORG.CN
      注册:2008/8/1

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给yiyanxiyin发送一个短消息 把yiyanxiyin加入好友 查看yiyanxiyin的个人资料 搜索yiyanxiyin在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看yiyanxiyin的博客4
    发贴心情 
    应该将unique写在bookinfor下面
    如果写在bookitem下面,表示某一个bookitem下面的bookid唯一,和其他bookitem无关,所以验证没有用
    一定要注意范围
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2008/8/5 11:14:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DTD/XML Schema 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/27 21:50:28

    本主题贴数4,分页: [1]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    93.750ms