解码 XML 和 DTD编写格式正确和定义明确的 XML

Python解析DBLP的xml文件 DBLP是一个应用广泛的科研论文数据集,发布形式为xml格式。地址为http://dblp.org/xml/。 使用Python语言编程提取数据集中的如下信息: Author,Title,Journal 即作者姓名,论文名,发表的期刊(会议)名 将上述信息存储在一个txt文本中。 python对XML的解析 常见的XML编程接口有DOM和SAX,这两种接口处理XML文件的方式不同,当然... 阅读详情

为什么要格式正确?

当 XML 开发人员谈到格式正确和格式不正确的 XML 时,我们并不是参加美学讨论。当然,格式正确的 XML 文档是满足以下三个基本结构需求的文档:

  • 有一个包含所有其它元素的父(或根)元素
  • 每个开始标记都有结束标记
  • 所有元素都正确嵌套的

清单 1 是一个格式正确的 XML 示例。请注意:该文档的父元素是 <person> ,每个开始标记都有一个结束标记,并且每个结束标记都有与其开始标记完全相同的定义。通常,开始标记和结束标记之间包括的是信息或文本。不过,在某些情况下,标记之间没有包括信息或文本。空标记必须用一个右斜杠来结束。 <nothing/> 就是一个空标记。


清单 1. 格式正确的 XML

<person>
    <firstname>Jane</firstname>
    <lastname>Fung</lastname>
    <nothing/>
</person>


清单 2 是一个格式不正确的 XML 示例。它举例说明了三种常见错误。首先,开始和结束 <firstname> 标记没有完全匹配。其次, <lastname> 标记没有结束标记。最后,空标记没有用一个右斜杠结束。


清单 2. 格式不正确的 XML

<person>
    <Firstname>Jane</firstname>
    <lastname>Fung
    <nothing>
</person>

DTD 中有什么内容?

XML 的优点在于它允许您定义自己的有意义的标记,因此您可以最大程度地定制文档。但 XML 就是 XML(可扩展),而人就是人(疯狂的人),这可能很快就会无法控制。解决方案是 DTD,它指定了 XML 文档的标记。简而言之,DTD 指定:可以在文档中存在的元素、那些元素可以具有的属性、在元素内部元素的层次结构以及元素在整个文档中出现的顺序。

虽然 DTD 不是必需的,但它们确实带来方便。DTD 适合三个基本用途。它能:

  • 对标记编制文档
  • 加强标记参数内部的一致性
  • 使 XML 语法分析器能够确认文档

如果不对 XML 文档进行 DTD 定义,文档就无法由 XML 语法分析器进行确认。使用 XML Schema 实例来代替 DTD 如何?清单 3 是清单 1 中显示的 XML 文档的 DTD。

清单 3. 精简 person.xml 的 DTD

<!ELEMENT person (firstname, lastname)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT nothing EMPTY>

关于示例的几点说明

清单 3 中 DTD 的第一行定义了 XML 文档的父元素: person 。person 元素有两个子元素: firstname 和 lastname 。

第二和第三行包含了元素属性 #PCDATA ,它表明 firstname 和 lastname 元素可能包含经过语法分析的字符数据(在这种情况下是文本)。DTD 文件的最后一行描述了一个空标记: nothing 。

从清单 3 中的 DTD 可以看出,任何阅读我们的 XML 文档的人(以及对它进行语法分析的语法分析器)都知道 person 元素仅包含两个文本元素: firstname 和 lastname 。此外,DTD 规定,在整个文档中, firstname 元素必须在 lastname 元素之前出现。

在转到更复杂的示例之前,让我们回顾一下一些最常用的 DTD 语法元素。

DTD 语法快速指南

A、B、C 和 D 是在下例中代表元素的变量。

元素必须有正好一个 A 、至少一个 B (由加号表示)、零个或多个 C (由星号表示)以及零个或一个 D (由问号表示):

<!ELEMENT element (A, B+, C*, D?)>

元素可能有 A 或 B 或 C 之一:

<!ELEMENT element (A | B | C)>

元素不包含任何内容:

<!ELEMENT element EMPTY>

元素可以包含在 DTD 中列出的任何元素:

<!ELEMENT element ANY>

元素可能包含经过语法分析的字符数据或另一个元素( element2 )。星号(*)表示混合内容模型 — 其中元素可以包含不同类型的属性。

