XML常见疑问及解答
XML是什么?
XML 是可扩展标记语言(eXtensible Markup Language)
标记语言:是一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。
XML被设计的思想和用途?
XML被设计用来传输和储存数据。
用途:
1.对于HTML的补充
HTML/CSS更关注于显示和布局,那么如果希望在HTML中展示动态数据,我们可以简单地通过JavaScript读取XML文件(把数据存放在XML中),而不需要总是去改变HTML。
2.简化数据共享
它是纯文本文档,让人也能看懂。另一方面,它更关注数据本身,即在不同的系统,文件格式下的文件可能不兼容,但可以提取为相同的XML来保存数据,使它有非凡的兼容性和跨平台性。
XML的一些语法
XML需要有一个根元素,属性需要加引号,对大小写敏感,需要关闭标签。它没有预定义的标签.
为什么说XML是可扩展的?
XML是可扩展的:以下XML文档
<note>
<name>sam</name>
<content>good morning!</content>
</note>
当程序需要访问name元素和content元素时
如果我们扩展了XML,如添加date元素
<note>
<name>sam</name>
<content>good morning!</content>
<date>2021</date>
</note>
不会影响程序的访问,即程序只要可以发现name元素和content元素的话,还是可以正常访问的。
XML中的属性和元素指的是什么?
XML属性(attribute)与元素
<file type="gif">computer.gif</file>
此处type是属性,file是元素
属性通常与数据无关,但与处理这个元素的软件有关
XML哲学:把元数据(有关数据的数据)存为属性,数据存为元素。
如果像下面的代码块,把type也存为元素是不恰当的(因为type并不是该文件数据的一部分,数据应该是文件本身)
<file>
<fileitself>computer.gif</fileitself>
<type>gif</type>
</file>
XML命名空间(namespace)是什么?
在XML中,元素名称是由开发者定义的,当两个不同的文档使用相同的元素名,就会发生命名冲突。即:XML命名空间提供避免元素命名冲突的方法。
命名空间语法:
xmlns:namespace-prefix="namespaceURI"
例:
<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="namespaceURI"
第二种方式省去了在所有子元素中使用前缀的工作,即默认的命名空间(Default Namespaces)
例:
<table xmlns="http://www.w3school.com.cn/furniture">
<name>African Coffee Table</name>
<width>80</width>
<length>120</length>
</table>
XML文档声明
写在文档第一行第一列,是一种XML的文档说明,XML解析器会根据此信息解XML文档
如:<?xml version="1.0" encoding="utf-8" standalone="no"?>
version: xml文档版本,一般都为1.0
encoding:使用的字符编码集,默认UTF-8
standalone:本xml文档是否独立,如果独立为yes,依赖外部约束文件为no
xml1.0并未规定要写文档声明,但如果不写,浏览器猜测文档的数据格式可能会引起错误,并且不写文档的声明不是一个格式良好的xml文档。
XML CDATA是什么?
所有XML文档中的文本都会被解析器解析,只有CDATA区段(CDATA section)中的文本会被解析器忽略。
CDATA(Unparsed Character Data)区段语法
由"<![CDATA[
“开始,由”]]>
"结束
例:
<script>
<![CDATA[
function matchwo(a,b)
{
if (a < b && a < 0) then
{
return 1;
}
else
{
return 0;
}
}
]]>
</script>
XML验证是如何进行的?
进行DTD或XML Schema(XSD)验证
拥有正确语法的 XML 被称为==“形式良好”==的 XML。
通过 DTD 验证(或XML Schema) 的XML是 “合法” 的 XML。
例: 如果一个文件如下,将其<name>sam</name>
删去仍是形势良好的XML,但很可能不是“合法”的XML。DTD验证(或XML Schema)很可能告诉我们此XML应该有name元素。
<note>
<name>sam</name>
<content>good morning!</content>
<date>2021</date>
</note>
什么是DTD, XML Schema(XSD)?
DTD是什么?
DTD (Document Type Definition) 文档类型定义,可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD可被成行地声明于 XML 文档中,也可作为一个外部引用。
- 在XML文档中
格式:<!DOCTYPE root-element [element-declarations]>
带有DTD的XML文档:
<?xml version="1.0"?>
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend</body>
</note>
- 外部引用
语法:<!DOCTYPE root-element SYSTEM "filename">
例子:
使用外部引用的XML文档
<?xml version="1.0"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>Tove</to>
<from>Jani</from>
<heading>Reminder</heading>
<body>Don't forget me this weekend!</body>
</note>
外部的note.dtd文档
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
XML Schema (XSD)是什么
XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)
XML Schema 是基于 XML 的 DTD 替代者(比DTD更强大)。
一个xsd文档是由<schema>
开始,</schema>
结束的加粗样式
XSD文件定义了XML文件的正确与否
例:
这是一个xml文件
<?xml version="1.0"?>
<note xmlns="http://www.w3school.com.cn"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.w3school.com.cn note.xsd">
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
- 此处
xmlns="http://www.w3school.com.cn"
支出了默认命名空间,会告诉schema验证器,在此XML文档所有元素使用http://www.w3school.com.cn
命名空间
- 此处
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
即声明xsi作为命名空间前缀的值是http://www.w3.org/2001/XMLSchema-instance
- xsi有了定义,即可以定义在xsi命名空间下的 schemaLocation属性,
xsi:schemaLocation="http://www.w3school.com.cn note.xsd"
指向了schema文件所在处。 - 另一种schemaLocation的写法:
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"
语法为 xsi:“键 值”
键为名字,值是xsd文件所在处,意为,在所有属于 命名空间键的元素都受到值 的xsd文件的约束。
如下代码是上文xml文件对应的.xsd文件(schema文件)
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.w3school.com.cn"
xmlns="http://www.w3school.com.cn"
elementFormDefault="qualified">
...
...
</xs:schema>
下面的片断:
xmlns:xs="http://www.w3.org/2001/XMLSchema"
显示 schema 中用到的元素和数据类型来自命名空间 "http://www.w3.org/2001/XMLSchema"
。同时它还规定了来自命名空间 "http://www.w3.org/2001/XMLSchema"
的元素和数据类型应该使用前缀 xs:
这个片断:
targetNamespace="http://www.w3school.com.cn"
显示被此 schema 定义的元素 (note, to, from, heading, body) 来自命名空间: "http://www.w3school.com.cn"。
这个片断:
xmlns="http://www.w3school.com.cn"
指出默认的命名空间是 "http://www.w3school.com.cn"。
这个片断:
elementFormDefault="qualified"
指出任何 XML 实例文档所使用的且在此 schema 中声明过的元素必须被命名空间限定。
参考:
- https://www.w3school.com.cn/xml/xml_namespaces.asp
- https://blog.csdn.net/lengxiao1993/article/details/77914155
本文地址:https://blog.csdn.net/trina121/article/details/112668714
上一篇: python实现多图像叠置输出
下一篇: PHP能创造成功:旧代码不一定是遗留代码
推荐阅读