DTD
什么是html5?为什么html5里面不需要dtd
HTML5 是对 HTML 标准的第五次修订。其主要的目标是将互联网语义化,以便更好地被人类和机器阅读,并同时提供更好地支持各种媒体的嵌入。
HTML 5 不基于 SGML,因此不需要对 DTD 进行引用。
在 HTML 4.01 中,<!DOCTYPE> 声明引用 DTD,因为 HTML 4.01 基于 SGML。DTD
规定了标记语言的规则,这样浏览器才能正确地呈现内容。 HTML5 不基于 SGML,所以不需要引用 DTD。 在 HTML 4.01 中有三种
<!DOCTYPE> 声明。在 HTML5 中只有一种: <!DOCTYPE html>
XML与DTD的关系?
DTD”(Documnet Type Definition)是XML1.0版规格得一部分,它是XML文件得验证机制,属于XML文件组成得一部分,DTD在XML文件所扮演得角色就是定义XML文件的元素架构、元素标记和属性!
一旦我们定义好DTD,在使用编辑工具如XML Spy 或者验证工具 XML validate (微软网站均可以下载)就可以对编写好的XML文件进行DTD检查内容是否为合法的XML文件内容!
XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD,各公司都能够依照DTD建立XML文件,并且进行验证,如此就可以轻易建立标准一直的交换数据!
顺便介绍一下另一种验证机制 XML Schema ,和DTD相比较,其区别主要如下:
1.DTD拥有自己独特的语法和编写方式,它和XML文件的标记架构完全不同!
2.XML Schema 本身就是一份XML文件,使用标记语法定义其他的XML文件,因为它就是一份XML文件,在学习上不必特别学习DTD语法,而且支持数据类型,能够定义元素的内容!
XML Schema 是由微软所提出的规格草案,目前已成为建议规格,它的目的就是取代DTD成为XML文件下一代的验证机制!
DTD 是一套关于标记符的语法规则。它是XML1.0版规格得一部分,是XML文件的验证机制,属于XML文件组成的一部分。
DTD 是一种保证XML文档格式正确的有效方法,可以通过比较XML文档和DTD文件来看文档是否符合规范,元素和标签使用是否正确。一个DTD文档包含:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或符号规则。
XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD,各公司都能够依照DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。
DTD文件是一个ASCII的文本文件,后缀名为.dtd。
DTD增加了XML的有效性,
可以使用DTD校验自己的XML数据
DTD与Schema的比较:他们都用来校验自己的XML数据
DTD 的局限性
DTD不遵守XML语法(写XML文档实例时候用一种语法,写DTD的时候用另外一种语法)
DTD数据类型有限(与数据库数据类型不一致)
DTD不可扩展
DTD不支持命名空间(命名冲突)
Schema的新特性
Schema基于XML语法
Schema可以用能处理XML文档的工具处理
Schema大大扩充了数据类型,可以自定义数据类型
Schema支持元素的继承—Object-Oriented’ish
Schema支持属性组
带dtd 的xml 怎么解析
解决的方法是实现EntityResolver接口,具体代码如下:
import Java.io.ByteArrayInputStream;
import Java.io.IOException;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
public class IgnoreDTDEntityResolver implements EntityResolver {
@Override
public InputSource resolveEntity(String publicId, String systemId)
throws SAXException, IOException {
return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='UTF-8'?>".getBytes()));
}
}
然后设置SAXReader 对象如下:
SAXReader reader = new SAXReader();
reader.setEntityResolver(new IgnoreDTDEntityResolver()); // ignore dtd