<!ELEMENT element (#PCDATA|element2)*>

下例将文本 "entity reference" 插到文档中它出现的任何地方:

<!ENTITY element "entity reference">

可以看到在 XML 文档中该实体引用元素如下:

&element;

下例表明其元素是一个包含三个属性的空标记:属性 1( att1 )是一个可选属性,属性 2( att2 )是带有固定值 "A" 的属性,属性 3( att3 )是必需的文本属性。

   <!ELEMENT element EMPTY>
     
        
        <!ATTLIST element
     att1 ID #IMPLIED
     att2 CDATA #FIXED "A"
     att3 CDATA #REQUIRED>

      
      

可以看到在 XML 文档中使用的这个元素如下:

<element att2="A" att3="MustHave"/>

属性 CDATA 表示包括的信息应该是文本。 ID 属性表明必须填入唯一的标识。每个元素只能有一个 ID 属性。另外, CDATA 表示 att2 和 att3 可能包含任何字符串。

关于 XML 的几点说明

对 XML 的深入探讨主要考虑的是文档头中的几个元素,从以下开始:

<?xml version="1.0"?>

每个 XML 文档都必须包含这样的一个头,向 XML 语法分析器表示它是一个 XML 文档。头中的下一行告诉 XML 语法分析器该文档是使用什么字符编码来创建的:

<!DOCTYPE people SYSTEM "people.dtd">

在 Unix 系统上创建的 XML 文档和在 Windows 系统上创建的 XML 文档可能有不同的编码。

还可以为第一行设置可选的 standalone 属性。standalone 的缺省值是 no。 no 值表示该 DTD 定义是在另一个文件中描述的。 yes 值表明该 DTD 应该在 XML 文档内部定义。我没有为示例设置这个属性;如果想设置,它应该看起来如下:

   <?xml version="1.0" standalone='yes'?>
     <!DOCTYPE people [
     <!ELEMENT people (person+)>
     <!ELEMENT person (#PCDATA)>
     ]>


还应该注意使这个文档格式正确的方法。例如,所有空标记都用一个右斜杠结束,如下所示:

<townhouse townhouse_type="good" />

还请注意 CDATA 用于对所有若不进行转义就会以 XML 语言解释的任何数据进行转义,例如:

<![CDATA[<greeting>5000</greeting>]]>

如果适当的格式化,这一行将以文本内容显示:

<greeting> 5000 </greeting>

可以从 XML 文件的进一步研究中获益,甚至可能从对您自己的文件运行 XML 语法分析器获益。

清单 5. people.dtd 的完整清单

<!ELEMENT people (person+)>
<!ELEMENT person (name, look*, possession?, other?)>
<!ELEMENT name (firstname, lastname)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT look (#PCDATA)>
<!ELEMENT possession (car?, house?, bankaccount?, job?)>
<!ELEMENT car (#PCDATA|model)*>
<!ELEMENT model (#PCDATA)>
<!ELEMENT house (apartment|standalone|townhouse)>
<!ATTLIST house house_area ID #IMPLIED country CDATA #FIXED 
"CANADA" city CDATA #IMPLIED>
<!ELEMENT apartment EMPTY>
<!ELEMENT standalone EMPTY>
<!ELEMENT townhouse EMPTY>
<!ATTLIST townhouse townhouse_type ID #IMPLIED>
<!ELEMENT bankaccount (#PCDATA)>
<!ATTLIST bankaccount bankaccount_number ID #REQUIRED>
<!ELEMENT job (#PCDATA)>
<!ELEMENT other ANY>

<!ENTITY IBM "Proud to work for IBM">

关于 DTD 的几点说明

通过比较 XML 文件及其 DTD,您应该能够方便地定义 DTD 和 XML 文件中各元素之间的关系。不过,还有两个剩下的元素,您可能感兴趣。

清单 4 包含了对实体的引用。

<job>&IBM;</job>

实体引用用于代替在 DTD 文档中定义的特定字符或字符串。进行了语法分析后,该实体引用将读作:

<job> Proud to work for IBM </job>

还应该注意, <other> 标记的内容类型是 ANY 。这表示 <other> 可能包含所有以前已在 DTD 中声明过的元素。因此, other 元素可能包含 car 和 house 元素,如下:

   <other>
         <car>she has a car</car>
         <house country="CANADA" city="Toronto">
             <townhouse townhouse_type="good" />
         </house>
     </other>

XML最新解码器 MSXML6 解决了许多稳定性问题,尤其是在一些受资源限制的情况下。 安全性 – MSXML6 采用“默认关闭”的原则 立即下载

相关推荐

从零到一:OptimizePI Pre-layout PDN前仿真实战指南

本文详细介绍了如何使用OptimizePI进行电源完整性(PDN)前仿真,从软件安装配置到元器件建模、去耦电容配置及仿真参数设置,提供了实战技巧和常见问题排查指南。通过OptimizePI的Pre-layout仿真,工程师可以在PCB布局前优化电源分配网络,显著提升设计效率并降低成本。

weixin_28304023的博客 507

关于解析XML文件时遇到的一些错误

关于解析XML文件时遇到的一些错误

s_sos0的博客 1万+

随机森林的可解释性分析(含python代码)

随机森林的“黑箱”特性逐渐凸显,这使得我们难以理解和解释模型内部的工作机制。对于许多应用场景而言,仅仅获得高准确率的预测结果是不够的;了解预测背后的逻辑同样重要,特别是在医疗诊断、金融风险评估等领域。因此,对随机森林进行可解释性分析变得尤为重要。

m0_59257547的博客 3848

XML字符串Base64解码并获取XML中的数据

XML字符串Base64解码并获取XML中的数据

qq_54571327的博客 2157

Java 多线程(1)---- 初识线程

前言 多线程想必大家都不会陌生。因为在日常使用和开发中,多线程的使用实在是太常见了。我们都知道,发明多线程的目的是为了更好的利用计算机的 CPU 资源。比如在一个进程中如果只有一个线程(也叫主线程),那么如果当这个线程因为某种原因阻塞(等待用户输入数据等情况)的时候,那么相对应的这个进程也让出了 CPU 资源并暂停执行了。试想一下,如果我们在一个进程中添加多个线程,那么当这个进程中某个线程阻塞的...

指点 1543

BIM模型导入SuperMap

目录 一、超图 BIM插件安装 1.1 插件下载 1.2 安装 二、BIM模型导出 2.1 Revit插件导出 2.2 SuperMap导入工具 三、SuperMap BIM数据处理与服务发布 四、SuperMap三维数据处理中关于模型高程修改方法 一、超图 BIM插件安装 1.1 插件下载 下载链接:http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?tt=ProductAAS&id=134 1..

爱晒太阳的风 3596

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

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

andrew_dear的博客 729

无线网卡选购指南:哪些型号支持Kali Linux的监听模式?附免驱动网卡推荐

本文详细解析了如何在Kali Linux下选购支持监听模式的无线网卡。核心在于选择兼容的芯片组,如Atheros AR9271和Ralink RT3070等经典型号,并提供了免驱动网卡推荐与实战配置指南,帮助安全研究人员和爱好者快速搭建无线测试环境。

wind6的博客 1555

四种常见的XML解析方式

四种常见的XML解析方式 1.XML语言简介XML即可扩展的标记语言,可以定义语义标记(标签),是元标记语言。XML不像超文本标记语言HTML,HTML只能使用规定的标记,对于XML,用户可以定义自己需要的标记。树状模型。 XML(eXtensible Markup Language)和HTML(Hyper Text Markup Language)师出同门。 使用XML的原因:不同软件之间(

Stellazzz的博客 5773

把 SAP GUI 做成可维护的应用:Module Pool 基础与 Table Control 深入实战

SAP Module Pool 与 Table Control 开发要点 摘要:Module Pool 作为 SAP GUI 交互的核心技术,由程序、屏幕(Dynpro)和流逻辑(Flow Logic)组成,通过 PBO/PAI 事件驱动数据流。Table Control 是其中处理多行数据的核心控件,其开发关键在于: 正确理解 PBO/PAI 数据流机制 掌握 CXTAB_CONTROL 结构的关键属性(LINES、TOP_LINE 等) 合理设置列控制属性(CXTAB_COLUMN) 采用 LOOP W

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 241

Qt C++ 串口调试助手

1. **串口配置**:支持自动检测可用串口,可配置波特率(9600~921600)、数据位(5~8)、校验位(无/奇/偶/标记/空格)、停止位(1/1.5/2)。- HEX 模式发送时,输入格式需为十六进制字符(0-9、A-F),可带空格(如 `01 A3 FF`)或不带空格(如 `01A3FF`)。// 发送模式:true=HEX,false=ASCII。// 字符串转HEX字节数组。ui->parity->addItems({"无", "奇校验", "偶校验", "标记校验", "空格校验"});

寒寒豆豆软件公司的博客 147

解码 XML 和 DTD——编写格式正确和定义明确的 XML 的初学者指南

级别: 初级 Jane Fung (jcyfung@ca.ibm.com), VisualAge for Java 支持, IBM 加拿大 2001 年 7 月 01 日 这 篇介绍性文章说明了如何创建 XML“文档类型定义(DTD)”和格式正确定义明确的 XML 文件,这些文件能够由您选择的 XML 语法分析器进行确认。虽然不必在产生的每个 XML 文件中都包含 DTD,但这样做将...

weixin_34166847的博客 149

安川机器人外部轴添加

本文详细介绍了如何在安川机器人本体上添加第7轴以及如何设置动作,本文以添加点焊枪为例进行讲解。

haier123888的博客 7889

解码 XML 和 DTD

from http://www.ibm.com/developerworks/cn/xml/x-dtdint/index.html解码 XML 和 DTD编写格式正确和定义明确的 XML 的初学者指南文档选项打印本页

sclxf的专栏 604

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

温故知新之 解码XML和DTD

 DTD(Document Type Definition),用来定义XML文档的中标签的使用规则。XML解析器可以根据DTD来验证XML文档的有效性。    DTD的基本语法格式:(1)DTD对XML文档内容约束时的格式: (2)XML的元素定义:(3)XML子元素定义:    子元素定义的几种常用方式:(1)        A中要包含B,C,D(2)        A中包含B,C,D中的任意一

小猪的理想 658

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Xml的(DTD,xml解析,xml建模)

拥有正确语法的 XML 被称为"形式良好"的 XML。通过 DTD 验证的XML是"合法"的 XML。 (attlist可以存在多个属性,元素)(element-name放的是元素)(att_name放的是属性名称)(type属性类型) ID (唯一的) (男|女) “男” (枚举或默认) CDATA (普通文本) IDREF (类似数据库外键)#REQUIRED/#IMPLIED(非空/可以空) &(逻辑与) &amp ; ..................

qq_62898618的博客 1443

解码 XML 和 DTD(资料)

级别: 初级Jane Fung, VisualAge for Java 支持, IBM 加拿大2001 年 7 月 01 日    这篇介绍性文章说明了如何创建 XML“文档类型定义(DTD)”和格式正确定义明确的 XML 文件,这些文件能够由您选择的 XML 语法分析器进行确认。虽然不必在产生的每个 XML 文件中都包含 DTD,但这样做将会使您的生活大为轻松。DTD 不仅强制使用为 XML 文

714

(Step 4)解码 XML 和 DTD

 这篇介绍性文章说明了如何创建 XML“文档类型定义(DTD)”和格式正确定义明确的 XML 文件,这些文件能够由您选择的 XML 语法分析器进行确认。虽然不必在产生的每个 XML 文件中都包含 DTD,但这样做将会使您的生活大为轻松。DTD 不仅强制使用为 XML 文件建立的语法,它还将允许文件由确认 XML 语法分析器进行语法分析。代码样本包括 DTD 和 XML 文档示例。“可扩展标

dengxingbo的专栏 608

【第九节】python中xml解析和json编解码

XML,全称为可扩展标记语言(eXtensible Markup Language),是一种用于描述数据的标记语言。XML的设计宗旨是传输和存储数据,强调数据的内容和结构,而非数据的显示方式。以下是XML的一些关键特点:XML使用标签来定义数据的结构和意义,这些标签可以由用户根据需要自行定义,因此具有很高的灵活性和扩展性。XML的文本格式使其独立于具体的硬件和软件平台,可以在不同的系统之间轻松交换数据。XML文档通常遵循一定的层次结构,这使得数据更加有序和易于管理。

攻城狮7号的博客 1334

DTD约束

DTD约束 总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 设计模式的六大原则 1、单...

weixin_45457509的博客 167

Xml笔记

文章目录1. 认识XML1.1 什么是XML1.2 XML被用来干什么1.3 XML的格式2. DTD和XSD定义语义约束2.1 DTD 1. 认识XML 1.1 什么是XML  全称:可扩展标记语言(Extensible Markup Language)。是一门标记语言。html也是标记语言,xml跟html不同的是xml没有固定的标签,所有的标签都可以自定义。这也是为什么叫它可扩展的原因。什么是标记语言,就是由两对尖括号括起来的语言,<和>,学过html都知道。那么它就是用这么一个标记来描述

小霆的博客 912
上一篇: 创建SAX解析器
下一篇: 用JDOM操作XML文件
wwwphp
博客等级 码龄24年 5粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值