首页 > 其他分享 >【XML】学习笔记第二章-dtd

【XML】学习笔记第二章-dtd

时间:2022-09-26 19:46:06浏览次数:53  
标签:XML dtd 外部 元素 DTD 实体 第二章 属性

目录

XML-DTD

DTD(Document Type Definition):文档类型定义。

DTD实际应用:

  • 验证XML文档数据的有效性
  • 为某类XML文档提供统一的格式和相同的结构
  • 保证在一定范围内,XML文档数据的交流和共享
  • 开发人员可根据DTD了解到XML文档的逻辑结构,从而写出相应的处理应用程序
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 根元素名称[
    <!ELEMENT 跟元素名称 (第一个子元素,第二个子元素)>
    <!ELEMENT 第一个子元素 (#PCDATA)>
    <!ELEMENT 第二个子元素 (#PCDATA)>
    <!ATTLIST 第一个子元素 属性一 CDATA #REQUIRED>    
]>
<根元素名称>
    <第一个子元素 属性一="任意内容">
        文本内容1
    </第一个子元素>
    <第二个子元素>
        文本内容2
    </第二个子元素>
</根元素名称>

符合XML语法的XML文档是结构良好的XML文档

通过DTD验证的XML文档是有效的XML文档

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE user[
    <!ELEMENT user (name,age)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ATTLIST name type CDATA #REQUIRED>    
]>
<user>
    <name type="zh-cn">
        李白
    </name>
    <age>
        18
    </age>
</user>

DTD语句

基本声明语句

  • 元素类型声明语句<!ELEMENT>
  • 属性列表声明语句<!ATTLIST>
  • 实体声明语句<!ENTITY>
  • 符号声明语句<!NOTATION>
  • 注释语句<!-- -->

定义关键字一定要大写,例如DOCTYPEELEMENT#PCDATA

元素名称与数据类型之间要有空格(元素名称后如果有内容,要用空格隔开)

引用外部DTD

<!DOCTYPE 根元素名称 SYSTEM "外部DTD的URL">

外部DTD优点:可以方便高效的被多个XML文档所共享(就是多个XML用同一个DTD)

外部DTD的创建方式、语法、内部DTD是一样的。

<!ELEMENT user (profile,name,age)>
<!ELEMENT profile (#PCDATA)>
<!ATTLIST profile type NOTATION (jpg|png)  #REQUIRED>
<!ELEMENT name (#PCDATA)>
<!ATTLIST name type CDATA #REQUIRED>  
<!ELEMENT age (#PCDATA)>
<!ENTITY Profile "USER PROFILE">
<!NOTATION jpg SYSTEM "Image/jpeg" >
<!NOTATION png SYSTEM "Image/png" >
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE user SYSTEM "dtd-learning03.dtd">
<user>
    <profile type="jpg">
        &Profile;
    </profile>
    <name type="zh-cn">
        李白
    </name>
    <age>
        18
    </age>
</user>

SYSTEM 表示私有的;公共有的PUBLIC。

另一种说法是:SYSTEM,表示当前的DTD文件是本地的
如果写的是PUBLIC,则表示引入的DTD文件是来自于网络的.

公共DTD名称约定:如果是ISO标准DTD,命名以“+”开始,否则以“-”开始。

<!DOCTYPE root_element PUBLIC "DTD_name" "DTD_location">

根据 DTD_name选择选择版本,如果根据DTD_name找不到相应版本,则根据DTD_location来找。

DTD元素

四种元素类型

  • 空元素。例如<tag/>
  • 仅包含文本的元素(即字符内容)例如:<tag>微信公众号:萌狼蓝天</tag>
  • 仅包含子元素的元素<tag><chid>mllt9920</chid></tag>
  • 混合型(包含内容既有内容也有文本内容)

元素定义关键字

  • EMPTY该元素不能包含元素和文本,但是可以有属性

  • ANY 该元素可以包含任何在DTD中定义的元素内容,而且元素出现的次数和顺序不受限制

  • #PCDATA仅能包含任何字符数据的文本内容。

  • (子元素)仅能包含子元素

在元素设置中,如果元素包含多个子元素,这些子元素是有顺序的,没有特殊约束情况下,每个子元素必须出现且只能出现一次。

修饰符号

符号 用途
() 用来给元素分组
\
+ 元素至少出现一次,一次或多次
* 元素可有可无,出现零次、一次或多次
? 元素可有可无,但最多只能出现一次
符号 用途 示例 示例说明
( ) 用来给元素分组 (古龙\ 金庸\
\ 在列出的对象中选择一个 (男人\
+ 该对象最少出现一次,可以出现多次 (1或多次) (成员+) 表示成员必须出现,而且可以出现多个成员
* 该对象允许出现零次到任意多次(0到多次) (爱好*) 爱好可以出现零次到多次
? 该对象可以出现,但只能出现一次 (0到1次) (菜鸟?) 菜鸟可以出现,也可以不出现,如果出现的话,最多只能出现一次
, 对象必须按指定的顺序出现 (西瓜,苹果,香蕉) 表示西瓜、苹果、香蕉必须出现,并且按这个顺序出现

无修饰符号:必须出现且只能出现一次

DTD中的属性

在DTD中声明元素属性的语法:¡<!ATTLIST 元素名称 [属性名 属性类型 [约束] [缺省值]]+>

在一个ATTLIST 中可以定义同一个元素下的一个或多个属性。如果包含多个属性声明,属性声明之间使用空格间隔。

  • 元素名称:属性所属的元素名称

  • 属性名:属性名称

  • 属性类型:属性的值类型

  • 约束:元素对属性的约束

属性修饰

修饰符 含义
#REQUIRED 表示该属性是必需的,不能没有。
#IMPLIED 表示该属性可以有也可以没有。
#FIXED 表示在XML文档中只会给出一个元素属性所定义的固定值。只有当约束为该值时,才能给出缺省值,注意缺省值必须给出。

属性类型

属性类型 说明
CDATA 单纯的字符数据,大部分属性都设置为该类型
ID 具有唯一性的属性值,需要注意的是该属性值必须以字母开头
IDREF 引用其它ID属性的值,该值必须在其它ID属性中存在
IDREFS 引用多个其它ID属性的值,中间使用空格间隔
ENTITY 未解析的外部实体类型,
ENTITIES 多个未解析的外部实体类型,中间使用空格间隔
NMTOKEN 是Name Token,就是关键字的名字。可以包含字母、数字、[.]、[-]、[_]、[:]组合的名字
NMTOKENS 多个NMTOKEN,中间使用空格间隔
NOTATION 标记名称
Enumerated 枚举类型的属性,只能从已有的属性中选取,不能填入新项目

例如

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE books SYSTEM "dtd-learning04.dtd">
<books>
	<book type="科技">
		<title>XML教程</title>
		<author lastname="罗" firstname="福强" />
		<author lastname="杨" firstname="剑"/>
		<press>清华大学出版社</press>
		<ISBN>978-7-302-22348-1</ISBN>
	</book>
	<book type="文学">
		<title>三国演义</title>
		<author  lastname="罗" firstname="贯中"/>
		<press>人民文学出版社</press>
		<ISBN>978702005155</ISBN>
	</book>
</books>
<!ELEMENT books (book)*>
<!ELEMENT book (title,author+,press,ISBN)>
<!ATTLIST book type CDATA #REQUIRED>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author EMPTY>
<!ATTLIST author lastname CDATA #REQUIRED>
<!ATTLIST author firstname CDATA #REQUIRED>
<!ELEMENT press (#PCDATA)>
<!ELEMENT ISBN (#PCDATA)>

DTD中的实体和符号

image-20220913094211761

内部实体的语法格式: <!ENTITY 实体名称 “实体内容”>

  • 实体名称:实体名称由DTD程序员自己定义,但必须满足唯一性,即不能重名。同时满足XML的命名规范。
  • 实体内容:所需要表达的文本内容

定义外部解析实体的语法:<!ENTITY 实体名称 SYSTEM|PUBLIC [“公共实体标识符” ] “URI/URL”>

  • URI/URL:所引用的外部文件的路径地址,被引用的外部文件必须是可以被解析的,扩展名没有限制。

  • 实体为PUBLIC时才会有相应的“公共实体标识符” ,如果为SYSTEM则没有“公共实体标识符”

定义外部未解析实体的语法:<!ENTITY 实体名称 SYSTEM “URL/URL” NDATA 标记名>

  • URI/URL:所引用的外部文件的路径地址
  • 标记名:被定义的符号的名称。

这是通过引用外部文件来解析实体。例如图片无法被解析,就用外部图片查看类工具解析

声明参数内部解析实体的语法:<!ENTITY % 参数实体名称 “实体内容”>

  • 参数实体名称:实体名称由DTD程序员自己定义,但必须满足唯一性,即不能重名。同时满足XML的命名规范。
  • 实体内容:所需要表达的文本内容。

声明参数外部解析实体的语法:<!ENTITY % 参数实体名称 SYSTEM “URL/URL">

URI/URL:所引用的外部文件的路径地址

  • 引用参数实体的语法:
  • %参数实体名称;

参数实体都是在dtd中被引用的

符号

普通符号的语法格式:<!NOTATION 符号名称 SYSTEM | PUBLIC [“公共符号标识符”] “URI\URL”>

  • 符号名称:名称由DTD程序员自己定义,但必须满足唯一性,即不能重名。同时满足XML的命名规范
  • URI\URL:外部来处理这些未解析数据的程序路径
  • 符号为PUBLIC时才会有相应的“公共符号标识符” ,如果为SYSTEM则没有“公共符号标识符”

一个小坑

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE user [
        <!ELEMENT user (profile|name|age)*>
        <!ELEMENT profile (#PCDATA)>
        <!ATTLIST profile
                type NOTATION (jpg|png)  #REQUIRED>
        <!ELEMENT name (#PCDATA)>
        <!ATTLIST name
                type CDATA #REQUIRED>
        <!ELEMENT age (#PCDATA)>
        <!NOTATION jpg SYSTEM "Image/jpeg" >
        <!NOTATION png SYSTEM "Image/png" >
        <!ENTITY PIC "888">
        ]>
<user>
    <profile type="jpg">&PIC;</profile>
    <name type="zh-cn">李白</name>
    <age>18</age>
</user>

如上,正常执行,但是如果是引用的外部dtd,如下

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE user SYSTEM "dtd-learning03.dtd">
<user>
    <profile type="jpg">&PIC;</profile>
    <name type="zh-cn">李白</name>
    <age>18</age>
</user>
<!ELEMENT user (profile,name,age)>
<!ELEMENT profile (#PCDATA)>
<!ATTLIST profile type NOTATION (jpg|png)  #REQUIRED><!--定义属性。这是profile的属性,属性名称为type,值为jpg或者png,必须填写属性-->
<!ELEMENT name (#PCDATA)>
<!ATTLIST name type CDATA #REQUIRED>  
<!ELEMENT age (#PCDATA)>
<!NOTATION jpg SYSTEM "Image/jpeg" >
<!NOTATION png SYSTEM "Image/png" >
<!ENTITY  PIC  "USER PROFILE" >

则会出现找不到&PIC;的情况,询问老师后知道:浏览器不支持这样……

标签:XML,dtd,外部,元素,DTD,实体,第二章,属性
From: https://www.cnblogs.com/mllt/p/xml-dtd.html

相关文章

  • 算法第二章3·7-4 最大子段和
    给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。要求算法的时间复杂......
  • log4j.xml
    <?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPElog4j:configurationPUBLIC"-//log4j/log4jConfiguration//EN""log4j.dtd"><log4j:configurationxmlns:log4j="......
  • 信2105-3班张少阳第二章方法有关动手动脑问题的解决和报告
    在Java语言中,其主要模块分为:类、方法、包。而包可以理解为一个文件夹,里面存放着各种Java文件供我们使用。而我们的一切实际操作都是在方法中实现的,可以理解为类给了我们一......
  • R语言学习丨数据存储文件格式知识,CSV,EXCEL,XML,JSON,MYSQL等
    今天笔记的主要学习内容是R语言里文件相关知识,包含CSV、Excel、XML、JSON、MySQL等。CSV文件基本介绍CSV(Comma-SeparatedValues,字符分隔值,分隔字符也可以不是逗号)是......
  • scrapy框架之生成存储文件json,xml、csv文件
    以起点小说网举例子网址https://www.qidian.com/rank/yuepiao/默认大家已经生成好scrapy项目了,如果不会请参考我之前的文章scrapy框架之创建项目运行爬虫爬取网页获......
  • 第二章-新手必须掌握的Linux命令
    1.强大好用的shell计算机硬件是由运算器、控制器、存储器、输入、输出设备等共同组成,系统内核让各种硬件设备各司其职及协同运行。shell是一个命令行工具(也称终端或壳)充......
  • uniapp小程序使用wxml-to-canvas生成图片
    开发框架:uniapp场景:小程序保存页面为图片并上传尝试方案:使用html-to-canvas,问题:小程序不允许操作dom,也无法获取dom标签,只能通过wx.createSelectorQuery()获取dom信息。......
  • tomcat server.xml标签功能详解
    1.具体说明  tomcat/conf/server.xml<!--属性说明port:指定一个端口,这个端口负责监听关闭Tomcat的请求shutdown:向以上端口发送的关闭服务器的命令字符串--><Se......
  • C#教程 - 标准XML标签(Standard XML Documentation Tags)
    更新记录转载请注明出处:2022年9月22日发布。2022年9月10日从笔记迁移到博客。标准XML标签(StandardXMLDocumentationTags)<summary>//简要说明<param>......
  • 第二章:PyTorch基础知识
    1、张量(tensor)张量我们可以理解为三维及以上的数据。2、使用PyTorch创建张量通过torch.rand()的方法,构造一个随机初始化的矩阵:importtorchx=torch.rand(4,3......