[文档整理系列] Java SE之XML<一>XML文档规约
1.xml文档引用:
1.外部私有DTD:
<!DOCTYPE rootNodeName SYSTEM "uri.dtd">
(在xml文件中声明,带关键字SYSTEM)
2.外部公共文件时:
<!DOCTYPE rootNode名称 PUBLIC "DTD名称" "uri.dtd">
(在xml文件中声明,带关键字PUBLIC)
3.内部引用:
<!DOCTYPE rootNodeName [declarationsContent] >
(在xml文件中声明)
======================
2.语法分类:【元素定义,属性定义,实体定义】
元素定义
1.格式:<!ELEMENT 元素名称 元素类型>
2.元素类型可以是元素内容或类型:
1.如果是元素内容:【需要用括号括起来】
Eg:<!ELEMENT 书架 (书名,作者,售价)>
<!ELEMENT 书架 (#PCDATA)>
2.如果是元素类型:【直接书写】
类型有如下:
EMPTY: 用于定义空类型,如<br/><hr/>
ANY: 表示元素内容可以为任意值
Eg:<!ELEMENT 联系人列表 ANY>
3.元素内容可以使用如下方式,描述内容的组成关系:
1.用逗号隔开,表示内容的出现顺序必须与声明时一致
Eg:<!ELEMENT myBookElement (title,name,email)>
2.用|分隔,表示任选其一,即最多只能出现一个
Eg:<!ELEMENT myBookElement (title|name|email)>
4.在元素中也可以使用+,*,?等符号表示元素出现的次数
1.+ :一次or多次 (书+)
2.?:0次or1次(书?)
3.* :0次or多次 (书*)
4.(无符号):必须出现一次(书)
5.还可使用圆括号()批量设置
Eg:<!ELEMENT myBookElement ((title*,author?,email)*|comment)>
属性定义
1.格式:
<!ATTLIST 元素名
属性名1 属性值类型 设置说明
属性名2 属性值类型 设置说明
属性名3 属性值类型 设置说明
...
>
2.Eg:
DTD属性声明:
<!ATTLIST 商品
类别 CDATA #REQUIRED
颜色 CDATA #IMPLIED
>
对应XML文件:
<商品 类别="服装" 颜色="黄色">...</商品>
3.属性--设置说明
1.#REQUIRED :必须设置该属性
2.#IMPLIED: 可以设置也可以不设置
3.#FIXED: 说明该属性的取值固定为一个值,在XML文件中不能为该属性设置其他值。
但需要为该属性提供这个值。
该属性值,不可更改,在使用该标签时,可以使用本属性,也可以不适用本属性,都将不改变属性值。
4.直接使用默认值。在XML中可以设置该值,也可以不设置该属性值。
Eg:
<!ATTLIST 页面作者
姓名 CDATA #IMPLIED
年龄 CDATA #IMPLIED
联系信息CDATA #REQUIRED
网站职务CDATA #FIXED "页面作者"
个人爱好CDATA "上网"
>
4.常用属性值类型:
CDATA 表示属性值为普通文本字符串
ENUMERATED
ID 1.属性值唯一
2.属性的值只能由字母、下划线开头,且不能出现空白字符
ENTITY(实体)
实体定义
1.定义:实体用于为一段内容创建一个别名,以后再XML文档中就可以使用别名来引用这段内容了。
2.在DTD定义中,一条<!ENTITY...>语句用于定义一个实体
3.实体类型:引用实体和参数实体
引用实体:
1.引用实体主要在XML文档中被应用
2.语法格式:<!ENTITY 实体名称 "实体内容" >: 直接转变成实体内容
3.引用方式: &实体名称;
4.Eg:<!ENTITY copyright "我是一名程序员">
...
©right;
参数实体:
1.参数实体被DTD实体自身引用
2.语法格式:
<!ENTITY % 实体名称 "实体内容" >
3.引用方式: %实体名称;
4.Eg:
<!ENTITY Tag_Name 姓名 |EMAIL |电话|地址>
<!ENTITY 个人信息 (%Tag_Name; |生日)>
<!ENTITY 客户信息 (%Tag_Name; |公司名)>
Eg:
<!ENTITY % common.attributes "id ID #IMPLIED account CDATA #REQUIRED">
标签名 属性名1 属性类型 设置说明 属性名2 属性类型 设置说明
...
<!ATTLIST purchaseOrder %common.attributes;>
<!ATTLIST item %common.attributes;>
==========================
示例1:电视节目单
<!DOCTYPE TVSCHEDULE [
<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)>
<!ELEMENT DESCRIPTION (#PCDATA)>
<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>
]>
--------------------
<TVSCHEDULE NAME="重庆卫视目录">
<CHANNEL CHAN="少儿频道">
<BANNER>
爸爸来了
</BANNER>
<DAY>
<DATE>
2017-02-07
</DATE>
<HOLIDAY>
重阳节
</HOLIDAY>
</DAY>
</CHANNEL>
<CHANNEL CHAN="婴儿频道">
<BANNER>
妈妈来了
</BANNER>
<DAY>
<DATE>
2014-05-25
</DATE>
<PROGRAMSLOT VTR="我也不知道" >
<TIME>23:02</TIME>
<TITLE RATING="23%" LANGUAGE="Chinese" >躲藏的猫咪</TITLE>
<DESCRIPTION>讲述一只可爱的猫猫的故事</DESCRIPTION>
</PROGRAMSLOT>
</DAY>
</CHANNEL>
</TVSCHEDULE>