XML快速入门

1 概述

XML代表Extensible Markup Language。它是一种基于标准通用标记语言(Standard Generalized Markup Language)(SGML)的文本标记语言。

XML标签标识数据并用于存储和组织数据,而不是作为显示数据的HTML标签。XML在不久的将来不会取代HTML,但它通过采用许多成功的HTML特性来丰富自己。

XML有三个重要特征,可用于各种系统和解决方案 -

  • XML是可扩展的 - XML允许您创建适合您应用程序的自描述标签或语言。
  • XML携带数据,不会显示它 - XML允许您存储数据,而不管它将如何呈现。
  • XML是一种公共标准 - XML由一个名为万维网联盟(W3C)的组织开发,可作为开放标准提供。

XML的用途

XML用法的简短列表说明了这一切 -

  • XML可以在幕后工作,以简化为大型网站创建HTML文档。
  • XML可用于在组织和系统之间交换信息。
  • XML可用于卸载和重新加载数据库。
  • XML可用于存储和安排数据,这可以自定义您的数据处理需求。
  • XML可以很容易地与样式表合并以创建几乎所有需要的输出。
  • 实际上,任何类型的数据都可以表示为XML文档。

什么是标记语言

XML是一种标记语言,它定义了一组用于以人类可读和机器可读的格式编码文档的规则。那么标记语言到底是什么?标记是将信息添加到文档中,以某种方式增强其含义,因为标识了各个部分以及它们之间的相互关系。更具体地说,标记语言是一组可以放置在文档文本中的符号,用于标定和标注该文档的各个部分。

以下示例显示了如何将XML标记嵌入到文本中 -

<message>
   <text>Hello, Ancony!</text>
</message>

此代码段包含标记符号或诸如<message> ... </message>和<text> ... </text>等标记。标记<message>和</ message>标记XML代码片段的开始和结束。标签<text>和</ text>包围文本Hello,Ancony!。

XML是一种编程语言吗?

编程语言由语法规则和用来创建计算机程序的自己的词汇组成。这些程序指示计算机执行特定的任务。XML不符合编程语言的要求,因为它不执行任何计算或算法。它通常存储在一个简单的文本文件中,并由能够解释XML的特殊软件处理。

2 XML语法

在本章中,我们将讨论编写XML文档的简单语法规则。以下是一个完整的XML文档 -

<?xml version = "1.0"?>
<contact-info>
   <name>Ancony Conan</name>
   <city>Chongqing</city>
   <phone>186-6666-8888</phone>
</contact-info>

在上面的例子中你可以注意到有两种信息 -

  • 标记,如<contact-info>
  • 文字或角色数据,Chongqing和186-6666-8888。

下图描述了在XML文档中编写不同类型的标记和文本的语法规则。

让我们详细看看上图中的每个组件。

XML声明

XML文档可以选择具有XML声明。它写成如下 -

<?xml version = "1.0" encoding = "UTF-8"?>

其中versionXML版本,encoding指定文档中使用的字符编码。

XML声明的语法规则

  • XML声明区分大小写,必须以“ <?xml ” 开头,以“?>”结束,其中“ xml ”以小写形式写入。
  • 如果文档包含XML声明,那么它严格需要成为XML文档的第一条语句。
  • XML声明需要是XML文档中的第一条语句。
  • HTTP协议可以覆盖XML声明中输入的encoding值。

标签和元素

XML文件由多个XML元素构成,也称为XML节点或XML标签。XML元素的名称用三角括号括起来,如下所示 -

<element>

语法规则的标签和元素

元素语法 - 每个XML元素都需要使用start或end元素关闭,如下所示 -

<element>....</element>

或者在简单的情况下,就这样 -

<element/>

元素嵌套 - XML元素可以包含多个XML元素作为子元素,但子元素不能重叠。即元素的结束标记必须具有与最近不匹配的开始标记相同的名称。

下面的例子显示了不正确的嵌套标签 -

<?xml version = "1.0"?>
<contact-info>
<city>Chongqing
<contact-info>
</city>

以下示例显示了正确的嵌套标签 -

<?xml version = "1.0"?>
<contact-info>
   <city>Chongqing</city>
<contact-info>

根元素 - 一个XML文档只能有一个根元素。例如,以下内容不是正确的XML文档,因为x和y元素都出现在顶层而没有根元素 -

<x>...</x>
<y>...</y>

以下示例显示了一个正确形成的XML文档 -

<root>
   <x>...</x>
   <y>...</y>
</root>

区分大小写 - XML元素的名称区分大小写。这意味着开始和结束元素的名称需要完全相同。

例如,<contact-info><Contact-Info>不同

XML属性

一个属性使用名称/值对为单元指定单个属性。一个XML元素可以有一个或多个属性。例如 -

<a href = "https://blog.csdn.net/Ancony_/article/details/79945955/">XML快速入门</a>

这里href是属性名称,而https://blog.csdn.net/Ancony_/article/details/79945955是属性值。

XML属性的语法规则

XML中的属性名称(与HTML不同)区分大小写。也就是说,HREF和href被认为是两个不同的XML属性。

相同的属性在语法中不能有两个值。以下示例显示不正确的语法,因为属性b被指定了两次-

<a b = "x" c = "y" b = "z">....</a>

属性名称的定义不带引号,而属性值必须始终显示在引号中。以下示例演示了不正确的xml语法-

<a b = x>....</a>

XML引用

