Frage

Mit einem Dokument DTD Ich habe die folgende:

file.xsl:

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

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

Ich wollte alles XML-Schema ändern. Also habe ich versucht:

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>

Sie nun die Datei über Xalan rot Parsen ist nicht wie in der DTD-Version übersetzt. Wo ist mein Fehler? Sind Schema-Dateien nicht bei der Analyse lesen?

War es hilfreich?

Lösung

Das fixed Attribut in einer Elementdefinition nicht sagt einem Parser eine Textersetzung zu tun. Es bedeutet einfach, dass der Wert des Elements muss immer gleich sein.

In der Tat, ich glaube, Ihre XSLT XML erzeugt, die gegen das Schema nicht bestätigen, da der Wert des <defs:red> Elements ist nicht „rgb(255,0,0)“. Auch wenn Sie default statt fixed verwendet wird, ist dies keine Textersetzung. Es bedeutet nur, dass, wenn kein Wert angegeben wird, wenn der Wert in einer DOM-Instanz abgefragt wird, können Sie den Wert auf „rgb(255,0,0)“ gesetzt finden.

Andere Tipps

Schemata Arbeit mit Strukturregeln zu erklären (und nicht DTD) ist nicht von der Verwendung Entitäten ausschließen.

Die Art und Weise, in der Sie Entitätsverweise verwenden ersetzen erklärte Inhalt ändert sich nicht.

Entity Referenzen müssen nicht nur innerhalb DTD-Dateien deklariert werden. Sie können sie inline in Ihren XML-Dateien angeben.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top