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

file.xsl:

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

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

我想将所有内容都更改为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>

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

有帮助吗?

解决方案

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

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top