本文已参与「新人创作礼」活动,一起开启掘金创作之路。
"良构"XML
所谓"良构"XML, 即是结构良好的XML.
"良构"XML具备以下特点:
- 所有XML元素都成对出现, 都必须有开始标签和结束标签.
- XML元素名称大小写敏感
- XML必须正确的嵌套
- 同级标签以相同的缩进进行对齐
- 元素名称可以包含字母, 数字或其他的字符
- 元素名称不能以数字或者标点符号开始
- 元素名称中不能含空格
XML元素名称中不能有冒号, 除非它使用了命名空间.
XML命名空间
Namespace, 即命名空间, 用于减少XML元素名称的冲突, 有助于标准化元素和属性, 为它们加上唯一标识.
XML命名空间的语法为:
xmlns:[prefix]="[namespace URL]"
- prefix是命名空间的别名
- xmlns是保留属性
属性 vs 命名空间
属性也属于某个命名空间, 除非属性带有前缀, 否则的话, 它就属于所在元素所处的命名空间了.
命名空间用例可以如下:
<f:table xmlns:f="http://www.w3school.com.cn/furniture">
<f:name>African CoffeeTable</f:name>
<f:width>80</f:width>
<f:length>120</f:length>
</f:table>
元素<table>不仅仅有前缀信息, 还添加了一个xmlns属性, 其值是一个URI, 目的是为了唯一标识一个命名空间, 每一个URI都是不同的, 但基本上没有什么实际意义, 一般能连到一个网页, 这样取值就为前缀赋予了一个与某个命名空间相关联的限定名称.
实体, 文档类型声明和PCDATA
实体, 即ENTITY, 作用是避免重复输入, 相当于宏或者变量.
XML内置了5种实体, 也即之前讨论过的5种特殊字符, 即<, >, &, "和'.
此外, 我们还可以自定义实体, 格式为:
<!DOCTYPE 根元素[
<!-- 实体声明 -->
<!ENTITY name "conent">
]>
使用已经声明过的实体: &name;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sxt[
<!-- 实体声明 -->
<!ENTITY name "Bradly Cooper">
<!ENTITY gender "Unknown">
]>
<sxt>
<teacher>
<name>Bradly Cooper</name>
<gender>Unknown</gender>
</teacher>
<!-- 引用实体的方法 -->
<teacher>
<name>&name;</name>
<gender>&gen;</gender>
</teacher>
</sxt>
文档类型声明, DocType Declaration, 紧跟 XML 声明之后, 包含所有实体声明. 格式如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE 根元素标记名[
<!-- 实体声明 -->
]>
PCDATA, Parsed Character Data, 已解析字符数据, 可把字符数据想象为XML元素的开始标签与结束标签之间的文本. PCDATA是会被解析器解析的文本. 这些文本将被解析器检查实体以及标记. 文本中的标签会被当作标记来处理, 而实体会被展开. 不过, 被解析的字符数据不应当包含任何&, <或者>字符. 需要使用&, <以及>的内置实体来分别替换它们.