DTD实体与XML模式元素
使用文档DTD,我执行了以下操作: file.xsl:DTD实体与XML模式元素,xml,xslt,xsd,entity,dtd,Xml,Xslt,Xsd,Entity,Dtd,使用文档DTD,我执行了以下操作: file.xsl: <!DOCTYPE xsl:stylesheet[ <!ENTITY red "rgb(255,0,0)"> ]> <xsl:stylesheet> [...] <xsl:attribute name="color">&red;</xsl:attribute> [...] </xsl:stylesheet> <xsl:styles
<!DOCTYPE xsl:stylesheet[
<!ENTITY red "rgb(255,0,0)">
]>
<xsl:stylesheet>
[...]
<xsl:attribute name="color">&red;</xsl:attribute>
[...]
</xsl:stylesheet>
<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>
[...]
&红色;
[...]
我想把一切都改成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:
<!DOCTYPE xsl:stylesheet[
<!ENTITY red "rgb(255,0,0)">
]>
<xsl:stylesheet>
[...]
<xsl:attribute name="color">&red;</xsl:attribute>
[...]
</xsl:stylesheet>
<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>
[...]
[...]
现在,通过XalanRed解析文件并不像DTD版本那样翻译。我的错误在哪里?在解析过程中是否未读取架构文件?元素定义中的
固定属性不会告诉解析器进行文本替换。它只是意味着元素的值必须始终相同
事实上,我相信XSLT生成的XML不会根据模式进行验证,因为
元素的值不是“rgb(255,0,0)
”。即使使用了默认值
而不是固定值
,这也不是文本替换。这只是意味着,如果没有指定值,当在DOM实例中查询该值时,您会发现该值设置为“rgb(255,0,0)
”使用模式声明结构规则(而不是DTD)并不妨碍您使用实体
使用实体引用替换声明内容的方式不会改变
实体引用不需要仅在DTD文件中声明。您可以在XML文件中内联声明它们
<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY red "rgb(255,0,0)">
]>
<foo>
<bar color="&red;" />
</foo>
+1是一个很好的答案。我检查了你提供的链接,它很有用。在您的示例中,DOCTYPE行不应该引用“foo”而不是“page”。这不是剪切粘贴tipo吗?@KLE你是对的,这是复制/粘贴错误。我已经纠正了这个例子。对于一个对我有用的问题+1