DTD约束

来源:互联网 发布:ubuntu如何切换中文 编辑:程序博客网 时间:2024/05/17 02:39

XML文档声明:

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

XMl约束:
在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。

常用的XML约束:
1.XML DTD
2.XML Schema

DTD约束:(Document Type Definition)

引用DTD约束:

1.当引用在本地时,采用如下方式:

<!DOCTYPE 文档根节点 SYSTEM "DTD文件的URL">

2.当引用的文件是一个公共的文件时,采用如下形式:

<!DOCTYPE 文档根节点 PUBLIC "DTD名称" "DTD文件的URL">


DTD语法细节:

1.在DTD文档中使用ELEMENT声明一个XML元素,语法格式如下:

<!ELEMENT 元素名称 元素类型>

2.元素类型可以是元素内容、或类型
- 如果是元素内容:则需要使用()括起来,如:

#REQUIRED:必须设置属性#IMPLIED:可以设置也可以不设置#FIXED:说明该属性的取值固定为一个值,在XML文件中不能为该属性设置其他值。但需要为该属性提供这个值。直接只用默认值:在XML中可以设置该值也可以不设置该属性值。若没设置则使用默认值。

举例:

<!ATTLIST 页面作者  姓名 CDATA #IMPLIED  年龄 CDATA #IMPLIED  联系信息 CDATA #REQURED  网站职务 CDATA #FIXED "页面作者"  个人爱好 CDATA "上网>

常用的属性值类型:
1.CDATA:表示属性值为普通文本字符串。
2.ENUMERATED(枚举)
3.ID
4.ENTITY(实体)

属性值类型:
ENUMERATED(枚举):属性的类型可以是一组取值的列表,在XML文件中设置的数值型只能是这个了表中的某个值(枚举)

<? xml version="1.0" encoding="UTF-8" ?><!DOCTYPE 购物篮[   <!ELEMENT 肉 EMPTY>   <!ATTLIST 肉 品种(鸡肉|牛肉|猪肉|鱼肉)"鸡肉">]><购物篮>  < 品种="鱼肉"/>  < 品种="牛肉"/>  </></购物篮>

ID:
a.表示属性的设置值为一个唯一的值
b.ID属性的值只能由字母,下划线开始,不能出现空白字符。

<? xml version="1.0" encoding="UTF-8" ?><!DOCTYPE 联系人列表[  <!ELEMENT 联系人列表 ANY>  <!ELEMENT 联系人(姓名,EMAIL) ANY>  <!ELEMENT 姓名(#PCDATA) ANY>  <!ELEMENT EMAIL(#PCDATA) ANY>  <!ELEMENT 联系人 编号 ID #REQUIRED ANY>]><联系人列表>  <联系人 编号="a1">     <姓名>张三</姓名>    <EMAIL>zhang@163.com</EMAIL>  </联系人>    <联系人 编号="a2">     <姓名>栗色</姓名>    <EMAIL>lise@163.com</EMAIL>  </联系人></联系人列表>

实体定义:
1.实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。
2.DTD定义中,一条

<!ENTITY 实体名称 "实体内容" > : 直接转变成实体内容

2.引用方式:

&实体名称;

3.举例:

<ENTITY copyright "I am a programmer">......&copyright;

参数实体:
1.参数实体被DTD自身使用

2.语法格式:

%实体名称

3.举例1:

<!ENTITY % TAG_NAMES "姓名 | EMAIL | 电话 | 地址"><!ELEMENT 个人信息 (%TAG_NAMES; | 生日)><!ELEMENT 客户信息 (%TAG_NAMES; | 公司名)>

举例2:

<!ENTITY % common.attributes  "id ID #IMPLIED  account CDATA #REQUIRED ">...<!ATTLIST purchaseOrder %common.attributes;><!ATTLIST item %common.attributes;>


xml约束练习实例:

CATELOG.dtd:

<!ENTITY AUTHOR "John Doe">    <!ENTITY COMPANY "JD Power Tools, Inc.">    <!ENTITY EMAIL "jd@js-tools.com">    <!ELEMENT CATELOG (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 (#PCDATA)        WEIGHT CDATA #IMPLIED        POWER CDATA #IMPLIED>    <!ELEMENT OPTIONS (#PCDATA)>    <!ATTLIST OPTIONS        FINISH (Metal|Polished|Matte) "Matte"        ADAPTER (Included|Optional|NotAppcable) "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)>

CATELOG.xml

<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE CATELOG SYSTEM "../dtd/CATALOG.dtd"><CATELOG>  <PRODUCT NAME="asd"      CATEGORY="Shop-Professional">    <SPECIFICATIONS>abc</SPECIFICATIONS>    <OPTIONS>asdasdasd</OPTIONS>    <PRICE>aaaa</PRICE>    <NOTES>adasdasd</NOTES>  </PRODUCT></CATELOG>
0 1
原创粉丝点击