真的了解XML吗? - XML 基础

前言

越学习越发现基础的重要性
会用Spring,会敲一个网页前后端
结果servlet、XML等知识体系都不是特别了解
简直是空中楼阁啊。。。


目录

  1. JavaWeb技术体系
  2. XML概述
  3. 一个XML案例
  4. XML的基本语法
    4.1. XML与HTML的区别
    4.2. 组成部分
    4.3. 约束
  5. DTD
    5.1. books案例
    5.2. 导入
  6. Schema
    6.1. Schema案例
    6.2. 解析xsd
    6.3. xml导入xsd
  7. 总结

JavaWeb技术体系

在这里插入图片描述
其中知识树包含了
前端:html、css、js、jq等(这些就不介绍了,唯手熟尔)
XML、JSON数据格式
AJAX异步技术
HTTP协议知识
Servlet相关知识等

前端、后端继续深造就是各种框架了
但是没有基础知识去碰框架真的是一头雾水


XML概述

XML 是可扩展标记语言的缩写: Extensible Markup Language

  • 它和HTML一样,都是标记语言,所以它很多性质也和HTML相似
  • XML的作用是以一个统一的格式,组织有关系的数据,为不同的平台,不同的应用程序服务,使其数据格式相同方便传递数据(JSON也一种数据格式),由W3C组织发布
  • 可扩展:标签都是自定义的< student>,< person>等,可以随时定义,随便增加减少
  • XML的功能:网络中传输数据的格式;配置文件(xml是很多框架的配置文件格式)

一个XML案例

和HTML一样,同为标记语言,可以用记事本编写,然后用网页打开
当然,用高级的开发工具写会更方便,也会规定好我们的书写规范

在这里插入图片描述

网页打开:

在这里插入图片描述


XML的基本语法

  1. XML文件要以.xml结尾,就和HTML要以.html结尾一样
  2. 第一行必须是文档声明
<?xml version="1.0"?>
  1. XML文档有且只有一个根标签,就和HTML必须是在< html> < /html>中间编写一样,当然跟标签是自定义的,如上面的< students>
  2. 属性值必须用引号(单双)引起
  3. 标签必须有关闭标签</>
  4. 标签名区分大小写

XML与HTML的区别

前面的语法可以看出,虽然同为标记语言,还是有一些区别

  • XML标签都是自定义的,HTML标签都是预定义的(事先规定好了)
  • XML语法严格,第一行必须是声明(甚至第一行是空行都不行),必须有闭合标签等等;而HTML语法就较为松散
  • XML是存储数据的,HTML是展示数据的(写XML是为了存储标签中间的数据、value,将这些数据转换成对象)

组成部分

  1. 文档声明
<?xml 属性列表?>

声明语法很严格,甚至< ? xml 中多加个空格就会报错,而且声明必须是第一行

属性列表有3种:
1.version(版本号)- 必须的属性
2.encoding(编码格式)- 文档的字符集
3.standalone(是否独立)- 表示xml能不能引用外部的DTD规范文件

必须严格按照123、13的顺序放置,不然会报错

  1. 指令 - 可以结合css样式

就和HTML引入css样式一样,<?xml-stylesheet type="text/css" href="a>
在这里插入图片描述
在这里插入图片描述
但是我们的XML主要是用来存储、传输数据的,并不是用来展示数据的,所以这个用法很少

  1. 标签 - 标签名称自定义< name>这样的

定义标签有一些规则要遵守:

名称可以含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字符 “xml”(或者 XML、Xml)开始
名称不能包含空格
可使用任何名称,没有保留的字词
命名时注意:尽量简短,有描述性,避免"-" "." " :"字符
  1. 属性 - 标签中定义属性,和HTML中一样,用单双引号引起来,但是在XML中,尽量避免使用属性,而是使用子元素来放置值
<student name="zhangsan">
</student>

可以这么写,但要避免这种写法
尽量使用元素来描述数据。而仅仅使用属性来提供与数据无关的信息,例如id用来标识元素

  1. 文本
<name>三国演义</name>

但文本中出现><等特殊字符,需要用转义字符表示&lt,&gt

当出现很多特殊字符,用转义字符就比较麻烦,可以使用CDATA区放置

<![CDATA[
	存放的文本
	]]>

在这里插入图片描述

就不用转义字符也可以显示这些特殊字符了
在这里插入图片描述

约束

约束:规定XML文档的书写规则
程序员通过XML配置文件修改框架的设置,为了让框架能够读懂我们的修改,就需要遵守这些规则(IDEA等高级开发工具会自动提示这些规则)

主流的约束有两类:

  • DTD:一种简单的约束技术
  • Schema:一种复杂的约束技术

DTD

DTD是一种简单的约束技术
我们知道XML文档的构建模块: 元素、属性、实体、PCDATA(会被解析器解析的文本)、CDATA(不会被解析器解析的文本)

针对这些构建模块,DTD有不同的声明

具体的可以看W3Cschool - DTD

  1. 元素标签
<!ELEMENT 元素名称 类别>
或
<!ELEMENT 元素名称 (元素内容)>
  1. 属性
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
  1. 实体
<!ENTITY 实体名称 "实体的值">

类似与事先定义好的变量,在元素中可以直接引用这些实体

books案例

我们前面是直接在xml中设置添加元素
现在可以先编写DTD约束,然后通过约束来填入数据

例:
创建一个文件:books.dtd

<!--ELEMENT设置元素:根元素、子元素-->
<!ELEMENT books (book)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT book (name,author,price)>
<!--ATTLIST设置属性-->
<!ATTLIST book sn ID #REQUIRED>
<!--ENTITY设置实体-->
<!ENTITY Java "Java从入门到放弃">

