【XML】《XML 实用教程》笔记

本贴最后更新于 3102 天前,其中的信息可能已经水流花落

XML 是 eXtensible Markup Language 的缩写,称之为可扩展标记语言。

符合 W3C 制定的基本语法规则的 XML 文件称为规范的 XML 文件,规范的 XML 文件如果再符合额外的一些约束就称之为有效的 XML 文件。

一个规范的 XML 文件应当满足如下语法规则:

  • XML 文件用“XML 声明”开始。
  • XML 文件有且仅有一个根标记
  • XML 的非根标记都必须封装在根标记中。
  • 非空标记必须由“开始标记”与“结束标记”构成。
  • XML 文件的标记必须形成树形结构,即标记不允许出现交叉。
  • 空标记没有“开始标记”和“结束标记”

XML 声明

一个规范的 XML 文件应当以 XML 声明作为文件的第 1 行,在其前面不能有空白、其他处理指令或注释。如:

还可以添加属性:standalone,指为 yes 或 no,表明 XML 文件是否是完全自包含的,即是否引用了外部“实体”。

标记

一个标记包含的内容由两部分构成:文本数据部分和子标记部分。一个标记包含的文本数据部分可以有普通字符、CDATA 段和实体引用。
根标记:每个 XML 文件有且仅有一个根标记,其他标记都必须封装在根标记中。
空标记:即不包含子标记或文本内容的标记,如:
非空标记:...
标记命名规则:可以由字母、数字、下划线、点或连字符组成,但必须以字母或下划线开头。标记名称区分大小写。

属性

属性指标记的附加信息,命名规则与标记相同,且区分大小写。属性不体现数据结构,不要因属性的频繁使用破坏 XML 的数据结构。

特殊字符

&lt; < &gt; > &apos; ' &quot; " &amp; &

CDATA 段
CDATA 段中的内容可以包含任意的字符。但 CDATA 段不能相互嵌套,如:

<![CDATA[ boolean boo=true&&false <三国演义> ]]>

注释

<!--与HTML文件相同—>

注释不可以在 XML 声明的前面。

名称空间

XML 允许自定义标记,那么不同的 XML 文件以及同一 XML 文件就可能出现名字相同的标记。想要区分这些标记,就需要使用名称空间。
有前缀的名称空间语法如下:
xmlns:前缀=名称空间的名字,如 xmlns:person="China.dalian"
无前缀的名称空间语法如下:
xmlns=名称空间的名字,如 xmlns=www.yahoo.com
名称空间的名字决定了相互之间的区分,前缀只是为了方便标记引用。
名称空间的作用域是声明该命名空间的标记及其所有子孙标记。尽管子标记可以通过名称空间的前缀来引用父标记声明名称空间,表明自己隶属于该名称空间,但子标记也可以重新声明名称空间,如:

<?xml version="1.0" encoding="UTF-8" ?> <people xmlns="public.of.china"> <p1:Lisi xmlnsp1="Liaoning"> 在建筑公司担任工程师 <usa:Lichuguo xmlns:usa="American"> 在美国学医英语 </usa:Lichuguo> </p1:Lisi> <Zhangsan xmlns="Shanghai"> 在上海中心医院医师 <Zhangchuguo xmlns="France"> 在法国学习法语 </Zhangchuguo> </Zhangsan> </people>

名称空间的名字

W3C 推荐使用统一资源标识符(Uniform Resource Identifier, URI)作为名称空间的名字。在 XML 中,URI 不必是有效的,仅仅用作名称空间的名字,往往使用 URL 作为 URI。

有效的 XML 文件

规范的 XML 表示合乎 XML 文件语法,有效的 XML 文件表示组织符合需要的逻辑。
对 XML 的数据结构进行约束的方式有两种:使用文档类型定义(Document Type Definition,DTD)和 XML Schema 模式。
一个规范的 XML 文件如果和某个 DTD 文件相关联,并且遵守该 DTD 文件规定的约束条件,就称之为有效的 XML 文件。

