DTD实体与XML-Schema元素

Jan*_*Jan 6 xml xslt xsd dtd entity

使用Document DTD我做了以下事情:

file.xsl:

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

<xsl:stylesheet>
   [...]
   <xsl:attribute name="color">&red;</xsl:attribute>
   [...]
</xsl:stylesheet>
Run Code Online (Sandbox Code Playgroud)

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

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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

现在通过Xalan red解析文件并不像DTD版本那样进行转换.我的错误在哪里?在解析过程中是否未读取架构文件?

Joh*_*ers 6

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

实际上,我相信您的XSLT正在生成不会针对您的架构进行验证的XML,因为该<defs:red>元素的值不是" rgb(255,0,0)".即使您使用default而不是fixed,也不是文本替换.它只是意味着,如果没有指定值,当在DOM实例中查询该值时,您将找到设置为" rgb(255,0,0)" 的值.