以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  [原创]关于在XML Schema中实现条件判断的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=48701)


--  作者:gemingke
--  发布时间:6/19/2007 3:02:00 PM

--  [原创]关于在XML Schema中实现条件判断的问题
最近一直看到很多求助的帖子问怎样在Schema中实现条件判断,我打算在这里给大家说明一下。

XML Schema不是程序语言,程序语言中的if结构,在XML里面基本上是找不到的,因此要在XML Schema里面实现诸如“遇上A则B,遇上C则D”的结构很困难,即使偶尔解决了,也只能说是碰上了运气。

目前能够解决的一类结构是,“遇上A元素出现B元素,遇上C元素则出现D元素”,实例如下:

<xs:element name="some_container">
  <xs:complexType>
   <xs:choice>
    <xs:sequence>
     <xs:element name="A" type="xs:boolean"/>
    </xs:sequence>
    <xs:sequence>
     <xs:choice>
      <xs:element name="B" type="xs:boolean"/>
      <xs:element name="C" type="xs:boolean"/>
      <xs:element name="D" type="xs:boolean"/>
     </xs:choice>
     <xs:group ref="XY"/>
    </xs:sequence>
   </xs:choice>
  </xs:complexType>
 </xs:element>
 <xs:group name="XY">
  <xs:sequence>
   <xs:element name="X" type="xs:string"/>
   <xs:element name="Y" type="xs:string"/>
  </xs:sequence>
 </xs:group>

这是98900969r给我提供的一个解决方案,现在拿出来给大家参考。

至于其他的要根据元素的值来更换接下来出现的元素或元素的值,即“A元素值为a,则B元素出现,或B元素值为b”,我以为目前的XML Schema还不能做到这一步,也应该不会去做这一步,因为这已经是程序语言的范畴了,不再属于描述语言所应该做的职责。


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