02xml约束

xml约束

html中的标签是预定义的,就是因为html引入了约束

xml约束指通过编写一个文档来约束一个XML文档的书写规范(比如标签名称,标签顺序,文档结构等)

为什么需要xml约束?

为了保证数据的规范性和安全性。

xml的标签是自定义的,这样使用xml文档的程序就不能知道xml文档的真实结构,通常应用程序要求xml文件的结构是固定的,不同的程序要求自己使用的xml文档必须符合一定的规范

dtd约束

document Type Definition(缩写dtd),即文档类型定义

xml的引用dtd约束的方式有两种

  • 内部dtd:在xml内部编写dtd
  • 外部dtd:在外部文件中编写dtd,然后再引入到xml中

先看内部dtd

格式:

<!DOCTYPE 根元素 [元素声明]>
<?xml version="1.0"?>
<!DOCTYPE students [
  <!ELEMENT student (name,age,sex,high)>
  <!ELEMENT name      (#PCDATA)>
  <!ELEMENT age      (#PCDATA)>
  <!ELEMENT sex      (#PCDATA)>
  <!ELEMENT high     (#PCDATA)>
]>
<students>
    <studnet>
    <name>张三</name>
    <age>18</age>
    <sex>男</sex>
    <high>身高175cm<high>
    </studnet>
</students>

说明:!DOCTYPE students(第二行)定义根元素是students

!ELEMENT student (第三行)定义 student 元素有四个元素:name,age,sex,high,且顺序是固定的

!ELEMENT name (第四行)定义 name 元素为 "#PCDATA" 类型,本文类型,字符串

!ELEMENT age (第五行)定义 age 元素为 "#PCDATA" 类型

!ELEMENT sex (第六行)定义 sex 元素为 "#PCDATA" 类型

!ELEMENT high (第七行)定义 high 元素为 "#PCDATA" 类型

外部dtd,

创建dtd文件,后缀名是.dtd ,这里名为student.dtd

<?xml version="1.0" encoding="UTF-8"?>
  <!ELEMENT students (student+) >
	  <!ELEMENT student (name,age,sex,high)>
	  <!ELEMENT name      (#PCDATA)>
	  <!ELEMENT age      (#PCDATA)>
	  <!ELEMENT sex      (#PCDATA)>
	  <!ELEMENT high     (#PCDATA)>

在xml文件中 引入外部dtd,分两种情况

示例 

  • 引入本地dtd文件:<!DOCTYPE students SYSTEM "student.dtd">
  • 引入网络dtd文件:<!DOCTYPE students PUBLIC "名称空间" "student.dtd">
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE students SYSTEM "student.dtd">
<students>
	<student>
	    <name> 张三</name>
		<age>12</age>
		<sex>男</sex>
		<high>176cm</high>
	</student>
</students>

但是dtd中的约束不严谨,更多地还是使用下面的schema约束

schema约束

XML Schema Definition,简称XSD

Schema是用一套预先定义好的XML元素和属性创建,规定了xml文档的结构和和每一个元素或属性的数据类型

schema约束更加严谨,克服了dtd约束的局限性,schema本身也是一个xml文件,但是文件名是以.xsd结尾.因为它的语法跟xml一样,所以应用更广泛

XML Schema:

  • 定义可出现在文档中的元素
  • 定义可出现在文档中的属性
  • 定义哪个元素是子元素
  • 定义子元素的次序和数目
  • 定义元素是否为空,或者是否可包含文本
  • 定义元素和属性的数据类型
  • 定义元素和属性的默认值以及固定值

Schema中的简易元素:

简易元素指那些仅包含文本的元素。它不会包含任何其他的元素或属性

定义简易元素的语法:

<xs:element name="xxx" type="yyy"/>
yyy指元素的数据类型,XML Schema 拥有很多内建的数据类型。
最常用的类型:
xs:string
xs:decimal
xs:integer
xs:boolean
xs:date
xs:time
例如: <xs:element name="dog" type="xs:string"/>
对应的xml标签为<dog>小黄</dog>

简易元素可拥有指定的默认值或固定值

默认值:
<xs:element name="home" type="xs:string" default="beijing"/>
如果没有在此标签上填充,那么此标签默认值为beijing
固定值:
<xs:element name="home" type="xs:string" fixed="beijing"/>
无法给此标签添加文本,因为它有固定值beijing

 复杂元素:

复合元素指包含其他元素及/或属性的 XML 元素。

四种类型的复合元素:这四种元素均可包含属性!

  • 空元素
  • 包含其他元素的元素
  • 仅包含文本的元素
  • 包含元素和文本的元素

复合元素的定义方式1:通过命名此元素,直接对此元素声明

<xs:element name="home">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="province" type="xs:string"/>
      <xs:element name="city" type="xs:string"/>
    </xs:sequence>
  </xs:complexType>
</xs:element>
对应的xml标签为:
<home>
<province>河北</province>
<city>邯郸</city>
</home>

 方式2 :复合元素可以使用 type 属性,该属性的作用是引用要使用的复合类型的名称:

<xs:element name="home" type="address"/>
<xs:complexType name="address">
  <xs:sequence>
    <xs:element name="province" type="xs:string"/>
    <xs:element name="city" type="xs:string"/>
  </xs:sequence>
</xs:complexType>
对应的xml标签
<home>
    <province>河北</province>
    <city>邯郸</province>
</home>

先不介绍更多Schema内容

看下xml中的Schema引用

在eclipse中创建Dynamic Web Project工程,数目项目名称后,选择Dynamic web moudle version为2.5的时候,项目会自动生成一个xml文件,它的路径为:项目/WebContent/WEB-INF/web.xml ,内容如下

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	 xmlns="http://java.sun.com/xml/ns/javaee"
	 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" 
	 version="2.5">
  <display-name>xml5</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
</web-app>

查看下web_2_5.xsd ,按住ctrl,指向http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd,等鼠标变成小手,选择 open链接with XML Schema Editer,等页面跳转后点左下角的source即可查看源码,贴出来部分源码

<?xml version="1.0" encoding="UTF-8"?>

<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"
	    targetNamespace="http://java.sun.com/xml/ns/javaee"
	    xmlns:javaee="http://java.sun.com/xml/ns/javaee"
	    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
	    elementFormDefault="qualified"
	    attributeFormDefault="unqualified"
	    version="2.5">
  <xsd:annotation>
    <xsd:documentation>
      @(#)web-app_2_5.xsds	1.62 05/08/06
    </xsd:documentation>
  </xsd:annotation>

xml schema 了解即可,如果要学着写,文末有参考链接,加油.

    参考   w3cschool

猜你喜欢

转载自blog.csdn.net/sinat_41132860/article/details/85008957
今日推荐