DTD相关

  今天在查看关于如何构建commonmark.js的AST时接着发现有必要好好了解一下DTD。说来真惭愧,同学的创新项目当初信誓旦旦要努力做,但是总是从没好好静下心来认真做过,结果全是担任组长的同学一个人辛辛苦苦完成的,而我却把大部分的时间又情不自禁地像高中那样用来死读书。。。但是说来也可笑,现在我正因为自己的死读书而有机会现在能够坐在研究生的实验室里。。。。  所以,现在课也几乎没多少了,自己又多了一个自习室和一台台式电脑,绝对没理由再继续不负责任了。。所以,我一定要好好地写博客,好好地提升自己。

  

  算了,也写一下这几天的收获吧。MarkDown,刚开始从qq上看到这个单词的时候。真心感觉自己落后同学好多好多好多好多好多惹。。一瞬间真心感觉他对自己还有信心呢。太不可思议了。。于是当天晚上查阅资料,全是英文的,虽然说自己的英文水平不是算差的,但是就是看这种关于学术性的文章感觉头大,说白了就是对术语知之甚少。。再说深一点,就是自己记忆力不好,这不是搪塞的借口,确实是这样。当我高中时第一次得知自己患有鼻炎的时候,以为只是小毛病,没想到医生很严肃的告诉我不简单,会影响记忆力。。。哎,而且这病永远也治不好,直到现在我还丢三落四,比如说今天,忘拿东西一共回了宿舍3次,都差不多快接近目的地的时候才想起来忘记了。。。怎么感觉我越扯越远呢。。。

  好了,以下的内容都是从w3school网站上看来的,也有自己写的部分啦,虽然不多。

  DTD(Document Type Definition)是用来定义合法的XML文档构建模块,使用一系列合法的元素来定义文档之结构,DTD可悲成行地声明再XML文档中,也可作为一个外部应用。

C1 内部DOCTYPE声明

  如果DTD被包含在XML源文件中,使用下列的语法来被包装在一个DOCTYPE引用中。

<!DOCTYPE 根元素 [元素声明]>

  带有DTD的XML文档实例。

<?xml version="1.0"?>
<!DOCTYPE note [
   <!ELEMENT note (to,from,heading,body)>
   <!ELEMENT to (#PCDATA)>
   <!ELEMENT from (#PCDATA)>
   <!ELEMENT heading (#PCDATA)>
   <!ELEMENT body (#PCDATA)>
]>
<note>
    <to>Gergo</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Do not forget the meeting!</body>
</note>

显示效果:

<note>
    <to>George</to>
    <from>John</from>
    <heading>Reminder</heading>
    <body>Don‘t forget the meeting!</body>
</note>

对上面DTD的解释如下:

!DOCTYPE note (第二行)定义此文档是 note 类型的文档。

!ELEMENT note (第三行)定义 note 元素有四个元素:"to、from、heading,、body"

!ELEMENT to (第四行)定义 to 元素为 "#PCDATA" 类型

!ELEMENT from (第五行)定义 from 元素为 "#PCDATA" 类型

!ELEMENT heading (第六行)定义 heading 元素为 "#PCDATA" 类型

!ELEMENT body (第七行)定义 body 元素为 "#PCDATA" 类型

C2外部文档声明

  如果DTD位于XML源文件的外部,那么就可以通过以下的方式被封装在一个DOCTYPE定义中

<!DOCTYPE 根元素 SYSTEM “文件名”>

C3为何使用DTD

  1.通过 DTD,每一个 XML 文件均可携带一个有关其自身格式的描述。

  2.通过 DTD,独立的团体可一致地使用某个标准的 DTD 来交换数据。

  3.自己的应用程序也可使用某个标准的 DTD 来验证从外部接收到的数据。

  4.还可以使用 DTD 来验证来自自身的数据。

C4XML文档构建模块

  所有的XML文档和HTML文档都由以下简答的构建模块构成:

  •   元素
  •   属性
  •   实体
  •   PCDATA
  •   CDATA

1)元素

  是主要的构建模块。在HTML中的例子是"body""table"(在html是称作标签);在XML中的例子是"note","message".元素可包含文本或者其他元素,或者为空。(html中的空标签是hr,br,img)

2)属性

  提供有关元素的额外信息,一般来说都是在以元素的开始标签中声明的。

3)实体

  用来定义普通文本的变量。实体引用是对实体的引用。eg: HTML 实体引用:"&nbsp;"。这个“无折行空格”实体在 HTML 中被用于在某个文档中插入一个额外的空格。

  以下的实体现在XML中被预定义:(个人理解,就是关键字吧)

实体定义 字符
&lt; <
&gt; >
&amp; &
&quot; "
&apos;

4)PCDATA

  PCDATA(parsed character data)意思是被解析的字符数据。可把字符数据想象为XML元素的开始标签与结束标签之间的文本。

PCDATA 是会被解析器解析的文本。这些文本将被解析器检查实体以及标记。

文本中的标签会被当作标记来处理,而实体会被展开。

不过,被解析的字符数据不应当包含任何 &、< 或者 > 字符;需要使用 &amp;、&lt; 以及 &gt; 实体来分别替换它们。

