DTD

1.指定文档结构:可以提供一个DTD(Document Type Definition)或者一个Scheme定义;

    包含了规则:用于解释文档应该如何构成

    这些规则指定了每个元素的合法子元素和属性

2.例如:DTD <!Element font(name,size)> 即元素font包含两个子元素,name、size;

3.XML Scheme约束:如下

<xsd: element name="font">
 <xsd:sequence>
        <xsd:element name="name" type="xsd:string">
        <xsd:element name="size" type="xsd:int">
  </xsd:sequence>
</xsd:element>

与DTD相比,Scheme表达更加复杂的验证条件,约束更加详细,但是XML Scheme相对而言很复杂。所以两种方式

都有存在的价值,DTD仍然有很强的生命力

/****************************************************************************/

1、提供DTD的方式有多种:例如,

<?xml    version="1.0"?>

<!DOCTYPE configuration[

<!ELEMENT configuration...........>//根元素必须要有

more rules

....

]>
 <configuration>
.............
</configuration>
这种是纳入到了DOCTYPE声明中,使用代码块[........]限定其界限,且必须匹配根元素;

2、DTD会使文件长度变得很长,在XML文档内部提供DTD不是很普遍,因此,将其存储在外面更有意义:

SYSTEM声明可以实现这个目标,可以指定一个包含DTD的URL:

<!DOCTYPE configuration SYSTEM "config.dtd">
or
<!DOCTYPE configuration SYSTEM "http://myserver.com/config.dtd">

当使用的是相对URL时,需要给解析器一个File或者URL对象,而不是InputStream。

如果必须从一个输入流来解析,提供一个实体解析器:

 <!DOCTYPE web-app
    PUBLIC"-//Sun Microsystems,Inc.//DTD Web Application2.2//EN"
    "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<!--如果XML处理器知道如何定位带有PUBLIC标识的DTD,那么就不需要URL-->

如果使用的是DOM解析器,若想支持PUBLIC标识符,只需调用DocumentBuilder类的setEntityResolver方法

来安装EntityResolver接口的某个实现类的一个对象即可:

该接口只有一个方法:resolveEntity,典型的实现的代码如下:

class MysEntityResolver implements EntityResolver{
    public InputSource resolveEntity(String publicID,String systemID){
        if(publicID.equals(a known ID))
            return new InputSource(DTD data);
        else
            return null;
    }
}
//可以从InputStream,Reader或字符串构建输入源

3、不同类型的规则

    ELEMENT规则用于指定某个元素可以拥有怎么样的子元素;

<!ELEMENT menu(item)*><!--声明元素menu包含0个或多个item元素-->
<!ELEMENT font(name,size)><!--声明font元素包含name和size两个子元素-->
<!ELEMENT name(#PCDATA)><!--声明name元素包含文本-->
<!ELEMNET size(#PCDATA)><!--声明size元素包含文本-->

4、元素属性的规则

<!ATTLIST font style(plain|bold|italic|bold-italic) "plain">//style属性有四个合法属性值,其中plain是默认的
<!ATTLIST size unit CDATA #IMPLIED>//unit属性可以包含任意字符数据序列

5.安装错误处理器

通过DocumentBuilder类的setErrorHandler

builder.setErrorHandler(handler);






    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值