Que signifie la directive «autonome» en XML?

Que signifie la directive ” standalone ” dans un document XML?

La déclaration standalone est un moyen de dire à l’parsingur d’ignorer les déclarations de balisage dans la DTD . La DTD est ensuite utilisée pour la validation uniquement.

À titre d’exemple, considérons la humble . Si vous regardez la DTD XHTML 1.0 , vous voyez une déclaration de balisage indiquant à l’parsingur que les balises doivent être EMPTY et posséder des atsortingbuts src et alt . Lorsqu’un navigateur passe par un document XHTML 1.0 et trouve une , il convient de noter que la DTD requirejs des atsortingbuts src et alt et les ajoute s’ils ne sont pas présents. Il fermera également automatiquement la car elle est censée être VIDE. C’est ce que signifie la spécification XML par “les déclarations de balisage peuvent affecter le contenu du document”. Vous pouvez ensuite utiliser la déclaration standalone pour indiquer à l’parsingur d’ignorer ces règles.

Si oui ou non votre parsingur fait réellement ceci est une autre question, mais un parsingur de validation conforme aux normes (comme un navigateur) devrait.

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 sauf si vous spécifiez également une DTD.

  • La directive autonome est un atsortingbut facultatif de la déclaration XML.
  • Les valeurs valides sont yes et no , no étant la valeur par défaut.
  • L’atsortingbut n’est pertinent que si une DTD est utilisée. (L’atsortingbut n’est pas pertinent lors de l’utilisation d’un schéma au lieu d’une DTD.)
  • standalone="yes" signifie que le processeur XML ne doit utiliser la DTD que pour la validation. Dans ce cas, il ne sera pas utilisé pour:
    • valeurs par défaut pour les atsortingbuts
    • déclarations d’entité
    • normalisation
  • Notez que standalone="yes" peut append des contraintes de validité si le document utilise une DTD externe. Lorsque le document contient des éléments nécessitant une modification du code XML, tels que les valeurs par défaut pour les atsortingbuts, et que standalone="yes" est utilisé, le document est invalide .
  • standalone="yes" peut aider à optimiser les performances du traitement des documents.

Source: le pseudo-atsortingbut autonome n’est pertinent que si une DTD est utilisée

standalone décrit si le document XML actuel dépend d’une déclaration de balisage externe.

Le W3C décrit sa fonction dans “Extensible Markup Language (XML) 1.0 (Fifth Edition)”:

  • 2.9 Déclaration de document autonome

Les déclarations de balisage peuvent affecter le contenu du document, tel que transmis d’un processeur XML à une application. des exemples sont les valeurs par défaut d’atsortingbut et les déclarations d’entité. La déclaration de document autonome, qui peut apparaître comme un composant de la déclaration XML, indique s’il existe ou non de telles déclarations qui semblent externes à l’entité document ou dans les entités parameters. [Définition: une déclaration de balisage externe est définie comme une déclaration de balisage survenant dans le sous-ensemble externe ou dans une entité de paramètre (externe ou interne, cette dernière étant incluse car les processeurs non validés ne sont pas obligés de les lire).]

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

L’intention de la déclaration standalone=yes est de garantir que les informations contenues dans le document peuvent être récupérées fidèlement uniquement sur 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 disponibles pour parsingr 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 de standalone=yes .

  • Force les processeurs à générer une erreur lors de l’parsing des documents avec une référence DTD externe ou une entité de parameters, 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 parameters non requirejs parsingr ceci); amp , lt , gt , apos , et sont les seules exceptions

  • Lors de l’parsing d’un document non déclaré comme autonome, un processeur non validant est libre d’arrêter l’parsing syntaxique de la DTD interne dès qu’il rencontre une référence d’entité de paramètre. La déclaration d’un document en tant que document autonome force les processeurs sans validation à parsingr 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 la validation des processeurs à 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 de l’entité paramètre:

    • atsortingbuts avec des valeurs par défaut, si leur valeur n’est pas explicitement fournie
    • références d’entité (autres que amp , lt , gt , apos et quot )
    • atsortingbuts avec des types tokenisés, si la valeur de l’atsortingbut serait modifiée par la normalisation
    • des éléments avec le contenu de l’élément, s’il y a un espace blanc dans leur contenu

Un processeur non validant peut envisager de récupérer la DTD externe et d’élargir toutes les références d’entité de paramètre pour les documents qui ne sont pas autonomes, même s’il n’a aucune obligation, c.-à-d. alerte spoiler: ça ne changera probablement rien.


Les autres réponses sont incomplètes ou incorrectes, la principale idée fausse est que

La déclaration autonome est un moyen de dire à l’parsingur d’ignorer les déclarations de balisage dans la DTD. La DTD est ensuite utilisée pour la validation uniquement.

standalone = “yes” signifie que le processeur XML ne doit utiliser la DTD que pour la validation.

Bien au contraire, déclarer un document comme autonome obligera un processeur non-validant à parsingr les déclarations internes qu’il doit normalement ignorer (c’est-à-dire celles qui ont une référence d’entité de paramètre ignorée). Les processeurs non validés doivent toujours utiliser les informations de la DTD interne pour fournir des valeurs d’atsortingbut par défaut et normaliser les atsortingbuts tokenisés, car cela est indépendant de la validation.