首页 > 其他分享 >Chapter11_XML究竟是什么

Chapter11_XML究竟是什么

时间:2022-12-09 09:13:03浏览次数:44  
标签:XML 语言 标记 标签 HTML 文档 Chapter11 究竟

热身回答

  • XML 是什么的缩写?
    • Extensible markup language
    • 可扩展标记语言
    • 所谓标记语言,就是可以用标签为数据赋予意义的语言。
  • HTML 和 XML 的区别是什么?
    • HTML是网页, XML是
    • HTML 是用于编写网页的标记语言。XML 是用于定义任意标记语言的元语言。
    • 通常把用于定义新语言的语言称作元语言。通过使用XML 可以定义出各种各样的新语言。
  • 在处理 XML 文档的程序组件中,哪个成为了 W3C 的推荐标准?
    • DOM(Document Object Model,文档对象模型)

11.1 XML 是标记语言

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

那么什么是“标记语言”? 什么又是“可扩展”的呢?

通过添加标签为数据赋予意义的行为称为“标记”。为这种给数据赋予意义的行为定义规则的语言就是“标记语言”。而HTML(Hypertext Markup Language, 超文本标记语言)就是一种标记语言。

如下图, 一个网页实际上就是一个HTML文件, HTML文件的扩展名一般为 .html或 .htm. 我们可以随意打开一个网站, 右键选择“查看网页源代码”

