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 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 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格式:

<!DOCTYPE config SYSTEM "library.dtd">
<!ELEMENT library (book+)>
<!ATTLIST libraryowner 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. |    :'或'运算符
      6. *   :指定元素出现0次或多次
  • <!ATTLIST library                                         指定图书馆元素有一个属性列表(不断更新)                    owner CDATA #REQUIRED             元素的属性列表                                                      >

注意:

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

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

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

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

DTD不全是XML

DTD的局限性

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

模式

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/62976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Milvus×OPPO:如何构建更懂你的大模型助手

01. 背景 AI业务快速增长下传统关系型数据库无法满足需求。 2024年恰逢OPPO品牌20周年&#xff0c;OPPO也宣布正式进入AI手机的时代。超千万用户开始通过例如通话摘要、新小布助手、小布照相馆等搭载在OPPO手机上的应用体验AI能力。 与传统的应用不同的是&#xff0c;在AI驱动的…

DICOM MPPS详细介绍

文章目录 前言一、常规检查业务流程二、MPPS的作用三、MPPS的原理1、MPPS与MWL2、MPPS服务过程 四、MPPS的实现步骤1、创建实例2、传递状态 五、总结 前言 医院中现有的DICOM MWL(Modality Worklist)已开始逐渐得到应用&#xff0c;借助它可以实现病人信息的自动录入&#xff0…

【笔记2-3】ESP32 bug:PSRAM chip not found or not supported 没有外部PSRAM问题解决

主要参考b站宸芯IOT老师的视频&#xff0c;记录自己的笔记&#xff0c;老师讲的主要是linux环境&#xff0c;但配置过程实在太多问题&#xff0c;就直接用windows环境了&#xff0c;老师也有讲一些windows的操作&#xff0c;只要代码会写&#xff0c;操作都还好&#xff0c;开发…

【0x3D】HCI_Remote_Host_Supported_Features_Notification事件详解

目录 一、事件概述 二、事件格式及参数说明 2.1. HCI_Remote_Host_Supported_Features_Notification事件格式 2.2. BD_ADDR 2.3. Remote_Host_Supported_Features 三、事件作用 3.1. 设备特性沟通与理解 3.2. 功能协商与性能优化 3.3. 设备管理与配置更新 四、应用场…

深入理解AVL树:结构、旋转及C++实现

1. AVL树的概念 什么是AVL树&#xff1f; AVL树是一种自平衡的二叉搜索树&#xff0c;其发明者是Adelson-Velsky和Landis&#xff0c;因此得名“AVL”。AVL树是首个自平衡二叉搜索树&#xff0c;通过对树的平衡因子进行控制&#xff0c;确保任何节点的左右子树高度差最多为1&…

Css动画:旋转相册动画效果实现

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Css篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Css篇专栏内容:Css动画:旋转相册动画效果实现 前言 随着Web技术的发展&#xff0c;网页不再局限于静态展示&#…

ElasticSearch 与向量数据库的结合实践:突破亿级大表查询瓶颈20241204

&#x1f4a1; ElasticSearch 与向量数据库的结合实践&#xff1a;突破亿级大表查询瓶颈 &#x1f4da; 引言 随着业务规模的不断扩大&#xff0c;传统关系型数据库在处理 亿级大表 时&#xff0c;性能瓶颈愈加凸显。关键词检索、模糊查询、多条件筛选等需求逐步升级&#xff…

Python 笔记之线程threading

并发和并行 并发&#xff1a;当有多个线程操作时&#xff0c;如果系统只有一个CPU&#xff0c;则它不可能真正同时进行一个以上的线程&#xff0c;它只能把CPU运行时间划分为若干个时间段&#xff0c;再将时间段分配给各个线程执行&#xff0c;在一个时间段的线程代码运行时&am…

解决stable-diffusion-webui时的问题:No module ‘xformers‘. Proceeding without it