5)CDATA

  CDATA(character data)意思是字符数据。是不会被解析的文本。总之,标签或者实体都不会被解析。

C5DTD元素

   1.声明:

<!ELEMENT 元素名称 类别>

OR

<!ELEMENT 元素名称 (元素内容)>

2 空元素

  通过类别关键词EMPTY来进行声明:

<!ELEMENT 元素名称 EMPTY>

eg:

<!ELEMENT br EMPTY>

在XML中:

</br>

3 只有PCDATA的元素 

  只有 PCDATA 的元素通过圆括号中的 #PCDATA 进行声明:

<!ELEMENT 元素名称 (#PCDATA)>

4 带有任何内容的元素

  通过类别关键词 ANY 声明的元素,可包含任何可解析数据的组合:

<!ELEMENT 元素名称 ANY>
时间: 2024-08-13 02:05:49

DTD相关的相关文章

20151210小问题2

1.各浏览器下 scrollTop的差异 IE6/7/8: 对于没有doctype声明的页面里可以使用  document.body.scrollTop 来获取 scrollTop高度 : 对于有doctype声明的页面则可以使用 document.documentElement.scrollTop: Safari: safari 比较特别,有自己获取scrollTop的函数 : window.pageYOffset : Firefox: 火狐等等相对标准些的浏览器就省心多了,直接用 docum

关于scrollTop的兼容问题

1.各浏览器下 scrollTop的差异 IE6/7/8: 对于没有doctype声明的页面里可以使用  document.body.scrollTop 来获取 scrollTop高度 : 对于有doctype声明的页面则可以使用 document.documentElement.scrollTop: Safari: safari 比较特别,有自己获取scrollTop的函数 : window.pageYOffset : Firefox: 火狐等等相对标准些的浏览器就省心多了,直接用 docum

获取scrollTop兼容各浏览器的方法,以及body和documentElement

1.各浏览器下 scrollTop的差异 IE6/7/8: 对于没有doctype声明的页面里可以使用  document.body.scrollTop 来获取 scrollTop高度 : 对于有doctype声明的页面则可以使用 document.documentElement.scrollTop: Safari: safari 比较特别,有自己获取scrollTop的函数 : window.pageYOffset : Firefox: 火狐等等相对标准些的浏览器就省心多了,直接用 docum

[转]JavaScript实现 页面滚动图片加载

本文转自:http://www.cnblogs.com/Darren_code/archive/2011/07/21/LoadImage.html 又到了这个月的博客时间了,原计划是打算在这个月做一个的功能较炫的拖拽类,可是感觉想的太容易,实现起来遇见不少问题,如果技术分享做不到有助于人反而害人,那就歇菜了,所以还是等本人多找些资料研究研究,“拖拽类“先放放吧,下面开始正题... 为什么写这篇文章? 1.优化页面很实用的方法,技术实现不难: 2.搜索了相关内容的文章,好像都是用jQuery的方法

document.documentElement和document.body的区别

网页中获取滚动条卷去部分的高度,可以通过 document.body.scrollTop 来获取,比如使div跟着滚动条滚动: <div id="div" style="width:100px;height:100px;background:#ccc;position:absolute;"></div> window.onscroll = function () { var div = document.getElementById(&quo

【转载】document.documentElement和document.body的区别

网页中获取滚动条卷去部分的高度,可以通过 document.body.scrollTop 来获取,比如使div跟着滚动条滚动: <div id="div" style="width:100px;height:100px;background:#ccc;position:absolute;"></div> window.onscroll = function () { var div = document.getElementById(&quo

SAX解析XML 详解

JAVA 解析 XML 通常有两种方式,DOM 和 SAX.DOM 虽然是 W3C 的标准,提供了标准的解析方式,但它的解析效率一直不尽如人意,因为使用DOM解析XML时,解析器读入整个文档并构建一个驻留内存的树结构(节点树),然后您的代码才可以使用 DOM 的标准接口来操作这个树结构.但大部分情况下我们只对文档的部分内容感兴趣,根本就不用先解析整个文档,并且从节点树的根节点来索引一些我们需要的数据也是非常耗时的.     SAX是一种XML解析的替代方法.相比于文档对象模型DOM,SAX 是读

【转】document.documentElement和document.body的区别

网页中获取滚动条卷去部分的高度,可以通过 document.body.scrollTop 来获取,比如使div跟着滚动条滚动: <div id="div" style="width:100px;height:100px;background:#ccc;position:absolute;"></div> window.onscroll = function () { var div = document.getElementById(&quo

sax的解析原理基础

1:sax解析是什么? SAX(simple API for XML)是一种XML解析的替代方法.相比于DOM,SAX是一种速度更快,更有效的方法.它逐行扫描文档,一边扫描一边解析.而且相比于DOM,SAX可以在解析文档的任意时刻停止解析,但任何事物都有其相反的一面,对于SAX来说就是操作复杂. 2:SAX解析和DOM解析的区别? JAVA 解析 XML 通常有两种方式:DOM 和SAX.DOM(文档对象模型)是W3C标准,提供了标准的解析方式,但其解析效率一直不尽如人意,这是因为DOM解析XM