XML 语言随笔

XML的含义

XML(eXtensible Markup Language,可扩展标记语言)是一种用于存储和传输数据的标记语言。XML与HTML(HyperText Markup Language,超文本标记语言)类似,但XML的设计目的是描述数据,而HTML的设计目的是显示数据。

1. xml特点

  • 可扩展性:用户可以定义自己的标签来精确描述数据。
  • 自描述性:XML文档包含标签和数据,标签提供了数据的上下文和含义,使得数据易于理解。
  • 平台无关性:XML是纯文本格式,可以在不同的操作系统和应用程序之间交换数据。
  • 层次结构:XML文档使用嵌套的标签来创建数据的层次结构。
  • 有效性验证:可以使用DTD(Document Type Definition,文档类型定义)或XML Schema来 定义XML文档的结构和规则,从而验证XML文档的有效性。

1.1 注意:

虽然XML功能强大,但其冗长和复杂的语法有时会导致解析和传输效率低下。JSON(JavaScript Object Notation)在某些情况下是XML的一个更轻量级的替代选择。

2.基本结构

  • 文档声明:通常在XML文档的第一行声明XML版本和编码。例如:<?xml version="1.0" encoding="UTF-8"?>
  • 元素(Element):元素是XML文档的基本构建块,由开始标签、内容和结束标签组成。例如:<book>Effective XML</book>
  • 属性(Attribute):属性提供了元素的额外信息,并放在开始标签内。例如:<book genre="computing">Effective XML</book>
  • 注释:注释以<!--开始,以-->结束,不被解析或显示。例如:<!-- This is a comment -->
XML 复制代码
<?xml version="1.0"?>
<library>
    <book>
        <title>Sandman Volume 1:Preludes and Nocturnes</lib:title>
        <author>Neil Gaiman</lib:author>
    </book>
    <book>
        <title>Good Omens</lib:title>
        <author>Terry Pratchett</lib:author>
    </book>
    <book>
        <title>"Repent, Harlequin!"</lib:title>
        <author>Harlan Ellison</lib:author>
    </book>
</library>

3. 层次标记语言

  • 它允许用户定义自己的标签(tags)
  • 与语义标记语言不同,XML中的每条数据必须括在标签中。
  • 数据封装在标签中,标签嵌套在层次中,该层次包含它封装数据的详细信息
  • 顶层标签是文档的根,封装文档全部内容,每个XML文档只能有一个根。

3.1 名称空间

名称空间提供对标签的引用框架,并且被赋值了一个URL形式的唯一ID,外加用于该名称空间中的标签的一个前缀。如下:

本例创建了一个Library 名称空间,他的标识符是**http://server.domain.tld/NameSpaces/Library** ,前缀是lib:,我们可以使用该名称空间创建标签的引用框架。

XML 复制代码
<?xml version="1.0"?>
<library:library xmlns:lib="http://server.domain.tld/NameSpaces/Library">
    <!-- xmlns为命名空间的前缀 -->
    <lib:book>
        <lib:title>Sandman Volume 1:Preludes and Nocturnes</lib:title>
        <lib:author>Neil Gaiman</lib:author>
    </lib:book>
    <lib:book>
        <lib:title>Good Omens</lib:title>
        <lib:author>Terry Pratchett</lib:author>
    </lib:book>
    <lib:book>
        <lib:title>"Repent, Harlequin!"</lib:title>
        <lib:author>Harlan Ellison</lib:author>
    </lib:book>
</lib:library>

注意:

  • 一个文档可以拥有和使用多个命名空间,上述示例只展示了一个命名空间
  • 有些名称空间声明前缀是为XML和与其相关的语言预留的,例 xml:xmlns:xsl:...
  • 名称空间的声明可以添加到文档的任意节点
  • 命名空间内对此节点的所有子节点都有效

一组标准

XML只用来存储层次数据工具,NO!记住!它的强大之处在于:

  • 它的可扩展性
  • 附带的一些标准:XSLT、XPath、模式和DTD语言,以及用来查询、链接、描述、显示和操作数据的一系列标准。
    • XSLT:强大的转换引擎,将XML语言转换成其他语言,如HTML、纯文本、PDF...。
    • XPath:描述XML节点集合的查询语言。