引用通常允许您在XML文档中添加或包含其他文本或标记。引用始终以符号“&”开始,该符号是保留字符,以符号“;”结尾。XML有两种类型的引用 -

  • 实体引用 - 实体引用包含起始分隔符和结束分隔符之间的名称。例如&amp; 其中amp是名称。该名称是指预定义的文本和/或标记字符串。
  • 字符引用 - 它们包含引用,例如&#65; 包含一个散列标记(“#”),后跟一个数字。数字总是指字符的Unicode代码。在这种情况下,65表示字母“A”。

XML文本

XML元素和XML属性的名称区分大小写,这意味着开始和结束元素的名称需要写入相同的大小写。为避免字符编码问题,应将所有XML文件保存为Unicode UTF-8或UTF-16文件。

空白字符(如空格,制表符和XML元素之间以及XML属性之间的换行符)将被忽略。

一些字符由XML语法本身保留。因此,它们不能直接使用。为了使用它们,使用了下面列出的一些替换实体 -

不允许的字符 替换实体 字符描述
< &lt; 小于
> &gt; 大于
& &amp; 符号
' &apos; 单引号
" &quot; 双引号

3 XML文档

XML 文档是由有序包中的元素和其他标记组成的XML信息的基本单元。XML 文档可以包含各种各样的数据。例如,数字数据库,代表分子结构的数字或数学方程。

XML文档示例

以下示例中显示了一个简单文档 -

<?xml version = "1.0"?>
<contact-info>
   <name>Ancony Conan</name>
   <city>Chongqing</city>
   <phone>186-6666-8888</phone>
</contact-info>

下图描述了XML文档的各个部分。


文档序部分

文档序(Document Prolog)出现在文档的顶部,位于根元素之前。本部分包含 -

  • XML声明
  • 文件类型声明

文档元素部分

文档元素是XML的基石。这些文件将文件分成不同的部分,每一部分都有特定的目的。您可以将文档分成多个部分,以便它们可以以不同方式呈现,或由搜索引擎使用。元素可以是容器,也可以是文本和其他元素的组合。

4 XML声明

本章将详细介绍XML声明。XML声明包含准备XML处理器来解析XML文档的详细信息。它是可选的,但在使用时必须出现在XML文档的第一行。

语法

以下语法显示XML声明 -

<?xml
   version = "version_number"
   encoding = "encoding_declaration"
   standalone = "standalone_status"
?>

每个参数由一个参数名称,一个等号(=)和一个引号内的参数值组成。下表详细显示了上述语法 -

参数 参数值 参数描述
version 1.0 指定使用的XML标准的版本。
encoding

UTF-8,UTF-16,ISO-10646-UCS-2,ISO-10646-UCS-4,

ISO-8859-1至ISO-8859-9,ISO-2022-JP,Shift_JIS,EUC-JP

它定义了文档中使用的字符编码。

UTF-8是使用的默认编码。

standalone true或者false

它通知解析器文档是否依赖来自外部源的信

息(如外部文档类型定义(DTD))的内容。

默认值设置为no。将其设置为yes会告诉

处理器解析文档时不需要外部声明。

规则 

XML声明应遵守以下规则 -

  • 如果XML声明存在于XML中,则必须将其作为XML文档中的第一行。
  • 如果包含XML声明,它必须包含版本号属性。
  • 参数名称和值区分大小写。
  • 名字总是小写。
  • 放置参数的顺序很重要。正确的顺序是:version,encoding和standalone。
  • 可以使用单引号或双引号。
  • XML声明没有结束标记,即</?xml>

XML声明示例

以下是XML声明的几个例子 -

带有版本定义的XML声明 -

<?xml version = "1.0"?>

定义了所有参数的XML声明 -

<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>

所有参数用单引号定义的XML声明 -

<?xml version = '1.0' encoding = 'iso-8859-1' standalone = 'no' ?>

5 XML标签

让我们了解一下XML中最重要的部分 - XML标签。XML标签构成了XML的基础。他们用XML定义元素的范围。它们也可用于插入注释,声明解析环境所需的设置,并插入特殊说明。

我们可以广泛地将XML标签分类如下 -

开始标记

每个非空XML元素的开始都由一个开始标记标记。以下是开始标记的示例 -

<address>

结束标记

每个具有开始标签的元素都应以结束标签结尾。以下是结束标记的示例 -

</address>

请注意,结束标签在元素名称前包含一个solidus(“/”)。

空标签

出现在开始标签和结束标签之间的文字称为内容。没有内容的元素被称为空。一个空的元素可以用两种方式表示 -

一个开始标签紧跟着一个结束标签,如下所示 -

</address>

一个完整的空元素标签如下所示 -

<hr />

空元素标签可以用于任何没有内容的元素。

XML标签规则

以下是使用XML标签需要遵循的规则 -

规则1

XML标签区分大小写。下面的代码行是错误语法</ Address>的一个例子,因为两个标记中的大小写差异,这被视为XML中的错误语法。

<address>This is wrong syntax</Address>

以下代码显示了正确的方式,我们使用相同的大小写来命名开始和结束标记。

<address>This is correct syntax</address>

规则2

XML标签必须以适当的顺序关闭,即在外部元素关闭之前,必须关闭在另一个元素内部打开的XML标签。例如 -

<outer_element>
   <internal_element>
      This tag is closed before the outer_element
   </internal_element>
</outer_element>

6 XML元素

XML元素可以定义为XML的构建块。元素可以表现为容器来容纳文本,元素,属性,媒体对象或所有这些。

