XML笔记二

来源:互联网 发布:led矩阵灯 编辑:程序博客网 时间:2024/06/03 17:16

DTD编写语法

DTD定义:

<!ELEMENT 书本 (名称,作者)>书本包括2个元素,名称,作者

<!ELEMENT 名称 (#PCDATA)>名称元素数据类型为可读字符串

<!ELEMENT 作者 (#PCDATA)>

参数实体:

声明:<!ENTITY % entityname SYSTEM "dtdfile.dtd">

注意:%两边都需要有空格

引用:%entityname;


也可以这样声明:<!ENTITY % entityname SYSTEM "value">

引用:%entityname;

这样就相当于别名


DTD局限性:

  1. 缺少命名空间
  2. 缺少数据分类
  3. 数据类型单调
  4. 内容模型描述受到限制
  5. DTD语法与XML存在差异



Schema XSD XML模式定义,用于解决DTD的缺点

Schema的优点:

  1. Schema基于XML语法规则
  2. 可以扩充数据类型
  3. 支持命名空间
  4. 支持属性组

例子:

<? ... xmlns:xs=...>在这里xs是显式的命名空间声明

<Schema xmlns=...>xmlns是默认的命名空间

1.定义命名空间

2.<schema>是根元素

属性 targetNameSpace命名空间

attributeFromDefault=qualified处于命名空间

unqualified不处于命名空间

elementFromDefault


3.<element>属性:

name="元素名"

type="元素类型"

ref="全局元素声明"

form="qualified"或者"unqualified"

minOccurs="最小出现次数"

maxOccurs="最大出现次数"

unbounded表示无限次


4.全局声明 作为<schema>的孩子

局部声明 不是<schema>的直接孩子


5.<attribute name="属性名" type="类型名" />


6.ref引用举例

<element ref="target:first"/>其中target是命名空间,first是全局声明


7.元素通配符:

<ANY minOccurs=... maxOccurs=... namespace=... processContents=...>

其中namespace可选:

  1. ##any 所有
  2. ##other 除targetNamespace外的元素
  3. ##targetNamespace
  4. ##local

其中processContents可选;

  1. skip 忽略所有通配符
  2. lax 处理,找不到忽略
  3. strict 默认,处理,找不到报错


8.自定义数据类型:

<xsd:SimpleType name="自定义">

<xsd:restriction base="基于内置数据类型">

<xsd:length value="8"> 只能容纳8个字符

<xsd:pattern value="\d{4}-\d{3}"/>正则表达式匹配

<xsd:SimpleType>


也可以加入枚举类型:

<xsd:enumeration value="枚举值1"/>

<xsd:enumeration value="枚举值2"/>


<xsd:maxInclusive value="400"/>最大值包含

<xsd:maxcExClusive value="400"/>最大值不包含

最小值同理


<union menmberType="float string"/>

类型只能是float或者string


<list>


9.xsd:复杂数据类型

<complexType name="名称">

<xsd:complexType>


<xsd:sequence>元素必须按照顺序出现

</xsd:sequence>


定义混合元素:

<xsd:complexType mixed="true">

</xsd:complexType>

混合元素可以包含文本与其他元素


10.属性应该定义在complexType末尾


元素default  不写不存在,空取默认

属性default 不写取默认


sequence:按照顺序出现

group:将一组元素组合到一起,相当于函数,可以重复使用

choice:选其一出现

all:元素出现次序随意,all必须放在最前面


attributeGroup属性组


include:在同一命名空间下

import:可以在不同的命名空间下








































0 0
原创粉丝点击