xml(Sex man language)快速入門教程
爲什麽使用xml呢
- 配置文件
- 充当小型数据库 (本地存储通信数据,qq信息,微信…)
- 不同应用通信 (msn之间通信)
为什么不同应用间通信用xml比较好呢,因为它具有良好的可读性,扩展性。 你当然可以传字节流,但是那就很难去阅读和使用了。
XML 文件约束 dtd
dtd (document type definition)
我们知道,如果单纯的一个xml文件,你可以写任意的标签都没有关系。但是我们需要自由,但也需要约束自由。
dtd就是来约束xml的,它约束了哪些标签可以在xml中使用,哪些属性可以在标签中可以被添加以及哪些属性是必须的,可选的,属性值的类型等等。
我们还可以使用schema技术做相同的事,甚至比dtd能做更加多的事情,但这里我们主要了解dtd即可。
使用Dtd有多种方式,有点像css javascrip的多种使用方式。 这里我们就学习一种使用方式,即通过网络引入dtd的方式。
struts-config 定义了xml的根标签,如html里的html表情是根标签,根标签最多只有一个
Dtd的编写
<!ELEMENT baliseB(baliseC, baliseD, baliseE)>
<!ELEMENT baliseC (#PCDATA)>
<!ELEMENT baliseD (#PCDATA)>
<!ELEMENT baliseE (#PCDATA)>
DTD元素1
<!ELEMENT NAME CONTENT>ELEMENT是关键字
NAME 是元素名称
CONTENT 元素类型(大写)
元素类型:EMPTY ----该元素不能包含子元素和文本,但可以有属性
ANY:------该元素可以包含任何在DTD中定义的元素内容
#PCDATA ------可以包含任何字符数据,但是不能在其中包含任何子元素(不能包含其他标签的意思)
baliseB+ 这个+号跟正则表达式一样,是最少有一个的意思,这里还可以用正则里其他的符号,如*之类的
#PCDATA 是指baliseC D E里面可以输入的数据类型,这里PCDATA表示可以任意字符
修饰符:
注意这个逗号修饰符,它是规定了标签要出现的顺序,你不可以先写苹果,在写西瓜香蕉
DTD元素2
属性定义语法
<!ATTLIST 元素名称 属性名称 类型 属性 特点 属性名称 类型 属性 特点 >元素名称,就是你定义的表情名称
类型:
-----------CDATA 任意字符
-----------ID ID类型 表明值必须是独一无二的
-----------IDREF/IDREFS 参考类型,必须参考其他id存在的元素
-----------Enumerated 枚举类型 属性存在时必须是枚举中的值
-----------ENTITY/ENTITIES
特点(即属性的存在性约束条件)
-----------#REQUIRED 必须制定属性值
-----------#IMPLIED 属性值可以指定或者不指定
-----------#FIXED value 必须制定属性值,且值必须要是指定的value
-----------default value 默认,即如果不指定属性值,将使用指定的默认值
例子:
学到这里,你以为你掌握了很多,但实际上给你一个dtd,你又看不懂什么东西,因为实际上dtd里面应用了很多实体类型
实体类型有两种
-
引用实体
<!ENTITY 实体名称 “实体内容”>
就是在dtd定义一个实体,然后就可以在xml中通过&实体名称 来使用,相当于定义了一个常量。
语法:引用方式(在xml中使用):
<!ENTITY copyright "I am a programmer">
&实体名称
举例:………
©right -
参数实体
<!ENTITY % 实体名称 “实体内容”>
. 语法:引用方式(在DTD中使用):
% 实体名称;
举例:
ps:
1.相比最初版本的html的缺陷(1.标记不能自定义2.html标签本身缺少语义3.没有实现真正的国际化),xml更完善,更符合现代场景的需求。
2.比起建立一个数据库来存储本地的一些聊天记录的可笑,使用xml存储,方便而且查询高效。
3.CDATE节可以让xml里包含一些特殊符号: <![CDATA]sdgjk#$%^&*<>sda]]>。所以可以用xml去传递小图片,即把图片读成byte[],然后放到CDATA节里传递,然后收到字节数组后,读取拼接