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表达式包含对某个节点必须匹配的模式的描述。如果该节点匹配此模式,则被选中,否则,被忽略。

相关推荐
GoodStudyAndDayDayUp18 分钟前
IDEA能够从mapper跳转到xml的插件
xml·java·intellij-idea
蓝天星空27 分钟前
Python调用open ai接口
人工智能·python
jasmine s36 分钟前
Pandas
开发语言·python
郭wes代码36 分钟前
Cmd命令大全(万字详细版)
python·算法·小程序
leaf_leaves_leaf1 小时前
win11用一条命令给anaconda环境安装GPU版本pytorch,并检查是否为GPU版本
人工智能·pytorch·python
夜雨飘零11 小时前
基于Pytorch实现的说话人日志(说话人分离)
人工智能·pytorch·python·声纹识别·说话人分离·说话人日志
404NooFound1 小时前
Python轻量级NoSQL数据库TinyDB
开发语言·python·nosql
见欢.1 小时前
XXE靶场
xml
天天要nx1 小时前
D102【python 接口自动化学习】- pytest进阶之fixture用法
python·pytest
minstbe1 小时前
AI开发:使用支持向量机(SVM)进行文本情感分析训练 - Python
人工智能·python·支持向量机