最近接触到了TVML,平时也会使用过XML。在这里也整理XML简易语法规则以便回顾查阅。文章主要介绍 XML 文档的基础结构,以及创建构造良好的 XML 需要遵循的规则,包括命名约定、正确的标记嵌套、属性规则、声明和实体。
XML 与 HTML
标记语言从早期的私有公司和政府制定形式逐渐演变成标准通用标记语言(Standard Generalized Markup Language,SGML)、超文本标记语言(Hypertext Markup Language,HTML),并且最终演变成 XML。SGML 比较复杂,HTML(实际上仅是一组元素集)在识别信息方面不够强大。XML 则是一种易于使用和易于扩展的标记语言。
总之,我们可以使用 XML 创建自己的元素,从而能够更精确地表示自己的信息。
构建 XML
XML 文件由 内容 和 标记 组成。通常,标记包围内容。
创建 XML 文件
XML 文档的第一行通常是一个 XML 声明。
形式:<?xml version="1.0" encoding="utf-8"?>
作用:将文件识别为 XML 文件,有助于工具和人类识别 XML(不会误认为是 SGML 或其他标记)。
PS:什么情况下通常忽略这个可选信息?打算将多个小的 XML 文件合并为一个大 XML 文件。
创建根元素
一个文件只能有一个根元素,并且需要使用 “包装器” 包含它。一个文件只能有一个根元素,并且需要使用 “包装器” 包含它。内容和其他标记必须放在 根元素 中间。
命名元素
命名时需要注意的地方:
· 元素名中不能出现空格。
· 名称只能以英文字母开始,不能是数字或符号。
· 对大小写没有限制,但前后要保持一致,以免造成混乱。
嵌套元素
把某个元素放到其他元素的内部。这些新的元素称为子 元素,包含它们的元素称为父 元素。
PS:注意两个错误嵌套(1.任何子元素都要完全包含在其父元素的开始和结束标记内部。2.每个同胞(Sibling)元素必须在下一个同胞元素开始之前结束。)
添加属性
属性是在使用元素时存储额外信息的一种方式。
属性由一个名称-值对构成,值包含在双引号中("),比如:type="dessert"。
可以在元素的开始标记内部输入一个或多个属性。
例如:<recipename cuisine="american" servings="1">
这是一个开始标记哈。
PS:进行分类的时候用的比较多。
使用实体
实体是对数据的引用。所有实体(除参数实体外)都以一个与字符(&)开始,以一个分号(;)结束。
实体的作用:
1.用实体代替特殊字符
2.定义实体来简化创作
3.定义实体来简化创作
实体的分类:
1.字符实体
由于我们不能直接在内容中输入特殊字符。如果要在文本中使用符号,必须使用它的字符代码将它设置为实体。例如,大写字母 A 是 Unicode 字符 U+0065。如果想将其表示为一个字符实体,可以输入 A(十进制值)或 A(十六进制值)。另一个更有用的字符也许是 © —— 版权符号。这个版权符号的字符实体是 & #169; 或 & #xa9;(如果将空格去掉那就会变成©)。
2.命名实体
命名实体在 DTD 或内部子集(即文档中 <!DOCTYPE> 语句的一部分)中声明,在文档中用作引用。在 XML 文档解析过程中,实体引用将由它的表示替代。
简单来说,实体就是宏,它们在我们处理文档时得到扩展。
<!ENTITY ndash "–">
– 为 “–”
如上所示,命名实体由字符实体替代。我们在文档中使用 – 时,它由 Unicode 字符 U+2013(短横线 - 字符)替代。由于 – 的替代文本是一个字符引用,因此它等同于输入一个短横线字符。
3.外部实体
外部实体表示外部文件的内容。外部实体在有些情况下很有用,比如说,您在创建一本图书并且想将每一章存储为一个单独的文件。
<!ENTITY chap1 SYSTEM "chapter-1.xml">//外部实体引用其他文件
<!ENTITY chap2 SYSTEM "chapter-2.xml">
<!ENTITY chap3 SYSTEM "chapter-3.xml">
现在,当您在主图书 XML 文件(参见下清单)中将这些实体放到一起时,这些文件的内容将插入在引用点。
<?xml version="1.0" encoding="utf-8"?>
<!-- Pull in the chapter content: -->
&chap1;
&chap2;
&chap3;
由于这些文件的内容被插入到 XML 文档中,因此它们也必须是有效的 XML,而且它们必须是平衡的。也就是说,在一个外部实体的引用文件中开始的任何元素也必须在那个文件中结束。当上面代码清单中的 XML 文档被解析时,它将被读取为一个大文档,包含 chapter-1.xml、chapter-2.xml 和 chapter-3.xml 文件的内容;XML 处理应用程序并不介意文档写入到 4 个单独的文件中。
4.参数实体
参数实体只用于 DTD 和文档的内部子集中。它们使用百分号(%)而不是与字符,可以是命名实体或外部实体。
作用:
1.引用在外部文件中声明的 Latin 1, Special Characters and Symbols 实体集
2.用作快捷方式以重用 DTD 的某些部分,比如每个 XHTML 元素都支持的标准属性集
例如:
<!ENTITY % attrs "%coreattrs; %i18n; %events;">
<!ENTITY % coreattrs
"id ID #IMPLIED
class CDATA #IMPLIED
style %StyleSheet; #IMPLIED
title %Text; #IMPLIED"
>
<!ENTITY % i18n
"lang %LanguageCode; #IMPLIED
xml:lang %LanguageCode; #IMPLIED
dir (ltr|rtl) #IMPLIED"
>
如上,参数实体可以引用其他参数实体。与命名实体一样,参数实体在整个文档被读取之后才被扩展。
如何在DTD中声明实体
<!-- 6.1 Named entity for site name: -->
<!ENTITY dw "developerWorks">
<!-- 6.2 External entity for re-use: -->
<!ENTITY bio SYSTEM "dw-author-bio.xml">
<!-- 6.3 Parameter entity for use in DTD -->
<!ENTITY % English "en-US|en-CA|en-UK">
内部子集中的实体声明
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
[
<!ENTITY test-entity "This <em>is</em> an entity.">
]>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml;charset=utf-8"/>
<title>Entities in XML</title>
</head>
<body>
<h1>Entities in XML</h1>
<p>&test-entity;</p>
<p>You can use it anywhere you'd use a standard XHTML entity:</p>
<pre>&test-entity;</pre>
</body>
</html>
XHTML 文档(在系统上保存为 entities.xml)在其内部子集中声明了一个名为 test-entity 的新实体。内部子集是 <!DOCTYPE> 声明的一部分,位于 DTD 的 PUBLIC 和/或 SYSTEM 标识符之后的方括号中。
通过实体减少输入
在需要反复输入相同的文本时,可以尝试利用实体。以下是一些不错的实体示例:公司的正式名称、正在进行文档记录的产品的名称、版权、商标、注册商标通知,以及电子邮件地址。
<!ENTITY co "Father Karass' Olde Tyme Steambots, LLC">
<!ENTITY prod "Semi-Autonomous Security Servant (SASSbot)">
<!ENTITY c "Copyright © 2010 &co; All Rights Reserved.">
<!ENTITY author "Chris Herborth (chrish@pobox.com)">
使用实体轻松更新不断变化的文档
<!-- Current name: -->
<!ENTITY prod "Semi-Autonomous Security Servant (SASSbot)">
<!-- Old names preserved for posterity: -->
<!-- Original R&D name: -->
<!--ENTITY prod "Security Bot"-->
<!-- Marketing name v1 -->
<!--ENTITY prod "Security Servant Bot"-->
<!-- Marketing name v2 -->
<!--ENTITY prod "Autonomous Security Servant Bot"-->
总之,命名实体的作用类似于宏,允许您使用实体引用替代重复或难以输入的文本。尽管 Web 浏览器不支持外部实体,但是我们可以通过其他 XML 应用程序来使用它们创建复合文档,这使得标准化和重用文档的某些部分变得更容易。
构造良好并且有效的 XML
要实现构造良好的 XML 取决于如何处理 XML。例如我们要根据菜谱类型进行分类。那就需要确保每个 <recipe> 元素都包含 type 属性,以对菜谱进行分类。能够正确验证并确保存在属性值(避免出现双关语)。
所谓 验证 就是根据元素规则检查文档的结构,以及如何为每个父元素定义子元素。这些规则是在 文档类型定义(Document Type Definition,DTD)或模式(schema )中定义的。
思路:验证要求您创建自己的 DTD 或 schema ,然后在 XML 文件中引用 DTD 或 schema 文件。
为了实现验证,必须在 XML 文档的顶部附近包含文档类型(DOCTYPE)。这行代码将引用用于验证文档的 DTD 或 schema (元素和规则列表)。例如,DOCTYPE可能类似于 <!DOCTYPE MyDocs SYSTEM "filename.dtd">
另外,整体规则很简单,但是一定要注意错误的发生。我们根据可分类性和可搜索性找出文档中有价值的内容,然后根据我们的需要设计元素和属性。当我们有了明确的目标,并知道如何标记内容的时候,我们就可以构建高效的元素和属性了。
The End .