Pregunta

Usando un documento DTD hice lo siguiente:

archivo.xsl:

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

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

Quería cambiar todo a XML-Schema. Entonces intenté:

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>

archivo.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>

Ahora el análisis del archivo a través de Xalan red no se traduce como en la versión DTD. ¿Dónde está mi error? ¿No se leen los archivos de esquema durante el proceso de análisis?

¿Fue útil?

Solución

El atributo fixed en una definición de elemento no le dice a un analizador que haga una sustitución de texto. Simplemente significa que el valor del elemento siempre debe ser el mismo.

De hecho, creo que su XSLT está produciendo XML que no se validará contra su esquema, ya que el valor del elemento <defs:red> no es " rgb(255,0,0) " ;. Incluso si usó default en lugar de <=>, esto no es una sustitución de texto. Simplemente significa que, si no se especifica ningún valor, cuando se consulta el valor en una instancia DOM, encontrará el valor establecido en & Quot; <=> & Quot ;.

Otros consejos

El uso de esquemas para declarar sus reglas estructurales (en lugar de DTD) no le impide usar entidades.

La forma en que utiliza referencias de entidad para sustituir el contenido declarado no cambia.

Las referencias de entidad no necesitan declararse solo dentro de los archivos DTD. Puede declararlos en línea en sus archivos 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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top