一、XML语法规则:
1.所有 XML 元素都须有关闭标签
2.XML 标签对大小写敏感
3.XML 必须正确地嵌套(顺序)
4.XML 文档必须有根元素
5.XML 的属性值须加引号实体引用(在 XML 中,只有字符 "<" 和 "&" 确实是非法的。大于号是合法的,但是用实体引用来代替它是一个好习惯)
< | < | 小于 |
> | > | 大于 |
& | & | 和号 |
' | ' | 单引号 |
" | " | 引号 |
6.XML 中的注释(<!--注释的格式-->)
7.在 XML 中,空格会被保留
8.XML 以 LF 存储换行
XML 元素必须遵循以下命名规则:
- 名称可以含字母、数字以及其他的字符
- 名称不能以数字或者标点符号开始
- 名称不能以字符 “xml”(或者 XML、Xml)开始
- 名称不能包含空格
可使用任何名称,没有保留的字词。
三、验证 XML 文档
合法的 XML 文档是“形式良好”的 XML 文档,同样遵守文档类型定义 (DTD) 的语法规则:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE note SYSTEM "Note.dtd">
<note>
<to>George</to>
<from>John</from>
<heading>Reminder</heading>
<body>Don't forget the meeting!</body>
</note>
文档类型定义(DTD)可定义合法的XML文档构建模块。它使用一系列合法的元素来定义文档的结构。
DTD 可被成行地声明于 XML 文档中,也可作为一个外部引用。
1.DTD的声明:<!DOCTYPE 根元素 [元素声明]>(内部)
<!DOCTYPE 根元素 SYSTEM "文件名">(外部)
2.DTD—XML 文档构建模块
所有的 XML 文档(以及 HTML 文档)均由以下简单的构建模块构成:
元素
属性
实体
PCDATA 会被解析器解析的文本。这些文本将被解析器检查实体以及标记
CDATA 不会被解析器解析的文本
3.DTD - 元素
<!ELEMENT 元素名称 类别>
<!ELEMENT 元素名称 (元素内容)>
带有一个或多个子元素的元素通过圆括号中的子元素名进行声明:
<!ELEMENT 元素名称 (子元素名称 1,子元素名称 2,.....)>
只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:
<!ELEMENT 元素名称 (#PCDATA)>
通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:
<!ELEMENT 元素名称 ANY>
声明只出现一次的元素
<!ELEMENT 元素名称 (子元素名称)>
声明最少出现一次的元素
<!ELEMENT 元素名称 (子元素名称+)>
声明出现零次或多次的元素
<!ELEMENT 元素名称 (子元素名称*)>
声明出现零次或一次的元素
<!ELEMENT 元素名称 (子元素名称?)>
声明“非.../既...”类型的内容
例子:
<!ELEMENT note (to,from,header,(message|body))>
上面的例子声明了:"note" 元素必须包含 "to" 元素、"from" 元素、"header" 元素,以及非 "message" 元素既 "body" 元素。
声明混合型的内容
例子:
<!ELEMENT note (#PCDATA|to|from|header|message)*>
上面的例子声明了:"note" 元素可包含出现零次或多次的 PCDATA、"to"、"from"、"header" 或者 "message"。
4.DTD-属性
属性声明使用下列语法:
<!ATTLIST 元素名称 属性名称 属性类型 默认值>
以下是属性类型的选项:
类型 | 描述 |
---|---|
CDATA | 值为字符数据 (character data) |
(en1|en2|..) | 此值是枚举列表中的一个值 |
ID | 值为唯一的 id |
IDREF | 值为另外一个元素的 id |
IDREFS | 值为其他 id 的列表 |
NMTOKEN | 值为合法的 XML 名称 |
NMTOKENS | 值为合法的 XML 名称的列表 |
ENTITY | 值是一个实体 |
ENTITIES | 值是一个实体列表 |
NOTATION | 此值是符号的名称 |
xml: | 值是一个预定义的 XML 值 |
默认值参数可使用下列值:
值 | 解释 |
---|---|
值 | 属性的默认值 |
#REQUIRED | 属性值是必需的 |
#IMPLIED | 属性不是必需的 |
#FIXED value | 属性值是固定的 |
一个内部实体声明
语法:
<!ENTITY 实体名称 "实体的值">
一个外部实体声明
语法:
<!ENTITY 实体名称 SYSTEM "URI/URL">