每个XML文档都包含一个或多个元素,其范围由开始和结束标记分隔,或者由空元素标记分隔。

语法

以下是编写XML元素的语法 -

<element-name attribute1 attribute2>
....content
</element-name>

element-name是元素的名称。该名其在开始和结束标记的情况下必须匹配。

attribute1,attribute2是由空格分隔的元素的属性。一个属性定义了该元素的一个属性。它将一个名称与一个值相关联,该值是一串字符。一个属性写成 -

name = "value"

name后面跟着一个=号和双引号(“”)或单引号('')内的字符串值。

空元素

一个空元素(没有内容的元素)具有以下语法 -

<name attribute1 attribute2.../>

以下是使用各种XML元素的XML文档的示例 -

<?xml version = "1.0"?>
<contact-info>
   <country category = "china">
      <name>Ancony Conan</name>
      <city>Chongqing</city>
      <phone>186-6666-8888</phone>
   </country>
</contact-info>

XML元素规则

XML元素需要遵循以下规则 -

  • 元素名称可以包含任何字母数字字符。名称中允许的唯一标点符号是连字符(-),下划线(_)和句点(.)。
  • 名称区分大小写。例如,AddressaddressADDRESS 是不同的名称。
  • 元素的开始和结束标记必须相同。
  • 作为容器的元素可以包含文本或元素,如上例所示。

7 XML属性

本章介绍XML属性。属性是XML元素的一部分。一个元素可以有多个独特的属性。属性提供了有关XML元素的更多信息。更确切地说,它们定义了元素的属性。XML属性始终是键值对。

语法

XML属性具有以下语法 -

<element-name attribute1 attribute2 >
....content..
< /element-name>

其中attribute1和attribute2具有以下形式 -

name = "value"

值必须是双引号(“”)或单引号('')。这里,attribute1和attribute2是唯一的属性标签。

属性用于向元素添加唯一标签,将标签放入类别中,添加布尔标志,或者将其与某些数据字符串关联。以下示例演示了使用属性 -

