我在读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;]]>我不能理解上面的两行。有人能解释一下它的语法吗?
发布于 2013-02-20 00:58:54
这一行:
<!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声明和引用。如果在mathml-qname.module中将INCLUDE更改为IGNORE,则将忽略对mathml-qname.mod的声明和引用。
发布于 2013-02-20 01:01:26
第一行声明了一个名为mathml-qname.module的参数实体,其值为"INCLUDE“。
<!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;[ ... ]]>)是一个条件部分--也就是说,根据其关键字的值,可以正常读取和处理的部分,也可以跳过。关键字出现在两个左方括号之间--在这里,它由对参数实体mathml-qname.module的引用给出。如果展开参数实体引用,条件部分如下所示:
<![INCLUDE [
...
]]>正如您可能猜到的,关键字INCLUDE的含义是:包含、读取和处理这个部分。(另一个可能的值是IGNORE。)
在标记的部分中有另一个参数实体声明,用于名为mathml-qname.mod的参数实体。PUBLIC关键字为实体提供了公共标识符和系统标识符;简而言之,所讨论的实体是MathML 3.0限定名的实体集合,它位于其相对URI (相对于包含此参数实体声明的资源)为mathml3-qname.mod的资源中。
在mathml-qname.mod的参数实体声明之后,有一个对相同参数实体(%mathml-qname.mod;)的引用,这会导致读取和处理该实体。
非正式术语:这段代码指定在缺省情况下,应该咨询外部资源mathml3-qname.mod。但用户可以通过在其配置中的适当位置包含以下形式的参数实体声明来覆盖该默认值:
<!ENTITY % mathml-qname.module "IGNORE">如果您对MathML 3.0的限定名称实体有一组不同的声明,您可能会这样做。
https://stackoverflow.com/questions/14958040
复制相似问题