p.s 被另一篇文章坑了&#xff0c;装个xformers把我原先的pytorch降智了&%$^# 注意&#xff1a;&#xff01;&#xff01;&#xff01;xformers非强制安装&#xff1b;可优化显存&#xff0c;提高性能和出图速率&#xff0c;对于GPU能力有限的用户很有用&#xff1b;安装过…

如何加强游戏安全,防止定制外挂影响游戏公平性

在现如今的游戏环境中&#xff0c;外挂始终是一个困扰玩家和开发者的问题。尤其是定制挂&#xff08;Customized Cheats&#xff09;&#xff0c;它不仅复杂且隐蔽&#xff0c;更能针对性地绕过传统的反作弊系统&#xff0c;对游戏安全带来极大威胁。定制挂通常是根据玩家的需求…

【Python系列】使用 `psycopg2` 连接 PostgreSQL 数据库

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Linux 权限管理:用户分类、权限解读与常见问题剖析

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; &#x1f6a9;用通俗易懂且不失专业性的文字&#xff0c;讲解计算机领域那些看似枯燥的知识点&#x1f6a9; 目录 &#x1f4af;L…

Oracle 11g ADG 单实例 DG Broker 配置指南

概述 DataGuard Broker能更加容易的管理和维护多个Standby Database&#xff0c;它能够将主库和备库按照一定的逻辑组织起来并进行集中管理&#xff0c;包括创建、维护和监控 Data Guard 等任务。如果有多个备库或者RAC数据库中有个多个实例&#xff0c;要是进行手工配置管理&…

数据采集卡的各参数介绍

数据采集卡&#xff08;DAQ 卡&#xff09;是用于测量物理信号&#xff08;如电压、电流、温度等&#xff09;并将其转化为数字信号的设备。 1. 通道数&#xff08;Channels&#xff09; 含义&#xff1a;数据采集卡可以同时采集多少路信号。比喻&#xff1a;通道数就像一个人…

LeetCode 力扣 热题 100道(十四)二叉树的中序遍历(C++)

给定一个二叉树的根节点 root &#xff0c;返回 它的 中序 遍历 。 如下为代码&#xff1a; /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullpt…

运费微服务和redis存热点数据

目录 运费模板微服务 接收前端发送的模板实体类 插入数据时使用的entity类对象 BaseEntity类 查询运费模板服务 新增和修改运费模块 整体流程 代码实现 运费计算 整体流程 总的代码 查找运费模板方法 计算重量方法 Redis存入热点数据 1.从nacos导入共享redis配置…

【C++】—— set 与 multiset

【C】—— map 与 set 1 序列式容器和关联式容器2 set 系列的使用2.1 set 和 multiset 参考文档2.2 set 类的介绍2.3 set 的迭代器和构造2.4 set的增删查2.4.1 insert2.4.2 find 与 erase2.4.3 count 2.5 lower_bound 与 upper_bound2.6 multiset 与 set 的差异2.6.1 不再去重2…

HTML5系列(11)-- Web 无障碍开发指南

前端技术探索系列&#xff1a;HTML5 Web 无障碍开发指南 ♿ 致读者&#xff1a;构建人人可用的网络 &#x1f44b; 前端开发者们&#xff0c; 今天我们将深入探讨 Web 无障碍开发&#xff0c;学习如何创建一个真正包容、人人可用的网站。让我们一起为更多用户提供更好的网络…

dockers网络连接指令:docker network connect

docker network connect 是 Docker 提供的一个命令,用于将现有的容器连接到一个指定的网络中。通过这个命令,用户可以让容器加入到不同的网络环境中,从而实现容器间的通信或者与外部网络的交互。一旦容器被连接到某个网络,它就能够与其他同处该网络中的容器进行直接通信,而…

Jupyter Notebook认识、安装和启动以及使用

Jupyter Notebook认识、安装和启动以及使用 Jupyter Notebook认识、安装和启动以及使用 Jupyter Notebook认识、安装和启动以及使用一、认识Jupyter Notebook1.1 Jupyter Notebook概述1.2 Jupyter Notebook 重要特性(1)交互式代码执行(2)支持多种编程语言(3)富文本编辑(4)代码高…