2009-07-29 82 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