xml数据格式和Annotation
1:xml数据格式
1:xml数据格式介绍
1:可扩展标志语言(Extensible markUp language)标签可以自己定义。
2:用来存储数据和传输,
2:xml数据格式作用:
数据传输和存储数据,xml == json一样的作用
代替:json数据简单没有大量的冗余标签,数据更加清晰,而且符合js 的对象创建格式
xml数据有大量的冗余,余姚很多的无用标签符号
xml解析麻烦,也占用大量的内存,早期的手机中不敢实用xml,会导致oom!anr!!!
json可以在前端转化成前端对象,方便解析
json是一种数据格式,字符串有规则,方便解析
3:xml语法
1:一个XML文件只能有一个根标签,
2:xml标签有一个关闭标签,,,又开始也有结束
3:xml文件大小写敏感,
4:xml文件需要正确嵌套
5:属性在开始标签里面,且一件是对的形式存在
6:支持特殊编译符号
&lg <
> >
&emp &
...
4:xml在框架中的作用
xml作为框架配置文件存在, 利用的是xml文件的存储功能和自我描述功能
想想,XML文件的标签可以随意定义,因此xml文件可以随意作为框架的配置文件吗
xml文件不可以随意定义标签,因为框架不可以识别,
因此写框架的人应该为xml文件添加约束,使其能够满足框架的识别功能
5:xml文件格式的约束
要求,读的懂约束文件
会写约束文件
如何读
如何写
如何引用
HTML = xml+约束
约束:
1:约束标签的命名
2:约束标签的内容
3:约束标签出现的位置顺序
4:约束标签出现的次数
5:月湖标签属性内容
1:DTD约束:
文档类型定义:可以定义XML文件的构建模块,他可以申明在xml文档里,也可以作为一个外部
.dtd文档
2:如何xml文件使用dtd约束
内容:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 元素根标签 [约束语法
...
]>
<根标签>
<子标签></子标签>
...
</根标签>
3:外部编写dtd映入到xml文件中
步骤一:外部创建一个.dtd文件
里面直接编写约束内容
步骤二:将外部的dtd文件引入到dtd文件
<!DOCTYPE 根标签 SYSTEM "文件名.dtd|网络地址">
4:约束标签
<!ELEMENT 元素名 (内容)>
文本|子标签
子标签:元素名就行(标签1,标签2,...)没有添加量词就是默认的可以出现一次
而且元素顺序不可变
文本内容:#PCDATA
5:量词:
+:一次-n次
*:0-n
?:0|1
默认只能一次
(a,b, (a|b))
6:属性约束
<!ATTLIST element-name attribute-name attrubute-type attribute-value>
book i 字符串 必须添加
attribute-type:
CDATA 为字符换数据
(el1|el2|el3) 枚举 (男|女)
ID 值唯一的id
attribute-value:
值 属性默认值(男|女) "男"
#REQUIRED 属性必须的
#IMPLIED 属性不是必须的
#FLIXED value 属性是固定的
7:案例:
1.编写一个外部的dtd文件!
2.要求xml的根标签是students
3.根标签至少包含一个student标签
4.student标签需要包含stuid属性,而且属性值是唯一的!
5.student标签中 必须出现 name age sex 三个标签 只能出现一次 而且顺序固定!
6.除了以上三个标签,还有可能出现1次 info address 标签
7.sex标签有一个 value属性,值默认是男 只能出现男和女
8.info必须添加一个字符串类型的i属性即可!
stu.dtd文件 dtd方式
<!ELEMENT students (student+)>
<!ELEMENT student (name,age,sex,info?,address?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT info (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ATTLIST sex value (男|女) "男">
<!ATTLIST address (#PCDATA)>
<!ATTLIST info i CDATA #REQUIRED>
stu.xml文件 xml方式
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students[
<!ELEMENT students (student+)>
<!ELEMENT student (name,age,sex,info?,address?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT sex (#PCDATA)>
<!ELEMENT info (#PCDATA)>
<!ELEMENT address (#PCDATA)>
<!ATTLIST sex value (男|女) "男">
<!ATTLIST info i CDATA #REQUIRED>
]>
<students>
<student>
<name>回电话</name>
<age>23</age>
<sex>男</sex>
</student>
</students>
aaa.xml 引用
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE students SYSTEM "stu.dtd"> //此处的students为引入的文件的根元素
<students>
<student>
<sex></sex>
<age></age>
<name></name>
</student>
</students>
8:dtd能 能约束具体的属性内容吗?
因此诞生了约束更严格的语法更复杂的schema 重点,新版本框架都是schema约束
1:schema的优点
1:dtd能干的都能干
2:dtd不能干的也能干
2:缺点
1:语法较为复杂
3:xml的命名空间
命名空间就是给一个元素添加前缀,标签名相同但是命名空间不同依然可以区分元素
<字符串:元素名></字符串:元素名>
例如:<http://www.baidu.com:student></http://www.baidu.com:student>
一个xml文件可以有多个命名空间
例如:
<qf:students xmlnsq:qq="www.qq.com"
xmlns:bd="http://www.baidu.com"
xmlns:ali="http://www.alibaba.com"
/>
9:命名空间的作用
1:命名空间相当于一个前缀,用来区分形同名字的标签
2:schema作用的范围就是指定命名空间里的元素和元素属性
10:schema的具体实现
1:schema本身就是XML文件
2:语法
schema标签就是每个xml schema的根元素
申明一个标签
<schema 命名空间:element name=“标签名” type = "标签属性">
11:type 属性的写法
1:基本类型
xln:string
ln:int
2:简单类型:
xls:string长度必须大于3 小于5
xls:string男和女
xls:int
enumeration 定义可接受值的一个列表
fractionDigits 定义所允许的最大的小数位数。必须大于等于0。
length 定义所允许的字符或者列表项目的精确数目。必须大于或等于0。
maxExclusive 定义数值的上限。所允许的值必须小于此值。
maxInclusive 定义数值的上限。所允许的值必须小于或等于此值。
maxLength 定义所允许的字符或者列表项目的最大数目。必须大于或等于0。
minExclusive 定义数值的下限。所允许的值必需大于此值。
minInclusive 定义数值的下限。所允许的值必需大于或等于此值。
minLength 定义所允许的字符或者列表项目的最小数目。必须大于或等于0。
pattern 定义可接受的字符的精确序列。
totalDigits 定义所允许的阿拉伯数字的精确位数。必须大于0。
whiteSpace 定义空白字符(换行、回车、空格以及制表符)的处理方式。
<xls:simpleType name"自定义">
<xls:rstriction base="引入自定义类型">
规则自定义
</xls:rstriction>
</xls:simpleType>
3:复杂类型
有属性或者子元素的标签 type应该是复杂类型
<xls:complexType name="noteType">
<!-- 声明子元素和子属性 -->
<xls:sequence>
<!-- 队列里声明的元素有先后顺序 -->
<!-- 字符串 长度大于=2 小于=4
默认有且只有一次!
-->
<xls:element name="from" type="fromType"
minOccurs="0" maxOccurs="1"
/>
</xls:sequence>
<!--属性 -->
<xls:attribute name="i" type="itype" use="required"></xls:attribute>
</xls:complexType>
12:schema的引入
<?xml version="1.0"?>
<根标签
xmlns:h="自己在约束声明的命名空间"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"//规定
xsi:schemaLocation="自己在约束声明的命名空间 约束的文件名">
</根标签>
教师描述:
teachers
至少一个teacher
teacher必须包含一个id属性 id命名 必须是 t_3个数字
name标签 一个 字符串 2-4
age属性 18-30
sex性别 男和女
info 可以出现多次! 0-n 字符串不能少于20个字 不能大于200
address 标签
pro 辽宁省 河北省 河南省
city 葫芦岛市 绥中市 东戴河市
xian 长度不超过30就可以
teacher.xsd
<?xml version="1.0" encoding="UTF-8" ?>
<xls:schema
xmlns:xls="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.qianfeng.com"
targetNamespace="http://www.qianfeng.com"
elementFormDefault="qualified">
<!--元素-->
<xls:element name="teachers" type="teachersType" />
<xls:complexType name="teachersType">
<xls:sequence>
<xls:element name="teacher" type="teacherType" minOccurs="1" maxOccurs="unbounded"/>
</xls:sequence>
</xls:complexType>
<!--类型-->
<xls:complexType name="teacherType">
<xls:sequence>
<xls:element name="name" type="nameType"></xls:element>
<xls:element name="sex" type="sexType"></xls:element>
<xls:element name="age" type="ageType"></xls:element>
<xls:element name="info" type="infoType" minOccurs="0" maxOccurs="unbounded" />
<xls:element name="address" type="addressType"></xls:element>
</xls:sequence>
<xls:attribute name="id" type="idType" use="required"></xls:attribute>
</xls:complexType>
<!--类型-->
<xls:simpleType name="nameType">
<xls:restriction base="xls:string">
<xls:minLength value="2"></xls:minLength>
<xls:maxLength value="4"></xls:maxLength>
</xls:restriction>
</xls:simpleType>
<xls:simpleType name="sexType">
<xls:restriction base="xls:string">
<xls:enumeration value="男" />
<xls:enumeration value="女" />
</xls:restriction>
</xls:simpleType>
<xls:simpleType name="ageType">
<xls:restriction base="xls:int">
<xls:minInclusive value="18" />
<xls:maxInclusive value="30" />
</xls:restriction>
</xls:simpleType>
<xls:simpleType name="infoType">
<xls:restriction base="xls:string">
<xls:minLength value="20" />
<xls:maxLength value="200" />
</xls:restriction>
</xls:simpleType>
<xls:complexType name="addressType">
<xls:sequence>
<xls:element name="pro" type="xls:string"/>
<xls:element name="city" type="xls:string" />
</xls:sequence>
</xls:complexType>
<xls:simpleType name="idType">
<xls:restriction base="xls:string">
<xls:pattern value="t_\d{3}"/>
</xls:restriction>
</xls:simpleType>
</xls:schema>
teacher.xml
<?xml version="1.0" encoding="UTF-8" ?>
<teachers xmlns="http://www.qianfeng.com"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.qianfeng.com teacher.xsd"
>
<teacher id="t_001">
<name>hfh</name>
<sex>男</sex>
<age>23</age>
<address>
<pro>宁夏</pro>
<city>银川</city>
</address>
</teacher>
<teacher id="t_002">
<name>hfh</name>
<sex>男</sex>
<age>23</age>
<address>
<pro>c</pro>
<city>vd</city>
</address>
</teacher>
</teachers>
2:Annotation