可以看到里面有很多用“<”和“>”括起来的单词,例如 、、、<body> 等。通常把它们称作“标签”。<html> 是用于表示这是 HTML 文件的标签。同样,其他标签也分别被赋予了意义,<head> 表示网页的头部,<title> 表示网页的标题,<body> 表示网页的主体。除此之外还有很多标签,例如使文字加粗显示的 <b>、在网页中插入图片的 <img>,等等。</p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090141287-910912877.png" alt="image-20221206083455293" loading="lazy"></p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090141722-560909718.png" alt="image-20221206083641372" loading="lazy"></p> <h1 id="112-xml-是可扩展的语言">11.2 XML 是可扩展的语言</h1> <p>那么,什么是可扩展/extensible呢?</p> <p>XML是一种标记语言, XML文件的扩展名一般是.xml, XML文件和HTML的区别在于, 在XML文件中我们可以随意创建标签, 而不必使用规定的标签。 但是HTML文件中, 我们必须使用 <html>、<head>、<title>、<body> 等标签, 来起到对应的作用。 所以HTML是固定的标记语言, 而XML是可扩展的标记语言。</p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090142087-860341515.png" alt="image-20221206084353054" loading="lazy"></p> <h1 id="113-xml是元语言">11.3 XML是元语言</h1> <blockquote> <p>xml不是HTML的替代品,xml和html是两种不同用途的语言。 XML 不是要替换 HTML;实际上XML 可以视作对 HTML 的补充。XML 和HTML 的目标不同<strong>HTML 的设计目标是显示数据并集中于数据外观</strong>,而<strong>XML的设计目标是描述数据并集中于数据的内容</strong>。HTML用来展示数据, XML用来描述和存放数据。</p> </blockquote> <p>前面提到了, 我们可以在XML文件中任意创建标签, 而HTML语言必须使用固定的标签。 但是XML也是有格式的。</p> <p>XML 并没有限定标签的使用方式,使用什么样的标签都可以。可以说 XML 仅仅限定了进行标记时标签的书写格式(书写风格)。也就是说通过定义要使用的标签种类,就可以创造出一门新的标记语言。通常把这种用于创造语言的语言称作“元语言”。</p> <p>例如,我们可以使用<dog> 和 <cat> 等标签,创造一种属于自己的标记语言——宠物语言。不过,就算新语言是自己创造的,也毕竟属于 XML 格式的标记语言,所以不遵循一定的规范是不行的。如果只是在文档中胡乱地堆积标签,则无法称之为符合 XML 格式的语言。</p> <p>下图中列出了作为元语言的XML 中的约束:</p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090142650-845506224.png" alt="image-20221206084725474" loading="lazy"></p> <p>XML 的数据是纯文本格式的,也就是说只包含字符。通常把遵循了 XML 的约束编写出的文档称为“XML 文档”;把保存着 XML 文档的文件称为“XML 文件”。可以使用记事本等文本编辑器编写XML 文件。</p> <p>MyPet.xml:</p> <pre><code class="language-xml"><?xml version="1.0" encoding="UTF-8"?> <pet> <cat>小玉</cat> <dog>小不点儿</dog> </pet> </code></pre> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090142995-700211479.png" alt="image-20221206085139615" loading="lazy"></p> <p>我们用Web 浏览器打开MyPet.xml看看。当然,由于它不是 HTML 文件,所以不会显示成网页。但是现在的 Web 浏览器都集成了 XML 解析器,可以用这个功能来检查 XML 文件的书写格式。如果用 Internet Explorer Web浏览器打开 MyPet.xml,就可以看到为了便于理解,里面的关键词、标签以及其他信息都用不同的颜色区分了出来。</p> <p>通常把遵循 XML 约束、正确标记了的文档称作“格式良好的XML 文档”(Well-formed XML Document)。换言之,只要能通过 XML解析器的解析,就是格式良好的 XML 文档。下面我们做一个实验,将MyPet.xml 中的 </dog> 删除,保存后用 Web 浏览器再次加载该文件。</p> <p>因为 XML 约束中规定,标签必须以 < 标签名 >、</ 标签名 > 的形式成对儿出现,所以如果删除了 </dog> 而只留下 <dog> 的话,就不再是格式良好的 XML 文档了。这导致 XML 解析器不能正确解析,在 Web 浏览器上自然也就无法正确显示了, 如下图</p> <pre><code class="language-xml"><?xml version="1.0" encoding="UTF-8"?> <pet> <cat>小玉</cat> <dog>小不点儿 </pet> </code></pre> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090143322-966199590.png" alt="image-20221206085355472" loading="lazy"></p> <h1 id="114-xml-可以为信息赋予意义">11.4 XML 可以为信息赋予意义</h1> <p>我们已经理解了XML为什么是可扩展的标记语言了, 但是XML诞生的意义是什么?</p> <p>前面提到HTML是用来展示数据的, 也就是说HTML中规定的各种标签只能用来指定信息的呈现样式, 而不能表示信息的含义。 也就是说, 当我们有了一个需求“能够自动检查多个购物网站上的商品价格,然后自<br> 动在报价最低的网站上下单”, 但是HTML因为不知道那些表示价格的数字的含义, 是无法满足我们的需求的。</p> <p>请看下图所示的 HTML 文件。如果把这个 HTML 文件显示在Web 浏览器上,那么对人来说,商品编号、商品名称和价格是可以区分出来的。例如,虽然 1234 和 19800 都是数字,但是人们还是知道 1234 是商品编号,而 19800 是价格。</p> <p>但是,在 HTML 的标签中,并没有可以区分商品编号、商品名称和价格的标签。<table>、<tr> 和 <td> 只表示会以表格的形式呈现信息。作为程序要处理的数据格式,从 HTML 文件中提取出商品编号、商品名称和价<br> 格 的 过 程 将 非 常 繁 琐。 那 么 像 下 面 这 样 做 如 何 呢? 首 先 定 义 出<productId>、<productName>、<price> 等标签,然后用它们表示商品编号、商品名称、价格等信息。程序加载了带有这些标签的文件后,就能够轻松地识别出商品编号、商品名称和价格了,因为信息的含义已经用这些标签标记出来了。</p> <p>所以XML就是为了给信息赋予意义而诞生的。</p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090143630-1178332219.png" alt="image-20221206090431046" loading="lazy"></p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090143964-2121777564.png" alt="image-20221206090517695" loading="lazy"></p> <p>在互联网的世界中,有一个叫作 W3C(World Wide Web Consortium,万维网联盟)的机构。该机构以“W3C 推荐标准”的形式制定了一系列标准。XML 于 1996 年成为了 W3C 的推荐标准(XML 1.0)。这之后,人们使用 XML 这种元语言,又定义出了新的网页标记语言XHTML(Extensible Hypertext Markup Language,可扩展超文本标记语言 ), 该 语 言 也 于 2000 年 成 为 了 W3C 推 荐 标 准。</p> <blockquote> <p><a href="https://www.w3.org/" target="_blank">https://www.w3.org/</a></p> <p><a href="https://www.chinaw3c.org/" target="_blank">https://www.chinaw3c.org/</a></p> </blockquote> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090144349-216781222.png" alt="image-20221206090616369" loading="lazy"></p> <h1 id="115-xml是通用的数据交换格式">11.5 XML是通用的数据交换格式</h1> <p>W3C 的推荐标准是不依赖于特定厂商的通用规范。因此可以认为成为 W3C 推荐标准的 XML 是一种通用的数据交换格式。也就是说,如果某家厂商的某个应用程序把数据保存到了 XML 文件中,那么其他厂商的另一个应用程序就应该可以通过加载这个 XML 文件来使用数据。除此之外,XML 也可以在同一个厂商的不同应用程序之间交换数据。</p> <p>XML 并不是第一个跨越了厂商或应用程序差异的通用数据交换格式。在计算机行业,长久以来一直把 CSV(Comma Separated Value,逗号分隔值)作为通用数据交换格式沿用至今。下面就试着对比一下XML 和 CSV 吧。</p> <p>与 XML 一样,<strong>CSV 也是仅由字符构成的纯文本文件</strong>。一般情况下,CSV 文件的扩展名为 .csv。正如其名,在 CSV 文件中,记录的是经过“,”(半角逗号)分割后的信息。例如,上一节提到的购物网站中的商品信息如果用 CSV 表示的话,就如图 11.10 所示。其中,字符串要用“"”(半角双引号)括起来,而数字则直接书写。每一件商品的记录(有一定意义的信息的集合)占一行。</p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090144667-1145600190.png" alt="image-20221206090959730" loading="lazy"></p> <p>由此图可以看出, CSV只记录了信息本身, 而没有为各个信息赋予意义。尽管XML文件中, 标签为信息赋予了意义, 这是一个很大的优势, 但也正因为如此, XML文件的尺寸变大了。 文件变大, 也就是说会占用更多的存储空间、需要更长的传输以及处理时间。 所以CSV和ML文件各有千秋。</p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090145013-208531451.png" alt="image-20221206091059786" loading="lazy"></p> <blockquote> <p>实际生活中, 我们经常把excel文件保存为csv或者xml文件, 从而使得运行速度更快。</p> </blockquote> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090145359-1324538883.png" alt="image-20221206091435175" loading="lazy"></p> <h1 id="116-可以为-xml-标签设定命名空间">11.6 可以为 XML 标签设定命名空间</h1> <p>什么是命名空间?</p> <p>XML 文档并非互联网专用,但是 XML 确实是一种主要通过互联网在全世界的计算机之间交换数据时使用的数据格式。这样的话就有可能遇到一个<strong>问题</strong>:<u>虽然标签的名字相同,但是标记语言的创造者们却为它们赋予了各种不同的含义</u>。例如 <cat> 这个标签,有人用它来表示猫(CAT),也有人会用它来表示连接(conCATenate)A。</p> <blockquote> <p>cat 除了表示猫,还是一个 Unix 命令的名称,该命令用于将多个文件连接在一起。在计算机行业,应该也有不少人更倾向于由 cat 这个词联想到连接,而不是猫。</p> </blockquote> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090145668-1182984517.png" alt="image-20221207084357304" loading="lazy"></p> <p>于是<strong>命名空间/Namespace</strong>就出现了, XML命名空间(Namespace in XML)是一个W3C推荐标准, 是为了防止这种同形异义带来的混乱</p> <p><strong>命名空间,通常是一个能代表企业或个人的字符串,用于修饰限定标签的名字</strong>。在 XML文档中,通过把<strong>“xmlns=" 命名空间的名字 "”</strong>作为标签的一个属性记述,就可以为标签设定命名空间。xmlns 即 XML NameSpace(命名空间)的缩写。通常用全世界唯一的标识符作为命名空间的名称。说到互联网世界中的唯一标识符,公司的 URI 就再好不过了吧。例如,在XML 文件中,GrapeCity 公司的矢泽创建的标签 <cat> 就可以写成如下这种格式。<br> <cat xmlns="http://www.grapecity.com/yazawa"> 小玉 </cat></p> <h1 id="117-可以严格地定义-xml-的文档结构">11.7 可以严格地定义 XML 的文档结构</h1> <p>之前我们提到过“格式良好的 XML 文档”,还有有一个词叫作“有效的 XML 文档”(Valid XML document)。所谓有效的 XML 文档是指在 XML 文档中写有 <strong>DTD(Document Type Definition,文档类型描述)</strong>信息。</p> <p>其实<strong>完整的XML文档包括XML声明、XML实例和DTD三个部分</strong></p> <ul> <li>XML 声明,就是写在 XML 文档开头的、形如 <?xml version="1.0" encoding="Shift_JIS"?> 的部分</li> <li>XML实例是文档中通过标签被标记的部分。</li> <li>DTD 的作用是定义 XML 实例的结构。虽然也可以省略 DTD,但是通过 DTD 可以严格地检查XML 实例的内容是否有效。</li> </ul> <p>下图展示了一个写有 DTD 的 XML 文档。</p> <p>用“<!DOCTYPE>”和“]>”括起来的部分就是 DTD。DTD 定义了在 <mydata> 标签中可以有一个以上的 <company> 标签;在 <company> 标签中可以包含 <name>、<address> 和 <employee> 标签。只要定义了这样的 DTD,当遇到那些虽然记录了公司名称和地址,但还没有记录员工数量的数据时,就可以判断出这不是一个有效的 XML 实例。</p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090146011-352868082.png" alt="image-20221207085326131" loading="lazy"></p> <p>与 DTD 相同,还有一个名为 XML Schema 的技术也可用于定义XML 实例的结构。在 XML 中,DTD 借用了可称得上是标记语言始祖的 SGML(Standard Generalized Markup Language,标准通用标记语言)语言的语法。 XML Schema可以对 XML 文档执行更严格地检查,例如检查数据类型或数字位数等。</p> <h1 id="118-用于解析-xml-的组件">11.8 用于解析 XML 的组件</h1> <p>XML文档是用来记录信息的, 那么计算机该如何获得那些信息, 所以如何处理XML文档呢?</p> <p>的确存在着用于处理 XML 文档的程序组件。比如已成为 W3C 标准的 DOM(Document Object Model,文档对象模型)以及由 XML-dev社区开发的 SAX(Simple API for XML)。其实无论是 DOM 还是 SAX,都只是组件的规范,实际的组件是由某个厂商或社区提供的。</p> <p>如果使用的是 Windows,那么就应该已经安装了一个由微软提供的、遵循了 DOM 规范的组件(一个名为 msxml3.dll 的 DLL 文件)。下面我们就使用 VBScript 编程语言,试着编写一个实验程序吧。</p> <p>如果使用的是 Windows,那么就应该已经安装了一个由微软提供的、遵循了 DOM 规范的组件(一个名为 msxml3.dll 的 DLL 文件)。下面我们就使用 VBScript 编程语言,试着编写一个实验程序吧。用记事本编写出如代码清单 11.1 所示的程序,保存到名为 TestProg.vbs 的文件中,这个文件要和之前所编写的 MyPet.xml 放置在同一个文件夹中。双击 TestProg.vbs 的图标即可运行该程序. 这个程序的功能是读取 MyPet.xml 文件的内容,显示出每种宠物的名字。</p> <pre><code class="language-vbscript">Set obj = CreateObject("Microsoft.XMLDOM") obj.async = False obj.Load "MyPet.xml" s = "" For i = 1 To obj.documentElement.childNodes.length s = s & obj.documentElement.childNodes.Item(i-1).nodeName s = s & "..." s = s & obj.documentElement.childNodes.Item(i-1).Text s = s & vbCrLf Next MsgBox s </code></pre> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090146323-217641644.png" alt="image-20221207090239424" loading="lazy"></p> <h1 id="119-xml-可用于各种各样的领域">11.9 XML 可用于各种各样的领域</h1> <p>通过使用 XML,诞生了各种各样的标记语言:</p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090146638-236856399.png" alt="image-20221207090743823" loading="lazy"></p> <p>为了实现各自的目的,每一种标记语言中都定义了各种各样的标签。</p> <p>例如,在描述数学算式的 MathML(Mathematical Markup Language,数学标记语言)中,就定义了表示根号、乘方或分数等数学元素的标签。<br> $$<br> aX^2 + bX + c = 0<br> $$<br> 比如上面的这个方程,如果用 MathML 描述的话,就会是:</p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090146963-1324533926.png" alt="image-20221207090907017" loading="lazy"></p> <p>再例如, SOAP(Simple Object Access Protocol,简单对象访问协议)可用于分布式计算。所谓分布式计算,就是把程序分散部署在用网络连接起来的多台计算机上,使这些计算机相互协作,充分发挥计算机整体的计算能力。简单地说,SOAP 就是使运行在 A 公司计算机中的 A 程序,可以调用运行在 B 公司计算机中的 B 程序。</p> <p>SOAP 的出现使过去的分布式计算技术变得更容易使用,也更通用。无论是调用程序时所需的参数信息,还是程序执行后的返回结果,都可以用通用的数据格式 XML 表示。另一方面,SOAP 收发数据时所使用的传输协议并不固定,凡是能够收发 XML 数据的协议均可使用。一般情况下使用的是 HTTP 或 SMTP 协议。可以说 SOAP 的诞生使得人们可以更加轻松地构建分布式计算环境了。</p> <p><img src="/i/l/?n=23&i=blog/2297025/202212/2297025-20221209090147259-505618249.png" alt="image-20221207091017347" loading="lazy"></p> <h1 id="总结">总结</h1> <p>XML: eXtensible Markup Language, XML是用来定义标记语言的元语言。</p> <p>XML文档: 仅由字符构成的纯文本文件</p> <p>在XML文档中, 我们可以任意创建标签, 但是为了写出格式良好的XML文档, 我们需要遵循XML的约束, 更进一步还有有效的XML文档,指的是写有DTD信息的XML文档。</p>

