2009-04-08 11 views
4

J'ai cherché à confirmer ma lecture de la spécification XML. Mon interprétation est que les entités prédéfinies et des références de caractères numériques ne sont pas autorisés dans les noms de balises et les noms d'attribut, par exemple, ce n'est pas autorisé par la spécification XML 1.0 .:Bien formé XML? Références XML dans les noms de balises et les noms d'attributs

<root> 
<test&apos;&#x27;&#39;tag test&apos;&#x27;&#39;attribute="one"/> 
</root> 

Cependant, j'ai un analyseur qui retourne test'''tag pour le nom de la balise et test'''attribute le nom d'attribut, tandis qu'un autre analyseur retourne test&apos;&#x27;&#39;tag pour le nom de la balise et test&apos;&#x27;&#39;attribute pour le nom d'attribut.

Quel analyseur est correct? Ou sont-ils tous les deux faux (c'est-à-dire qu'ils devraient lancer une erreur bien formée)?

Merci!

+0

Vous avez des parseurs bien douteux! Chaque analyseur XML dont je dispose correctement détermine correctement l'exemple ci-dessus. – bobince

Répondre

2

Ceci est très simple: aucune entité ne peut être utilisée dans les noms. Les deux "analyseurs" ont tort ici. La spécification XML le définit assez clairement - il n'y a pas de règles par défaut cachées; Si une construction n'est pas incluse, elle n'est pas autorisée.

Les entités ne peuvent être utilisées que dans le contenu de caractères normaux et les valeurs d'attribut. Et ils peuvent être inclus dans d'autres endroits (commentaires, instructions de traitement, sous-ensembles DTD) mais ne seront pas développés (c'est-à-dire ne sont pas reconnus en tant qu'entités).

0

En creusant autour de w3.org, je trouve les pièces pertinentes suivantes:

[41] Attribute :: = Nom Eq ValeurAtt [VC: valeur de l'attribut Type] [WFC: Non Entité externe Références] [WFC : Non < en valeurs d'attribut]

[WFC: Non entité externe Références] liens vers:

contrainte: Non externe formedness en Références
Les valeurs d'attribut NE DOIVENT PAS contenir de références d'entités directes ou indirectes à des entités externes.

liens Nom à:

[5] Nom :: = NameStartChar (NameChar) *

[4] NameStartChar :: = ":" | [A-Z] | "_" | [a-z] | [# xC0- # xD6] | [# xD8- # xF6] | [# xF8- # x2FF] | [# x370- # x37D] | [# x37F- # x1FFF] | [# x200C- # x200D] | [# x2070- # x218F] | [# x2C00- # x2FEF] | [# x3001- # xD7FF] | [# xF900- # xFDCF] | [# xFDF0- # xFFFD] | [# x10000- # xEFFFF]

[4a] NameChar :: = NameStartChar | "-" | "." | [0-9] | # xB7 | [# x0300- # x036F] | [# x203F- # x2040]

Oui, c'est aussi clair que de la boue! Mon interprétation de ceci serait que vous pourriez utiliser des références d'entités hexadécimales tant qu'elles tombent dans les plages spécifiées ci-dessus mais que vous ne pourriez pas utiliser de références prédéfinies.

Je m'attendrais à une erreur bien formée lorsque les noms ne sont pas conformes à cela.

+0

Merci, 17 sur 26! Je ne penche en fait vers aucune référence d'entité, puisque & semble être complètement rejetée (voir la réponse de dommer). – ScottProuty

+0

Je ne les ai jamais vu utilisés de cette manière et personnellement je l'éviterais. –

2

Il me semble qu'ils ont tous deux tort. Selon le spec, seuls les caractères suivants doivent être dans une balise de début:

":" | [A-Z] | "_" | [a-z] | [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] | [#x370-#x37D] | [#x37F-#x1FFF] | [#x200C-#x200D] | [#x2070-#x218F] | [#x2C00-#x2FEF] | [#x3001-#xD7FF] | [#xF900-#xFDCF] | [#xFDF0-#xFFFD] | [#x10000-#xEFFFF] | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] 

XMLSpy est certainement pas satisfait non plus. Ni < Oxygène/>.

Et ... juste pour faire bonne mesure ...voici ce que .NET avait à dire à ce sujet:

The '&' character, hexadecimal value 0x26, cannot be included in a name. Line 1, position 12. 

Quels analyseurs utilisez-vous?

+0

Merci, dommer! Je suis d'accord qu'il semble y avoir une erreur de bonne forme. Il y a d'autres endroits dans la spécification. où les PEReferences et les références sont explicitées comme étant autorisées. Mais ils ne sont pas explicitement affichés pour les noms de balises ou les noms d'attributs. Les analyseurs que je suis en train de tester sont générés en interne. – ScottProuty

Questions connexes