Mrli
别装作很努力,
因为结局不会陪你演戏。
Contacts:
QQ博客园

XML语法规则笔记

2021/10/09 学习笔记
Word count: 2,404 | Reading time: 10min

简介:

  • XML 指可扩展标记语言(EXtensible Markup Language)。
  • XML 是一种很像HTML的标记语言。
  • XML 的设计宗旨是传输数据,而不是显示数据。
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准。

特点:

  • 所有 XML 元素都须有关闭标签
  • XML 标签对大小写敏感
  • XML 文档必须有根元素
  • XML 的属性值须加引号,双引号、单引号都可以
  • 实体引用:<, >, &amp, &apos, &quot
  • 在 XML 中,空格会被保留, 但多余的空格会被合并成一个
  • XML 以 LF 存储换行

用途:

  • XML 把数据从 HTML 分离: 改变数据时不需要对HTML进行改变
  • XML 简化数据共享
  • XML 简化数据传输:通过 XML,可以在不兼容的系统之间轻松地交换数据。
  • XML 简化平台的变更
  • XML 使您的数据更有用

XML 元素

指的是从(且包括)开始标签直到(且包括)结束标签的部分。

元素可包含其他元素、文本或者两者的混合物。元素也可以拥有属性

XML 命名规则

XML 元素必须遵循以下命名规则:

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符 “xml”(或者 XML、Xml)开始
  • 名称不能包含空格

可使用任何名称,没有保留的字词。

最佳命名习惯

使名称具有描述性。使用下划线的名称也很不错。

名称应当比较简短,比如:<book_title>,而不是:<the_title_of_the_book>

  • 避免 “-” 字符。如果您按照这样的方式进行命名:“first-name”,一些软件会认为你需要提取第一个单词。
  • 避免 “.” 字符。如果您按照这样的方式进行命名:“first.name”,一些软件会认为 “name” 是对象 “first” 的属性。
  • 避免 “:” 字符。冒号会被转换为命名空间来使用。

XML 命名空间(XML Namespaces)

在 XML 中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名时,就会发生命名冲突。

使用命名空间案例:

1
2
3
4
5
6
7
8
9
10
<rtdBusConfig
xmlns="http://com.cgs/rtd-bus.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://com.cgs/rtd-bus.xsd rtd-bus.xsd"

id="producer"
persistentPath="./rtdcache/producer"
>
...
</rtdBusConfig>

w3c案例: https://www.w3school.com.cn/xml/xml_namespaces.asp

1
2
3
4
5
<f:table xmlns:f="http://www.w3school.com.cn/furniture">
<f:name>African Coffee Table</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>

我们在根标签中添加了一个 xmlns:f 属性,xmlns 代表的是 xml namespace,f是我们声明的命名空间前缀,f本身并没有意义,可以将它理解为是 http://www.atguigu.com/xml/b 的一个别名,我们在标签中使用 f,就相当于使用这个 uri 地址。一旦使用了f 这个前缀,就代表这个标签是属于 http://www.atguigu.com/xml/b 这个唯一标识命名空间下的元素。

我们还可以在一个文档中定义多个命名空间,如下的语法也是没有问题的:

1
2
<b:book xmlns:b="http://www.atguigu.com/xml/b"
xmlns:a="http://www.atguigu.com/xml/a">

more: https://www.cnblogs.com/xiaomaomao/p/13968976.html

XML Namespace (xmlns) 属性

XML 命名空间属性被放置于元素的开始标签之中,并使用以下的语法:xmlns<:namespace-prefix>="namespaceURI"

当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。

如果没有:namespace-prefix,为xmlns="namespaceURI",则采用的是默认的命名空间(Default Namespaces)

命名空间的实际应用

当开始使用 XSL 时,您不久就会看到实际使用中的命名空间。XSL 样式表用于将 XML 文档转换为其他格式,比如 HTML。

如果您仔细观察下面的这个 XSL 文档,就会看到大多数的标签是HTML标签。非 HTML 的标签都有前缀 xsl,并由此命名空间标示:“http://www.w3.org/1999/XSL/Transform”:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<body>
<h2>My CD Collection</h2>
<table border="1">
<tr>
<th align="left">Title</th>
<th align="left">Artist</th>
</tr>
<xsl:for-each select="catalog/cd">
<tr>
<td><xsl:value-of select="title"/></td>
<td><xsl:value-of select="artist"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>

</xsl:stylesheet>

XML语法-处理指令

处理指令,简称PI (processing instruction)。处理指令用来指挥解析引擎如何解析XML文档内容。例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析引擎,应用css文件显示xml文档内容,标签名为中文时,css不起作用。

<?xml-stylesheet type="text/css" href="css文件名.css"?>*

处理指令必须以"<?"作为开头,以"?>"作为结尾,XML声明语句(<?xml version="1.0" encoding="utf-8"?>)就是最常见的一种处理指令。

