1

我刚刚阅读了这个 XML 语法教程,发现“处理指令”<? ... ?>)和“声明性语句”<! ... >)的定义有点模糊。我从阅读该页面中得到的要点是,它们都是记录文档的方式,告诉文档处理器如何这样做。

例如,这是一段我认为很多人都会熟悉的常见代码:

<?xml version="1.0"?>
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

据我所知,这些都是关于如何处理文档的说明。那么有什么区别呢?

4

2 回答 2

3

有些人在编写教程时试图提供帮助并发明自己的术语,希望人们会发现它比规范本身的语言更容易理解。这个特定教程的作者似乎在这方面做得过火了。这些术语都不是正式的 XML 术语。

您的示例中的第一件事是 XML 声明。它告诉 XML 解析器您正在使用什么版本的 XML,以及文档的字符编码是什么。

您示例中的第二件事是 DOCTYPE 声明。它告诉 XML 解析器您正在使用什么 XML 词汇表(在本例中为 XHTML 词汇表),这使解析器有机会检查您是否正确使用了该词汇表(即,您的文档对引用的 DTD 有效。)

于 2012-04-12T08:43:50.107 回答
0

XML 源自SGML。在 SGML 中,处理指令被<? ?>标记包围。声明用 . 包围<! !>。在 XML 文档中,第一个 SGML 处理指令是<?xml ... ?>指示 XML 的版本和文本编码。之后是<!DOCTYPE ...!>通知 XML 解析器如何验证文档的声明。如果没有声明,XML 解析器只能确定文档是否格式正确,而不能确定文档是否有效。如果有声明,例如 DOCTYPE 或嵌入的 DTD,解析器还可以确定文档是否有效。

于 2019-02-18T23:48:59.853 回答