我正在阅读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;]]>
我无法理解上面这两行。任何人都可以解释语法吗?
答案 0 :(得分: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
中的IGNORE
已更改为mathml-qname.module
,则mathml-qname.mod
的声明和参考将被忽略。
答案 1 :(得分:1)
第一行声明一个名为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
。 / p>
在mathml-qname.mod
的参数实体声明之后,存在对同一参数实体(%mathml-qname.mod;
)的引用,这会导致实体被读取和处理。
非正式术语:此代码块指定默认情况下应咨询外部资源mathml3-qname.mod
。但是用户可以通过在其配置中的适当位置包含以下形式的参数实体声明来覆盖该默认值:
<!ENTITY % mathml-qname.module "IGNORE">
如果您对MathML 3.0的限定名称实体有不同的声明集,则可以这样做。