2013-02-19 89 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