XML( 可扩展标记语言),文件约束(DTD(.dtd)),Schema(.xsd))

一、XML

XML是什么:

(就是一个文件,以XML为扩展名,用于关系描述或者数据传输,下面主要说XML的7个组成元素)

英文:XML eXtensible Markup Language 可扩展标记语言

用于配置文件,传递数据

  • 可拓展: 标签名可以自定义。
  • 标记: 标签,这门语言由标签构成。

XML特点:

  • 区分大小写,< abc>或< ABC>是不同的两个标签,
  • 语法严谨,标签开头和结尾必须严格配对
  • 所有的标签都是人为创造的,可以扩展

XML有什么用:

  1. 可以把数据之间的关系描述清楚(所以用于各种组件或框架配置文件 , 比如:c3p0)
  2. 可以用于不同系统的数据传输.

创建:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

XML文件组成:

XML文件一共由7个组成元素构成:
1. 文档声明(<?xml version="1.0" encoding="UTF-8" ?>
2. 标签元素 Element(< person>
3. 属性 Attribute(< person id=“110”>
4. 注释 Comment(<!–注释内容–>
5. 转义字符(实体字符)(&nbsp;
6. 字符数据区(用于显示大量的特殊字符的时候)( <![CDATA[ 文本数据 ]]>)
7. 处理指令(不常用)(<?xml-stylesheet type="text/css" href="文件名.css"?>给XML设置CSS样式

1.文档声明:

声明: <?xml version="1.0" encoding="UTF-8" ?>
格式: 以<?xml 开头 以?>结尾
位置: 必须出现在XML文件的第1行,注释放第一行也不行

声明的三个属性:

文档声明的三个属性 说明
version 用于指定XML使用哪个版本,固定的写法1.0
enconding 指定当前XML编码
standalone yes/no 默认是yes,这个XML文件是否是一个单独的文档

2.标签元素Element:

如:< person> 又称为标签
语法:<开头 >结尾, 中间是标签名
主体部分:分为有主体和无主体标签,主体部分可以包含文本或其它的子元素
空元素:无主体标签也必须要关闭。如:< br/>
大小写: 标签名字是区分大小写
命名不能有空格,不能有冒号,数字不能开头
根元素:每个XML文档必须有一个根元素,而且只能有一个根元素。
  1. 属性Attribute:
如:< person id=“110”>
属性位置:必须放在开始标签中
属性的值必须使用单引号或双引号引起来
在同一个标签中不能同时出现多个同名的属性
命名中不能出现空格和冒号

4.注释Comment

<!–注释内容–> 与HTML的注释格式相同
嵌套: 不可以嵌套
  1. 转义字符
  • XML中的转义字符与HTML一样。因为很多符号已经被文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符(也叫实体字符)
  • 所有的转义字符以&开头,以;结尾
说明 字符 转义字符
小于 < &lt;
大于 > &gt;
双引号 " &quot;
单引号 &apos;
与符号 & &amp;
空格 &nbsp;

转义字符应用示例:

  • 需求:有一个标签,中间包含sql语句,查询所有年龄小于20岁的学生。
  • 错误的写法:出现无效的标签名
 <sql>
     select * from student where age < 20
 </sql>

在这里插入图片描述

  • 正确的写法:
<sql>
    select * from student where age &lt; 20
</sql>

6.字符数据区CDATA

字符区的内容xml文件的解释器在解释的时候,全部的内容都会当成普通的文本处理,即使遇到了特殊的符号也会只当成普通的文本去处理。

<![CDATA[ 文本数据 ]]>
不由 XML 解析器进行解析的纯文本数据(Unparsed Character Data)
格式:<![CDATA[ 开头 字符数据 ]]>结尾
嵌套:不可以嵌套

在这里插入图片描述
7.处理指令

<?xml-stylesheet type="text/css" href="文件名.css"?>
可以给XML文件设置CSS样式,让它在浏览器上以指定样式来显示,使用比较少。
格式: <?xml-stylesheet 开头 ?> 结尾
作用:处理指令,简称PI(Processing instruction)用来指挥解析引擎如何解析XML文档内容

处理指令示例:

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/css" href="person.css" ?>
<person>
        <!--年龄-->
<age>20</age>
        <!--姓名-->
<name>张三</name>
<sex/>
        <!--描述-->
<description>
<![CDATA[我非常喜欢阅读,阅读过<<java编程思想>><<大型企业网站架构>>]]>
</description>
        </person>

  • 有样式文件person.css文件,内容如下:
  • 操作person.xml文档应用person.css样式文件
description{
    color:blue;
    font-size: 30px;
    font-family: 楷体;
}

使用浏览器浏览效果如下:
在这里插入图片描述

二、XML文件的约束

XML文件的约束是什么:

(就是一个文件以一个规范限制XML文件的元素)

因为XML是可扩展标记语言,可以写任意标记,所以我们需要对XML进行一些约束,让它只能出现哪些元素。限制xml文件出现的元素范围的一种约束文件。某些元素下面只能出现哪些子元素,甚至可以指定某些元素的数据类型。从而保证XML文件数据正确性和有效性

为什么需要XML约束:

xml文件本身是可以定义任意的元素的,但是有些元素不合适在某个xml文件中,xml文件的约束技术去限制xml文件出现的元素范围。

xml文件的约束技术类别:

DTD约束和Schema约束

1.DTD约束

DTD是什么:

(以dtd为扩展名的文件,XML上面的元素只能按它上面的规定出现)

  • DTD:Document Type Definition 文档类型定义
  • 作用: 用来约束XML文件的,它本身是一个文本文件,扩展名为dtd

DTD的使用案例:

步骤1:

新建bookshelf.dtd文件,选择项目鼠标右键“NEW->File",文件名 为“bookshelf.dtd”

步骤2:

bookshelf.dtd文件内容如下:

  • 关于此DTD文件的解释:
  1. 根元素是书架,包含1个或多个书子元素
  2. 书这个子元素包含三个子元素(书名,作者,售价)
  3. 书名包含文本,作者包含文本,售价包含文本
<!ELEMENT 书架 (+)>
<!ELEMENT 书 (书名,作者,售价)>
<!ELEMENT 书名 (#PCDATA)>
<!ELEMENT 作者 (#PCDATA)>
<!ELEMENT 售价 (#PCDATA)>

步骤3:

新建books.xml,代码如下:

<?xml version="1.0" encoding="UTF-8" ?>
//导入dtd文件
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架>
    <>
        <书名>三国演义</书名>
        <作者>罗贯中</作者>
        <售价>12</售价>
    </>
</书架>

导入DTD文件的格式 说明
(<!DOCTYPE 根元素 SYSTEM “DTD文件”> ) 系统的DTD文件,使用范围比较小,一般用于公司,不对外开放的DTD文件
<!DOCTYPE 根元素 PUBLIC “DTD文件”> 公共的DTD文件,用于互联网上,使用广泛的用途
(<!DOCTYPE 根元素 [dtd文件的元素]>) xml文件与dtd文件混合在一起。

IDEA开发工具books.xml的dtd约束验证不通过的效果如下:

在这里插入图片描述

2.Schema约束

Schema是什么:

  • Schema 即 XSD(XML Schema Definition)比DTD强大,是DTD代替者
  • 本身也是XML文档,但Schema文档扩展名为xsd,而不是xml
  • Schema 功能更强大,数据类型约束更完善

为什么Schema约束取代DTD:

因为DTD 不能判断XML中数据的类型,功能上比较简单。使用Schema约束慢慢的会代替DTD约束
如下图的售价为abc也不会报错:

在这里插入图片描述

Schema的演示案例

步骤1:

新建schema约束文件bookshelf.xsd,对售价约束数据类型,代码如下:

  • 关于此xsd文件的解释:
  1. 根元素是书架
  2. 书架中的子元素书,可以出现多次
  3. 书中依次出现三个子元素:书名,作者,售价
  4. 可以指定每个子元素的数据类型
  • 其中targetNamespace表示约束文件的命名空间
<?xml version="1.0" encoding="UTF-8" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.itcast.cn"
           elementFormDefault="qualified">
    <xs:element name='书架' >
        <xs:complexType>
            <xs:sequence maxOccurs='unbounded' >
                <xs:element name='书' >
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name='书名' type='xs:string' />
                            <xs:element name='作者' type='xs:string' />
                            <xs:element name='售价' type='xs:double' />
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

名称空间: 任何schema文件都有一个名称空间,schema名称空间是一个xsd文件的唯一标记
相当于一个id号,引入的时候必须要使用名称空间进行引入

步骤2:

新建books2.xml使用schema约束文件bookshelf.xsd,代码如下:

代码如下:

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

    <>
        <书名>xx</书名>
        <作者>12</作者>
        <售价>1</售价>
    </>
</书架>

步骤3:

开发工具提示效果:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42691149/article/details/83082247