xml简单知识点

来源:互联网 发布:论文网站知乎 编辑:程序博客网 时间:2024/05/21 17:02
XML(Extensible Markup Language,可扩展的标记语言)
作用:存储和传输数据
什么是XML?
XML是一种元语言,
是一种与特定的业务逻辑相关的,语义的,结构化的标记语言的语法语言。


HTML语法定义是用xml标记书写规范和定义---W3C组织写的 
自定义XML,声明解析都能实现自定义


XML优点?
1.简化了数据的传输与存储
2.能够更好的实现跨平台(跟平台无关)


XML文档
文档后缀名.xml
1.XML文档第一行必须写声明
2.XML文档有且仅有一对根标签 


格式良好的XML(WELL-Formed XML)
格式是否良好由浏览器校验


有意义的XML(格式良好的XML+语法校验)


格式良好规范:
1.标签要成对出现,正确结束
2.XML文档第一行必须写声明
3.XML文档有且仅有一对根标签
4.属性以键值对书写,属性值必须用引号引起来
5.标签要正确嵌套
6.标签注释与标签要正确嵌套
7.标签名称大小写敏感
8.标签名称可以包含数字,字母,下划线
9.标签名称不能以数字或者下划线开始
10.标签名称不能以XML,xml,Xml开始


XML语法验证DTD、Schema

DTD(Document Type Definition):用来声明定义XML的语法
格式良好+DTD/Schema=有意义的XML


在XML中由于可以实现用户自定义,
那么在共享数据的时候必须加上语法规范,来声明规范XML格式


引入DTD
1.书写在XML文档的内部,叫内部DTD
<!DOCTYPE 根标签 [ DTD规范]>
例如:
<!DOCTYPE book[
<!ELEMENT book  ANY>
]>
2.外部DTD,DTD的声明独立为一个文件,文件的后缀名.dtd
在XML文件中引入外部DTD
<!DOCTYPE 根标签 SYSTEM "外部dtd的路径">

3.引入互联网上的DTD
<!DOCTYPE 根标签 PUBLIC "互联网中DTD的访问路径">

DTD语法
声明一个元素(标签,节点)
<!ELEMENT 元素名称  元素类型>
元素类型:ANY  表示任何解析数据
 PCDATA(Parsed Charactor Data) 表示所有字符数据(&<>)
 EMPTY  空标签,标签体不能含有任何内容
纯元素(标签体中只包含子标签)
1.含有一个子元素的纯元素 
<!ELEMENT 元素名称 (子元素名称)>
2.含有多个子元素的纯元素
  2.1非此即彼(多个子元素不能同时出现)
  <!ELEMENT book (title|timu)>  |表示只允许出现其一
  2.1子元素存在先后顺序
  <!ELEMENT book (title,author)> ,表示子元素必须出现并且存在先后顺序
  2.3子元素重复出现
  <!ELEMENT book (author*)> 
  *表示零次多者多次
  +一次或者多次
  ?表示零次多车一次
  2.4采用括号组合
  <!ELEMENT book (title,(timu|author)*)> 
  title必须出现,timu,author可出现零次或者多次
