XML.一个简单的文档类型定义.DTD

8、XML规范形式与文档类型定义详解 本文详细解析了XML的规范形式与文档类型定义(DTD),涵盖了XML规范形式的基本要求、命名空间、文本和空白处理、引用解析、冗余节点去除等内容,并深入介绍了DTD的基本概念、元素与属性定义、交叉引用、扩展机制及其不足之处。同时,文章分析了XML规范形式与DTD在实际场景中的应用,并通过具体案例展示了它们的操作步骤和效果。最后,总结了XML规范形式与DTD的作用,并展望了未来XML技术的发展趋势。 阅读详情
  • Document Type Definition
  • DTD这个词其实在SGML就看到过了
  • 其实没错,DTD本是面向SGML的
  • 通常在某一领域内,其信息的交换都是遵循一定的模式的
  • 所以我们就希望来约束这种信息的模式,加强信息在双方之间的可交换性
  • XML本身SGML的子集,其DTD也自然可以拿来用
  • 而XML用的DTD又是SGML的DTD的一个子集

XML uses a subset of SGML DTD.
——Wikipedia

  • 不过这种简单省事的继承,使得DTD有太多的局限性和缺陷
    • 没有采用和XML一致的语法
    • 只能有一个外部DTD来约束XML
    • 不支持XML的命名空间
    • 缺乏足够的描述能力
    • 数据类型过于简单

DTD的引用

  • A Document Type Definition (DTD) defines the legal building blocks of an XML document.
  • It defines the document structure with a list of legal elements and attributes.
  • A DTD can be declared inline inside an XML document, or as an external reference.
    ——Wikipedia
内部DTD
<?xml version="1.0" standalone="yes"?>
<!DOCTYPE student [
  ...
  ...
]>
<student>
    ...
    ... 
</student> 
  • 这是一个XML文件,而其DTD规则是直接写在XML文件内的
  • 也可以单独写一个DTD文件,而只在XML内声明与这个XML文件所匹配的DTD文件的路径。
外部DTD
  • 外部DTD的好处就是,写一个DTD文件,可以为同类型的多个XML文件进行模式规定。这种模式规定其实称为验证更为准确。
  • 分为私有和公开的DTD引用方法
<!DOCTYPE root_element SYSTEM "DTD_location"> 
  • 私有DTD声明
    • root_element即是本XML文档根元素的名称
    • DTD_location表名DTD文件所在的URL,相对or绝对都可以
<!DOCTYPE root_element PUBLIC "DTD_name" "DTD_location"> 
  • 公有DTD声明
    • 这种 DTD 文件由由权威机构制订的、提供给特定行业或公众使用的 DTD,甚至可能通过了国际标准化组织的批准,以便数据的提供者和使用者对所交互的数据进行有效性验证
    • DTD_name有语法的限制
      • ”prefix//owner_of_the_DTD//description_of_the_DTD//language_identifier”
      • prefix
        • ISO:表示通过批准的ISO标准
        • +:表示通过批准的非ISO标准
        • -:表示未通过批准的非ISO标准
      • owner_of_the_DTD 表示发布该文档的机构。
      • description_of_the_DTD 表示对该文档的简短描述。
      • description_of_the_DTD 表示对该文档的简短描述。

DTD语法

元素
<!ELEMENT element-name category>
<!ELEMENT element-name (element-content)> 
  • <!ELEMEMT表示元素声明的开始
  • element-name为元素名。未在DTD中声明的元素名则不允许出现在其验证的XML文档中。
  • category或(element-content)
    • 这之后可以规定该元素的类型、或者是内容模型
类型与内容模型

<!ELEMENT element-name EMPTY> 
  • 空元素

<!ELEMENT element-name ANY> 
  • 包含任意内容的元素

