web开发(一)xml简介及其语法

1.1 xml概述

什么是XML

  • XML :可扩展标记语言(EXtensible Markup Language

    XML 它是一种标记语言,很类似 HTML,标签都是自定义的。

    可扩展:内容自定义,想怎么写就怎么写

    标记,就是标签。

    如:<user>标签体</user> 或 <student></student><人></.人>

  • W3C(万维网联盟)在1988年2月发布1.0版本,2004年2月又发布1.1版本,单因为1.1版本不能向下兼容1.0版本,所以1.1没有人用。同时,在2004年2月W3C又发布了1.0版本的第三版。我们要学习的还是1.0版本。

XML 与 HTML 的主要差异

  • xml标签都是自定义的,html标签是预定义。
  • xml的语法严格,html语法松散。
  • xml是存储数据的,html是展示数据。

xml的作用

  • 存放数据
<?xml version="1.0" encoding="UTF-8"?>
<persons>
	<person id="p001">
		<name>张三</name>
	</person>
	<person id="p002">
		<name>李四</name>
	</person>
</persons>

类似于java代码

class Person{
	String id;
	String name;
}

public void test(){
	HashSet<Person> persons = new HashSet<Person>();
	persons.add( new Person("p001","张三") );
	persons.add( new Person("p002","李四") );
}
  • 配置文件–>存储数据
<?xml version="1.0" encoding="UTF-8"?>
<beans>
	<bean className="com.ccc_00_Bean.User">
		<property name="username" value="jack"></property>
	</bean>
</beans>

类似于java代码

class Bean{
	private String username;
	private String pws;
	//补全set\get方法
}
import com.ccc_00_Bean.User;
public static void main(){
    Class clzzz = Class.forName("com.ccc_00_Bean.User");
    Object obj = clazz.newInstance();
    Method method = clazz.getMethod("setUsername",String.class);
    method.invoke(obj,"jack");
}

1.2 xml的组成元素(语法)

XML 文件

xml文件扩展名必须为xml
xml内容必须满足以下要求

	1、固定的文档声明

	2、合格的元素和属性

	3、正确的注释

	4、符合要求的特殊字符编写规则

文档声明

  • XML文档声明格式:
<?xml version="1.0" encoding="UTF-8"?>
  1. 文档声明必须为<?xml开头,以?>结束;
  2. 文档声明必须从文档的0行0列位置开始;
  3. 文档声明只有2个属性:
1. versioin:指定XML文档版本。必须属性,因为我们不会选择1.1,只会选择1.0;
2. encoding:指定当前文档的编码。可选属性,默认值是utf-8;

元素(标签)

  • 元素 element
<bean></bean>
  1. 元素是XML文档中最重要的组成部分,
  2. 普通元素的结构开始标签、元素体、结束标签组成。
例如: <hello>大家好</hello>
  1. 元素体:元素体可以是元素,也可以是文本
例如:<b><a>你好</a></b>
  1. 空元素:空元素只有开始标签,而没有结束标签,但元素必须自己闭合
例如:<c/><img />
  1. 元素命名:
	a. 区分大小写
	b. 不能使用空格,不能使用冒号:
	c. 不建议以XML、xml、Xml开头

注意:

格式化良好的XML文档,必须只有一个根元素。

属性

  • 属性 attribute
<bean  className=”zhangsan”  id=’aa011’></bean>
  1. 属性是元素的一部分,它必须出现在元素的开始标签中,属性和元素使用空格分隔开,多个属性之间也是空格分割
  2. 属性的定义格式:属性名=属性值,其中属性值必须使用单引或双引
  3. 一个元素可以有0~N个属性,但一个元素中不能出现同名属性
  4. 属性名不能使用空格、冒号等特殊字符,且必须以字母开头
  5. 多个属性之间没有先后顺序

注释

XML的注释,以“<!--”开始,以“-->”结束。注释内容会被XML解析器忽略!

转义字符

因为很多符号已经被XML文档结构所使用,所以在元素体或属性值中想使用这些符号就必须使用转义字符,例如:“<”、“>”、“ ’ ”、“ ” ”、“&”。
3<5 && 6>7
在这里插入图片描述
举例:

1<3 == 5  在xml中的写法  1&lt;3==5

1.3 xml约束

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范,这称之为XML约束。
常见的xml约束:DTD、Schema
在这里插入图片描述
目的:

不需要自己写出约束文档,可以大致看懂就可以了

通过约束文档,可以编写出xml文档(具有固定格式,规定的格式)。

约束文档都是别人写好的,我们拿过来用

1.3.1 DTD约束

什么是DTD

DTD(Document Type Definition),文档类型定义,用来约束XML文档。规定XML文档中元素的名称,子元素的名称及顺序,元素的属性等。

DTD重点要求

开发中,我们很少自己编写DTD约束文档,通常情况我们都是通过框架提供的DTD约束文档,编写对应的XML文档。常见框架使用DTD约束有:struts2、hibernate等。

通过提供的DTD“bean.dtd”编写XML

<?xml version="1.0" encoding="UTF-8"?>
<!--
	模拟spring规范,如果开发人员需要在xml使用当前DTD约束,必须包括DOCTYPE。
	格式如下:
	<!DOCTYPE beans SYSTEM "bean.dtd">
-->
<!ELEMENT beans (bean*,import*) >
<!ELEMENT bean (property*)>
<!ELEMENT property (#PCDATA)>

<!ELEMENT import (#PCDATA)>

<!ATTLIST bean id CDATA #REQUIRED
			   className CDATA #REQUIRED
>

<!ATTLIST property name CDATA #REQUIRED
				   value CDATA #REQUIRED
>

<!ATTLIST import resource CDATA #REQUIRED>

案例实现

完成xml内容编写

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans SYSTEM "bean.dtd">
<beans>
	<bean id="" className=""></bean>
	
	<bean id="" className="">
		<property name="" value=""></property>
		<property name="" value=""></property>
	</bean>
	
	<import resource=""></import>
	<import resource=""></import>

</beans>

如何使用DTD约束文档,来编写xml文档

使用步骤:
	1.把DTD约束文档中以<!DOCTYPE开头的代码复制到xml文档中
		<!DOCTYPE beans SYSTEM "bean.dtd">
		!DOCTYPE:dtd约束文档的固定语法声明
		beans:要使用dtd约束文档,根元素必须叫beans
		SYSTEM:系统,说明dtd约束文档来源于本地的操作系统
		"bean.dtd":dtd约束文档的路径(相对路径)一般我们都会把dtd约束文档和xml文档放在同一个文件夹
   2.根据dtd文档根元素的要求,写出根元素beans
   3.根据提示,写出其他的元素和属性(< alt+/)

1.3.2 Schema约束

什么是Schema

Schema是新的XML文档约束;
Schema要比DTD强大很多,是DTD 替代者;
Schema本身也是XML文档,但Schema文档的扩展名为xsd,而不是xml。
Schema 功能更强大,数据类型更完善
Schema 支持名称空间(命名空间)

在这里插入图片描述

Schema重点要求

与DTD一样,要求可以通过schema约束文档编写xml文档。常见框架使用schema的有:Spring等

通过提供“bean-schema.xsd”编写xml文档

<?xml version="1.0" encoding="UTF-8"?>
<!-- 
	模拟spring规范,如果开发人员需要在xml使用当前Schema约束,必须包括指定命名空间。
	格式如下:
	<beans xmlns="http://www.itcast.cn/bean"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.itcast.cn/bean bean-schema.xsd"
	>
1. <element>声明元素(标签)
2.每个元素都必须确定类型
	complexType:复杂类型
	simple Type:简单类型,一般不用,大部分都是复杂类型
3.需要明确子标签的出场顺序
	<choice>选择 a|b
	<sequence>顺序 a,b
	<all>任意
		minOccurs:最少出现次数
		maxOccurs:最大出现次数,unbounded:不限制(没有边)
4.<attribute>用于给元素声明属性
	use:设置属性使用 optional:可选 required:必须

-->
<schema xmlns="http://www.w3.org/2001/XMLSchema"
		targetNamespace="http://www.itcast.cn/bean"
		xmlns:xsd="http://www.w3.org/2001/XMLSchema"
		xmlns:tns="http://www.itcast.cn/bean"
		elementFormDefault="qualified">
	<!-- 声明根标签 -->
	<element name="beans">
		<complexType>
			<choice minOccurs="0" maxOccurs="unbounded">
				<element name="bean">
					<complexType>
						<sequence minOccurs="0" maxOccurs="unbounded">
							<element name="property">
								<complexType>
									<attribute name="name" use="required"></attribute>
									<attribute name="value" use="required"></attribute>
								</complexType>
							</element>
						</sequence>
						<attribute name="id" use="required"></attribute>
						<attribute name="className" use="required"></attribute>
					</complexType>
				</element>
				<element name="import">
					<complexType>
						<attribute name="resource" use="required"></attribute>
					</complexType>
				</element>
			</choice>
		</complexType>
	</element>
</schema>
  • l 案例文档中同一个“命名空间”分别使用“默认命名空间”和“显示命名空间”进行引入,所以文档中和xsd:schema作用一样。
    在这里插入图片描述

案例实现

完成xml内容编写

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.itcast.cn/bean"
	   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	   xsi:schemaLocation="http://www.itcast.cn/bean bean-schema.xsd"
>
	<bean id="" className=""></bean>
	<bean id="" className="">
		<property name="" value=""/>
		<property name="" value=""/>
	</bean>
	
	<import resource=""/>
	<import resource=""/>
</beans>
Schema约束文档:
	1.每个Schema约束文档,都必须有一个名字,这个名字就是命名空间
		要求:全球唯一,一般使用公司的域名+项目名称+...
		targetNamespace="http://www.itcast.cn/bean/demo01/...."

	2.在xml文档中想要使用Scheme约束文档,必须声明使用的是哪个Schema约束文档
		a.默认声明:只能有一个
				xmlns="default namespace"
				xmlns="http://www.itcast.cn/bean"
		b.显示声明:可以有多个
				xmlns:别名1=”http://www.itcast.cn/bean”
				xmlns:别名2="http://www.itcast.cn/bean"
	3.想要使用Schema约束文档,必须确定约束文档的位置
		a.先确定官方文档的位置
				xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		b.通过官方文档确定我们自己的Schema约束文档的位置
				xsi:schemaLocation="{namespace} {location}"
									 命名空间	 具体位置
	4.使用
		使用默认声明,直接写元素名称<bean></bean>
		使用显示声明:格式
			别名:元素名称
			<别名1:bean></别名1:bean>

如何使用schema约束文档,编写xml文档

1.每个schema约束文档中都有一个开始的根元素标签,复制到xml文档中,添加一个结束根标签
2.根据提示,写出其他的元素和属性(< alt+/)

命名空间(语法)

什么是命名空间

如果一个XML文档中使用多个Schema文件,而这些Schema文件中定义了相同名称的元素时就会出现名字冲突。这就像一个Java文件中使用了import java.util.*和import java.sql.*时,在使用Date类时,那么就不明确Date是哪个包下的Date了。

总之名称空间就是用来处理元素和属性的名称冲突问题,与Java中的包是同一用途。如果每个元素和属性都有自己的名称空间,那么就不会出现名字冲突问题,就像是每个类都有自己所在的包一样,那么类名就不会出现冲突。

约束文档和xml关系

当W3C提出Schema约束规范时,就提供“官方约束文档”。我们通过官方文档,必须“自定义schema 约束文档”,开发中“自定义文档”由框架编写者提供。我们提供“自定义文档”限定,编写出自己的xml文档。
在这里插入图片描述

声明命名空间
默认命名空间:<xxx xmlns=””>,使用<标签>
显式命名空间:<xxx xmlns:别名=””>,使用<别名:标签>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45083975/article/details/92002954