混合元素
既含有文本内容同时还有子元素
<!ELEMENT book (#PCDATA|title|author)*>


属性的声明定义
<!ATTLIST 元素名称 属性名称 属性数据类型 属性特点>
属性特点
#REQUIRED 属性必须出现
#IMPLIED  属性可出现可不出现


属性数据类型
CDATA(Charactor Data) 表示所有字符 不允许&,<>
NMTOKEN(name token) 所有字符不能包含空格(字符串中间不能包含空格)
NMTOKENS   能包含空格
ID     唯一性,表示数据不能重复,
      不能是纯数字,不能以数字开始
IDREF  属性的取值引用其他ID类型属性的值
IDREFS 属性的取值引用其他ID类型属性的值,
      可以引用多个ID类型的值,相互用空格隔开

建立枚举类型的属性
<!ATTLIST author sex (男|女)  #REQUIRED>
固定取值的属性
<!ATTLIST author guoji CDATA #FIXED '中国'>

实体
实体:用一些字符来表示一组字符串或者是特殊格式的字符
预定义的实体
&gt; &lt; &quot; &nbsp;

自定义实体
<!ENTITY 实体名称 实体的内容>
实体使用 &实体名称;
<!ENTITY en 'hello world'>

参数实体
只能定义在外部DTD
<!ENTITY % can 'id ID #IMPLIED'>
<!ATTLIST title %can;>



 Schema(一种XML文档的约束和定义)
DTD的不足?
1.DTD的语法声明与XML中的元素格式不匹配
2.DTD数据类型有限,与数据库产品的数据类型不匹配
3.DTD不支持命名空间,不便于DTD文件的管理
 
 Schema文档后缀名.xsd
  声明根标签
  <?xml version="1.0" encoding="UTF-8"?>
声明根标签schema,xs表示命名空间的别名
xmlns进一步声明解释命名空间
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
表示当前schema文档的元素是否纳入到当前命名空间的管理
qualified 纳入管理
unqualified  表示不纳入管理


elementFormDefault ="qualified"
表示当前schema文档的元素中的属性
是否纳入到当前命名空间的管理
attributeFormDefault = "unqualified"
定义目标xml文档引入当前schema所要引用的命名空间
targetNamespace="hello@yahoo.com.cn"
>
声明一个元素
<xs:element name="book"  type="xs:int"></xs:element>
</xs:schema>
 目标XML文件
<?xml version="1.0" encoding="UTF-8"?>
根标签的声明解释,根标签引用自目标schema文档
<my:book xmlns:my="hello@yahoo.com.cn" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
书写目标schema的引用路径:命名空间 schema文件名
xsi:schemaLocation= "hello@yahoo.com.cn testSchema.xsd"
>111</my:book>

元素的声明定义
<xs:element name="" type="" maxOccurs="" minOccurs=""/>
name属性:表示元素的名称
type属性:元素的元素体的数据类型
type的取值:
基本数据类型   简单数据类型   复杂数据类型


1.基本数据类型
xs:int 整型  xs:string 字符串  xs:double 浮点类型
xs:date 日期类型  xs:time  时间类型
xs:decimal 任意精度类型  xs:boolean 布尔类型


2.简单类型SimpleType
2.1内嵌式简单类型
<xs:element name="book" >
声明简单类型
<xs:simpleType>
对类型中的值进行约束,
base属性:设置基本数据类型
<xs:restriction base="xs:int">
<!--设置整数的最大值,不包含边界-->
<xs:maxExclusive value="100"></xs:maxExclusive>
</xs:restriction>
</xs:simpleType>
</xs:element>
注意:内嵌式简单类型,element元素中不能设置 type属性


2.2外部引用简单类型
<xs:element name="book" type="testSimple"></xs:element>
<!--声明外部简单类型-->
<xs:simpleType name="testSimple">
<xs:restriction base="xs:int">
<xs:minExclusive value="20"></xs:minExclusive>
</xs:restriction>
</xs:simpleType>
注意:在声明外部类型时,文档目录不能含有中文
     在schema文档中
     必须声明当前标签/数据类型等的命名空间
     xmlns="必须与targetNamespace属性值一致"


restriction标签:约束值的内容
设置最小值,不包含边界
<xs:minExclusive value="20"/>
设置整数的最大值,不包含边界
<xs:maxExclusive value="100"></xs:maxExclusive>
设置最小值,包含边界
<xs:minInclusive value=""></xs:minInclusive>
设置整数的最大值,包含边界
<xs:maxInclusive value="12"></xs:maxInclusive>
整数的最大位数
<xs:totalDigits value="3"></xs:totalDigits>
设置字符串的长度
<xs:length value="4"></xs:length>
设置字符串的最大长度
<xs:maxLength value="4"></xs:maxLength>
设置字符串的最小长度
<xs:minLength value=""></xs:minLength>
设置有限个具体取值
<xs:enumeration value="world"></xs:enumeration>
设置字符串的正则
<xs:pattern value=""></xs:pattern>
设置空白字符的处理方式
<xs:whiteSpace value=""></xs:whiteSpace>
设置小数的最大位数
<xs:fractionDigits value="2"></xs:fractionDigits>
只能应用在xs:decimal类型下 



3.复杂类型
<xs:complexType name="comType">
定义子元素,声明子元素的出现顺序
<xs:sequence maxOccurs="unbounded" minOccurs="1"></xs:sequence>
maxOccurs:父标签中最大出现次数,默认1,unbounded 无限次数
minOccurs:父标签中最小出现次数,默认1
<xs:sequence >
<xs:element name="title" type="xs:string"></xs:element>
<xs:element name="author" type="xs:string"></xs:element>
</xs:sequence>
声明子元素,出现没有先后顺序
<xs:all>
<xs:element name="title" type="xs:string"></xs:element>
<xs:element name="author" type="xs:string"></xs:element>
       </xs:all>
声明子元素,子元素非此即彼
<xs:choice>
       <xs:element name="title" type="xs:string"></xs:element>
       <xs:element name="author" type="xs:string"></xs:element>
       </xs:choice>


约束复杂类型中的值
<xs:simpleContent>
<xs:restriction base="xs:int">
<xs:minExclusive value="12"></xs:minExclusive>
</xs:restriction>
</xs:simpleContent>
声明含有属性的元素
<xs:simpleContent>
base属性:声明元素体的约束
<xs:extension base="xs:int">
声明属性
<xs:attribute name="name" type="testSimple" use="optional" fixed="3"></xs:attribute>
name属性:属性名称
type属性:属性取值
use属性:属性特点
optional 可选择的
required 必须的
fixed属性:属性的固定取值
</xs:extension>
</xs:simpleContent>
设置复杂类型既含有子元素,同时含有属性
<xs:all>
<xs:element name="title" type="xs:string"></xs:element>
<xs:element name="author" type="xs:string"></xs:element>
</xs:all>
<xs:attribute name="name" type="xs:int" use="required"></xs:attribute>
</xs:complexType>
设置混合类型的复杂类型
<xs:complexType name="comType" mixed="true">
<xs:all>
<xs:element name="title" type="xs:string"></xs:element>
<xs:element name="author" type="xs:string"></xs:element>
</xs:all>
<xs:attribute name="name" type="xs:int" use="required"></xs:attribute>
</xs:complexType>
0 0