DTD 文件

在 DTD 文件中,用关键字 ELEMENT 来定义一个元素,格式如下:

DTD 文件的扩展名必须是“.dtd”,保存时所选择的编码必须与其关联的 XML 文件一致。

<!ELEMENT 手机用户表 (用户*)> <!ELEMENT 用户 (号码,姓名)> <!ELEMENT 号码 (#PCDATA)> <!ELEMENT 姓名 (#PCDATA)>

在 XML 文件中使用“文档类型声明”与一个 DTD 文件相关联。有两种形式的关联:SYSTEM 和 PUBLIC,SYSTEM 关联表明所关联的 DTD 文件由个人或工作小组所定义且认可,PUBLIC 关联表明所关联的 DTD 文件已经得到某一领域的认可,是经过许多人讨论得到认可的 DTD 文件:

<!DOCTYPE 根标记名称 SYSTEM "DTD文件的URI"> <!DOCTYPE 根标记名称 PUBLIC "正式公用标识符" "DTD文件的URI">

URI 如果是一个文件的名字,该文件必须和当前 XML 文件在同一目录中;如果 URI 是一个 URL,该 URL 必须是可以访问的。
DTD 文档类型声明应该写在 XML 声明的后面。

约束标记的子标记

标记的约束条件是用小括号括起来的子标记列表,子标记列表可以约束 XML 文件中的标记可以包含哪些子标记以及这些子标记出现的先后顺序。
子标记列表中的每个子标记可以尾加模式限定符来限定该子标记出现的次数,不加限定符的子标记必须出现且只能出现一次。限定符有一下三种:

  • +:必须出现一次或多次
  • *:可以出现零次或多次
  • ?:可以出现零次或一次

子标记列表的分项也可以是几个标记的“或运算”,并用括号括起来,如:
约束(#PCDATA)表示文本数据,可以单独使用,也可以与子标记或运算使用,但与子标记或运算时,限定符必须为*
约束 EMPTY 表示标记是一个空标记,或者只能包含有空字符的非空标记。
约束 ANY 表示不准备对该标记有任何约束

DTD 的完整性
即满足以下两个条件:

  1. 不允许无穷嵌套
  2. XML 文件中的每个标记都必须在 DTD 中有相应元素对其进行约束

DTD 中的属性约束列表

格式如下:

<!ATTLIST 标记名称 属性名称 属性类型 默认值 属性名称 属性类型 默认值 ...... >

其中,默认值有如下几种情况:

  • 字符串:标记必须有该属性,且有默认值
  • #IMPLIED:标记可以没有该属性,没有默认值
  • #REQUIRED:标记必须有该属性,没有默认值
  • #FIXED:标记可以没有改属性,但是如果有该属性,那么属性指固定不变

常用属性类型如下:

  • CDATA:属性值可以为任意字符串,但不能包含左右尖括号、与符号、单双引号。如果想用这些字符,可以使用实体引用。
  • Enumerated:属性值只可以使枚举值,其并非关键字,而是用小括号括起来,使用竖线分隔的枚举值组。
  • NMTOKEN:属性值可以由字母、数字、下划线、点或连字符组成,属性值中不能含有空格,可以用数字、点或连字符开头。
  • NMTOKENS:即用空格分隔的多个 NMTOKEN 值
  • ID:如果希望某个属性的属性值具有专用性,即不允许其他类型相同的属性再取这个属性值,就可以将属性的类型取为 ID 类型。可以由字母、数字、下划线、点或连字符组成,但必须以字母或下划线开头。其默认值必须为#REQUIRED 或#IMPLIED。
  • IDREF:属性值为已有的某个 ID 类型的属性的值
  • IDREFS:属性值为若干个其他 ID 类型的属性值的组合,可以用空格分隔。

内部 DTD

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE 列车时刻表 [ <!ELEMENT 列车时刻表 (T28次,T226次)> <!ELEMENT T28次 (开车时间,终到时间)> <!ELEMENT T266次 (开车时间,终到时间)> <!ELEMENT 开车时间 (hour,minute)> <!ELEMENT 终到时间 (hour,minute)> <!ELEMENT hour (#PCDATA)> <!ELEMENT minute (#PCDATA)> ]> <列车时刻表> <T28次> <开车时间> <hour>21点</hour> <minute>12分</minute> </开车时间> <终到时间> <hour>23点</hour> <minute>25分</minute> </终到时间> </T28次> <T226次> <开车时间> <hour>08点</hour> <minute>45分</minute> </开车时间> <终到时间> <hour>19点</hour> <minute>36分</minute> </终到时间> </T28次> </列车时刻表>

DTD 调试

IGNORE:忽略某些约束条件 <![ IGNORE [ DTD中的某些约束条件 ]]> INCLUDE:包含某些约束条件 <![INCLUDE [ DTD中的某些约束条件 ]]>

DTD 与命名空间

如果有效的 XML 文件中的标记想定义名称空间,那么必须保证 DTD 中有相应的约束。格式如下:

如:

<!ATTLIST ya:张三 xmlns:ya CDATA #FIXED "www.yahoo.com">

名称空间的目的是有效的区分名字相同的标记,否则不允许对一个标记约束两次。

XML 关联 CSS

<?xml-stylesheet href="样式表的URI" type="text/css" ?>
  • XML
    28 引用 • 59 回帖
  • 教程
    144 引用 • 626 回帖 • 8 关注
  • 阅读
    88 引用 • 267 回帖 • 4 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • ZephyrJung

    我好像搞出来了两篇一样的。。
    事情的经过是这样的:我编辑完后发现有问题,于是更新,但是不小心点了个取消发布,然后草稿箱里出现了两条一样的
    我点进去了其中一个进行编辑发布,另一个还在草稿箱里。然而我同步到黑客派上的文章却并没有更新,似乎是和草稿箱的保持一致了
    于是我删除了草稿箱的那篇,并点进黑客派的这篇,编辑了一下,与 blog 上的一致
    结果就出现了两篇
    @88250

    1 回复
  • 88250

    收到,这估计是个很深的坑,多谢反馈,等有空我会尽力修复的。

ZephyrJung
一切有为法,如梦幻泡影,如露亦如电,应作如是观 北京

推荐标签 标签

  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖 • 4 关注
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 249 关注
  • 人工智能

    人工智能(Artificial Intelligence)是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门技术科学。

    167 引用 • 314 回帖
  • Hprose

    Hprose 是一款先进的轻量级、跨语言、跨平台、无侵入式、高性能动态远程对象调用引擎库。它不仅简单易用,而且功能强大。你无需专门学习,只需看上几眼,就能用它轻松构建分布式应用系统。

    9 引用 • 17 回帖 • 636 关注
  • Thymeleaf

    Thymeleaf 是一款用于渲染 XML/XHTML/HTML5 内容的模板引擎。类似 Velocity、 FreeMarker 等,它也可以轻易的与 Spring 等 Web 框架进行集成作为 Web 应用的模板引擎。与其它模板引擎相比,Thymeleaf 最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个 Web 应用。

    11 引用 • 19 回帖 • 390 关注
  • Google

    Google(Google Inc.,NASDAQ:GOOG)是一家美国上市公司(公有股份公司),于 1998 年 9 月 7 日以私有股份公司的形式创立,设计并管理一个互联网搜索引擎。Google 公司的总部称作“Googleplex”,它位于加利福尼亚山景城。Google 目前被公认为是全球规模最大的搜索引擎,它提供了简单易用的免费服务。不作恶(Don't be evil)是谷歌公司的一项非正式的公司口号。

    49 引用 • 192 回帖
  • Hexo

    Hexo 是一款快速、简洁且高效的博客框架,使用 Node.js 编写。

    22 引用 • 148 回帖 • 16 关注
  • Vue.js

    Vue.js(读音 /vju ː/,类似于 view)是一个构建数据驱动的 Web 界面库。Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件。

    268 引用 • 666 回帖
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 166 关注
  • JWT

    JWT(JSON Web Token)是一种用于双方之间传递信息的简洁的、安全的表述性声明规范。JWT 作为一个开放的标准(RFC 7519),定义了一种简洁的,自包含的方法用于通信双方之间以 JSON 的形式安全的传递信息。

    20 引用 • 15 回帖 • 22 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    63 引用 • 289 回帖
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 655 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    93 引用 • 113 回帖
  • DNSPod

    DNSPod 建立于 2006 年 3 月份,是一款免费智能 DNS 产品。 DNSPod 可以为同时有电信、网通、教育网服务器的网站提供智能的解析,让电信用户访问电信的服务器,网通的用户访问网通的服务器,教育网的用户访问教育网的服务器,达到互联互通的效果。

    6 引用 • 26 回帖 • 529 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    290 引用 • 4494 回帖 • 652 关注
  • WordPress

    WordPress 是一个使用 PHP 语言开发的博客平台,用户可以在支持 PHP 和 MySQL 数据库的服务器上架设自己的博客。也可以把 WordPress 当作一个内容管理系统(CMS)来使用。WordPress 是一个免费的开源项目,在 GNU 通用公共许可证(GPLv2)下授权发布。

    66 引用 • 114 回帖 • 193 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 76 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 575 关注
  • 友情链接

    确认过眼神后的灵魂连接,站在链在!

    24 引用 • 373 回帖 • 1 关注
  • Sillot

    Insights(注意当前设置 master 为默认分支)

    汐洛彖夲肜矩阵(Sillot T☳Converbenk Matrix),致力于服务智慧新彖乄,具有彖乄驱动、极致优雅、开发者友好的特点。其中汐洛绞架(Sillot-Gibbet)基于自思源笔记(siyuan-note),前身是思源笔记汐洛版(更早是思源笔记汐洛分支),是智慧新录乄终端(多端融合,移动端优先)。

    主仓库地址:Hi-Windom/Sillot

    文档地址:sillot.db.sc.cn

    注意事项:

    1. ⚠️ 汐洛仍在早期开发阶段,尚不稳定
    2. ⚠️ 汐洛并非面向普通用户设计,使用前请了解风险
    3. ⚠️ 汐洛绞架基于思源笔记,开发者尽最大努力与思源笔记保持兼容,但无法实现 100% 兼容
    29 引用 • 25 回帖 • 117 关注
  • 支付宝

    支付宝是全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA 收款等生活服务应用。

    29 引用 • 347 回帖
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 786 关注
  • CongSec

    本标签主要用于分享网络空间安全专业的学习笔记

    1 引用 • 1 回帖 • 31 关注
  • 阿里巴巴

    阿里巴巴网络技术有限公司(简称:阿里巴巴集团)是以曾担任英语教师的马云为首的 18 人,于 1999 年在中国杭州创立,他们相信互联网能够创造公平的竞争环境,让小企业通过创新与科技扩展业务,并在参与国内或全球市场竞争时处于更有利的位置。

    43 引用 • 221 回帖 • 62 关注
  • Mobi.css

    Mobi.css is a lightweight, flexible CSS framework that focus on mobile.

    1 引用 • 6 回帖 • 757 关注
  • 游戏

    沉迷游戏伤身,强撸灰飞烟灭。

    181 引用 • 821 回帖
  • Mac

    Mac 是苹果公司自 1984 年起以“Macintosh”开始开发的个人消费型计算机,如:iMac、Mac mini、Macbook Air、Macbook Pro、Macbook、Mac Pro 等计算机。

    168 引用 • 597 回帖