XML DTD

1.我们经常在项目中看到一些xml配置文件,它们都有着固定的标签写法,那么这些规范是怎么定义的呢,一种方式就是使用dtd来定义。文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。

这里写图片描述

图上为mybatis配置文件xml中引入的规范,文件中用到的标签以及各式都会遵循事先在dtd中写好的模板。

2.dtd申明在xml内部,下图在eclipse工程中进行演示
这里写图片描述

这里写图片描述

<?xml version="1.0"?>
<!DOCTYPE note [
  <!ELEMENT student (name,age,sex,phone)>
  <!ELEMENT name      (#PCDATA)>
  <!ELEMENT age    (#PCDATA)>
  <!ELEMENT sex (#PCDATA)>
  <!ELEMENT phone    (#PCDATA)>
]>
<student>
    <name>abc</name>
    <age>10</age>
    <sex></sex>
    <phone>123</phone>
</student>

类型
PCDATA 的意思是被解析的字符数据(parsed character data)。
被申明为此类型的标签内部包含的标签也会被解析识别

CDATA 的意思是字符数据(character data)。
CDATA 是不会被解析器解析的文本。在这些文本中的标签不会被当作标记来对待,其中的实体也不会被展开。

元素申明

<!ELEMENT 元素名称 类别>
<!ELEMENT 元素名称 (元素内容)>
<!ELEMENT 元素名称 EMPTY>   //空元素

<!ELEMENT 元素名称 ANY>  //带有任何内容的元素
<!ELEMENT 元素名称 (#PCDATA)>  //只有 PCDATA 的元素

//带有子元素(序列)的元素
<!ELEMENT 元素名称 (子元素名称 1)>
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)> 

使用正则表达式

//声明只出现一次的元素
<!ELEMENT 元素名称 (子元素名称)>
//声明最少出现一次的元素
<!ELEMENT 元素名称 (子元素名称+)>
//声明出现零次或多次的元素
<!ELEMENT 元素名称 (子元素名称*)>
//声明出现零次或一次的元素
<!ELEMENT 元素名称 (子元素名称?)>
//声明“非.../既...”类型的内容
<!ELEMENT note (to,from,header,(message|body))>

声明属性

<!ELEMENT square EMPTY>
<!ATTLIST square width CDATA "0">
合法的 XML:
<square width="100" />

这里写图片描述

这里写图片描述

3.引入外部dtd
这里写图片描述

classroom.dtd

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT classroom (grade,students)>
<!ATTLIST classroom id ID #REQUIRED>
<!ELEMENT grade (#PCDATA)>
<!ELEMENT students (student)>
<!ELEMENT student (id,name,age)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT age (#PCDATA)>

classroom.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE classroom SYSTEM "classroom.dtd">
<classroom id="c1">
 <grade>2011</grade>
 <students>
    <student>
      <id></id>
      <name></name>
      <age></age>
    </student>
 </students>
</classroom>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值