[笔试题]什么是DTD能作到但是Schema却不能完成的?

如题,能否举例一二。谢谢。

DTD:

      首先你应该有这样的概念,知道什么是形式良好(well-formed)和有效的(validating),"形式良好”是对XML文件的基本要求,它使得XML文件结构清晰、完整,便于处理程序对其进行解析,进一步可以简化处理程序的编写工作,并加快浏览的速度、减少浏览所需占用的内存空间. 

      一个完全意义上的XML文件不仅应该是“形式良好的”,而且还应该是使用了这些自定义标记的“有效”的XML文件。一个“有效的”文件首先应该是“形式良好”的,必须遵守文件类型描述DTD(Document Type Definition)中定义的种种规定.它描述了一个置标语言的语法和词汇表,也就是定义了文件的整体结构以及文件的语法。简而言之,DTD规定了一个语法分析器为了解释一个“有效的”XML文件所需要知道的所有规则的细节。

      这个“规则”可以非常简单,仅仅列出所有有效的元素,例如元素、标记、属性、实体;也可以非常复杂,不但列出这些元素,还指出这些元素之间的内在联系,例如说明元素X元素中必须还包含元素Y或元素Z,但不能同时包含两个元素。

[Schema的由来]  --------------- Schema和DTD的作用异曲同工

     DTD源于SGML规范,同时也是XML1.0规范的重要组成部分,它可是描述XML文档结构的“正根儿”。但不可否认的是,它也有一些缺点,比如,它采用了非XML的语法规则、不支持多种多样的数据类型、扩展性较差等等。这些缺点最终使它面临四面楚歌的境地,以微软为首的众多公司提出了XML Schema,在保留并扩充了DTD原有的文档结构说明能力的同时,以期解决DTD与生俱来的种种问题。事实上,Schema也是XML的一种应用,它是将DTD重新使用XML语言规范来定义。

总结:在一定程度上来讲,DTD与Schema最大的区别是在语法上不同。不过更深层次的讲,你会发现Schema是一种比DTD更加适合俺们口味的东西,当然这些需要你在实际使用中去体会了,光Schema与生俱来的扩展性就决定你应该学好Schema,而不应该光满足DTD带给你的成就。

这里有一个刚写的例子,两者是一样的,看看吧 

[DTD]  ----注意,这里是外部DTD

<!ELEMENT ContactList ANY>

<!ELEMENT Person (Name, Age*, Gender*, Email*, Phone*, Address*)*>

<!ELEMENT Name (#PCDATA)>

<!ELEMENT Age (#PCDATA)>

<!ELEMENT Gender (#PCDATA)>

<!ELEMENT Email (#PCDATA)>

<!ELEMENT Phone (#PCDATA)>

<!ELEMENT Address (#PCDATA)>

[Schema]

<?xml version="1.0"?>

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";>

 <xsd:element name="ContactList">

  <xsd:complexType>

   <xsd:sequence>

    <xsd:element ref="Person" minOccurs="0" maxOccurs="unbounded" />

    </xsd:sequence>  

  </xsd:complexType>

 </xsd:element>

 

 <xsd:element name="Person">

  <xsd:complexType>

   <xsd:sequence>

    <xsd:element ref="Name" minOccurs="1" maxOccurs="1" />

    <xsd:element ref="Age" minOccurs="0" maxOccurs="unbounded" />

    <xsd:element ref="Gender" minOccurs="0" maxOccurs="unbounded" />

    <xsd:element ref="Email" minOccurs="0" maxOccurs="unbounded" />

    <xsd:element ref="Phone" minOccurs="0" maxOccurs="unbounded" />

    <xsd:element ref="Address" minOccurs="0" maxOccurs="unbounded" />

    </xsd:sequence>  

  </xsd:complexType>

 </xsd:element>

 

 <xsd:element name="Name" type="xsd:string"/>

 <xsd:element name="Age" type="xsd:string"/>

 <xsd:element name="Gender" type="xsd:string"/>

 <xsd:element name="Email" type="xsd:string"/>

 <xsd:element name="Phone" type="xsd:string"/>

 <xsd:element name="Address" type="xsd:string"/>

</xsd:schema>

温馨提示:答案为网友推荐,仅供参考
相似回答