<?xml version = "1.0" encoding = "UTF-8"?>
<!DOCTYPE garden [
   <!ELEMENT garden (plants)*>
   <!ELEMENT plants (#PCDATA)>
   <!ATTLIST plants category CDATA #REQUIRED>
]>

<garden>
   <plants category = "flowers" />
   <plants category = "shrubs">
   </plants>
</garden>

当您不想为每种情况创建新元素时,属性用于区分同名元素。因此,使用属性可以在区分两个或更多相似元素时添加更多细节。

在上面的例子中,我们通过包含属性类别并为每个元素分配不同的值来对工厂进行分类。因此,我们有两种植物,一种花和其他颜色。因此,我们有两个具有不同属性的工厂元素。

您还可以观察到我们已经在XML的开头声明了该属性。

属性类型

下表列出了属性的类型 -

属性类型

描述

StringType

它将任何文字字符串作为值。CDATA是一个StringType。CDATA是字符数据。这意味着,

任何非标记字符串都是该属性的合法部分。

TokenizedType

这是一个更受限制的类型。语法中记录的有效性约束在属性值标准化之后应用。

TokenizedType属性被赋予 -

ID - 它用于指定元素为唯一。

IDREF - 它用于引用已为其他元素命名的ID。

IDREFS - 它用于引用元素的所有ID。

ENTITY - 它表示该属性将代表文档中的外部实体。

ENTITIES -它表明该属性将代表文件中外部实体。

NMTOKEN - 与CDATA类似,限制哪些数据可以属于该属性。

NMTOKENS - 与CDATA类似,限制哪些数据可以属于该属性。

EnumeratedType

它的声明中有一个预定义值的列表。其中,它必须分配一个值。枚举属性有两种类型 -

NotationType - 它声明一个元素将被引用到在XML文档中其他位置声明的NOTATION。

Enumeration - 枚举允许您定义属性值必须匹配的特定值列表。

元素属性规则

以下是属性需要遵循的规则 -

  • 属性名称不得在相同的开始标签或空白标签中出现一次以上。
  • 必须使用属性列表声明在文档类型定义(DTD)中声明属性。
  • 属性值不得包含对外部实体的直接或间接实体引用。
  • 直接或间接引用属性值的任何实体的替换文本不得包含小于号(<)

8 XML注释

本章介绍了如何在XML文档中使用注释。XML注释与HTML注释类似。注释被添加为注释或行以理解XML代码的用途。

注释可用于包含相关链接,信息等。它们仅在源代码中可见; 不在XML代码中。注释可能出现在XML代码的任何地方。

语法

XML注释具有以下语法 -

<!-------Your comment----->

注释<!--开头,以-->结尾。您可以添加文字笔记作为字符之间的注释。不能在另一个内嵌套一个注释

以下示例演示了在XML文档中使用注释 -

<?xml version = "1.0" encoding = "UTF-8" ?>
<!---Students grades are uploaded by months---->
<class_list>
   <student>
      <name>Ancony</name>
      <grade>A</grade>
   </student>
</class_list>

<!--  -->字符之间的任何文本都被视为注释。

XML注释规则

XML注释应遵循以下规则 -

  • 注释不能出现在XML声明之前。
  • 注释可能出现在文档的任何地方。
  • 注释不得出现在属性值中。
  • 注释不能嵌套在其他注释中。

9 XML字符实体

本章介绍XML 字符实体。在我们理解字符实体之前,让我们先了解XML实体是什么。

一个实体的定义如下 -

"The document entity serves as the root of the entity tree and a starting-point for an XML processor".
(文档实体充当实体树的根部和XML处理器的起点)

这意味着,实体是XML中的占位符。这些可以在文档序言或DTD中声明。有不同类型的实体,本章我们将讨论字符实体。

HTML和XML都有一些为其使用而保留的符号,它们不能用作XML代码中的内容。例如,<和>标志用于打开和关闭XML标签。为了显示这些特殊字符,使用了字符实体。

有几个特殊字符或符号不能直接从键盘输入。字符实体也可以用来显示这些符号/特殊字符。

字符实体的类型

有三种类型的角色实体 -

  • 预定义的字符实体
  • 数字字符实体
  • 命名字符实体

预定义的字符实体

引入它们是为了在使用某些符号时避免模糊性。例如,当小于(<)或大于(>)符号与角度标记(<>)一起使用时,会观察到歧义。字符实体基本上用于在XML中分隔标签。以下是来自XML规范的预定义字符实体列表。这些可以用来表达字符而不含糊。

要表示的字符 替换实体 字符描述
< &lt; 小于
> &gt; 大于
& &amp; 符号
' &apos; 单引号
" &quot; 双引号

数字字符实体

数字引用用于引用字符实体。数字参考可以是十进制或十六进制格式。由于有数以千计的数字参考可用,这些有点难以记住。数字引用是指Unicode字符集中字符的编号。

十进制数字引用的一般语法是 -

&# decimal number ;

十六进制数字引用的一般语法是 -

&#x Hexadecimal number ;

下表列出了一些预定义的字符实体及其数值 -

实体名称

字符

十进制参考

十六进制参考

quot

"

&#34;

&#x22;

amp

&

&#38;

&#x26;

apos

'

&#39;

&#x27;

lt

<

&#60;

&#x3C;

gt

>

&#62;

&#x3E;

命名字符实体

由于难以记住数字字符,所以最优选的字符实体类型是命名字符实体。在这里,每个实体都用一个名字来标识。

例如 -

  • 'Aacute'代表尖锐的重音字符。
  • 'ugrave'代表着带有严肃口音的小

10 CDATA

在本章中,我们将讨论XML CDATA部分。术语CDATA的意思是字符数据。CDATA被定义为不被解析器解析的文本块,但被识别为标记。

预定义的实体例如<>&需要打字并且通常难以在标记中阅读。在这种情况下,可以使用CDATA部分。通过使用CDATA部分,您正在命令解析器指出文档的特定部分不包含标记,并应被视为常规文本。

语法

以下是CDATA部分的语法 -

<![CDATA[
   characters with markup
]]>

上面的语法由三部分组成 -

  1. CDATA开始部分 - CDATA以9个字符的分隔符开始<![CDATA[
  2. CDATA结束部分 - CDATA部分以]]>分隔符结束。
  3. CData部分 - 这两个机箱之间的字符被解释为字符,而不是标记。本节可能包含标记字符(<,>和&),但XML处理器会忽略它们。

以下标记代码显示了CDATA的示例。这里,解析器忽略了写在CDATA部分中的每个字符。

<script>
   <![CDATA[
      <message> Welcome to TutorialsPoint </message>
   ]] >
</script >

在上面的语法中,<message>和</ message>之间的所有内容都被视为字符数据而不是标记。

CDATA规则

XML CDATA需要遵循给定的规则 -

  • CDATA不能在XML文档中的任何位置包含字符串“]]>”。
  • CDATA部分不允许嵌套。

11 空白

在本章中,我们将讨论XML文档中的空白处理。空白是空格,制表符和换行符的集合。它们通常用于使文档更具可读性。

XML文档包含两种类型的空白 - 重要空白和无意义空白。这两个例子都在下面解释。

重要的空白

在包含文本和标记的元素中出现重要的空白。例如 -

<name>AnconyConan</name>

<name>Ancony Conan</name>

由于Ancony和Conan之间的空间,上述两个元素是不同的。读取XML文件中的此元素的任何程序都必须保持区别。

无意义的空白

无意义的空白表示只允许元素内容的空间。例如 -

<country.category = "china">

或者

<country....category = "..china">

上面的例子是一样的。这里,空格由点(.)表示。在上面的例子中,地址和类别之间的空间是不重要的。

一个名为xml:space的特殊属性可以附加到一个元素上。这表明应用程序不应该删除该元素的空白。您可以将此属性设置为默认值或保留,如以下示例所示 -

<!ATTLIST country  xml:space (default|preserve) 'preserve'>

default表示应用程序的默认空白处理模式对于此元素是可接受的。 

preserve值指示应用程序保留所有空格。

12 XML处理

本章介绍处理指令(Processing Instructions(PIs))。根据XML 1.0建议书的定义,

"Processing instructions (PIs) allow documents to contain instructions for applications.
 PIs are not part of the character data of the document, but MUST be passed through to the application.
“处理指令(PI)允许文档包含应用程序的指令.PI不是文档字符数据的一部分,但必须被应用程序通过。

语法

以下是PI的语法 -

<?target instructions?>

  • target - 标识指令所针对的应用程序。
  • instructions - 描述应用程序处理信息的字符。

PI以特殊标签<?开头并以?>结尾 。内容处理在遇到字符串?>后立即结束。

PI很少使用。它们主要用于将XML文档链接到样式表。以下是一个例子 -

<?xml-stylesheet href = "tutorialspointstyle.css" type = "text/css"?>

