JavaWeb学习笔记(XML语言)

本文详细介绍了XML的基本概念、语法规则、常见应用,包括文档声明、元素定义、属性定义、注释、特殊字符和CDATA区。此外,还深入探讨了XML的约束,如DTD和XML Schema,以及它们在定义元素、属性和限制文档结构中的作用。XML作为一种数据交换格式,广泛应用于软件配置、数据传输和描述有关系的数据。

知识点总结于崔希凡+王泽(广陵散)的JavaWeb视频教程,侵权请联系删除。

XML

简介

XML(eXtensible Markup Language): 指可扩展标记语言

  • 标记型语言:html是标记型语言,XML也是使用标签来操作的
  • 可扩展:html里面的标签是固定,每个标签都有特定的含义例如:<h1> <br/> <hr/>,但是XML标签可以自己定义,可以写中文的标签 例如:<person></person>、<猫></猫>
    XML标签没有被预定义,需要用户自行定义标签
  • XML的用途:XML 被设计用来传输和存储数据(XML也可显示数据,但不是主要功能)。
  • XML技术是W3C组织(World Wide Web Consortium万维网联盟)发布的,目前遵循的是W3C组织于2000年发布的XML1.0规范。
    xml有两个版本:1.0 1.1
    使用都是1.0版本,(1.1版本不能向下兼容)
  • XML被广泛认为是继Java之后在Internet上最激动人心的新技术。

XML的应用

在这里插入图片描述

  • XML语言出现的根本目的在于描述向上图那种有关系的数据。
  • XML是一种通用的数据交换格式
  • 在XML语言中,它允许用户自定义标签。一个标签用于描述一段数据;一个标签可分为开始标签和结束标签,在起始标签之间,又可以使用其它标签描述其它数据,以此来实现数据关系的描述。
  • XML中的数据必须通过软件程序来解析执行或显示,如IE;这样的解析程序称之为Parser(解析器)。

XML常见应用

  • 用于描述qq直接传输数据,使用xm格式进行描述,具有可读性和可维护性
  • XML技术除用于保存有关系的数据之外,它还经常用作软件配置文件,以描述程序模块之间的关系。(如Struts、Spring和Hibernate都是基于XML作为配置文件的)
  • 在一个软件系统中,通过XML配置文件可以提高系统的灵活性。即程序的行为是通过XML文件来配置的,而不是硬编码。

XML的语法规则

文档声明

  • 在编写XML文档时,需要先使用文档声明来声明XML文档,且必须出现在文档的第一行。(写了文档声明之后,表示写xml文件的内容)
    最简单的语法:<?xml version=“1.0”?>
  • encoding属性说明文档所使用的字符编码。保存在磁盘上的文件编码要与声明的编码一致,否则会出现乱码
    因为码表中存储的相同字符的位置不一样,如果按照GBK码表存储字符,假定“你好”位置分别在1和2,而通过UTF-8打开,因为UTF-8码表中1 2位置上的字符是其它字符,所以会出现乱码。
    字符编码强行将每一个字符对应一个十进制数字,再将十进制数字转换成计算机理解的二进制,而计算机读到这些1和0之后就会显示出对应的文字或符号。
    如:<?xml version=“1.0” encoding=“GB2312”?>
  • standalone属性说明文档是否独立,即是否依赖其他文档。
    如:<?xml version=“1.0” standalone=“yes”?>

