DTD现在用得已经很少了,但是还是有用得地方,如果用的是外部的DTD时,我们需要在我们的xml文件里面通过publicid或者systemid指向这个dtd资源,尤其在需要做验证的时候非常重要。对外部dtd引用的格式一般有下面几种
# <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook V4.1//EN" "docbook.dtd">
public分两部分,前面是id,后面是能locate到的url,id的格式一般是
prefix//owner-identifier//text-class text-description//language//display version
# <!DOCTYPE book SYSTEM "customdocbook.dtd">
system会直接的指向locate url
xsd是现在用得比较多的方式,xsd是dtd的代替者,官方的理由是:
XML Schema 可针对未来的需求进行扩展
XML Schema 更完善,功能更强大
XML Schema 基于 XML 编写
XML Schema 支持数据类型
XML Schema 支持命名空间
其中指出dtd是不支持命名空间的,所以在引用外部的xml schema的时候跟dtd的引用方式是有一些不一样的
<?xml version="1.0" encoding="GB2312"?> <book xmlns="http://www.sunxin.org/book" ① xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ② xsi:schemaLocation="http://www.sunxin.org/book http://www.sunxin.org/ book.xsd"> ③ <title>《Struts 2深入详解》</title> <author>孙鑫</author> </book>
上面是一个例子,xsi:schemaLocation就是对xsd的引用,他是有一对中间用空格隔开的字符串表示的,前面是命名空间,后面是可以定位的url,如果还有别的引用,就在后面继续用空格隔开,再接一对这样的字符串就可以了