标签:XML,语言,标记,标签,HTML,文档,Chapter11,究竟
From: https://www.cnblogs.com/Natsumeno/p/16968026.html

相关文章

  • 基于xml的Spring配置二(Bean 实例化的基本流程)
    Spring容器在初始化时,会将xml配置的的信息封装成一个BeanDefinition对象,所有的BeanDefinition存储到一个名为beanDefinitionMap的Map集合中去,Spring框架在对该Map......
  • logback.xml配置文件
    一、前言1、最简单的使用就是不使用任何配置文件,用默认的Console输出日志,2、使用logback.xml配置文件最基本的配置是一个configuration里面有零个或多个appender,......
  • 不止是云购物,元宇宙中的购物方式究竟是什么样子?
            想象一下,将我们所处的世界完全数字化。对许多人来说,数字化之后的世界便是元宇宙,一个能够让人身临其境的虚拟空间。我们可以在其中结识朋友、购物、在虚拟办......
  • Notepad++ ,json 、xml 格式化插件安装不了 和 github 网站访问不了 最佳解决方案
    OverridetheentrypointofanimageIntroducedinGitLabandGitLabRunner9.4.Readmoreaboutthe extendedconfigurationoptions.Beforeexplainingtheav......
  • (转)Shell解析处理XML方法汇总
    原文:https://blog.mythsman.com/post/5d2b5ebf25601931a5f8d885/前言前几天干活的时候遇到一个需要解析处理xml文件的一个需求,当时考虑到逻辑比较复杂,因此用java慢慢搞了......
  • 当我们说大数据Hadoop,究竟在说什么?
    前言提到大数据,大抵逃不过两个问题,一个是海量的数据该如何存储,另外一个就是那么多数据该如何进行查询计算呢。好在这些问题前人都有了解决方案,而Hadoop就是其中的佼佼者,是......
  • Windows中安装lxml
     lxml‑4.9.0‑cp311‑cp311‑win_amd64.whl pipinstall"https://download.lfd.uci.edu/pythonlibs/archived/lxml-4.9.0-cp311-cp311-win_amd64.whl" 来源:Ar......
  • SpringBoot pom.xml配置文件详解
    <?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xsi:sch......
  • 基于xml的Spring配置一(SpringBean 的配置详解)
    Spring开发中主要是对Bean的配置,Bean的常用配置一览如下:Xml配置方式功能描述<beanid=""class="">Bean的id和全限定名配置<beanname="">通过name设置Bean的别名,通过别名也......
  • Android Studio的xml文件无法代码提示
    之前试了省电模式、清理缓存、重新勾选sdk都没有任何用于是我开始乱搞,总结了以下方法:找到GradleScript中的build.gradle(Module:XXXX)  修改compileSdk的版本,我之前......