元素(标签)定义

  • XML元素指XML文件中出现的标签。一个标签分为起始和结束标签(不能省略)。一个标签有如下几种书写形式:
    1.包含标签主体:<mytag>some content</mytag>
    2.不含标签主体:<mytag/>

  • 一个标签中可以嵌套若干子标签,但所有标签必须合理的嵌套,不允许有交叉嵌套。
    错误示例:<mytag1><mytag2></mytag1></mytag2>

  • 一个XML文档必须有且仅有一个根标签,其他标签都是这个根标签的子标签或孙标签。

  • 对于XML标签中出现的所有空格和换行,XML解析程序都会当作标签内容进行处理。例如下面两段内容的意义是不一样的:

    • <网址>www.itcast.cn</网址>
    • <网址>
          www.itcast.cn
      </网址>

    由于在XML中,空格和换行都作为原始内容被处理,所以,在编写XML文件时,使用换行和缩进等方式来让原文件中的内容清晰可读的“良好”书写习惯可能要被迫改变。

  • 一个XML元素可以包含字母、数字以及其它一些可见字符,但必须遵守下面的一些规范:

    • 区分大小写,例如,<P>和<p>是两个不同的标记
    • 不能以数字或"_" (下划线)开头
    • 不能以xml(或XML、或Xml 等)开头
    • 不能包含空格
    • 名称中间不能包含冒号(:)

属性定义

  • 一个元素可以有多个属性,每个属性都有它自己的名称和取值,例如:<mytag name=“value” …/>

  • 属性值一定要用引号(单引号或双引号)引起来

  • 属性名称的命名规范与元素的命名规范相同

  • 元素中的属性是不允许重复

  • 在XML技术中,标签属性所代表的信息也可以被改成用子元素的形式来描述,例如:

      <mytag>
      	<name>
      		<firstName/>
      		<lastName/>
      	</name>
      </mytag>
    

注释

  • XML中的注释语法为:<!–这是注释–>
  • 注意:
    1.XML声明之前不能有注释(即第一行)
    2.注释不能嵌套,例如:
    在这里插入图片描述

特殊字符

  • 在xml文档中有些字符是特殊的,不能使用它们作为文本数据。例如:不能使用“<”或“>”等字符作为文本数据,所以需要使用转义字符来表示。
    例如在xml中直接输入 a<b ,结果不能正常显示,因为把<当做了标签
    如果就想要显示,需要对特殊字符 < 进行转义:a &lt; b

在这里插入图片描述

CDATA区

当大量的转义字符出现在xml文档中时,会使xml文档的可读性大幅度降低。这时如果使用CDATA段就会好一些。
在CDATA段中出现的“<”、“>”、“””、“’”、“&”,都无需使用转义字符。这可以提高xml文档的可读性。

  • 书写格式(红色部分):

<a><![CDATA[ <a> ]]></a>

处理指令

处理指令,简称PI(Processing instruction)。处理指令用来指挥解析器如何解析XML文档内容。

  • 例如,在XML文档中可以使用xml-stylesheet指令,通知XML解析器,应用css文件显示xml文档内容:<?xml-stylesheet type="text/css" href="a.css"?>
    处理指令以“<?”开头,以“?>”结束,这一点与xml文档声明相同。

CSS:
gj1 {font-size: 200px; color: red;}
gj2 {font-size: 100px; color: green;}
gj3 {font-size: 10px;}
gj4 {font-size: 50px; color: blue;}

XML:

<?xml version="1.0" encoding="gbk"?> <?xml-stylesheet type="text/css" href="a.css" ?>

<gjm>
 <gj1>中国</gj1>
<gj2>美国</gj2>
<gj3>日本</gj3>
<gj4>英国</gj4>
</gjm>

小结

  • 所有 XML 元素都须有关闭标签
  • XML 标签对大小写敏感
  • XML 必须正确地嵌套顺序
  • XML 文档必须有根元素(只有一个)
  • XML 的属性值须加引号
  • 特殊字符必须转义 — CDATA
  • XML 中的空格、回车换行会解析时被保留

XML约束

概述

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范(与xml语法无关),这称之为XML约束。

  • 为什么需要XML约束?
    因为xml文档是可以自定义元素的,这会让使用xml文档的应用程序无法知道xml文档的真实结构。通常应用程序都会要求xml文件的结构是固定的,以满足自己的需求,这就说明,不同的应用程序要求自己的xml文档必须符合一定的要求。
  • 两个概念:
    格式良好的XML:遵循XML语法的XML
    有效的XML:遵循约束文档的XML

    总之:约束文档定义了在XML中允许出现的元素名称、属性及元素出现的顺序等等
  • 常用的约束技术:
    XML DTD
    XML Schema

