以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 DTD/XML Schema 』  (http://bbs.xml.org.cn/list.asp?boardid=23)
----  一个SCHEMA文件的两种写法!  (http://bbs.xml.org.cn/dispbbs.asp?boardid=23&rootid=&id=6919)


--  作者:wedge
--  发布时间:4/21/2004 8:41:00 PM

--  一个SCHEMA文件的两种写法!

book.xml
**************************
<?xml version="1.0" encoding="GB2312"?>
<booklist xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="book1.xsd">
  <book sales="N">
  <code>F8917</code>
  <title>ASP.net入门经典</title>
  <authorlist>
   <author>wedge</author>
  </authorlist>
  <price>590</price>
 </book>
 <book sales="N">
  <code>F8918</code>
  <title> 家常小菜</title>
  <authorlist>
   <author>wedge</author>
  </authorlist>
  <price>120</price>
 </book>
 </booklist>
**************************************
book1.xsd
<?xml version="1.0" encoding="GB2312"?>
<xs:element name="booklist">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="book" type="booktype" maxOccurs="unbounded"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
 <xs:complexType name="booktype">
  <xs:sequence>                                    
   <xs:element name="code" type="xs:string"/>
   <xs:element name="title" type="xs:string"/>
   <xs:element name="authorlist" type="authorlisttype"/>
   <xs:element name="price" type="price"/>
  </xs:sequence>
  <xs:attribute name="sales" use="required">
   <xs:simpleType>
    <xs:restriction base="xs:nmtoken">
     <xs:enumeration value="N"/>
     <xs:enumeration value="Y"/>
    </xs:restriction>   </xs:simpleType>
  </xs:attribute>
 </xs:complexType>
 <xs:complexType name="authorlisttype">
  <xs:sequence>
   <xs:element name="author" type="xs:string" fixed="wedge"/>
  </xs:sequence>
 </xs:complexType>
</xs:schema>
*************************************
book2.xsd
************************
<?xml version="1.0" encoding="GB2312"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
 <xs:element name="booklist">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="book" maxOccurs="unbounded">
                  <xs:complexType  >
    <xs:sequence>
        <xs:element name="code" type="xs:string"></xs:element>
<xs:element name="title" type="xs:string"></xs:element>
<xs:element name="authorlist">
<xs:complexType >
<xs:sequence>

<xs:element name="author" type="xs:string"></xs:element>


</xs:sequence>

</xs:complexType>


</xs:element>
<xs:element name="price" type="xs:string"></xs:element>

    
    </xs:sequence>
      <xs:attribute name="sales" use="required">
   <xs:simpleType>
    <xs:restriction base="xs:nmtoken">
     <xs:enumeration value="N"/>
     <xs:enumeration value="Y"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
    </xs:complexType>
              </xs:element>
   </xs:sequence>
  </xs:complexType>
 </xs:element>
</xs:schema>
主要是用了complextype实现的,偶认为book2.xsd的可读性没有book1.xsd的可读性好,book1.xsd是先定义好所需的结构类型,再在孙元素中引用。book2.xsd是直接用complextype定义子元素的。希望对大家有帮助!


--  作者:wedge
--  发布时间:4/22/2004 7:08:00 PM

--  
再加上一种方法,利用complextype的子元素group来做。先定义一个group组,在element中用ref引用。
bookgroup.xsd
*********************
<?xml version="1.0" encoding="GB2312"?>
<xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:group name="bookdata"><xs:sequence>
   <xs:element name="code" type="xs:string"/>
   <xs:element name="title" type="xs:string"/>
   <xs:element name="authorlist" type="authorlisttype"/>
   <xs:element name="price" type="xs:decimal"/>
  </xs:sequence>
  </xs:group> 
  
 <xs:element name="booklist">
  <xs:complexType>
   <xs:sequence>
    <xs:element name="book" type="booktype" maxOccurs="unbounded"/>
   </xs:sequence>
  </xs:complexType>
 </xs:element>

 <xs:complexType name="booktype">
  <xs:sequence>
  <xs:group ref="bookdata" minOccurs="1" maxOccurs="1">
</xs:group>
  
  </xs:sequence>
  <xs:attribute name="sales" use="required">
   <xs:simpleType>
    <xs:restriction base="xs:nmtoken">
     <xs:enumeration value="N"/>
     <xs:enumeration value="Y"/>
    </xs:restriction>
   </xs:simpleType>
  </xs:attribute>
 </xs:complexType>
 <xs:complexType name="authorlisttype">
  <xs:sequence>
   <xs:element name="author" type="xs:string" fixed="wedge"/>
  </xs:sequence>
 </xs:complexType>
</xs:schema>


--  作者:wedge
--  发布时间:4/22/2004 7:10:00 PM

--  
还可以有一种写法,把元素改为属性,用attributegroup来做。不过,好象属性写法不利于其结构化。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
46.875ms