1。XML的格式正规性
2。XML的格式的有效性
DTD 文档类型定义
Schema
DTD 不足:
<1> 数据类型有限
<2> 不是XML文件 ,扩展性不好
Schema验证 弥补了DTD的不足
<1> 数据类型 丰富 -〉 sqlserver中的数据类型相当
<2> 是XML文件
schema 由微软公司提出的
转交给w3c
schema ---> W3C标准的schema规范
命名空间 ---- java中的package
一组作用相同的标记 把功能相近的类封装在一起
同名的标记区分开 可以区分同名的类
naming space java.util.Date
java.sql.Date
*********************************
<!--HTML-->标记
<table>
<tr><td>苹果</td></tr>
<tr><td>香蕉</td></tr>
</table>
<!--桌子-->
<table>
<name>方桌</name>
<height>12</height>
</table>
命名空间 namespace ns
Date java.util.Date
java.sql.Date
--带命名空间
url 通常是唯一性 保证唯一性
xmlns = xml naming space
<h:table xmlns:h="http://www.w3c.com/html4.0">
<tr><td>苹果</td></tr>
<tr><td>香蕉</td></tr>
</h:table>
xmlns xml的命名空间 h代名词 h代表这个网址"http://www.w3c.com/html4.0"
uri 资源定位符号 唯一性
url 资源地址 ---- 网络http地址
<n:table xmlns:n="http://www.mycom.com/furniture"
xmlns:h="http://www.w3c.com/html4.0">
<name>方桌</name>
<height h:unit="英寸">12</height>
</n:table>
子元素的命名空间默认和父元素的命名空间是一样的
保证了XML的扩展性
Html 标记不是十分严格的
<br>
<BR>
<bR>
XML + HTML == XHTML
html4.0 -- 在XHTML中的标记必须小写
标记必须成对
<p></p>
<p/>
<br/>
目的是来区分标记,让同名的标记可以使用
类似于java的包package
import java.sql.*;
import java.util.*;
java.util.Date
java.sql.Date
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<1> Schema的命名空间是"http://www.w3.org/2001/XMLSchema"
简写为xs
<2> elementFormDefault="qualified" 元素的标记在书写的
时候的要写命名空间的标记
<xs:attribute/>
<3> attributeFormDefault="unqualified" 属性的标记不用书写
命名空间
<xs:attribute name=""/>
<4> 根元素是schema
schema 验证XML的
和DTD对比
DTD中描述 ----> schema的描述
Schema中的数据类型:
<1> 基本的
int
decimal
date
datetime
string
<2> 扩展的
ID
NMTOKEN
positiveInteger
negativeInteger
自定义类型 :
xs:complexType --> 元素由子元素组成或含有属性
xs:simpleType --> 基本数据类型+限制条件
+ minOccurs="1" maxOccurs="unbounded"
? minOccurs="0" maxOccurs="1"
* minOccurs="0" maxOccurs="unbounded"
不写 有且仅有一个
SChema技术 ---- 验证XML文件的有效性
优点:
<1>是一个XML文件 ,扩展性好
<2>数据类型丰富,还可以自定义数据类型
Schema文件的结构 ???
Schema文件由哪些内容组成???
<1>Schema文件的结构
根元素<schema></schema>
带有命名空间xs
xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" 元素前要使用xs命名空间
attributeFormDefault="unqualified" 属性名字不用使用xs命名空间
完整的
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
attributeFormDefault="unqualified">
</xs:schema>
DTD中 元素如何定义 ?? <!ELEMENT
属性如何定义 <!ATTLIST
有哪些数据类型 元素(#PCDATA) 属性 CDATA ID IDREF
SChema中的 数据类型:(属性和元素)
a) 基本数据类型
string 字符
boolean 布尔值
decimal 小数
date 日期
datetime 日期时间
等等
b) 扩展数据类型
ID 唯一值
IDREF ID唯一值的引用
positiveinteger 正整数
negativeinteger 负整数
c)自定义数据类型
元素 + 属性 = 新元素 自定义数据类型(复杂类型complexType)
(子元素组成 或含有属性 )
基本数据类型 + 限制条件 = 自定义数据类型(简单类型simpleType)
语法:
<xs:simpleType name="">
<xs:restriction base="">
</xs:restriction>
</xs:simpleType>
图书的书号
例子1: ISBN 7-113-05064-6
Schema 内自定义数据类型来表示书号 (简单类型)
<xs:simpleType name="ISBN">
<xs:restriction base="xs:string">
<xs:pattern value="ISBN /d{1}-/d{3}-/d{5}-/d{1}"/>
</xs:restriction>
</xs:simpleType>
<xs:pattern 模式 正则表达式
字符串的格式
/d 等于 1位数字 [0-9]
/d{2} 2位数字 00 -- 99
9/d 90 --- 99
/d{1,2} 0--- 99
设定字符串的格式
元字符
样式 正则表达式
"ba" "bba" "bbba" "bbbba" b+a
"a" "ba" b?a
"ba" "bba" "bbba" "bbbba" "a" b*a
chapter0 chapter1 chapter2 chapter/d
chapter3 --- chapter9
chapter0 ---- chapter99 chapter/d{1,2}
a1 b1 c1 ----- z1 A1---Z1 [a-zA-Z]1
88-0987 89-09090 /d{2}-/d{4,5}
/d 相当于 [0-9] /s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ /f/n/r/t/v]。
/D [^0-9]
表示2位数 但是2个数字是一样的 11, 22, 33
(/d)/1
[5335,6556] 第一个和第4个是一样的
第2个和第3个数字是一样
(/d)(/d)/2/1
子匹配 (/d)/1 [00,11,22,33,44,55]
(/d)(/d)/2/1
E-Mail格式的表示
huangchangyu@sina.com.cn
var pattern =
/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(/.[a-zA-Z0-9_-])+/
[^0-9] 不是0-9的字符
^[0-9] 以字符0-9开头
JavaScript中使用
<例子1>学生考试的分数
0< 分数 <=100
<xs:simpleType name="scoretype">
<xs:restriction base="xs:decimal">
<xs:minExclusive value="0"/>
<xs:maxInclusive value="100"/>
</xs:restriction>
</xs:simpleType>
空元素
<xs:element name="aa"/>
any
<xs:complexType name="" mixed=true>
<xs:minInclusive value="10"/> <!-- >= 10 and <=100-->
如何定义元素?
<1>单个元素************
<xs:element name="书号" type="ISBN"/>
<xs:simpleType name="ISBN">
<xs:restriction base="xs:string">
<xs:pattern value="ISBN /d{1}-/d{3}-/d{5}-/d{1}"/>
</xs:restriction>
</xs:simpleType>
写XML片断
<书号>ISBN 7-113-05064-6</书号>
<2>1个元素由多个元素(子元素)组成的*********
<xs:complexType/> 复杂类型
例子 表示DTD中的
<!ELEMENT 图书 (书名,作者+,出版商,出版日期,价格)>
Schema中
<xs:element name="图书" type="booklist"/>
<xs:complexType name="booklist">
<xs:sequence>
<xs:element name="书名" type="xs:string" />
<xs:element name="作者" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
<xs:element name="出版商" type="xs:string"/>
<xs:element name="出版日期" type="xs:date"/>
<xs:element name="价格" type="xs:decimal"/>
</xs:sequence>
</xs:complexType>
+ <xs:element ... minOccurs="1" maxOccurs="unbounded"/>
? <xs:element ... minOccurs="0" maxOccurs="1"/>
* <xs:element ... minOccurs="0" maxOccurs="unbounded"/>
元素出现2-5次
<xs:element ... minOccurs="2" maxOccurs="5"/>
<xs:sequence/> 表示元素出现的顺序
<xs:all/> 表示元素出现的顺序是任意的
<xs:choice/> 表示在多个元素中选择一个
<xs:choice minOccurs="1" maxOccurs="2"/> 多个元素选1-2个
<例子> DTD <!ELEMENT 图书目录 (图书+)>
<xs:element name="图书目录" type="bookcatalog"/>
<xs:complexType name="bookcatalog">
<xs:sequence>
<xs:element ref="图书" minOccurs="1" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
Schema定义属性**********************
<xs:element>
<xs:attribute name="" type="" use=""/>
</xs:element>
use "required" 必须的
use "optional" 可有可无的
<例子>
<!ATTLIST 图书
销售 (是 | 否) #REQUIRED
>
Schema表示如下
<xs:attribute name="销售" type="salesattr" use="required"/>
<xs:simpleType name="salesattr">
<xs:restriction base="xs:string">
<xs:enumeration value="是"/>
<xs:enumeration value="否"/>
</xs:restriction>
</xs:simpleType>
<xs:enumeration/> 枚举类型(多个中选一个)
<例子> 只有属性的元素
<emp empno="1234" sex="M"/>
<xs:element name="emp" type="emptype"/>
<xs:complexType name="emptype">
<xs:attribute name="empno" type="xs:integer"/>
<xs:attribute name="sex" type="xs:string"/>
</xs:complexType>
复杂类型complexType 是用于定义子元素或属性的
简单类型simpleType 定义元素 = 基本类型 + 限制条
传智播客XMl比较四部曲--(二)个人总结
最新推荐文章于 2024-07-16 16:02:21 发布