导入

写好了DTD约束还不够,还要导入约束,才能约束好我们的xml文件

导入约束分为两种:

  1. 内部约束:将约束定义在xml文件里(直接在xml文件里写约束)
  2. 外部约束
    外部约束又可以分为:本地约束和网络约束
    本地约束:<!DOCTYPE 根标签名 SYSTEM "本地地址">
    网络约束:<!DOCTYPE 根标签名 PUBLIC "DTD约束文件名" "网络URL">

内部约束
在这里插入图片描述

内部约束就没什么意思,一般都是外部约束

<!DOCTYPE books SYSTEM "books.dtd">

在这里插入图片描述

即只能选择设定好的根标签
在这里插入图片描述

可以直接将我们设置好的子元素写出


Schema

Schema是一种复杂的约束技术,它能够解决DTD的一些缺陷

DTD有什么缺陷呢?

DTD仅仅约束了元素、属性,并没有约束文本
在这里插入图片描述

price应该是一个数字,而如果写成汉字并不会报错
DTD对于元素的文本并没有限制,而Shema可以限制元素文本

一些详细设置可以看:W3Cschool - Schema

Schema案例

创建一个books.xsd文件

<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema
        xmlns="http://www.itcast.cn/xml"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.itcast.cn/xml"
        elementFormDefault="qualified"
>
    <!--books根元素,自定义属性-->
    <xs:element name="books" type="booksType"/>

    <xs:complexType name="booksType">
        <xs:sequence>
            <!--设置最少一个book元素,自定义属性-->
            <xs:element name="book" type="bookType" minOccurs="1" maxOccurs="unbounded"/>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="bookType">
        <xs:sequence>
            <!--string型的name、author子元素-->
            <xs:element name="name" type="xs:string"/>
            <xs:element name="author" type="xs:string"/>
            <!--priceType自定义属性-->
            <xs:element name="price" type="priceType"/>
        </xs:sequence>
        <!--元素属性:序号是string型,且必须-->
        <xs:attribute name="sn" type="xs:string" use="required"/>
    </xs:complexType>

    <xs:simpleType name="priceType">
        <!--对属性的限制:restriction,必须在simpleType、simpleContent 或 complexContent 定义的约束-->
            <!--限定为整形,0-200-->
            <xs:restriction base="xs:integer">
                <xs:minInclusive value="0"/>
                <xs:maxInclusive value="200"/>
            </xs:restriction>
    </xs:simpleType>

</xs:schema>

解析xsd

  1. .xsd文件本质是一个xml文件,开头必须声明
  2. 根目录是xs:schema,其中在< xs:schema>中配置很重要
<xs:schema
        xmlns="http://www.itcast.cn/xml"
        xmlns:xs="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.itcast.cn/xml"
        elementFormDefault="qualified"
>

xmls自定义的命令空间,自己设置
xmls:xsi前缀是一个可选的值:例如上面的是w3提供的2001版的一个约束
targetNamespace要和xmls一样,表示文档中要定义的元素来自什么命名空间
elementFormDefault表示要求xml文档的每一个元素是否都由有命名空间指定(qualified和unqualified)

  1. complexType定义复杂类型,可以包括元素、序列关系(sequence)、选择关系(choice),book,books这种要包含多个元素的就可以选择complexType
    simpleType定义简单类型,规定一个元素文本部分的类型,或规定一个元素属性的所属类型,name等仅仅规定类型的选择simpleType

  2. 限定restriction,必须在simpleType、simpleContent 或 complexContent 定义的约束,也就是说如果想要规定complexType的某个元素,就需要将该元素单独设置一种属性

  3. xs:element等标签设置可以去看W3Cshool的详解

xml导入xsd

<books
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.itcast.cn/xml books.xsd"
        xmlns="http://www.itcast.cn/xml">


</books>

这里的设置要和xsd文件中的设置一样

  • xmlns:xsi约束设置
  • xsi:schemaLocation是xsd文件所在位置
  • xmlns是前缀(如果不写的话,xml中的每个元素都要加上xsi:schemaLocation位置),且现在是一个xsd,可以使用默认空
  • 如果多个xsd,前缀要命名xmlns:a等

在这里插入图片描述
从我们自定义的空间中得到book
前面设置了price是integer,且0-200
在这里插入图片描述

但是,注意:前面设置的xs:string定义的string类型数据,可以填入整数
(和Java中String可以是数字一样)
在这里插入图片描述

总结

  1. xml是一种可扩展的标记语言,它使数据有统一的格式,主要用于传输数据或者配置文件
  2. xml的语法很严格,规定好了:第一行必须是声明,声明中有3个属性也必须按顺序放置;有且只有一个根元素;元素必须闭合;属性必须用单双引号引起;元素名称区分大小写;元素名称也有一系列的规定
  3. 同为标记语言,xml与html的区别在与:xml很严格;xml标签自定义;xml主要用于传输数据和存储数据
  4. xml的组成部分:声明、指令、标签、属性、文本
  5. 为了改变框架的设置,需要框架给出xml的约束,xml的约束有两种:DTD简单约束;Schema复杂约束
  6. DTD约束很简单,它针对元素、属性、实体有一定的规定;缺点在与无法规定文本
  7. Schema解决了DTD的缺陷,Schema本质上是一个xml,对于每种元素,每个文本,每个属性都可以设置,详细但比较复杂,很多框架约束都是schema
发布了96 篇原创文章 · 获赞 25 · 访问量 4279

猜你喜欢

转载自blog.csdn.net/key_768/article/details/104932033