Domanda

Utilizzando un documento DTD ho fatto quanto segue:

file.xsl:

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

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

Volevo cambiare tutto in XML-Schema. Quindi ho provato:

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>

Ora l'analisi del file tramite Xalan rosso non è tradotta come nella versione DTD. Dov'è il mio errore? I file di schema non vengono letti durante il processo di analisi?

È stato utile?

Soluzione

L'attributo fixed nella definizione di un elemento non dice a un parser di fare una sostituzione del testo. Significa semplicemente che il valore dell'elemento deve essere sempre lo stesso.

In effetti, credo che la tua XSLT stia producendo XML che non verrà convalidato rispetto al tuo schema, poiché il valore dell'elemento <defs:red> non è " rgb(255,0,0) " ;. Anche se hai usato default invece di <=>, questa non è una sostituzione di testo. Significa solo che, se non viene specificato alcun valore, quando il valore viene interrogato in un'istanza DOM, troverai il valore impostato su & Quot; <=> & Quot ;.

Altri suggerimenti

L'uso di schemi per dichiarare le tue regole strutturali (piuttosto che DTD) non ti impedisce di usare entità.

Il modo in cui si utilizzano i riferimenti di entità per sostituire il contenuto dichiarato non cambia.

I riferimenti alle entità non devono essere dichiarati solo all'interno dei file DTD. Puoi dichiararli in linea nei tuoi file XML.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top