XML介绍

    科技2022-08-28  100

    XML基础

    概述

    xml(eXtensible Markup Language)即可扩展标记语言,xml是互联网数据传输的重要工具,它可以跨越互联网任何的平台,不受编程语言和操作系统的限制,可以说它是一个拥有互联网最高级别通行证的数据携带者。

    XML 的设计宗旨是传输数据,而不是显示数据。HTML被设计用来显示数据。XML 是 W3C 的推荐标准。

    一个完整的XML文档

    <?xml version="1.0" encoding="UTF-8"?> <book> <title>人生海海</title> <author>麦芒</author> </book>

    XML语法

    文档声明

    一个完整的XML文档中,必须包含一个XML文档的声明,并且该声明必须位于文档的第一行。

    语法格式:

    <?xml 版本信息 [编码信息] [文档独立信息]?>

    XML组成元素

    XML文档的主题内容都是由元素(Element)组成的。元素一般是由开始标记、属性、元素内容和结束标记组成。


    标签(开始结束标记):

    1)一个XML文档有且仅有一个根元素。

    2)所有的XML元素都必须有结束标签(关闭标签)

    注:这里的结束标签不一定是成对的,也可以是空标签。

    空标签也必须有结束标签,不同于HTML,在HTML中 <br>是合法的,但是在XML中空标签必须有<br/>结束标签。

    3)XML标签大小写敏感

    4)XML必须正确地嵌套


    属性:

    语法:<元素名 属性名=“属性值”/>

    1)属性值用双引号包裹;一个元素可以有多个属性


    元素内容(实体)

    1)标签内可以有空实体,即空标签

    2)特殊字符不能直接放在元素内容中,需要使用实体引用来代替。XML中5个预定义的实体引用如下:


    总结:遵循如下规则的xml文档称为格式正规的xml文档:

    必须有xml声明语句

    必须有且仅有一个根元素

    标签大小写敏感

    属性值用双引号

    空标签必关闭

    元素正确嵌套

    DTD约束

    什么是约束?

    在书写XML文档时,其内容必须满足某些条件的限制,在XML文档中,定义一套规则来对文档中的内容进行约束,这套约束称为XML约束。

    说白了就是对XML文档的内容进行限制,该写什么不该写什么。

    DTD约束

    DTD约束是最早出现的一种XML约束模式语言,根据它创建的文件后缀一般为(.dtd)文件,在一个dtd文件中,可以包含元素的定义,元素之间关系的定义,元素属性的定义以及实体和符号的定义。

    DTD的引入

    如果想要使用DTD文件约束XML文档,必须在XML文档中引入DTD文件。在XML文档中引入外部DTD文件有两种方式,具体如下:

    <!DOCTYPE 根元素名称 SYSTEM "外部DTD文件的URI"> <!DOCTYPE 根元素名称 PUBLIC "DTD名称" "外部DTD文件的URI">

    这里可以结合struts或者hibernate的配置文件学习

    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">

    DTD语法

    看书或者看博客

    Schema约束

    XML Schema也是一种用于定义和描述与内容的模式语言。它的文件后缀名一般为.xsd(XML Schema Definition)。

    XML命名空间

    一个XML文档可以引入多个约束文档,但是,由于约束文档中的元素或属性都是自定义的。当两个不同的文档使用相同的元素名时,就会发生命名冲突。

    解决命名冲突的方法一般有:

    使用前缀来避免命名冲突

    <h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table>

    XML命名控件 - xmlns属性

    <root> <h:table xmlns:h="http://www.w3.org/TR/html4/"> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> <f:table xmlns:f="http://www.w3cschool.cc/furniture"> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> </root> <!--或者 在他们被使用的元素中或者在 XML 根元素中声明命名控件--> <root xmlns:h="http://www.w3.org/TR/html4/" xmlns:f="http://www.w3cschool.cc/furniture"> <h:table> <h:tr> <h:td>Apples</h:td> <h:td>Bananas</h:td> </h:tr> </h:table> <f:table> <f:name>African Coffee Table</f:name> <f:width>80</f:width> <f:length>120</f:length> </f:table> </root>

    这里重点介绍第二种。

    XML命名空间可以唯一标识一个元素或属性。

    默认命名空间和属性

    重复限定一个要在命名空间中使用的元素或属性可能会非常麻烦。这种情况下,可以声明一个 {默认命名空间}。记住,无论在任何时候都只能存在一个 {默认命名空间}。因此,术语“多个默认命名空间”在实际上是不正确的。

    声明一个 {默认命名空间} 意味着,如果 {默认命名空间} 声明范围内的任何元素未使用前缀显式限定,则该元素将被隐式限定。与带前缀的命名空间一样,{默认命名空间} 也可以被覆盖。{默认命名空间} 声明如下:

    <someElement xmlns="http://www.foo.com"/> <?xml version="1.0"?> <Book xmlns="http://www.library.com"> <Title>Sherlock Holmes</Title> <Author>Arthur Conan Doyle</Author> </Book>

    这种情况下,元素 Book、Title 和 Author 与命名空间 http://www.library.com 关联。

    记住,命名空间的范围起始于声明该命名空间的元素。因此,元素 Book 还与 {默认命名空间}关联,这是因为它没有前缀。

    <?xml version="1.0"?> <Book xmlns="http://www.library.com"> <Title>Sherlock Holmes - I</Title> <Author>Arthur Conan Doyle</Author> <purchase xmlns="http://www.otherlibrary.com"> <Title>Sherlock Holmes - II</Title> <Author>Arthur Conan Doyle</Author> </purchase> <Title>Sherlock Holmes - III</Title> <Author>Arthur Conan Doyle</Author> </Book>

    在以上的示例中, Sherlock Holmes - III 和 Sherlock Holmes - I 的元素 Book、 Title 和 Author 与命名空间http://www.library.com 关联, Sherlock Holmes - II 的元素 purchase、 Title 和 Author 与命名空间http://www.otherlibrary.com 关联。

    默认命名空间不应用于属性;因此,要将命名空间应用于属性,必须显式限定该属性。

    引入Schema文档

    1)使用名称空间引入

    2)不使用名称空间引入

    Schema语法

    看书或者看博客

    参考:

    XML Namespace 命名空间

    XML命名空间

    总结

    开发中XML知识用到的尽管不多,但是我希望学习过XML后,能对xml文档出现的地方有所见解。比如说spring配置文件,我能知道xmlns:xsi、xmlns:tx、xmlns:aop所代表的是什么意思,为什么要这样做。这就是初衷。

    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
    Processed: 0.019, SQL: 9