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 中声明过的元素必须被命名空间限定。

参考:

  1. https://www.w3school.com.cn/xml/xml_namespaces.asp
  2. https://blog.csdn.net/lengxiao1993/article/details/77914155
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值