这里,目标是xml-stylesheet。href =“tutorialspointstyle.css”和type =“text / css”是目标应用程序在处理给定XML文档时将使用的数据或指令。

在这种情况下,浏览器通过指示XML在显示之前进行转换来识别目标; 第一个属性指出变换的类型是XSL,第二个属性指向它的位置。

处理指令规则

PI可以包含除组合?以外的任何数据,?被解释为结束分隔符。以下是有效PI的两个例子 -

<?welcome to pg = 10 of tutorials point?>
<?welcome?>

13 编码

编码是将unicode字符转换为其等效二进制表示的过程。当XML处理器读取XML文档时,它将根据编码类型对文档进行编码。因此,我们需要在XML声明中指定编码的类型。

编码类型

主要有两种类型的编码 -

  • UTF-8
  • UTF-16

UTF代表UCS转换格式,而UCS本身意味着通用字符集。数字8或16表示用于表示字符的位数。它们是8(一个字节)或16(两个字节)。对于没有编码信息的文档,UTF-8默认设置。

语法

编码类型包含在XML文档的序言部分。UTF-8编码的语法如下 -

<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>

UTF-16编码的语法如下 -

<?xml version = "1.0" encoding = "UTF-16" standalone = "no" ?>

下面的例子显示了编码的声明 -

<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<contact-info>
   <name>Ancony Conan</name>
   <city>Chongqing</city>
   <phone>186-6666-8888</phone>
</contact-info>

在上面的示例encoding =“UTF-8”中,指定使用8位来表示字符。要表示16位字符,可以使用UTF-16编码。

使用UTF-8编码的XML文件的大小通常比使用UTF-16格式编码的文件要小。

14 验证

验证是验证 XML文档的过程。如果XML文档的内容与元素,属性和相关文档类型声明(DTD)相匹配,并且文档符合表达的约束条件,则XML文档被认为是有效的。验证由XML解析器以两种方式处理。他们是 -

  • 格式良好的XML文档
  • 有效的XML文档

格式良好的XML文档

据说XML文档如果符合以下规则,就被认为是良好的 -

  • DTD XML文件必须使用amp(&), apos(single quote), gt(>), lt(<), quot(double quote)的预定义字符实体。
  • 它必须遵循标签的顺序。即关闭外部标签之前必须关闭内部标签。
  • 每个开标签必须有一个结束标签,或者它必须是一个自结尾标签(<title> .... </ title>或<title />)。
  • 它必须在开始标记中只有一个属性,需要引用它。
  • 必须声明amp(&), apos(single quote), gt(>), lt(<), quot(double quote)等实体。

