¿Qué significa la directiva 'independiente' en XML?

272

¿Qué significa la standalonedirectiva ' ' en un documento XML?

Mella
fuente

Respuestas:

203

La standalonedeclaración es una forma de decirle al analizador que ignore cualquier declaración de marcado en el DTD . El DTD se usa posteriormente solo para validación.

Como ejemplo, considere la <img>etiqueta humilde . Si observa el DTD XHTML 1.0 , verá una declaración de marcado que le indica al analizador que las <img>etiquetas deben estar VACÍAS y poseer srcy altatributos. Cuando un navegador va a través de un documento XHTML 1.0 y encuentra una <img>etiqueta, se debe notar que el DTD requiere srcy altlos atributos y añadirlos si no están presentes. También cerrará automáticamente la <img>etiqueta, ya que se supone que está VACÍA. Esto es lo que significa la especificación XML por "declaraciones de marcado que pueden afectar el contenido del documento". Luego puede usar elstandalone declaración para indicarle al analizador que ignore estas reglas.

Si su analizador realmente lo hace o no, esta es otra pregunta, pero un analizador de validación compatible con los estándares (como un navegador) debería hacerlo.

Tenga en cuenta que si no especifica una DTD, entonces la declaración independiente "no tiene sentido", por lo que no hay razón para usarla a menos que también especifique una DTD.

nulabilidad
fuente
9
El ejemplo necesita más modificaciones. Tener "standalone = 'no'" normalmente no cerraría las etiquetas XML no cerradas (esta es una característica de SGML, pero no de XML). La validación fallará. Tampoco proporcionará valores para los atributos que SE REQUIEREN.
khaemuaset
2
"La declaración independiente es una forma de decirle al analizador que ignore cualquier declaración de marcado en el DTD". Eso no es correcto. Con standalone=yes, las declaraciones de marcado no se ignoran, sino que hacen que el documento sea XML no válido. ¿Te importaría si edito eso en la respuesta?
sleske
@sleske Por favor, solo haga el cambio. El autor siempre puede revertir si no está contento.
Stephan
@Stephan: Gracias por el aliento. Desafortunadamente, ya no estoy al día con todo el contenido XML, por lo que no puedo editar con confianza en este momento. Siéntase libre de editarse si tiene conocimientos actualizados :-).
Sleske
106
  • La directiva independiente es un atributo opcional en la declaración XML.
  • Los valores válidos son yesy no, donde noes el valor predeterminado.
  • El atributo solo es relevante cuando se utiliza un DTD . (El atributo es irrelevante cuando se usa un esquema en lugar de un DTD).
  • standalone="yes"significa que el procesador XML debe usar la DTD solo para validación. En ese caso, lo hará sin se utilizará para:
    • valores predeterminados para atributos
    • declaraciones de entidad
    • normalización
  • Tenga en cuenta que standalone="yes"puede agregar restricciones de validez si el documento utiliza una DTD externa. Cuando el documento contiene elementos que requerirían la modificación del XML, como los valores predeterminados para los atributos, y standalone="yes"se utiliza , el documento no es válido .
  • standalone="yes" puede ayudar a optimizar el rendimiento del procesamiento de documentos.

Fuente: el pseudoatributo independiente solo es relevante si se utiliza un DTD

Rinke
fuente
2
El uso de standalone = "yes" provoca restricciones de validez adicionales (es decir, puede hacer que un documento XML no sea válido). Edité esto en la respuesta, espero que esté bien.
sleske
2
@sleske Gracias por tu contribución. Traté de simplificar su edición sin dejar de indicar claramente su punto. Siéntete libre de editar nuevamente si me equivoco.
Rinke
20

standalone describe si el documento XML actual depende de una declaración de marcado externo.

W3C describe su propósito en "Lenguaje de marcado extensible (XML) 1.0 (quinta edición)":

Stefan Gehrig
fuente
10

Las declaraciones de marcado pueden afectar el contenido del documento, tal como se pasa de un procesador XML a una aplicación; ejemplos son valores predeterminados de atributos y declaraciones de entidad. La declaración de documento independiente, que puede aparecer como un componente de la declaración XML, indica si existen o no tales declaraciones que parecen externas a la entidad del documento o en las entidades de parámetros. [Definición: una declaración de marcado externo se define como una declaración de marcado que se produce en el subconjunto externo o en una entidad de parámetro (externa o interna, esta última se incluye porque los procesadores no validadores no están obligados a leerlos).

http://www.w3.org/TR/xml/#sec-rmd

Chris Diver
fuente
12
Qué significa eso?
dan carter
44
Voté en contra ya que esto debería ser comprensible para los seres humanos normales con un QI medio.
Andrea Silvestri
9

La intención de la standalone=yesdeclaración es garantizar que la información dentro del documento pueda recuperarse fielmente basándose únicamente en la DTD interna, es decir, el documento puede "estar solo" sin referencias externas. La validación de un documento independiente garantiza que los procesadores que no validan tendrán toda la información disponible para analizar correctamente el documento.

La declaración independiente no sirve para nada si un documento no tiene DTD externa, y la DTD interna no tiene referencias de entidad de parámetro, ya que estos documentos ya están implícitamente independientes.

Los siguientes son los efectos reales del uso standalone=yes.

  • Obliga a los procesadores a arrojar un error al analizar documentos con una DTD externa o referencias de entidades de parámetros, si el documento contiene referencias a entidades no declaradas en la DTD interna (con la excepción del texto de reemplazo de entidades de parámetros, ya que no se requiere que los procesadores no validen analizar esto); amp, lt, gt, apos, Y quotson las únicas excepciones

  • Al analizar un documento no declarado como independiente, un procesador no validado puede dejar de analizar el DTD interno tan pronto como encuentre una referencia de entidad de parámetro. Declarar un documento como independiente obliga a los procesadores que no validan a analizar las declaraciones de marcado en la DTD interna incluso después de ignorar una o más referencias de entidades de parámetros.

  • Obliga a los procesadores de validación a arrojar un error si se encuentra alguno de los siguientes en el documento, y sus declaraciones respectivas están en el DTD externo o en el texto de reemplazo de entidad de parámetro:

    • atributos con valores predeterminados, si no tienen su valor provisto explícitamente
    • referencias de entidad (excepto amp, lt, gt, apos, y quot)
    • atributos con tipos tokenizados, si el valor del atributo se modificaría por normalización
    • elementos con contenido de elemento, si hay algún espacio en blanco en su contenido

Un procesador sin validación podría considerar recuperar el DTD externo y expandir todas las referencias de entidades de parámetros para documentos que no son independientes, aunque no tenga la obligación de hacerlo, es decir, la configuración standalone=yespodría mejorar teóricamente el rendimiento de los procesadores sin validación (alerta de spoiler: probablemente no hará la diferencia).


Las otras respuestas aquí son incompletas o incorrectas, la idea errónea principal es que

La declaración independiente es una forma de decirle al analizador que ignore cualquier declaración de marcado en el DTD. El DTD se usa posteriormente solo para validación.

standalone = "yes" significa que el procesador XML debe usar la DTD solo para validación.

Todo lo contrario, declarar un documento como independiente realmente obligará a un procesador no validado a analizar las declaraciones internas que normalmente debe ignorar (es decir, aquellas después de una referencia de entidad de parámetro ignorada). Los procesadores sin validación aún deben usar la información en la DTD interna para proporcionar valores de atributo predeterminados y normalizar los atributos tokenizados, ya que esto es independiente de la validación.

usuario657267
fuente