Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
DTD实体与XML模式元素_Xml_Xslt_Xsd_Entity_Dtd - Fatal编程技术网

DTD实体与XML模式元素

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

使用文档DTD,我执行了以下操作:

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>

[...]
&红色;
[...]
我想把一切都改成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