<!ELEMENT element-name (#PCDATA)> 
  • 只包含文本,不能包含子元素

<!ELEMENT element-name (child1,child2,...)> 
  • 只包含子元素的元素
    • (child1,child2,…)是一个序列,同时也是内容模型的一种
    • 表示该元素必须包含这里面所有的子元素,且顺序一致
  • 关于内容模型
    • 各种符号
符号含义示例
,分隔序列,表明顺序如上
|选择前后任意一项(child1|child2)表示必须包含其中一个子元素
()内部作为整体(child1,child2)|child3表示要么包含child1和child2,要么包含child3
?表示相应的元素出现0或1次child1?表示出现child1元素0或1次(可有可无,有则一个)
+表示1次或多次child1+表示至少一个child1子元素
*表示0次或1次或多次child1*就随便出现几次喽
  • 一些示例
<!ELEMENT note (to,from,header,(message|body))>
<!ELEMENT article (title, subtitle?, author*, (para | table | list)+,bibliography?)> 

<!ELEMENT element-name (#PCDATA | child1 | child2 | ...)*> 
  • 包含指定的子元素以及文本内容的元素
属性
<!ATTLIST element-name attr-name attr-type attdesc> 
  • 多个属性如下
<!ATTLIST element-name attr1 attr-type1 attdesc1
                       attr2 attr-type2 attdesc2
>
或
<!ATTLIST element-name attr1 attr-type1 attdesc1>
<!ATTLIST element-name attr2 attr-type2 attdesc2>
  • 属性类型
    • CDATA:任意字符串
    • (value1|value2|…):枚举
    • NMTOKEN:必须是合法的XML标记
    • ID:文档中唯一,必须字母或下划线开头,可以由字母、数字、下划线、横线、点号组成
    • IDREF:表示引用另一个属性的ID
    • ENTIT:实体
  • 属性声明的描述
    • value:即属性的值,缺省为value
    • #REQUIRED:该属性是必须的
    • #IMPLIED:是可选的
    • #FIXED value:是可选的,如果有则必须为指定的value

  • 示例1
<!ATTLIST memo id ID #REQUIRED
          security (high|low) "high"
          keywords NMTOKENS #IMPLIED
   > 

  • 示例2
<!ELEMENT Step EMPTY> 
     <!ATTLIST Step id ID #REQUIRED> 
     <!ELEMENT StepLink EMPTY> 
     <!ATTLIST StepLink steps IDREFS #IMPLIED>

如果在该文档中存在:

<Step id="step1"/> 
<Step id="step2"/>

则

<StepLink steps="step1 step2"/> 

是正确的


实体

DTD实体


  • 内部参数实体
    • 用于在DTD规则中占位。不能用于XML文档中
    • 不能包含XML文本
<?xml version="1.0" standalone="no"?>
<!DOCTYPE student [
<!-- DTD example-->
<!ENTITY % p "(#PCDATA)">
<!ELEMENT student (id,surname,firstname)>
<!ELEMENT id %p;>
<!ELEMENT surname %p;>
<!ELEMENT firstname %p;>
]>

  • 外部参数实体
    • 相当于向DTD文件中导入一个外部文件

语法

<!ENTITY % entity-name SYSTEM "URI"> 
或
<!ENTITY % entity-name PUBLIC "public_ID" "URI"> 

示例

<?xml version="1.0" standalone="no"?>
<!DOCTYPE student [
  <!ENTITY % studentdtd SYSTEM "http://example.org/student.dtd">
  %studentdtd;
]> 
<!-- 相当于往XML导入了一个外部DTD -->

  • 一般实体
    • 用于在XML文档中占位
    • 字符内容实体
      • 预定义实体
      • 命名实体
      • 数值实体
    • 未解析实体
字符内容实体

声明

<!ENTITY entity-name "entity_value"> 

引用

&entity-name; 

示例

<?xml version="1.0" standalone="yes" ?>
<!DOCTYPE author [
  <!ELEMENT author (#PCDATA)>
  <!ENTITY us "You and me">
]>


<author>&us;</author> 
数值实体
<title>&#x5B66;&#x4E60;&#x58;&#x4D;&#x4C;</title>

将被解析为

<title>学习XML</title> 

使用了Unicode代码

未解析实体
  • 可以在 XML 数据中指明所关联的二进制文件(图片、音频、视频等等),然后由解析器通过调用适当的应用程序对这些文件进行解析
  • 可以在 XML 数据中指明所关联的二进制文件(图片、音频、视频等等),然后由解析器通过调用适当的应用程序对这些文件进行解析

示例

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE img [
  <!ELEMENT img EMPTY>
  <!ATTLIST img src ENTITY #REQUIRED>
  <!NOTATION gif SYSTEM "gif-viewer.exe">
  <!ENTITY logo SYSTEM "logo.gif" NDATA gif>  
]>
<img src="logo"/> 
一个简单的xml文件 <?xml version="1.0" encoding="GBK"?> <!DOCTYPE 联系人列表[ ]> &content; 刘保文 201003101115 腾飞汇通有限公司 18993380967 长安街95号 北京市 北京 赵慧 201003101116 天津软件公司 15022303392 长安街1234号 北京市 北京 立即下载

相关推荐

《XML》实验任务书 XML Basics & DTD 答案和解答

[实验目的] 1、安装并学习如何使用XMLSPY集成开发环境完成XML相关的开发工作。 2、熟悉和掌握XML规范的基本内容,包括XML声明、注释、处理指令、元素、属性、CDATA段、预定义实体、命名空间的使用,以及如何进行XML文档良构和有效性验证;能够灵活地使用XML层次数据来表示各种信息。 3、掌握如何在DTD文档中声明元素及其内容模型、属性,以及实体的声明和使用;使用内部/外部DTD规则,对XML数据文档的有效性进行约束。 [实验内容和步骤] 1、安装XMLSPY集成开发环境,新建XML、DTD文档,在各种不同的编辑视图中尝试采用不同的方式完成XML文档的编辑和查看;并使用XMLSPY提供的便利,建立XML、DTD两者之间的关联,进行XML文档的良构以及有效性验证。 2、附件中提供了一个名为SpyBase的Excel文件,其中包含Alias、Mission和Spy三张数据表,请分别完成下列任务: ①.使用一个XML文档(SpyBase1.xml)来描述其中包含的所有信息,基本保持原有数据的形式(不要将三个表中的数据进行嵌套)。请使用XML文档的Grid视图完成该文档的编写(需使用Grid视图中提供的表操作工具条),并验证文档的良构性。结果示例如下图所示(该图仅供参考,要求对aID、mID、spyID必须使用XML属性,其他字段使用XML元素): ②.使用一个XML文档(SpyBase2.xml)来描述其中包含的所有信息,要求通过XML元素的正确嵌套消除数据之间的参照关系产生的冗余。请使用XML文档的Text或者Grid视图完成该文档的编写,并验证文档的良构性。 3、为第二步中得到的SpyBase1.xml、SpyBase2.xml分别编写相应的外部DTD文档,建立模式与数据之间的关联,并进行文档有效性验证。在编写的DTD文档中,要求在DTD文档中使用参数实体来替换所有的#PCDATA和CDATA。 [实验思考] 在本实验中发现,一个XML文档可以通过平面的形式、或者层次的形式来表示多个关系数据库中的二维表,那么哪种方式更合适,为什么? [提交时间及内容] 最后提交时间 2013年?月?日 提交内容 提交SpyBase1.xml、SpyBase2.xml。 提交SpyBase1.dtd、SpyBase2.dtd。

一文XML简单入门

XML简单入门

Student111w的博客 715

基于DTD实现XML文档的有效性验证

(1)通过实验,进一步理解掌握DTD的语法规则,能够编写正确的DTD文档。 (2)通过实验,进一步理解应用DTD对XML文档进行验证的原理和方法。 (3)通过实验,进一步掌握在XML SPY中应用DTD验证XML文档有效性的方法。 (4)通过实验,学会利用标准DOM接口,编写Java程序实现基于DTD对XML文档的有效性验证。

xml基础

本文主要是学习XML 的笔记!

墨城烟柳ベ旧人殇的博客 3764

基于MATLAB/Simulink的四旋翼无人机PID控制与仿真(3)

《基于MATLAB/Simulink的四旋翼无人机PID控制与仿真》的第三篇,将为大家继续展示并完善控制与仿真模型。本文将在前文的基础上,完成控制环节增补、参数设置、测试等工作,在不考虑性能(低超调、快、准等)的前提下,保证系统对于一般输入(阶跃、斜坡)的响应稳定性。

jlx142857的博客 9321

嵌入式GUI显示驱动配置实战:从emWin硬件接口到SPI屏驱动优化

在嵌入式系统开发中,显示驱动是连接GUI库与物理屏幕的核心底层模块,其本质是CPU与显示控制器之间的数据“翻译”与“传输”系统。其工作原理是通过实现特定的硬件抽象层接口,将GUI生成的图形数据转换为屏幕能识别的时序和协议。这项技术的核心价值在于,它允许开发者在资源受限的MCU上,通过适配不同的硬件接口,以最小的硬件开销实现稳定的图形输出。其典型应用场景包括智能家居面板、工业HMI、可穿戴设备等嵌入式图形界面开发。本文将深入解析emWin GUI库的驱动框架,重点探讨如何针对SPI、I2C等串行接口进行高效的

weixin_29159711的博客 341

[XML]学习笔记(二)——DTD的声明与实体

一、 文档类型声明: a) 内部DTD的声明: DTD定义语句与XML文档在同一文档,通常放在头部。格式如下: <!DOCTYPE root_tag[ … ]> 注意在DOCTYPE后面跟的是根标记的名字。 b) 外部DTD的声明: i. … ii. 参数SYSTEM表明该DTD文档是一份私有DTD; 参数PUBLIC表示该DTD文档是一份公有DTD,而且多了一个参数

CristianoJason的博客 5540

Mac上安装Label Studio

以上步骤详细说明了如何在Mac上通过Anaconda安装Label Studio。记得根据你的具体需求选择是否创建新的环境,并使用conda或pip进行安装。安装完成后,务必验证Label Studio是否成功运行。

g2526的博客 1957

XML|DTD声明

XML\DTD的声明与属性声明 &XML元素定义

qq_63130170的博客 517

10分钟上手YOLOv11:最强姿态估计模型来了,代码开源,效果炸裂!

【10分钟玩转YOLOv11实时姿态估计】🚀 YOLOv11作为YOLO家族最新成员,在速度、精度和易用性上全面升级,尤其适用于姿态估计等复杂视觉任务。本文带您快速掌握: 1️⃣ 核心概念:姿态估计即识别人体17个关键点(如关节部位)并连接成数字骨架,是智能健身、体感游戏等应用的基础。 2️⃣ 技术优势: 超轻量级(最小仅2.9M参数) 极速推理(GPU仅1.7ms) 高精度(COCO mAP@50-95达50%) 3️⃣ 三步实操: ① 安装:pip install ultralytics ② 准备人物

weixin_41246802的博客 1787

Hodgkin-Huxley Model

介绍了经典的动力学模型:HH Model

weixin_73557167的博客 2473

XML文档

XML是 Extensible MarkupLanguage 的缩写,即可扩展标记语言,是一种简单的存储语言使用一系列简单的标记来描述结构化数据。XML与操作系统、编程语言的开发平台都无关。规范统一,实现不同系统之间的数据交互,XML技术应用广泛,最基本的如网站,应用程序的配置信息一般采用XML文件描述。目前常用的 XML解析技术有4种。

gghfzs1的博客 1194

Web自动化神操作:如何用OpenCV 破解滑块验证码?

验证码作为一种安全机制,可以有效防止暴力破解密码、发帖、灌水、刷票等,大家在做 Web 自动化的时候应该有碰到验证码这个难题,一般我们可以和开发沟通请求他们的帮助:去掉验证码或者设置一个万能验证码,而如果开发不帮忙我们该如何去解决呢? 本篇文章以 Java 语言为例教你怎么破解验证码。 现在大多数网址会采用滑块验证码的方式,下面以腾讯的滑块验证码为例,先来看看破解的效果: 要破解滑块验证码,我们一般采取的思路如下: 获取滑块到背景缺口图的距离 通过 selenium 的 Actio

不喝枸杞的程序员 2035

XML DTD备忘

xml dtd

GhostHouse 1417

时频分析之短时傅里叶变换(STFT)

本文利用MATLAB自带的spectrogram函数对信号做短时傅里叶变换。首先介绍了短时傅里叶变换(STFT)的背景及意义;其次,对spectrogram函数的用法以及变量的含义做了详细的解释;最后,利用MATLAB编写程序实现了信号的STFT。

总结论文中的算法并给出论文的复现代码 7万+

Linux内核配置选项详解及编译过程

在内核编译完成后,可以通过重启系统并选择新编译的内核来使用它。可以在该菜单下选择需要编译进内核的设备驱动,也可以选择将设备驱动编译为模块。可以在该菜单下选择需要编译进内核的设备驱动,也可以选择将设备驱动编译为模块。可以选择需要的调试选项,并根据需要启用或禁用相应的功能。可以选择需要的文件系统类型,并根据需要启用或禁用相应的选项。可以选择需要的网络协议和功能,并根据需要启用或禁用相应的选项。可以选择需要的调试选项,并根据需要启用或禁用相应的功能。可以选择需要的文件系统类型,并根据需要启用或禁用相应的选项。

TechGlide的博客 746

XML文档类型定义(DTD)

1.DTD的作用 XML文档是一种元标记语言,即一种定义标记语言的语言。在XML中可以创建新的标记语言,这些新的标记语言(也叫标记集)要通过文档类型定义(Document Type Definitions,DTD)来定义。 DTD文档是这些新的标记语言的法律性文档。如果XML文档的语法符合DTD的定义和规定,那么就称为一个合法的XML文档,否则就是非法的XML文档。 2.DTD元素 DTD

Dragon_Dai_2017的博客 1069

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

什么是XML DTD(文档类型定义)

DTD(文档类型定义)是XML文档的结构约束规范,用于定义元素、属性和关系。它通过<!ELEMENT>规定标签内容和嵌套规则(如顺序、数量),通过<!ATTLIST>定义属性类型(ID/CDATA等)和特征(必填/可选)。典型应用包括书籍XML的结构定义,要求book元素必须包含title、author和price。尽管DTD能确保文档格式合规,但存在不支持数据类型、扩展性差等局限,现多被XML Schema取代。DTD适用于简单配置文件的验证场景。

andrew_dear的博客 729

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

XML2-DTD(文档类型定义)

课时12:DTD快速入门 创建一个文件,文件后缀名为*.dtd; 步骤: 看xml中有几个元素,就在dtd文件中写几个<!ELEMENT>; 判断元素是简单元素还是复杂元素; 含有子节点就是复杂元素,否则就是简单元素; –复杂元素:<!ELEMENT 元素名称 (子元素)> –简单元素:<!ELEMENT 元素名称 (#PCDATA)> 需要在xml中引入dtd文件: <!DOCTYPE 根元素名称 SYSTEM "DTD文件路径"> dtd

weixin_45176509的博客 305

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

DTD 实例

DTD是XML文档的一种声明性规范,它描述了XML文档的结构,包括元素、属性以及它们之间的关系。DTD可以位于XML文档内部,也可以作为外部文件引用。DTD是XML文档结构的重要规范,它可以帮助我们验证XML文档的结构、提供文档描述以及实现文档共享。本文详细介绍了DTD的定义、作用、格式以及一个具体的DTD实例,希望能对您有所帮助。

froginwe11的博客 268

XML约束之DTD

XML的约束文件.以dtd结尾 语法: xml中有多少种元素,就有多少个<!ELEMENT> 具有子元素的复杂元素:<!ELEMENT 元素名称 (子元素名称...)> 不具有子元素的简单元素:<!ELEMENT 元素名称 (#PCDATA)> 1 XML使用dtd 1.1 引入外部dtd文件 <!DOCTYPE 根元素名称 SYSTEM "dtd文件路...

Student108的博客 251

关于XML文件(七)- XML DTD

XML DTD

flysh05的专栏 333

html dtd文档,DTD 简介

DTD 简介DTD全称为,Document Type Definition,中文翻译为文档类型定义,是一套为了进行程序间的数据交换而建立的关于标记符的语法规则。文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。内部的 DOCTYPE 声明假如 DTD 被包含在您的 XML 源文件中,它应当通...

weixin_29663547的博客 219

Java中关于如何解决XML文档中的 “No grammar constraints (DTD or XML Schema) referenced in the document.”警告

XML文档警告: No grammar constraints (DTD or XML Schema) referenced in the document. 解决方法很简单: 只需要在下方加上语句

C_beluga的博客 482

Struts2 DTD与XML文件编写

根据这个txt文件来进行DTD与XML编写 author:王维 title:鹿柴 content:空山不见人,但闻人语声。返景入深林,复照青苔上。   单独使用XML来实现(poem.xml) &lt;?xml version="1.0" encoding="UTF-8"?&gt; &lt;!DOCTYPE poem [ &lt;!ELEMENT poem (author, ...

chaoyv 146

dtd建模

XML,Extensible Markup Language,扩展性标识语言。文件的后缀名为.xml。就像HTML的是用来显示数据的,xml的作用是传输和存储数据的。其实说白了,xml就是便于不同应用、不同平台之间的数据共享和通信。如下图所示:①我们来看看他们的出生顺序: 其实XML的出生就是为了完善HTML的缺陷与局部性。②在使用方面的区别:这样的关系是不是更加容易理解:哥哥是一个妈生的,但是闺蜜就不是。JSON,Javascript Object Notation,js对象表示法。作用也是存储和交换文本

m0_67376124的博客 315
上一篇: XML.可扩展标记语言.就知道你不知道英文全称
下一篇: XML.更好的文档类型定义.XML Schema
木艮氵
博客等级 码龄11年 136粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值