6

使用文档 DTD 我做了以下事情:

文件.xsl:

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

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

我想将所有内容都更改为 XML-Schema。所以我尝试了:

文件.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>

文件.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 red 解析文件不像 DTD 版本那样被翻译。我的错误在哪里?解析过程中是否不读取 Schema 文件?

4

2 回答 2

6

元素定义中的fixed属性不会告诉解析器进行文本替换。它只是意味着元素的值必须始终相同。

事实上,我相信您的 XSLT 生成的 XML 不会针对您的模式进行验证,因为<defs:red>元素的值不是“ rgb(255,0,0)”。即使您使用default了而不是fixed,这也不是文本替换。它只是意味着,如果没有指定值,当在 DOM 实例中查询该值时,您会发现该值设置为“ rgb(255,0,0)”。

于 2009-07-29T23:52:39.027 回答
4

使用模式来声明您的结构规则(而不是 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

于 2009-07-30T02:06:14.367 回答