以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  关于schema中complexType语法的问题  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=35461)


--  作者:piebila
--  发布时间:7/10/2006 8:56:00 PM

--  关于schema中complexType语法的问题
在schema中定义复合类型元素需要complexType进行声明,但好像必须跟sequence这个语法,此语法会带来一个问题,就是根据此schema定义而

写出的实例文档中对应此复合类型的元素必须按照schema中对子元素定义的先后顺序出现。如定义了以下的xml schema:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="customer">
  <xsd:complexType>
    <xsd:sequence>
    <xsd:element name="name" type="xsd:string"/>
    <xsd:element name="address" type="xsd:string" />
   </xsd:sequence>
   </xsd:complexType>
</xsd:element>
</xsd:schema>

那么根据它生成的其中一个xml文档为

<customer>
  <name>teiki</name>
  <address>No.237, Road Waitan, Shanghai</address>
</customer>

其中由于sequence中“name”在“address"前面,所以在实例文档中name也必须在address前面。


但是有时候我又并不想实例文档中的元素次序非常严格,所以想去掉sequence,而去掉了sequnece后,此复杂元素的声明就是错误的。因此我想问,有没有可能定义复杂类型元素中的子元素不需要次序,同时又可让此schema有效。望各位有经验的同仁不奢笔墨,指导指导俺


--  作者:gemingke
--  发布时间:7/10/2006 11:13:00 PM

--  
三个合成器:sequence,all,choice
sequence你已经知道了
all就是用来不限制出现次序,但是,每个元素最多只能出现一次
choice是用来选择,即可以出现子元素中的一个(或几个,这个我还没试验过)


--  作者:piebila
--  发布时间:7/12/2006 9:05:00 AM

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