一、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名称” “DTD的URL地址” >
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"[email protected]">
<!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>