XML 入门基础知识

最近接触到了TVML,平时也会使用过XML。在这里也整理XML简易语法规则以便回顾查阅。文章主要介绍 XML 文档的基础结构,以及创建构造良好的 XML 需要遵循的规则,包括命名约定、正确的标记嵌套、属性规则、声明和实体。


XMLHTML

标记语言从早期的私有公司和政府制定形式逐渐演变成标准通用标记语言(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 "&#8211;">
&#8211 为 “–”
如上所示,命名实体由字符实体替代。我们在文档中使用 – 时,它由 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 &copy; 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 .

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 1. XML简介 以下内容来自于http://www.w3school.com.cn/xml 基本知识 XML 和...
    WebSSO阅读 1,894评论 1 7
  • 经过两天的奋战,终于把xml简略的过了一遍。 1.1XML介绍 xml是Extensible Markup lan...
    Ystrator阅读 801评论 0 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • 有时,跟朋友一起吃饭。如果朋友让我点菜,我就会看看菜单,再看看她,一脸无辜。心想:这么杀脑细胞的事情,还是不要交给...
    小考拉俱乐部阅读 538评论 2 1