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

    >> DTD, XML Schema(XMLS), RELAX NG
    [返回] 中文XML论坛 - 专业的XML技术讨论区XML.ORG.CN讨论区 - XML技术『 DTD/XML Schema 』 → [求助]请问如何用XML Schema实现无序和可选的element和Attribute 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 7727 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: [求助]请问如何用XML Schema实现无序和可选的element和Attribute 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     luver 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:7
      积分:99
      门派:XML.ORG.CN
      注册:2007/10/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给luver发送一个短消息 把luver加入好友 查看luver的个人资料 搜索luver在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看luver的博客楼主
    发贴心情 [求助]请问如何用XML Schema实现无序和可选的element和Attribute

    有这样的XML实例
    <?xml version="1.0"?>
    <root>
        <text att1="a" att2="b">
        <text att1="a" att2="b">
        <button att1="a" att2="b">
        <button att1="a" att2="b">
        <input att1="a" att2="b">
        <input att1="a" att2="b">
    </root>

    其中<text>,<button>,<input>可以有0个或多个,且无序,它们的属性无序且不必须有.
    这样的限制该如何实现?

    看了一下choice, all, sequence都不能满足,不知还有何方法?


       收藏   分享  
    顶(0)
      




    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/25 11:53:00
     
     luver 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:7
      积分:99
      门派:XML.ORG.CN
      注册:2007/10/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给luver发送一个短消息 把luver加入好友 查看luver的个人资料 搜索luver在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看luver的博客2
    发贴心情 
    这里人还真是少, 试了下 all ,可以实现element的无序和可选
    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/25 14:19:00
     
     luver 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:7
      积分:99
      门派:XML.ORG.CN
      注册:2007/10/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给luver发送一个短消息 把luver加入好友 查看luver的个人资料 搜索luver在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看luver的博客3
    发贴心情 
    上个星期通过查MSXML6.0的SDK,然后试了N次,大致发现这些规则:
    ================================================
    <?xml version="1.0"?>
    <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
    <xsd:element name="root" type="controlList"/>

    <!-- controls list -->
    <xsd:complexType name="controlList">
    <xsd:choice minOccurs="0" maxOccurs="2">
        <xsd:element name="text" minOccurs="0" maxOccurs="2" type="text"/>
        <xsd:element name="button" minOccurs="0" maxOccurs="unbounded" type="button"/>
        <xsd:element name="input" minOccurs="0" maxOccurs="3" type="input"/>
    </xsd:choice>
    </xsd:sequence>
    </xsd:complexType>

    。。。。。//省略掉若干
    </xsd:schema>
    ================================================

    用<all>时
      maxOccurs= 1: 1
       minOccurs= (0 | 1): 1
    maxOccurs只能为1,minOccurs可以为0或1,1为默认值.同时在<all>里的
    <element>的maxOccurs,minOccurs也只能为0或1,取其它值就会报XSD内容错误。这样就是说用all的话,里面的元素最多就只能出现1次(是无序的,而且可选)。


    然后改用<choice>
      maxOccurs= (nonNegativeInteger | unbounded) : 1
      minOccurs= nonNegativeInteger : 1
    然后发现里面的元素可以无序、可选,不过存在一个问题就是:<choice>的maxOccurs属性标定的是它里面<element>一共可以出现的个数,,但是<element>属性的maxOccurs就失去作用了,即XML文档中出现超过maxOccurs个数的这个<element>也不会报错,只是所有<element>的总数超过choice的maxOccurs时才报错。

    然后试了下<sequence>
      maxOccurs = (nonNegativeInteger | unbounded) : 1
      minOccurs = nonNegativeInteger : 1
    印象中使用这个后,所有元素都必须按规定的顺序出现,当sequence的maxOccurs为默认的1时,element的maxOccurs还是起作用的,各个element也是要按顺序出现的。
    当sequence的maxOccurs大于等于2时就会有很多千奇百怪的问题了:好像element不按顺序也可以了;element的maxOccurs也失灵了。
    最后慢慢分析,还是发现了里面的规则:其实sequence在任何时候都是要求element的顺序的,不过它的maxOccurs=n的意义是“在XML实例里最多可以出现n个符合规定的顺序序列”,
    比如:
    <sequence maxOccurs=n>
    <element a  minOccurs=0>
    <element b minOccurs=1>
    <element c minOccurs=1>
    </sequence>
    ========
    有这样的XML文档: <a/>    <a/><b/>    <b/></c>   <a/><b/><c/>   
    上述空格之间就是一个有效序列,当n >= 4时上述XML就是有效的XML文档。

    不过要注意的是如果 element a的minOccurs=1,那么不管n等于多少,上面的序列都会通不过,因为检查卡在第三个序列<b/></c>。

    OK,就这些了,上述测试是用MSXML6.0,在VC++环境下进行的

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/29 11:18:00
     
     hongjuesir 帅哥哟,离线,有人找我吗?魔羯座1982-1-1
      
      
      等级:大三(要不要学学XML呢?)
      文章:73
      积分:625
      门派:XML.ORG.CN
      注册:2007/6/12

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给hongjuesir发送一个短消息 把hongjuesir加入好友 查看hongjuesir的个人资料 搜索hongjuesir在『 DTD/XML Schema 』的所有贴子 点击这里发送电邮给hongjuesir 访问hongjuesir的主页 引用回复这个贴子 回复这个贴子 查看hongjuesir的博客4
    发贴心情 
    不错,支持一下!人确实少了些。

    ----------------------------------------------
    踏实啃书

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/30 18:04:00
     
     danielhy 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:23
      积分:149
      门派:XML.ORG.CN
      注册:2007/6/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给danielhy发送一个短消息 把danielhy加入好友 查看danielhy的个人资料 搜索danielhy在『 DTD/XML Schema 』的所有贴子 点击这里发送电邮给danielhy  引用回复这个贴子 回复这个贴子 查看danielhy的博客5
    发贴心情 
    <a/><b/><a/>
    出现类似这样的序列呢
    请给出完整的代码

    ----------------------------------------------
    人生不过一场记忆 有些事 如果 所 有人都 忘记了 是不 是等于 没有发 生过

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/31 13:31:00
     
     luver 帅哥哟,离线,有人找我吗?
      
      
      等级:大一新生
      文章:7
      积分:99
      门派:XML.ORG.CN
      注册:2007/10/23

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给luver发送一个短消息 把luver加入好友 查看luver的个人资料 搜索luver在『 DTD/XML Schema 』的所有贴子 引用回复这个贴子 回复这个贴子 查看luver的博客6
    发贴心情 
    呵,其实可以这样理解我那个<sequence>:
    <sequence maxOccurs=n>
    <element a  minOccurs=0>
    <element b minOccurs=1>
    <element c minOccurs=1>
    </sequence>

    第一个可以为<a/>或<b/>,出现<b/>之后必须出现<c/>,否则该有效序列结束
    所以<a/><b/><a/>  这个序列在n>=2时,是满足的。

    完整代码是指那个schema例子吗,借用别人发的一个:
    <?xml version="1.0"?>
    <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
        elementFormDefault="qualified">
        
        <xs:element name="root" type="rootType" />
       
        <xs:complexType name="rootType">
            <xs:choice minOccurs="0" maxOccurs="unbound">
                <xs:element name="text" type="myElement" minOccurs="0" maxOccurs="unbound"></xs:element>
                <xs:element name="button" type="myElement" minOccurs="0" maxOccurs="unbound"></xs:element>
                <xs:element name="input" type="myElement" minOccurs="0" maxOccurs="unbound"></xs:element>
            </xs:choice>
        </xs:complexType>    

        <xs:element name="myElement">
            <xs:complexType name="temp">
                <xs:attribute name="att1" type="xs:string"></xs:attribute>
                <xs:attribute name="att2" type="xs:string"></xs:attribute>
            </xs:complexType>
        </xs:element>
        
    </xs:schema>

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/10/31 15:14:00
     
     danielhy 帅哥哟,离线,有人找我吗?
      
      
      等级:大一(高数修炼中)
      文章:23
      积分:149
      门派:XML.ORG.CN
      注册:2007/6/5

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给danielhy发送一个短消息 把danielhy加入好友 查看danielhy的个人资料 搜索danielhy在『 DTD/XML Schema 』的所有贴子 点击这里发送电邮给danielhy  引用回复这个贴子 回复这个贴子 查看danielhy的博客7
    发贴心情 
    恩,看来是对概念还没理解好哈,SEQUENCE和ELEMENT的minOccurs定义不同

    ----------------------------------------------
    人生不过一场记忆 有些事 如果 所 有人都 忘记了 是不 是等于 没有发 生过

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2007/11/1 10:28:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 DTD/XML Schema 』的所有贴子 点击这里发送电邮给Google AdSense  访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/28 16:42:17

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

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