欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

XML常见疑问及解答

程序员文章站 2022-03-10 21:36:14
XML是什么?XML 是可扩展标记语言(eXtensible Markup Language)标记语言:是一种将文本以及文本相关的其他信息结合起来,展现出关于文档结构和数据处理细节的电脑文字编码。XML被设计的思想和用途?XML被设计用来传输和储存数据。用途:1.对于HTML的补充HTML/CSS更关注于显示和布局,那么如果希望在HTML中展示动态数据,我们可以简单地通过JavaScript读取XML文件(把数据存放在XML中),而不需要总是去改变HTML。2.简化数据共享它是纯文本文档,...

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

本文地址:https://blog.csdn.net/trina121/article/details/112668714

相关标签: XML