2009-07-29 12 views
5

ein in Dokument DTD Ich habe folgendes:DTD Entities vs XML-Schema-Elemente

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> 

nun die Datei über Xalan rot Parsen ist nicht wie in der DTD-Version übersetzt. Wo ist mein Fehler? Werden Schemadateien während des Analyseprozesses nicht gelesen?

Prost
Jan

+0

+1 für eine Frage, die ich – KLE

Antwort

5

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

Tatsächlich glaube ich, dass Ihr XSLT XML erzeugt, das nicht gegen Ihr Schema validiert wird, da der Wert des Elements nicht "rgb(255,0,0)" ist. Auch wenn Sie default anstelle von fixed verwendet haben, ist dies keine Textersetzung. Es bedeutet nur, dass der Wert auf "rgb(255,0,0)" festgelegt wird, wenn kein Wert angegeben wird, wenn der Wert in einer DOM-Instanz abgefragt wird.

+1

+1 für genaue Bedeutung von "festen" – KLE

3

Die Verwendung von Schemas zur Deklaration Ihrer Strukturregeln (anstelle von DTD) schließt die Verwendung von Entitäten nicht aus.

Die Art und Weise, in der Sie Entitätsreferenzen verwenden, um den deklarierten Inhalt zu ersetzen, ändert sich nicht.

Entity-Referenzen müssen nicht nur in DTD-Dateien deklariert werden. Sie können sie in Ihren XML-Dateien als Inline deklarieren.

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

+0

Das ist es sinnvoll ist ... Dank Jan – Jan

+0

+1 für nette Antwort. Ich habe den Link überprüft, den Sie angegeben haben, es war nützlich. In Ihrem Beispiel sollte die DOCTYPE-Zeile nicht auf "foo", sondern auf "page" verweisen. War es nicht ein Cut'n-Paste-Tipo? – KLE

+0

@KLE Sie sind richtig, es war ein Kopieren/Einfügen-Fehler. Ich habe das Beispiel korrigiert. –