当前位置:编程学习 > XML/UML >>

XML Schema

上面我们讨论了用DTD来验证XML文档,虽然DTD胜任对XML文档结构的验证,但是它有很多局限。为此,微软提出了Schema的方案来改进DTD。Schema从字面意义上来说,可以翻译成架构,它的基本意思是为XML文档制定一种模式。Schema相对于DTD的明显好处是XML Schema文档本身也是XML文档,而不是像DTD一样使用自成一体的语法。这就方便了用户和开发者,因为可以使用相同的工具来处理XML Schema和其他XML信息,而不必专门为Schema使用特殊的工具。Schema简单易懂,懂得XML语法规则的人都可以立刻理解它。Schema的概念提出已久,但W3C的标准最近才出来,相应的应用支持尚未完善,但采用Schema已成为XML发展的一个趋势。

请看下例:<movie.dtd>

[java]
<?xml version="1.0" encoding="UTF-8"?> 
<!ELEMENT movie (daoyan,zhuyan)> 
<!ELEMENT daoyan (#PCDATA)> 
<!ELEMENT zhuyan (#PCDATA)> 
<movie.xsd> 
 
<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified" attributeFormDefault="unqualified"> 
    <xs:element name="daoyan" type="xs:string" /> 
    <xs:element name="zhuyan" type="xs:string" /> 
    <xs:element name="movie"> 
        <xs:complexType> 
            <xs:choice maxOccurs="2"> 
                <xs:element ref="daoyan" /> 
                <xs:element ref="zhuyan" /> 
            </xs:choice> 
        </xs:complexType> 
    </xs:element> 
</xs:schema> 
<moviedtd.xml> 
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE movie SYSTEM "D:\java\xml\movie.dtd"> 
<movie> 
    <daoyan>张艺谋</daoyan> 
    <zhuyan>刘德华</zhuyan> 
</movie> 
<moviexsd.xml> 
<?xml version="1.0" encoding="UTF-8"?> 
<movie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="D:\java\xml\movie.xsd"> 
    <daoyan>张艺谋</daoyan> 
    <zhuyan>刘德华</zhuyan> 
</movie> 
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT movie (daoyan,zhuyan)>
<!ELEMENT daoyan (#PCDATA)>
<!ELEMENT zhuyan (#PCDATA)>
<movie.xsd>

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
 elementFormDefault="qualified" attributeFormDefault="unqualified">
 <xs:element name="daoyan" type="xs:string" />
 <xs:element name="zhuyan" type="xs:string" />
 <xs:element name="movie">
  <xs:complexType>
   <xs:choice maxOccurs="2">
    <xs:element ref="daoyan" />
    <xs:element ref="zhuyan" />
   </xs:choice>
  </xs:complexType>
 </xs:element>
</xs:schema>
<moviedtd.xml>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE movie SYSTEM "D:\java\xml\movie.dtd">
<movie>
 <daoyan>张艺谋</daoyan>
 <zhuyan>刘德华</zhuyan>
</movie>
<moviexsd.xml>
<?xml version="1.0" encoding="UTF-8"?>
<movie xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:noNamespaceSchemaLocation="D:\java\xml\movie.xsd">
 <daoyan>张艺谋</daoyan>
 <zhuyan>刘德华</zhuyan>
</movie>


从上例可看出这两个XML文当格式完全是一样的。只不过采用的模式文档不一样,一个是DTD 一个是 XML Schema。

在XML Schema中,元素是通过它的名字和类型来确定的。名称就是该元素的名字,类型就像JAVA中的一个变量,有基本类型(int double char等),有复杂类型(类类型)。在Schema中也是一样,类型(type)可以分为两种形式,一种是简单类型,一种是复合类型。简单类型不能包含元素和属性。复杂类型不仅可以包含属性,而且可以在其中嵌套其他的元素,或者可以和其他元素中的属性相关联。

 

摘自  Java教程
 
补充:Web开发 , 其他 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,