2009-07-29 13 views
5

utilizando un documento en DTD hice lo siguiente:Entidades DTD vs XML Schema Elementos

file.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 para XML Schema. Así que he intentado:

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> 

Ahora analizar el archivo a través de Xalan rojo no se traduce como en la versión DTD. ¿Dónde está mi error? ¿Los archivos de Schema no se leen durante el proceso de análisis?

Saludos
Jan

+0

+1 para una pregunta que me es útil para – KLE

Respuesta

5

El atributo fixed en una definición de elemento no le dice a un programa de análisis para hacer 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 fixed, 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 de DOM, encontrará el valor establecido en "rgb(255,0,0)".

+1

1 significado preciso de "fijo" – KLE

3

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

La manera en que usa las 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

+0

Eso es todo ... Gracias Ene – Jan

+0

+1 solicitud de respuesta agradable. Revisé el enlace que me diste, fue útil. En su ejemplo, ¿no debería la línea DOCTYPE hacer referencia a "foo" en lugar de "página"? ¿No era un tipo de cortar y pegar? – KLE

+0

@KLE estás en lo correcto, fue un error de copiar/pegar. He corregido el ejemplo. –

Cuestiones relacionadas