以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  同类元素逐条验证问题,翻遍论坛帖子通读W3School教程仍无解,请高手相助  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=74606)


--  作者:jeff312
--  发布时间:5/1/2009 10:30:00 PM

--  同类元素逐条验证问题,翻遍论坛帖子通读W3School教程仍无解,请高手相助
在下初学schema,初时尝到schema数据定义的强大相当兴奋,可惜走到半路上乐不起来了,请看下面这case:

需验证的XML:
<document>
     <question id="1000">
 <answer>0</answer><!-- 值范围0-1 -->
     </question>
     <question id="2000">
 <answer>3</answer><!-- 值范围0-4 -->
     </question>
</document>

设想:document是一个调查问卷,里面有一系列的question,但每个question的答案范围不同,比如第一题如果answer值是2则不允许通过。

试验:
<xs:element name="question" id="id_1000">
  <xs:complexType>

    <xs:sequence>
      <xs:element name="answer" maxOccurs="1" minOccurs="1" nillable="false" >
        <xs:simpleType>
          <xs:restriction base="xs:integer">  
            <xs:minInclusive value="0" />  
            <xs:maxInclusive value="1" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>

    <xs:attribute type="xs:integer" name="id" fixed="1000" use="required" />

  </xs:complexType>
</xs:element>

<!-- 上面的element复制一遍,只是改了一下id和属性id的fixed值,当然还有answer的值域范围 -->

<xs:element name="question" id="id_2000">
  <xs:complexType>

    <xs:sequence>
      <xs:element name="answer" maxOccurs="1" minOccurs="1" nillable="false" >
        <xs:simpleType>
          <xs:restriction base="xs:integer">  
            <xs:minInclusive value="0" />   
            <xs:maxInclusive value="4" />
          </xs:restriction>
        </xs:simpleType>
      </xs:element>
    </xs:sequence>

    <xs:attribute type="xs:integer" name="id" fixed="2000" use="required" />

  </xs:complexType>
</xs:element>

XMLSPY2009企业版报错,大意是<question> 元素inconsistent,看来在schema里是不允许写成这样的(简化上面内容):
<...>
   <xs:element name="question" id="id_1000"/>
   <xs:element name="question" id="id_2000"/>
</...>
即使id不同也不行。

但实际情况是,每个question的answer都有独立的值域或类型(这里第一题是0-1,第二题是0- 4),我想通过它们的id属性(<xs:attribute .../>)来区分并分别针对某question独有的answer值域进行验证。

头痛,当前水平下我已经缴械投降了。


--  作者:hexun831012
--  发布时间:5/5/2009 9:46:00 PM

--  
XSD是定义文档结构的,结构就是结构,不应该和数据发生关系,数据的约束关系应当有应用逻辑本身来控制,这是系统设计的原则,就好比在数据库表上建立类似的约束一样不合理。
--  作者:jeff312
--  发布时间:5/8/2009 9:23:00 PM

--  
多谢版主,这下知道了反倒轻松了
--  作者:hexun831012
--  发布时间:5/8/2009 9:32:00 PM

--  
呵呵,你的心态很有意思,知道行不通反而轻松了,说明你有想法
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
62.500ms