JavaWeb——XML
介绍
约束:规定xml文档的书写规则
分类
1.DTD:一种简单的约束技术
2.Schema:复杂的约束技术
1.DTD文档
<!ELEMENT students (student * ) >
<!ELEMENT sutdent (name , age , sex)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ATTLIST student number ID #REQUIRED>
解析
ELEMENT:定义标签
ATTLIST:定义属性
<!ELEMENT 标签名 (子标签名 , 子标签名,子标签名 ..... [ * ] ) >
定义标签 标签名 (子标签名 [数量] )
<!ELEMENT 标签名 (#PCDATA)>
#PCDATA :字符串
<!ATTLIST 标签名 属性名 属性类型 #REQUIRED>
<!ATTLIST student number ID #REQUIRED>
给student标签添加属性,number id类型 必须有
简单记忆:<!ELEMENT 标签名 (子标签或者值类型)>
<!ATTLIST 标签名 属性名 属性类型 约束>
引入
1.内部data:不常用
2.外部data:将约束的规则定义在外部的dtd文件中
本地:<!DOCTYPE 跟标签名 SYSTEM “dtd文件的位置”>
网络:<!DOCTYPE 根标签名 PUBLIC "dtd文件名字" "dtd文件的位置URL">
使用
// dtd <!ELEMENT students (student *)> <!ELEMENT student (name,age ,sex)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> <!ATTLIST student number ID #REQUIRED> // xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE students SYSTEM "student.dtd"> <students> <student number="s001"> <name>陈威</name> <age>22</age> <sex>男</sex> </student> <student number="s002"> <name>张树</name> <age>20</age> <sex>男</sex> </student> </students>
2.Schema
更复杂的xml约束,比dtd能做到内容的限定( 约束后缀名 .xsd)
首先定义<schema>头
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.javaswing.xyz/person4" elementFormDefault="qualified"> <!-- 1.<schema>标签起头 --> <!-- xmlns:="http://www.w3.org/2001/XMLSchema" schema约束遵循 w3c组织的规范--> <!-- 2.targetNamespace="http://www.javaswing.xyz/person4 " targetNamespace是名称空间 --> <!-- 通常把这个文档定义的约束绑定到一个URL上,这个地址就叫名称空间。 名称空间是用来唯一标识schema的地址
,区分不同shema中同名元素和属性 --> <!-- 3.固定写法:elementFormDefault="qualified" --> </schema>
其次定义<element>,分为简单元素和复杂元素。
简单元素
介绍
<element name="persons"></element> <element name="human"></element> <element name="animal"></element> <!-- <element name="persons"></element> --> <!-- 标签<element> --> <!-- 属性 name="" 标签名-->
<!-- 一个元素如果包含子元素和属性,就是简单元素,反之就是复杂元素。-->
复杂元素
介绍
<element name="name" type="string" minOccurs="1" maxOccurs="unbounded"/ <!-- 被包裹在其他元素之间的子元素是复杂元素 --> <!-- 属性 --> <!-- name=“标签名” --> <!-- type="数据类型" --> <!-- minOccurs="最少出现次数" --> <!-- maxOccurs="最多出现次数" -->
复杂类型complexType,这里的sequence元素规定了子元素出现的顺序,需要注意的是,即使是只有一个子元素的元素,定义语法也为
介绍
<element name="person">
<complexType>
<sequence>
<element name="name" type="string" minOccurs="1" maxOccurs="unbounded"/>
<element name="age" type="string" minOccurs="1" maxOccurs="unbounded"/>
<element name="sex" type="string" minOccurs="1" maxOccurs="unbounded"/>
</sequence>
</complexType>
</element>
<element>数据属性
介绍
type: 数据类型 (复杂元素)

maxOccurs:标签最多出现次数
minOccurs:标签最少出现次数
<element>内定义的属性
介绍
这里的属性类型若不注明,则认为属性是可选的(即不强制要求存在)。除此之外,属性类型一般分为三种:
-
必选:语法为:
<attribute name="属性名称" type="数据类型" use="required"></attribute> -
有默认值:语法为:
<attribute name="属性名称" type="数据类型" default="默认值"></attribute> -
有固定值:语法为:
<attribute name="属性名称" type="数据类型" fixed="固定值"></attribute>
对于包含属性的元素,前面说过属于复杂元素(即使这个元素只含属性不含子元素),因此定义应为:
<element ...>
<complexType>
<attribute ...></attribute>
</complexType>
</element>
引入
介绍
1. 使用名称空间引入:xmlns
xmlns="http://www.javaswing.xyz/person4"
2.再声明这个文档是应用Schema约束技术的一个实例
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3.指定Schema文档的位置进行引用
xsi:schemaLocation="名称空间 Schema文件名"
完整Schema约束
<?xml version="1.0" encoding="UTF-8" ?> <schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.javaswing.xyz/person4" elementFormDefault="qualified"> <element name="persons"> <complexType> <sequence> <element name="person"> <complexType> <sequence> <element name="name" type="string" minOccurs="1" maxOccurs="unbounded"/> <element name="age" type="string" minOccurs="1" maxOccurs="unbounded"/> <element name="sex" type="string" minOccurs="1" maxOccurs="unbounded"/> </sequence> </complexType> </element> </sequence> </complexType> </element> </schema>
// xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<persons xmlns="http://www.javaswing.xyz/person4"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.javaswing.xyz/person4 person4.xsd">
<person id="001">
<name>陈威</name>
<age>22</age>
<sex>male</sex>
</person>
<person id="002">
<name>张树</name>
<age>21</age>
<sex>male</sex>
</person>
<person id="003">
<name>陈晨</name>
<age>20</age>
<sex>male</sex>
</person>
</persons>
总结:element分为简单元素和复杂元素。
一个元素包含子标签就是简单元素。
元素都有 name 和 minOccurs 和 maxOccures, 复杂元素才有 type。
复杂元素的属性和标签包含在
<element name="person" >
<compleType>
<squence>
复杂元素 <element>
</squence>
属性 <attribute>
</compleType>
</element>
Schema就是通过简单元素和复杂元素定义规则,其他不用去记
参考网址:https://www.jianshu.com/p/1e35c15d0cb8

浙公网安备 33010602011771号