2009-04-08 3 views
4

Ich habe versucht zu bestätigen, meine Lesung der XML-Spezifikation zu bestätigen. Meine Interpretation ist, dass vordefinierte Entitäten und numerische Zeichenreferenzen sind nicht in Variablennamen erlaubt und Attributnamen, zum Beispiel nicht durch die XML 1.0-Spezifikation erlaubt ist .:Gut formatiertes XML? XML-Referenzen innerhalb von Tag-Namen und Attributnamen

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

Allerdings habe ich einen Parser, der zurückgibt test'''tag für den Tag-Namen und test'''attribute für die Attributnamen, während ein anderer Parser test&apos;&#x27;&#39;tag für den Tag-Namen zurückzugibt und test&apos;&#x27;&#39;attribute für die Attributnamen.

Welcher Parser ist korrekt? Oder sind beide falsch (d. H. Sie sollten einen wohlgeformten Fehler werfen)?

Danke!

+0

Sie haben einige gut zwielichtige Parser dort! Jeder XML-Parser, den ich zur Verfügung habe, bestimmt korrekt, dass das obige Beispiel schlecht geformt ist. – bobince

Antwort

2

Das ist sehr einfach: keine Entitäten können in Namen verwendet werden. Beide "Parser" sind hier falsch. Die XML-Spezifikation definiert dies ganz klar - es gibt keine versteckten Standardregeln; Wenn ein Konstrukt nicht enthalten ist, ist es nicht erlaubt.

Entitäten können nur innerhalb normaler Zeicheninhalte und Attributwerte verwendet werden. Und sie können an anderen Stellen eingefügt werden (Kommentare, Verarbeitungsanweisungen, DTD-Teilmengen), werden jedoch nicht erweitert (d. H. Werden nicht als Entitäten erkannt).

0

Im Graben um bei w3.org, fand ich die folgenden relevanten Teile:

[41] Attribut :: = Name Eq AttValue [VC: Attributwert Typ] [WGB: Keine externen Entity Referenzen] [WGB : Nein < in Attributwerte]

[WGB: Keine externen Entity Referenzen] Links zu:

Wohlgeformtheitsbeschränkung: Keine externen En Tity Referenzen
Attributwerte dürfen keine direkten oder indirekten Entity-Referenzen auf externe Entitäten enthalten.

Namen Links zu:

[5] Name :: = 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- # xEFFFFF]

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

Ja, es ist so klar wie Schlamm! Meine Interpretation davon wäre, dass Sie Hex-Entity-Referenzen verwenden könnten, solange sie in den oben angegebenen Bereichen liegen, Sie jedoch keine vordefinierten Referenzen verwenden können.

Ich würde einen wohlgeformten Fehler erwarten, wenn die Namen nicht diesem entsprechen.

+0

Danke, 17 von 26! Ich lehne mich tatsächlich an keine Entity-Referenzen, da & scheint völlig verboten (siehe Dommers Antwort). – ScottProuty

+0

Ich habe sie sicherlich noch nie so benutzt und würde es persönlich vermeiden. –

2

Es scheint mir, dass sie beide falsch sind.

mit ihm entweder
":" | [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 ist sicherlich nicht glücklich: Nach dem spec nur die folgenden Zeichen in einem Start-Tag sein sollte. Auch < Sauerstoff/>.

Und ... nur zum guten ...Hier ist, was .NET darüber zu sagen hatte:

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

Welche Parser verwenden Sie?

+0

Danke, Dommer! Ich stimme zu, es scheint ein wohlgeformter Fehler zu sein. Es gibt andere Orte in der Spezifikation. wo ausdrücklich gezeigt wird, dass Referenzen und Referenzen erlaubt sind. Sie werden jedoch nicht explizit für Tag-Namen oder Attributnamen angezeigt. Die Parser, die ich teste, werden intern generiert. – ScottProuty