首页 > 代码库 > DTD约束

DTD约束

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>

<script type="text/javascript"> $(function () { $(‘pre.prettyprint code‘).each(function () { var lines = $(this).text().split(‘\n‘).length; var $numbering = $(‘
    ‘).addClass(‘pre-numbering‘).hide(); $(this).addClass(‘has-numbering‘).parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($(‘
  • ‘).text(i)); }; $numbering.fadeIn(1700); }); }); </script>

    DTD约束