2013-02-19 87 views
1

我读的是MathML DTD。我遇到了一行代码。以下是代码行。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;]]> 

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

回答

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

第一行声明一个名为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。

+0

非常感谢。我深信不疑。 – 2013-02-20 09:57:53