1. 模式/DTD语言

文档模型

概念

模式与DTD都是实现文档模型的方法,文档模型用以描述词汇和文档结构,利用它可以定义文档中将要出现的数据元素,元素之间的关系以及元素的数量。

文档模型的用途

处理文档之前,验证它的内容是否符合标准

是否需要?

如果程序本身能够预测即将接收到的数据,那就不需要

文档模型定义

DTD示例--将上述示例中的图书馆XML文档的描述转换为DTD格式:

XML 复制代码
<!DOCTYPE config SYSTEM "library.dtd">
<!ELEMENT library (book+)>
<!ATTLIST library
    owner CDATA #REQUIRED
>
<!ELEMENT book (title, author+)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>

第一行代码是为了向前面的图书馆文件中添加对DTD的引用,library.dtd为系统DTD路径

  • <!ELEMENT library (book+)>:表明有一个library元素,其含有一个或多个book类型的子元素
    • 元素频率和元素分组操作符
      1. ? :指定0个或者1个前面出现的元素
        • :指定一个或多个前面出现的元素
      2. , :指定一系列元素按此顺序出现
      3. ( ) :将元素组织在一起应用于()外的运算符适用于组内的所有元素
      4. | :'或'运算符
      5. * :指定元素出现0次或多次
  • <!ATTLIST library 指定图书馆元素有一个属性列表(不断更新) owner CDATA #REQUIRED 元素的属性列表 >

注意:

1.属性列表是与图书馆中元素的声明分开的,它与元素的名称链接起来,若元素名称变化,属性列表必须更新以指向新的元素名称

2.本例library只有一个属性,但是属性列表可以包含任意多个属性

3.属性的声明有三个强制元素:属性名称,属性类型和属性描述,其中:

  • 属性类型:DTD规范指定的数据类型,要么是一组允许的值。
  • 属性描述:指定属性的行为。这里可以给出属性的一个默认值。

DTD不全是XML

DTD的局限性

  1. 可借DTD表达复杂的结构,但维护起来很难
  2. 很难在文档模型中清楚表达数值范围
  3. 很难表达任意顺序的一些元素
  4. 不允许为数据指定模式

模式

模式来弥补DTD的不足,可提供基于XML的复杂语言,用以描述文档模型。同时可以清晰得指定数据得类型,使用re正则表达式描述字符数据模式,以及表达例如序列、选择和不受限制的模型的内容模型

模式是纯粹的XML

示例:

XML 复制代码
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

    <xs:element name="library">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="book" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="title" type="xs:string"/>
                            <xs:element name="author" type="xs:string" maxOccurs="unbounded"/>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:attribute name="owner" type="xs:string" use="required"/>
        </xs:complexType>
    </xs:element>

</xs:schema>

这篇文档1的顶层节点包含一个名称空间声明,指定了以xs:开头的所有标签属于由URL所标识的名称空间。这表明你拥有一个可用于验证模式的文档模型,使用的工具与验证其他XML文档的工具相同。

模式具有层次

pass

XPath

XPath:在XML文档中描述位置与节点集合的语言,XPath表达式包含对某个节点必须匹配的模式的描述。如果该节点匹配此模式,则被选中,否则,被忽略。

相关推荐
郭庆汝37 分钟前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
思则变4 小时前
[Pytest] [Part 2]增加 log功能
开发语言·python·pytest
漫谈网络4 小时前
WebSocket 在前后端的完整使用流程
javascript·python·websocket
try2find6 小时前
安装llama-cpp-python踩坑记
开发语言·python·llama
博观而约取7 小时前
Django ORM 1. 创建模型(Model)
数据库·python·django
精灵vector8 小时前
构建专家级SQL Agent交互
python·aigc·ai编程
Zonda要好好学习8 小时前
Python入门Day2
开发语言·python
Vertira8 小时前
pdf 合并 python实现(已解决)
前端·python·pdf
太凉8 小时前
Python之 sorted() 函数的基本语法
python
项目題供诗9 小时前
黑马python(二十四)
开发语言·python