1

我正在阅读 MathML DTD。我遇到了一行代码。下面是代码行。

<!ENTITY % mathml-qname.module "INCLUDE">
<![%mathml-qname.module; [<!ENTITY % mathml-qname.mod PUBLIC "-//W3C//ENTITIES    MathML   3.0 Qualified Names 1.0//EN" "mathml3-qname.mod"> %mathml-qname.mod;]]>

我无法理解以上两行。任何人都可以解释语法吗?

4

2 回答 2

1

第一行声明了一个名为mathml-qname.moduleINCLUDE”的参数实体。

<!ENTITY % mathml-qname.module "INCLUDE">

下一点我将分成几行。

<![%mathml-qname.module; [
<!ENTITY % mathml-qname.mod PUBLIC 
  "-//W3C//ENTITIES    MathML   3.0 Qualified Names 1.0//EN" 
  "mathml3-qname.mod"> 
  %mathml-qname.mod;
]]>

第一行和最后一行 ( <![%mathml-qname.module;[... ]]>) 是条件部分 - 即可以正常读取和处理或跳过的部分,具体取决于其关键字的值。关键字出现在两个左方括号之间——在这里,它是由对参数 entity 的引用给出的mathml-qname.module。如果我们展开参数实体引用,条件部分如下所示:

<![INCLUDE [
 ...
]]>

正如您可能猜到的那样,关键字的含义INCLUDE是:包含、阅读和处理本节。(另一个可能的值是IGNORE。)

在标记部分中还有另一个参数实体声明,用于名为 的参数实体mathml-qname.modPUBLIC关键字给出了实体的公共标识符和系统标识符;长话短说,有问题的实体是 MathML 3.0 限定名称的实体集合,它位于相对 URI(相对于包含此参数实体声明的资源)为mathml3-qname.mod.

在 的参数实体声明之后mathml-qname.mod,有对相同参数实体 ( %mathml-qname.mod;) 的引用,这会导致实体被读取和处理。

用非正式的术语:这段代码指定默认情况下,mathml3-qname.mod应该咨询外部资源。但是用户可以通过在其配置中的适当位置包含以下形式的参数实体声明来覆盖该默认值:

<!ENTITY % mathml-qname.module "IGNORE">

如果您对 MathML 3.0 的限定名称实体有一组不同的声明,您可能会这样做。

于 2013-02-19T17:01:26.237 回答
1

这一行:

<!ENTITY % mathml-qname.module "INCLUDE">

是一个参数实体。(参数实体只能在 DTD 中使用。)实体的值为“INCLUDE”。

这一行:

<![%mathml-qname.module; [<!ENTITY % mathml-qname.mod PUBLIC "-//W3C//ENTITIES    MathML   3.0 Qualified Names 1.0//EN" "mathml3-qname.mod"> %mathml-qname.mod;]]>

是另一个参数实体,它指向带有附加实体声明的外部文件。不同之处在于它被包装在一个条件部分中。解决后基本上是这样mathml-qname.module的:

<![INCLUDE [<!ENTITY % mathml-qname.mod PUBLIC "-//W3C//ENTITIES    MathML   3.0 Qualified Names 1.0//EN" "mathml3-qname.mod"> %mathml-qname.mod;]]>

这意味着mathml-qname.mod将包含声明和引用。如果INCLUDE更改为IGNOREin mathml-qname.module,则声明和引用 formathml-qname.mod将被忽略。

于 2013-02-19T16:58:54.020 回答