XML报文头

<?xml version="1.0" encoding="UTF-8"?>

  • 第一个是XML的声明,其中version属性是必须写的。
  • encoding属性的值表示用于读取文档的字符集,第二个是一个文档定义的描述。

XML CDATA

由于所有 XML 文档中的文本均会被解析器解析,而**只有 CDATA 区段(CDATA section)中的文本会被解析器忽略。**因此对某些不希望被解析的文本时,需要用CDATA嵌套起来。对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出

  • 术语 CDATA 指的是不应由 XML 解析器进行解析的文本数据(Unparsed Character Data)。
  • CDATA 部分中的所有内容都会被解析器忽略。
  • CDATA 部分由"<![CDATA[" 开始,由"]]>"结束:

在 XML 元素中,"<" 和 “&” 是非法的。

  • “<” 会产生错误,因为解析器会把该字符解释为新元素的开始。
  • “&” 也会产生错误,因为解析器会把该字符解释为字符实体的开始。

某些文本,比如 JavaScript 代码,包含大量 “<” 或 “&” 字符。为了避免错误,可以将脚本代码定义为 CDATA。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>

XML DOM

DOM 把 XML 文档视为一种树结构。通过这个 DOM 树,可以访问所有的元素。可以修改它们的内容(文本以及属性),而且可以创建新的元素。元素,以及它们的文本和属性,均被视为节点。

xmlns、xmlns:xsi和xsi:schemaLocation

POM 文件头示例

1
2
3
<project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 		
xmlns="http://maven.apache.org/POM/4.0.0"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

初学者看到如上的内容应当有如下困惑点:

  • xmlns:xsi , xmlns, xsi:schmeLocation 这些看上去相近的属性是什么含义, 为什么他们的值是不一样的 URL
  • 这些 URL 是否对应一些可以访问的资源,对于该文件的解析是否会需要下载这些 URL 对应的资源

xmlns:xsi有什么作用?

按命名空间的概念来说,xmlns:xsi就是定义了一个命名空间前缀 xsi ,其对应的唯一字符串为 http://www.w3.org/2001/XMLSchema-instance。 但是读者会发现, 这个 xmlns:xsi 在不同的 xml 文档中似乎都会出现。 这是因为, xsi 已经成为了一个业界默认的用于 XSD((XML Schema Definition) 文件的命名空间。 而 XSD 文件(也常常称为 Schema 文件)是用来定义 xml 文档结构的。

  • 注解: XML 解析器可以根据 一个 XSD 文件的内容来解析另一个 XML 文件, 判断该文件的结构是否和 XSD 文件中定义的一致。 XSD 文件 可以理解为 XML 文档可以自定义的语法或格式检查器。

xsi:schemaLocation有何作用?

xsi:schemaLocation其实是Namespace为http://www.w3.org/2001/XMLSchema-instance里的schemaLocation属性,因为我们一开始声明了xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance",然后再看xsi:schemaLocation的使用:xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd",上面这行的语法其实是xsi:schemaLocation = "键" "值"
即 xsi 命名空间下 schemaLocation 元素的值为一个由空格分开的键值对。

这里的xsi:schemaLocation(当然一般都使用这个前缀)。它定义了XML Namespace和对应的XSD(Xml Schema Definition)文档的位置的关系,他们总是成对出现的,通常为两个URI引用对组成,两个URI之间以空白符分隔(空格和换行均可)

  • 前一个“键” http://maven.apache.org/POM/4.0.0 指代 【命名空间】, 只是一个全局唯一字符串而已
  • 后一个值指代 【XSD location URI】 , 这个值指示了前一个命名空间所对应的 XSD 文件的位置, XML Schema Parser处理器可以利用这个信息获取到 XSD 文件, 从而通过 XSD 文件对所有属于 命名空间 http://maven.apache.org/POM/4.0.0 的元素结构进行校验, 因此这个值必然是可以访问的, 且访问到的内容是一个 XSD 文件的内容

现在概念懂了,来看个spring的xml例子把

xsi_schemaLocation

参考:

Author: Mrli

Link: https://nymrli.top/2021/10/09/XML语法规则笔记/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
ZJU开学摸底考试——数据库概论复习
NextPost >
Makefile使用记录
CATALOG
  1. 1. 简介:
  2. 2. 特点:
  3. 3. 用途:
  4. 4. XML 元素
  5. 5. XML 命名空间(XML Namespaces)
  6. 6. XML语法-处理指令
    1. 6.1. XML报文头
  7. 7. XML CDATA
  8. 8. XML DOM
  9. 9. xmlns、xmlns:xsi和xsi:schemaLocation
    1. 9.1. xmlns:xsi有什么作用?
    2. 9.2. xsi:schemaLocation有何作用?