2009-07-29 78 views
5

使用的文檔DTD我做了以下內容:DTD實體VS XML的架構元素

file.xsl:

<!DOCTYPE xsl:stylesheet[ 
    <!ENTITY red "rgb(255,0,0)"> 
]> 

<xsl:stylesheet> 
    [...] 
    <xsl:attribute name="color">&red;</xsl:attribute> 
    [...] 
</xsl:stylesheet> 

我想改變一切,以XML的架構。所以,我想:

file.xsd:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="red" type="xs:token" fixed="rgb(255,0,0)" /> 
</xsd:schema> 

file.xsl:

<xsl:stylesheet 
    xmlns:defs="http://www.w3.org/2001/XMLSchema-instance" 
    defs:noNamespaceSchemaLocation="file.xsd"> 

    [...] 
    <xsl:attribute name="color"><defs:red/></xsl:attribute> 
    [...] 
</xsl:stylesheet> 

現在通過分析紅色的Xalan文件沒有翻譯像在DTD版本。我的錯誤在哪裏? Schema文件在解析過程中沒有被讀取?

乾杯

+0

+1的一個問題,就是對我有用 – KLE 2009-09-02 07:51:53

回答

5

fixed屬性中的一個元素定義不告訴解析器做文本替換。它只是意味着元素的值必須始終相同。

事實上,我相信您的XSLT正在生成XML,它不會根據您的模式進行驗證,因爲<defs:red>元素的值不是「rgb(255,0,0)」。即使您使用default而不是fixed,這也不是文字替換。這僅表示如果未指定值,則在DOM實例中查詢值時,會發現設置爲「rgb(255,0,0)」的值。

+1

+1的準確含義「固定」 – KLE 2009-09-02 07:52:26

3

使用模式聲明您的結構規則(而不是DTD)並不排除您使用實體。

您使用實體引用來替換聲明的內容的方式不會改變。

實體引用不需要僅在DTD文件中聲明。你可以在你的XML文件中聲明它們。

<?xml version="1.0"?> 
<!DOCTYPE foo [ 
    <!ENTITY red "rgb(255,0,0)"> 
]> 
<foo> 
    <bar color="&red;" /> 
</foo> 

http://www.ibm.com/developerworks/xml/library/x-tipentref.html

+0

完蛋了...... 感謝 一月 – Jan 2009-07-31 11:46:48