以下是格式良好的XML文档示例 -

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address
[
   <!ELEMENT address (name,city,phone)>
   <!ELEMENT name (#PCDATA)>
   <!ELEMENT city (#PCDATA)>
   <!ELEMENT phone (#PCDATA)>
]>

<address>
   <name>Ancony Conan</name>
   <city>Chongqing</city>
   <phone>186-6666-8888</phone>
</address>

据说上述例子是良好的 -

  • 它定义了文档的类型。这里,文档类型是元素类型。
  • 它包含一个名为地址的根元素。
  • 名称,城市和电话中的每个子元素都包含在其自我解释标签中。
  • 标签的顺序保持不变。

有效的XML文档

如果一个XML文档格式良好且具有关联的文档类型声明(DTD),那么它就被认为是一个有效的XML文档。

15 DTD

XML文档类型声明(Document Type Declaration)(通常称为DTD)是精确描述XML语言的一种方式。DTD根据适当的XML语言的语法规则检查XML文档结构的词汇和有效性。

XML DTD既可以在文档中指定,也可以保存在单独的文档中,然后单独使用。

语法

DTD的基本语法如下 -

<!DOCTYPE element DTD identifier
[
   declaration1
   declaration2
   ........
]>

在上面的语法中,

  • 该DTD始于<!DOCTYPE分隔符。
  • element告诉解析器解析来自指定根元素的文档。
  • DTD标识符是文档类型定义的标识符,可以是系统上文件的路径或Internet上文件的URL。如果DTD指向外部路径,则称为外部子集。
  • 方括号[]包含一个称为内部子集的实体声明的可选列表。

内部DTD

如果在XML文件中声明元素,则DTD被称为内部DTD。要将其作为内部DTD引用,必须将XML声明中的独立属性设置为yes。这意味着,声明独立于外部来源。

语法

以下是内部DTD的语法 -

<!DOCTYPE root-element [element-declarations]>

其中root-element是根元素的名称,element-declarations是您声明元素的地方。

以下是内部DTD的一个简单示例 -

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>
<!DOCTYPE address
[
   <!ELEMENT address (name,city,phone)>
   <!ELEMENT name (#PCDATA)>
   <!ELEMENT city (#PCDATA)>
   <!ELEMENT phone (#PCDATA)>
]>


<address>
   <name>Ancony Conan</name>
   <city>Chongqing</city>
   <phone>186-6666-8888</phone>
</address>

让我们通过上面的代码 -

开始声明 - 使用以下语句开始XML声明。

<?xml version = "1.0" encoding = "UTF-8" standalone = "yes" ?>

DTD - 紧跟在XML标题后面的是文档类型声明,通常称为DOCTYPE -

<!DOCTYPE address [

DOCTYPE声明在元素名称的开头处有一个感叹号(!)。DOCTYPE通知解析器一个DTD与这个XML文档相关联。

DTD主体 - DOCTYPE声明后面跟着DTD的主体,声明元素,属性,实体和符号。

   <!ELEMENT address (name,city,phone)>
   <!ELEMENT name (#PCDATA)>
   <!ELEMENT city (#PCDATA)>
   <!ELEMENT phone (#PCDATA)>

这里声明了构成<name>文档词汇表的几个元素。<!ELEMENT name(#PCDATA)>将元素名称定义为“#PCDATA”类型。这里#PCDATA表示可分析的文本数据。

结束声明 - 最后,DTD的声明部分使用右括号和右括号(]>)关闭。这有效地结束了定义,之后XML文件立即生效。

规则

  • 文档类型声明必须出现在文档的开头(仅由XML标题开头) 文档中的其他任何地方都不允许。
  • 类似于DOCTYPE声明,元素声明必须以感叹号开头。
  • 文档类型声明中的名称必须与根元素的元素类型匹配。

外部DTD

在外部DTD元素在XML文件之外声明。通过指定可能是合法.dtd文件或有效URL 的系统属性来访问它们。要将其作为外部DTD引用,必须将XML声明中的独立属性设置为no。这意味着,声明包含来自外部的信息。

语法

以下是外部DTD的语法 -

<!DOCTYPE root-element SYSTEM "file-name">

其中file-name是扩展名为.dtd的文件。

以下示例显示外部DTD使用情况 -

<?xml version = "1.0" encoding = "UTF-8" standalone = "no" ?>
<!DOCTYPE address SYSTEM "address.dtd">
<address>
   <name>Ancony Conan</name>
   <city>Chongqing</city>
   <phone>186-6666-8888</phone>
</address>

DTD文件address.dtd的内容如下所示 -

   <!ELEMENT address (name,city,phone)>
   <!ELEMENT name (#PCDATA)>
   <!ELEMENT city (#PCDATA)>
   <!ELEMENT phone (#PCDATA)>

类型

您可以使用系统标识符或公共标识符来引用外部DTD 。

系统标识符

系统标识符使您能够指定包含DTD声明的外部文件的位置。语法如下 -

<!DOCTYPE name SYSTEM "address.dtd" [...]>

公共标识符

如您所见,它包含关键字SYSTEM和一个指向文档位置的URI引用。

公共标识符提供了一种定位DTD资源的机制,写法如下 -

<!DOCTYPE name PUBLIC "-//Chongqing XML//DTD Address Example//EN">

正如你所看到的,它从关键字PUBLIC开始,然后是一个专门的标识符。公共标识符用于标识目录中的条目。公共标识符可以遵循任何格式,但是,常用格式称为正式公共标识符(FPI)。

16 schema

XML模式通常被称为XML模式定义(XML Schema Definition)(XSD)。它用于描述和验证XML数据的结构和内容。XML schema定义了元素,属性和数据类型。Schema元素支持命名空间。它类似于描述数据库中数据的数据库schema。

您需要在XML文档中声明一个schema,如下所示 -

以下示例显示如何使用schema -

<?xml version = "1.0" encoding = "UTF-8"?>
<xs:schema xmlns:xs = "http://www.w3.org/2001/XMLSchema">
   <xs:element name = "contact">
      <xs:complexType>
         <xs:sequence>
            <xs:element name = "name" type = "xs:string" />
            <xs:element name = "city" type = "xs:string" />
            <xs:element name = "phone" type = "xs:int" />
         </xs:sequence>
      </xs:complexType>
   </xs:element>
</xs:schema>

XML Schemas背后的基本思想是,它们描述XML文档可以采用的合法格式。

元素

正如我们在XML元素章节中看到的,元素是XML文档的构建块。一个元素可以在XSD中定义如下 -

<xs:element name = "x" type = "y"/>

定义类型

您可以通过以下方式定义XML模式元素 -

简单类型

简单类型元素仅用于文本的上下文中。一些预定义的简单类型是:xs:integer, xs:boolean, xs:string, xs:date。例如 -

<xs:element name = "phone_number" type = "xs:int" />

复杂类型

复杂类型是其他元素定义的容器。这使您可以指定元素可以包含哪些子元素,并在XML文档中提供某种结构。例如 -

<xs:element name = "Address">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "name" type = "xs:string" />
         <xs:element name = "city" type = "xs:string" />
         <xs:element name = "phone" type = "xs:int" />
      </xs:sequence>
   </xs:complexType>
</xs:element>

在上面的例子中,Address元素由子元素组成。这是其他<xs:element>定义的容器,它允许在XML文档中构建简单的元素层次结构。

全局类型

使用全局类型,您可以在文档中定义单一类型,这可以被所有其他参考使用。例如,假设您想将个人和公司推广到公司的不同地址。在这种情况下,您可以按如下方式定义一般类型 -

<xs:element name = "AddressType">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "name" type = "xs:string" />
         <xs:element name = "city" type = "xs:string" />
      </xs:sequence>
   </xs:complexType>
</xs:element>

现在让我们在我们的例子中使用这种类型 -

<xs:element name = "Address1">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "address" type = "AddressType" />
         <xs:element name = "phone1" type = "xs:int" />
      </xs:sequence>
   </xs:complexType>
</xs:element> 

<xs:element name = "Address2">
   <xs:complexType>
      <xs:sequence>
         <xs:element name = "address" type = "AddressType" />
         <xs:element name = "phone2" type = "xs:int" />
      </xs:sequence>
   </xs:complexType>
</xs:element>

我们现在只有一个定义,而不必定义名称和城市两次(一次为Address1和一次为Address2)。这使得维护更简单,即如果您决定在地址中添加“邮政编码”元素,则只需在一个地方添加它们即可。

属性

XSD中的属性在元素中提供额外的信息。属性具有名称和类型属性,如下所示 -

<xs:attribute name = "x" type = "y"/>

17 树结构

XML文档始终是描述性的。树结构通常被称为XML树,并且可以轻松描述任何XML文档。

树结构包含根(父)元素,子元素等。通过使用树结构,您可以了解从根开始的所有后续分支和子分支。解析从根部开始,然后向下移动第一个分支到一个元素,从那里取第一个分支,依此类推到叶节点。

以下示例演示了简单的XML树结构 -

<?xml version = "1.0"?>
<Company>
   <Employee>
      <FirstName>Ancony</FirstName>
      <LastName>Conan</LastName>
      <ContactNo>186-6666-8888</ContactNo>
      <Email>[email protected]</Email>
      <Address>
         <City>Chongqing</City>
         <State>Shapingba</State>
         <Zip>420000</Zip>
      </Address>
   </Employee>
</Company>

以下树结构代表上述XML文档 -


在上图中,有一个名为<company>的根元素。里面还有一个元素<Employee>。在员工元素内部,有五个分支名为<FirstName>,<LastName>,<ContactNo>,<Email>和<Address>。在<Address>元素中,有三个子分支,名为<City> <State>和<Zip>。

18 DOM

该文档对象模型Document Object Model(DOM)是XML的基础。XML文档具有称为节点的信息单元的层次结构; DOM是描述这些节点及其之间关系的一种方式。

DOM文档是按层次结构组织的节点或信息片段的集合。此层次结构允许开发人员浏览树状结构以查找特定信息。因为它基于信息的层次结构,所以DOM被认为是基于树的。

另一方面,XML DOM还提供了一个API,它允许开发人员在任何时候添加,编辑,移动或删除树中的节点,以创建应用程序。

以下示例(sample.htm)将XML文档(“address.xml”)解析为XML DOM对象,然后使用JavaScript从其中提取一些信息 -

<!DOCTYPE html>
<html>
   <body>
      <h1>TutorialsPoint DOM example </h1>
      <div>
         <b>Name:</b> <span id = "name"></span><br>
         <b>City:</b> <span id = "city"></span><br>
         <b>Phone:</b> <span id = "phone"></span>
      </div>

      <script>
         if (window.XMLHttpRequest)
         {// code for IE7+, Firefox, Chrome, Opera, Safari
            xmlhttp = new XMLHttpRequest();
         }
         else
         {// code for IE6, IE5
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
         }

         xmlhttp.open("GET","/xml/address.xml",false);
         xmlhttp.send();
         xmlDoc = xmlhttp.responseXML;

         document.getElementById("name").innerHTML=
            xmlDoc.getElementsByTagName("name")[0].childNodes[0].nodeValue;
         document.getElementById("city").innerHTML=
            xmlDoc.getElementsByTagName("city")[0].childNodes[0].nodeValue;
         document.getElementById("phone").innerHTML=
            xmlDoc.getElementsByTagName("phone")[0].childNodes[0].nodeValue;
      </script>
   </body>
</html>

address.xml的内容如下 -

<?xml version = "1.0"?>
<contact-info>
    <name>Ancony Conan</name>
    <city>Chongqing</city>
    <phone>186-6666-8888</phone>
</contact-info>

19 命名空间

一个命名空间是一组独特的名字。名称空间是元素和属性名称可以分配给组的一种机制。名称空间由URI(统一资源标识符)标识。

命名空间声明

名称空间是使用保留属性声明的。这样的属性名称必须是xmlns或以xmlns开头:如下所示 -

<element xmlns:name = "URL">

语法

  • 名称空间以关键字xmlns开头。
  • 单词名称是名称空间前缀。
  • 该URL是名称空间标识符。

命名空间仅影响文档中的有限区域。包含声明及其所有后代的元素位于命名空间的范围内。以下是XML命名空间的一个简单示例 -

<?xml version = "1.0" encoding = "UTF-8"?>
<cont:contact xmlns:cont = "https://blog.csdn.net/ancony_">
   <cont:name>Ancony Conan</cont:name>
   <cont:city>Chongqing</cont:city>
   <cont:phone>186-6666-8888</cont:phone>
</cont:contact>

这里,名称空间前缀是cont,名称空间标识符(URI)是https://blog.csdn.net/ancony_。这意味着,带有cont前缀的元素名称和属性名称(包括联系人元素)都属于https://blog.csdn.net/ancony_命名空间。

20 数据库

XML数据库用于以XML格式存储大量信息。随着XML在各个领域的使用越来越多,需要有一个安全的地方来存储XML文档。存储在数据库中的数据可以使用XQuery进行查询,序列化并导出为所需的格式。

XML数据库类型

有两种主要类型的XML数据库 -

  • 启用了XML
  • 原生XML(NXD)

启用了数据库的XML

启用XML的数据库只不过是为XML文档转换而提供的扩展。这是一个关系数据库,数据存储在由行和列组成的表格中。这些表格包含一组记录,这些记录又由字段组成。

原生XML数据库

原生XML数据库基于容器而不是表格格式。它可以存储大量的XML文档和数据。原生XML数据库由XPath表达式查询。

原生XML数据库比启用XML的数据库具有优势。与支持XML的数据库相比,它能够存储,查询和维护XML文档。

以下示例演示XML数据库 -

<?xml version = "1.0"?>
<contact-info>
   <contact1>
      <name>Ancony Conan</name>
      <city>Chongqing</city>
      <phone>186-6666-8888</phone>
   </contact1>

   <contact2>
      <name>Andy Angla</name>
      <city>Chongqing</city>
      <phone>137-6666-7777</phone>
   </contact2>
</contact-info>

在这里,创建一个联系人表,其中包含联系人记录(联系人1和联系人2),联系人记录又由三个实体组成 - 姓名,城市和电话。

21 XML工具

1、查看器Viewer

本章介绍查看XML文档的各种方法。可以使用简单的文本编辑器或任何浏览器查看XML文档。大多数主流浏览器都支持XML。只需双击XML文档(如果它是本地文件)或通过在地址栏中键入URL路径(如果文件位于服务器上),就可以在浏览器中打开XML文件,方法与我们在浏览器中打开其他文件。XML文件以“.xml”扩展名保存。

让我们探讨一下我们可以查看XML文件的各种方法。以下示例(sample.xml)用于查看本章的所有章节。

<?xml version = "1.0"?>
<contact-info>
   <name>Ancony Conan</name>
   <city>Chongqing</city>
   <phone>186-6666-8888</phone>
</contact-info>

文本编辑器

任何简单的文本编辑器(如记事本,TextPad或TextEdit)都可用于创建或查看XML文档,如下所示 -


Firefox浏览器

通过双击该文件在Chrome中打开上述XML代码。XML代码显示用颜色编码,这使得代码可读。它在XML元素的左侧显示加号(+)或减号( - )。当我们点击减号( - )时,代码隐藏。当我们点击加号(+)时,代码行会被扩展。Firefox中的输出如下所示 -


Chrome浏览器

在Chrome浏览器中打开上面的XML代码。代码显示如下所示 -


XML文档中的错误

如果您的XML代码缺少一些标签,则会在浏览器中显示一条消息。让我们尝试在Chrome中打开以下XML文件 -

<?xml version = "1.0"?>
<contact-info>
   <name>Ancony Conan</name>
   <city>Chongqing</city>
   <phone>186-6666-8888</phone>
</ontact-info>

在上面的代码中,开始和结束标签不匹配(参考contact_info标签),因此浏览器会显示错误消息,如下所示 -

 

2、编辑器

XML编辑器是一种标记语言编辑器。可以使用现有编辑器(如记事本,写字板或任何类似的文本编辑器)编辑或创建XML文档。您还可以在线或下载找到专业的XML编辑器,它具有更强大的编辑功能,例如 -

  • 它会自动关闭打开的标签。
  • 它严格检查语法。
  • 它用颜色突出显示XML语法以提高可读性。
  • 它可以帮助您编写有效的XML代码。
  • 它提供了对DTD和模式的XML文档的自动验证。

开源XML编辑器

以下是一些开源XML编辑器 -

Online XML Editor - 这是一个轻量级的XML编辑器,可以在线使用。

Xerlin - Xerlin是一个基于Apache许可证的Java 2平台的开源XML编辑器。它是一个基于Java的XML建模应用程序,用于轻松创建和编辑XML文件。

CAM - 内容组装机制 - CAM XML编辑器工具附带由Oracle赞助的XML + JSON + SQL Open-XDX。

3、解析器

XML解析器是一个软件库或为客户端应用程序提供接口以使用XML文档的包。它检查XML文档的正确格式,并可能验证XML文档。现代浏览器具有内置的XML解析器。

下图显示了XML解析器如何与XML文档进行交互 -


解析器的目标是将XML转换为可读代码。

为了简化解析过程,一些商业产品可以促进XML文档的分解并产生更可靠的结果。

下面列出了一些常用的解析器 -

  • MSXMLMicrosoft Core XML Services) 这是Microsoft提供的一组标准XML工具,包括解析器。
  • System.Xml.XmlDocument - 该类是.NET库的一部分,它包含许多与使用XML相关的不同类。
  • Java内置解析器 - Java库有其自己的解析器。该库的设计使您可以使用外部实现(如Apache或Saxon的Xerces)替换内置解析器。
  • Saxon - Saxon提供解析,转换和查询XML的工具。
  • Xerces - Xerces采用Java实现,由著名的开源Apache软件基金会开发。

4、处理器

当软件程序读取XML文档并采取相应措施时,这称为处理 XML。任何可以读取和处理XML文档的程序都称为XML处理器。XML处理器读取XML文件并将其转换为程序的其余部分可以访问的内存中结构。

最基本的XML处理器读取XML文档并将其转换为其他程序或子例程使用的内部表示。这被称为解析器,它是每个XML处理程序的重要组成部分。

类型

XML处理器被归类为验证不进行验证的类型,取决于他们是否检查XML文档的有效性。发现有效性错误的处理器必须能够报告它,但可能会继续正常处理。

一些验证解析器是 - xml4c(IBM使用C ++编写),xml4j(IBM使用Java编写),MSXML(Microsoft使用Java编写),TclXML(TCL),xmlproc(Python),XML :: Parser(Perl),Java Project X(Sun使用Java编写)。

一些非验证解析器是:OpenXML(Java),Lark(Java),xp(Java),AElfred(Java),expat(C),XParse(JavaScript),xmllib(Python)。

 

猜你喜欢

转载自blog.csdn.net/ancony_/article/details/79945955