Que signifie la standalone
directive ' ' dans un document XML?
La standalone
déclaration est un moyen de dire à l'analyseur d'ignorer toutes les déclarations de balisage dans la DTD . La DTD est ensuite utilisée uniquement pour la validation.
Par exemple, considérons l'humble <img>
tag. Si vous regardez la DTD XHTML 1.0 , vous voyez une déclaration de balisage indiquant à l'analyseur que les <img>
balises doivent être vides et posséder src
et des alt
attributs. Lorsqu'un navigateur passe par un document XHTML 1.0 et trouve une <img>
étiquette, il faut remarquer que la DTD exige src
et les alt
attributs et les ajouter si elles ne sont pas présents. Il fermera également automatiquement la <img>
balise car elle est censée être VIDE. C'est ce que la spécification XML entend par «les déclarations de balisage peuvent affecter le contenu du document». Vous pouvez ensuite utiliser la standalone
déclaration pour dire à l'analyseur d'ignorer ces règles.
Que votre analyseur le fasse ou non est une autre question, mais un analyseur de validation conforme aux normes (comme un navigateur) devrait le faire.
Notez que si vous ne spécifiez pas de DTD, la déclaration autonome «n'a pas de sens», il n'y a donc aucune raison de l'utiliser à moins que vous ne spécifiiez également une DTD.
standalone=yes
, les déclarations de balisage ne sont pas ignorées, au lieu de cela, elles entraînent un XML non valide. Cela vous dérangerait-il si je modifiais cela dans la réponse?yes
etno
, oùno
est la valeur par défaut.standalone="yes"
signifie que le processeur XML doit utiliser la DTD pour la validation uniquement. Dans ce cas, il ne sera pas utilisé pour:standalone="yes"
peut ajouter des contraintes de validité si le document utilise une DTD externe. Lorsque le document contient des éléments qui nécessiteraient une modification du XML, tels que des valeurs par défaut pour les attributs, etstandalone="yes"
est utilisé, le document n'est pas valide .standalone="yes"
peut aider à optimiser les performances du traitement des documents.Source: le pseudo-attribut autonome n'est pertinent que si une DTD est utilisée
la source
standalone
décrit si le document XML actuel dépend d'une déclaration de balisage externe.Le W3C décrit son objectif dans «Extensible Markup Language (XML) 1.0 (Fifth Edition)»:
la source
http://www.w3.org/TR/xml/#sec-rmd
la source
L'intention de la
standalone=yes
déclaration est de garantir que les informations contenues dans le document peuvent être fidèlement récupérées uniquement sur la base de la DTD interne, c'est-à-dire que le document peut être "autonome" sans références externes. La validation d'un document autonome garantit que les processeurs non validants disposeront de toutes les informations pour analyser correctement le document.La déclaration autonome ne sert à rien si un document n'a pas de DTD externe et que la DTD interne n'a pas de référence d'entité de paramètre, car ces documents sont déjà implicitement autonomes.
Voici les effets réels de l'utilisation
standalone=yes
.Force les processeurs à générer une erreur lors de l'analyse des documents avec une DTD externe ou des références d'entité de paramètre, si le document contient des références à des entités non déclarées dans la DTD interne (à l'exception du texte de remplacement des entités de paramètre car les processeurs non validants ne sont pas tenus de analyser ceci);
amp
,lt
,gt
,apos
Etquot
sont les seules exceptionsLors de l'analyse d'un document non déclaré comme autonome, un processeur non validant est libre d'arrêter l'analyse de la DTD interne dès qu'il rencontre une référence d'entité de paramètre. La déclaration d'un document comme autonome oblige les processeurs non validants à analyser les déclarations de balisage dans la DTD interne même après avoir ignoré une ou plusieurs références d'entité de paramètre.
Force les processeurs de validation à générer une erreur si l'un des éléments suivants se trouve dans le document et que leurs déclarations respectives se trouvent dans la DTD externe ou dans le texte de remplacement d'entité de paramètre:
amp
,lt
,gt
,apos
etquot
)Un processeur non validant pourrait envisager de récupérer la DTD externe et d'étendre toutes les références d'entité de paramètre pour les documents qui ne sont pas autonomes, même s'il n'est pas obligé de le faire, c'est-à-dire que le réglage
standalone=yes
pourrait théoriquement améliorer les performances des processeurs non validants (alerte de spoiler: cela ne fera probablement pas de différence).Les autres réponses ici sont soit incomplètes soit incorrectes, la principale idée fausse est que
Au contraire, déclarer un document comme autonome forcera en fait un processeur non validant à analyser les déclarations internes qu'il doit normalement ignorer (c'est-à-dire celles après une référence d'entité de paramètre ignorée). Les processeurs non validants doivent toujours utiliser les informations de la DTD interne pour fournir des valeurs d'attribut par défaut et normaliser les attributs à jetons, car cela est indépendant de la validation.
la source