xml入门二 之dtd约束

一、XML约束之DDT

1. 概念

XML中所有标签是用户自行定义的,在某些程序软件中使用的配置文件中,读取指定内容。为了约束用户必须编写指定的标签内容,而使用约束DDT(当然目前常使用的是schema,因为功能更强灵活)

这里引用两个概念:

格式良好的XML:遵循XML语法的XML

有效的XML:遵循约束文档的XML有效的XML必然是格式良好的XML,反过来则未必。

2. DDT特别注意,扩展名必须是.dtd且必须保存为utf-8的编码。也就意味的用记事本等编写的DTD文件,必须文件”-“另存为” utf-8垢编码。

3. 校验XML的有效性可以用两种,一种是非校验解析器如IE,另一种是校验解析器。

4. DDT文档的编写方式用两种:

4.1 直接写在XML中:

语法:在XML声明<?xml..之后面要用

<!DOCTYPE 根元素 [

DTD的声明

]>

4.2 写在一个单独的.dtd文件中:

DTD若在本地文件中,可以如下引入:

<!DOCTYPE 根元素 SYSTEM “DTD文档的路径” >

DTD 若在网上,可以如下引入:

<!DOCTYPE 根元素 PUBLIC “DTD名称” “DTDURL地址” >

5. 一种原始的方式来验证XML是否有效的XML.采用js来验证:

var xmldoc = newActiveXObject("Microsoft.XMLDOM");

xmldoc.validateOnParse = "true";

xmldoc.load("book.xml");//装配要验证的xml

var reason = xmldoc.parseError.reason;

var line=xmldoc.parseError.line; //然后可以分别用document.write(reason)验证出来

6. DTD语法

6.1 定义元素:语法:<!ELEMENT元素名称使用规则> 使用规则如下:

6.1.1 (#PCDATA)代表元素主体为普通文本。

6.1.2 EMPTY 代表元素为空元素没有主体内容。

6.1.3 ANY 代表元素主体为任意内容。

6.1.4 (子元素名)指定该元素有哪些子元素,子元素之间的顺序,出现次数等。出现的次数可以用正则中的+(1次以上)*(任意次0或多)?(0次或1)、没有+*?时则元素是必须一次。元素之间用|表示,元素之间任选其一。而用逗号,分隔表示,必须按元素顺序编写。

6.2 定义元素的属性:语法:

<!ATTLIST元素名称

属性名1 属性值类型设置说明

属性名2 属性值类型设置说明>

6.2.1 属性值类型:CDATA(文本内容)(xx|yy)枚举选其一、ID(表示取值不能重复)

6.2.2 设置说明:#REQURIED:必须的、#IMPLIED:可选属性、#FIXED:属性值是固定值了。直接值:属性有默认值。

6.3 定义实体

定义实体就是为一段内容指定一个名称,使用时通过这个名称就可以引用其所代表的内容。有两种实体:引用实体与参数实体。

引用实体:在DTD中定义,在XML中使用。

语法:<!ENTITY 实体名称 "实体内容">

xml中引用:&实体名称;

参数实体:在DTD中定义,在DTD中使用(单独的dtd文件中)

语法:<!ENTITY% 实体名称“实体内容”>

使用方式(注意是在DTD中使用):%实体名称;

7. 示例:

<?xml version="1.0"encoding="utf-8"?>

<!DOCTYPE CATALOG [

<!ENTITY AUTHOR "John Doe">

<!ENTITY COMPANY "JD Power Tools,Inc.">

<!ENTITY EMAIL"jd@jd-tools.com">

<!ELEMENT CATALOG (PRODUCT+)>

<!ELEMENT PRODUCT

(SPECIFICATIONS+,OPTIONS?,PRICE+,NOTES?)>

<!ATTLIST PRODUCT

NAME CDATA #IMPLIED

CATEGORY (HandTool|Table|Shop-Professional)"HandTool"

PARTNUM CDATA #IMPLIED

PLANT (Pittsburgh|Milwaukee|Chicago)"Chicago"

INVENTORY(InStock|Backordered|Discontinued) "InStock">

<!ELEMENT SPECIFICATIONS (#PCDATA)>

<!ATTLIST SPECIFICATIONS

WEIGHT CDATA #IMPLIED

POWER CDATA #IMPLIED>

<!ELEMENT OPTIONS (#PCDATA)>

<!ATTLIST OPTIONS

FINISH (Metal|Polished|Matte)"Matte"

ADAPTER (Included|Optional|NotApplicable)"Included"

CASE (HardShell|Soft|NotApplicable)"HardShell">

<!ELEMENT PRICE (#PCDATA)>

<!ATTLIST PRICE

MSRP CDATA #IMPLIED

WHOLESALE CDATA #IMPLIED

STREET CDATA #IMPLIED

SHIPPING CDATA #IMPLIED>

<!ELEMENT NOTES (#PCDATA)>

]>

<CATALOG>

<PRODUCT NAME="&AUTHOR;" CATEGORY="Table"PARTNUM="chen" PLANT="Milwaukee">

<SPECIFICATIONS WEIGHT="weight"POWER="80">specification</SPECIFICATIONS>

<OPTIONS FINISH="Polished" ADAPTER="Optional">可选</OPTIONS>

<PRICE WHOLESALE="dac">12.987</PRICE>

<NOTES>记事本</NOTES>

</PRODUCT>

</CATALOG>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值