DTD Entities vs XML-Schema Elements

大兔子大兔子 提交于 2019-12-07 02:57:36

问题


Using an Document DTD I did the following:

file.xsl:

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

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

I wanted to change everything to XML-Schema. So I tried:

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>

Now parsing the file via Xalan red is not translated like in the DTD version. Where is my error? Are Schema files not read during the parsing process?


回答1:


The fixed attribute in an element definition does not tell a parser to do a text substitution. It simply means that the value of the element must always be the same.

In fact, I believe your XSLT is producing XML that will not validate against your schema, since the value of the <defs:red> element is not "rgb(255,0,0)". Even if you used default instead of fixed, this is not a text substitution. It just means that, if no value is specified, when the value is queried in a DOM instance, you'll find the value set to "rgb(255,0,0)".




回答2:


Using schemas to declare your structural rules (rather than DTD) does not preclude you from using entities.

The manner in which you use entity references to substitute the declared content does not change.

Entity references do not need to be declared only within DTD files. You can declare them inline in your XML files.

<?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



来源:https://stackoverflow.com/questions/1203690/dtd-entities-vs-xml-schema-elements

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!