DTD约束

DTD(Document Type Definition),全称为文档类型定义。dtd是平面式文档,dtd文件不是xml文档,通常扩展名为“.dtd”。它是最早的xml约束。

什么是DTD约束?
 DTD(Document Type Definition),文档类型定义,用来约束XML文档。例如要求xml文档的根元素必须是,在元素下可以包含0~n个元素,每个元素必须有一个number属性,而且还要有三个子元素,分别<name>、<age>、<sex>,这三个子元素的内容必须为文本内容,而不能是子元素。

创建步骤:

  1. 看xml中有多少个元素 ,有几个元素,在dtd文件中写几个 <!ELEMENT>
  2. 判断元素是简单元素还是复杂元素
    复杂元素:有子元素的元素
    <!ELEMENT 元素名称 (子元素)>
    简单元素:没有子元素
    <!ELEMENT 元素名称 (#PCDATA)>
    注意:元素名称和括号之间存在空格,不然格式错误
  3. 需要在xml文件中引入dtd文件

在这里插入图片描述

注意:如果我们打开xml文件是用浏览器打开的,由于浏览器只负责校验xml的语法,不负责校验约束,所以不会起到约束作用。

如果想要校验xml的约束,需要使用工具(myeclipse工具、Idea)。

DTD的三种引入方式:
DTD约束即可以作为一个单独的文件编写,也可以在XML文件内编写。

  1. 使用外部DTD
    <!DOCTYPE 根元素名称 SYSTEM “dtd路径”>
  2. 使用内部DTD
    <!DOCTYPE person [
    <!ELEMENT person (name,age)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    ]>
  3. 使用公共DTD(网络上的dtd文件)
    <!DOCTYPE 根元素 PUBLIC “DTD名称” “DTD文档的URL”>
    框架 struts2 使用配置文件就是外部的dtd文件
    示例:<!DOCTYPE struts PUBLIC “-//Apache Software Foundation//DTD Struts Configuration 2.0//EN” “http://struts.apache.org/dtds/struts-2.0.dtd”>
使用DTD定义元素
  • 在DTD文档中使用ELEMENT关键字来声明一个XML元素。

  • 语法:<!ELEMENT 元素名称 使用规则>
    规则:
    (#PCDATA):指示元素的主体内容只能是普通的文本.(Parsed Character Data)
    EMPTY:用于指示元素的主体为空。比如<br/>
    ANY:用于指示元素的主体内容为任意类型(可以为空)。
    (子元素):指示元素中包含的子元素

  • 定义子元素及描述它们的关系:

    • 如果子元素用逗号分开,说明必须按照声明顺序去编写XML文档。
      如: <!ELEMENT FILE (TITLE,AUTHOR,EMAIL) 标签要从TITLE开始到EMAIL结束的顺序书写
    • 如果子元素用“|”分开,说明任选其一。
      如:<!ELEMENT FILE (TITLE|AUTHOR|EMAIL)(只能在三个标签中选择一个)
    • 用+、*、?来表示元素出现的次数
      +:表示至少出现一次,一次或多次
      *:表示可有可无,零次、一次或多次
      ?:表示可以有也可以无,有的话只能有一次。零次或一次

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

使用DTD定义属性
  • 属性的定义格式:
 <!ATTLIST 元素名称
			属性名称 属性类型 属性的约束
 >
  • 示例:
<!ATTLIST 商品
	类别 CDATA #REQUIRED 必须的
	颜色 CDATA #IMPLIED  可选的
>

<!-- 对应的XML为: -->
<商品 类别=“服装” 颜色=“黄色”/>
  • 属性值类型:
    CDATA:表示属性的取值为普通的文本字符串
    ENUMERATED (DTD没有此关键字):表示枚举,只能从枚举列表中任选其一,如(鸡肉|牛肉|猪肉|鱼肉)
    ID:表示属性的取值不能重复,属性的值只能由字母,下划线开始,不能出现空白字符

    如果把student元素的number属性设定为ID类型,那么每个student元素的number属性值必须是唯一的,并且ID类型的属性值不能以数字开头
  • 属性约束设置说明:
    #REQUIRED:表示该属性必须出现
    #IMPLIED:表示该属性可有可无
    #FIXED:表示属性的取值为一个固定值。语法:#FIXED “固定值”
    直接值(直接输入一个值):表示属性的取值为该默认值

在这里插入图片描述

示例:

<!ATTLIST 页面作者 
	     姓名 CDATA #IMPLIED 
	     年龄 CDATA #IMPLIED 
	     联系信息 CDATA #REQUIRED 
	     网站职务 CDATA #FIXED "页面作者" 
	     个人爱好 CDATA "上网"
 >

根元素为 页面作者 ,姓名元素和年龄元素的文本内容可有可无,联系信息元素的文本内容必须出现。

定义实体

实体用于为一段内容创建一个别名,以后在XML文档中就可以使用别名引用这段内容了。相当于在Java中的用final定义一个常量值。

  • 语法:<!ENTITY 实体名称 “实体内容”>
  • 概念:在DTD中定义,在XML中使用
  • 引用方式(注意是在XML中使用):&实体名称;

DTD中定义:XML中引用:&copyright;

Schema约束

XML Schema 也是一种用于定义和描述 XML 文档结构与内容的模式语言,其出现是为了克服 DTD 的局限性

概念:

  • XML Schema 文件自身就是一个XML文件,但它的扩展名通常为.xsd
  • 和XML文件一样,一个XML Schema文档也必须有一个根结点,但这个根结点的名称为Schema
  • 应用schema约束,开发xml过程

在这里插入图片描述

  • 编写了一个XML Schema约束文档后,通常需要把这个文件中声明的元素绑定到一个URI地址上,这个URI地址叫namespace名称空间,以后XML文件就可以通过这个URI(即名称空间)引用绑定指定名称空间的元素

XML Schema的特点:

  • XML Schema符合XML语法结构。
  • DOM、SAX等XML API很容易解析出XML Schema文档中的内容。
  • XML Schema对名称空间支持得非常好。
  • XML Schema比XML DTD支持更多的数据类型,并支持用户自定义新的数据类型。
  • XML Schema定义约束的能力非常强大,可以对XML实例文档作出细致的语义限制。
  • XML Schema不能像DTD一样定义实体,比DTD更复杂,但Xml Schema现在已是w3c组织的标准,它正逐步取代DTD。

Schema和DTD区别:
XML从SGML中继承了DTD,并用它来定义内容的模型,验证和组织元素。同时,它也有很多局限:

  • DTD不遵守XML语法;
  • DTD不可扩展;
  • DTD不支持命名空间的应用;
  • DTD没有提供强大的数据类型支持,只能表示很简单的数据类型。

Schema完全克服了这些弱点,使得基于Web的应用系统交换XML数据更为容易。下面是它所展现的一些新特性:

  • Schema完全基于XML语法,不需要再学习特殊的语法;
  • Schema能用处理XML文档的工具处理,而不需要特殊的工具;
  • Schema大大扩充了数据类型,支持booleans、numbers、dates and times、URIs、integers、decimal numbers和real numbers等;
  • Schema支持原型,也就是元素的继承。如:我们定义了一个“联系人”数据类型,然后可以根据它产生“朋友联系人”和“客户联系”两种数据类型;
  • Schema支持属性组。我们一般声明一些公共属性,然后可以应用于所有的元素,属性组允许把元素、属性关系放于外部定义、组合;
  • 开放性。原来的DTD只能有一个DTD应用于一个XML文档,现在可以有多个Schema运用于一个XML文档
XMLSchema文档基本结构
  • 在W3C XML schema规范中规定:所有的Schema文档都使用 <schema>作为其根元素
  • <schema>元素可以包含一些属性。一个XML schema声明看起来经常以如下的形式出现:
    <schema xmlns=“http://www.w3.org/2001/XMLSchema”
    targetNamespace=“http://www.itcast.cn/20140213”
    elementFormDefault=“qualified”>

    xmlns="http://www.w3.org/2001/XMLSchema"代表当前xml文件是一个约束文件;
    targetNamespace="http://www.itcast.cn/20140213"代表如果要使用schema约束文件,直接通过这个地址引入约束文件;
    elementFormDefault="qualified"代表在xml中,所有引用xsd的全局的元素都必须加上命名空间的前缀
<?xml version="1.0"?>
<schema  xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.itcast.cn/20140213" 
elementFormDefault="qualified">
	...
</schema>
XMLSchema简易元素和复杂元素
  • 简易元素:指那些仅包含文本的元素。它不会包含任何其他的元素或属性。
    <element name=“xxx” type=“string"/>
  • 复杂元素:复杂类型元素是包含子元素或者属性的元素
    使用<complexType>:表示复杂类型
  • <sequence>:表示有顺序

示例:XML文件有一个根元素person,根元素中有一个元素person,其中包含两个子类元素to和from

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema" 
targetNamespace="http://www.example.org/1111"
elementFormDefault="qualified">
	<element name="person">
		<complexType>
			<sequence>
				<element name="man">
					<complexType>
						<sequence>
							<element name="name" type="string"></element>
							<element name="age" type="string"></element>
						</sequence>
					</complexType>
				</element>
			</sequence>
		</complexType>
	</element>
</schema>
XMLSchema复杂元素指示器

All:表示只能出现一次
Choice: 只能出现其中的一个
Sequence:元素按照顺序出现
maxOccurs=“unbounded” 表示出现次数没限制
定义属性(必须是复杂元素):<attribute name=“p1” type=“string” use=“required”></attribute>
<any></any>:表示任意元素

约束属性
  • 写在复杂元素里面
  • 写在</complexType>之前
    例如:
    <attribute name=“id1” type=“int” use=“required”>
    代表该元素名称为id1,属性类型为int,且必须出现
对XML Schema的引用
  • Schema和被约束的xml都是xml文档,如何区分哪个是被约束的文档?
    使用名称空间区分被约束文档(使用w3c名称空间)
    xmlns=“http://www.w3.org/2001/XMLSchema-instance” 代表当前的文档是一个实例文档(被约束的文档)
  • 引用自定义的schema,使用自定义的名称空间
    由于一个标签上不能出现两个同名的属性,所以需要给名称空间起一个别名xsi。xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
    引用本地xsd文件存放位置,使用schemaLocation:代表的是Schema文档存放的路径
<?xml version="1.0" encoding="utf-8"?>
<note
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://www.itcast.cn/20140213" 
xsi:schemaLocation="http://www.itcast.cn/20140213 node.xsd">
	 <to>George</to>
	 <from>John</from>
	 <heading>Reminder</heading>
	 <body>Don't forget the meeting!</body>
</note>
名称空间的概念
  • 在XML Schema中,每个约束模式文档都可以被赋以一个唯一的名称空间,名称空间用一个唯一的URI(Uniform Resource Identifier,统一资源标识符)表示。 在Xml文件中书写标签时,可以通过名称空间声明(xmlns),来声明当前编写的标签来自哪个Schema约束文档。如:
    <itcast:书架 xmlns:itcast=“http://www.itcast.cn”>
    <itcast:书>……</itcast:书>
    </itcast:书架>
    此处使用itcast来指向声明的名称,以便于后面对名称空间的引用。
  • 注意:名称空间的名字语法容易让人混淆,尽管以 http:// 开始,那个 URL 并不指向一个包含模式定义的文件。事实上,这个 URL:http://www.itcast.cn根本没有指向任何文件,只是一个分配的名字。
使用名称空间引入Schema
  • 为了在一个XML文档中声明它所遵循的Schema文件的具体位置,通常需要在Xml文档中的根结点中使用schemaLocation属性来指定,例如:
    <itcast:书架 xmlns:itcast=“http://www.itcast.cn”
    xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance”
    xsi:schemaLocation=“http://www.itcast.cn book.xsd">
  • schemaLocation此属性有两个值。第一个值是需要使用的命名空间。第二个值是供命名空间使用的 XML schema 的位置,两者之间用空格分隔。
  • 注意,在使用schemaLocation属性时,也需要指定该属性来自哪里。

示例:
company.xml
在这里插入图片描述
company.xsd
在这里插入图片描述
department.xsd
在这里插入图片描述

示例

为students.xml编写DTD:

<!ELEMENT students (student+)>
<!ELEMENT student (name,age,sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number CDATA #REQUIRED>

为students.xml编写schema:

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:element name="students" type="studentsType"/>
	<xsd:complexType name="studentsType">
		<xsd:sequence>
			<xsd:element name="student" type="studentType" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="studentType">
		<xsd:sequence>
			<xsd:element name="name" type="xsd:string"/>
			<xsd:element name="age">
				<xsd:simpleType>
					<xsd:restriction base="xsd:integer">
						<xsd:maxInclusive value="100"/>
						<xsd:minInclusive value="0"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="sex">
				<xsd:simpleType>
					<xsd:restriction base="xsd:string">
						<xsd:enumeration value=""/>
						<xsd:enumeration value=""/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="number" type="xsd:string"/>
	</xsd:complexType>
</xsd:schema>

参照Schema编写XML文档:
我们参照上面的Schema文档编写一个studens.xml文件

<?xml version="1.0" encoding="utf-8" standalone="no" ?>
<students xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:noNamespaceSchemaLocation="students.xsd">
    <student number="ID_1001">
        <name>张三</name>
        <age>23</age>
        <sex></sex>
    </student>
    <student number="ID_1002">
        <name>李四</name>
        <age>32</age>
        <sex></sex>
    </student>
    <student number="ID_1003">
        <name>王五</name>
        <age>50</age>
        <sex></sex>
    </student>
</students> 
内容概要:本文系统研究了基于豪猪优化算法(CPO)的多无人机协同集群在三维空间中的避障路径规划问题,聚焦于实现以最低成本为目标的航迹优化,综合考虑路径长度、飞行高度、威胁规避及转弯角度等多个关键因素。通过构建精细化的三维环境模型与多无人机协同机制,采用Matlab平台实现CPO算法的仿真与验证,充分展示了该算法在复杂动态障碍环境下的高效搜索能力与全局优化性能。研究不仅涵盖了路径规划的数学建模与目标函数设计,还深入探讨了算法的收敛特性与鲁棒性,为智能群体系统在实际场景中的应用提供了理论依据与技术支撑。; 适合人群:具备一定编程基础和优化算法背景,从事无人机系统控制、智能路径规划、群体协同、人工智能与自动化等相关领域的科研人员、高校研究生及工程技术人员。; 使用场景及目标:①应用于多无人机协同执行侦察、灾害监测、应急救援、区域巡检等复杂任务中的自主路径规划;②为智能优化算法在三维动态环境下的路径决策问题提供可复现的技术范例;③支持研究人员对CPO算法与其他主流群智能算法(如PSO、GWO、WOA等)进行性能对比与改进研究,推动路径规划技术的发展。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点理解目标函数的多维度建模方式与CPO算法的迭代优化流程,可通过调整环境参数与约束条件进行仿真实验,对比不同算法在相同场景下的路径质量与收敛速度,从而深入掌握其优势与适用边界。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值