2016-11-11 10 views
2

Ich möchte so etwas wie dies tun:Ist es möglich, mehrere Namespace-Präfixe in XML zu haben?

<root:secondlevel:thirdlevel 
    xmlns:secondlevel="http://secondlevel.com" 
    xmlns:secondlevel:thirdlevel="http://thirdlevel.com"> 
</root:secondlevel:thirdlevel> 

Gibt es eine Möglichkeit, diese mehrere Ebenen root:secondlevel:thirdlevel als gültige XML zu tun?

Antwort

2

Nein, in XML darf höchstens ein Namespacepräfix vorhanden sein.

Die XML Namespace BNF Regeln für Namen basieren auf QName, die nur eine einzige PrefixedName erlaubt:

QName   ::= PrefixedName | UnprefixedName 
PrefixedName ::= Prefix ':' LocalPart 
UnprefixedName ::= LocalPart 
Prefix   ::= NCName 
LocalPart  ::= NCName 
NCName   ::= Name - (Char* ':' Char*) /* An XML Name, minus the ":" */ 

Weder Prefix noch LocalPart Kolon erlauben (:) Zeichen, so kann es bei die meisten einen Doppelpunkt (und höchstens einen Prefix) Teil zu einem QName.

Side note: mehrere Doppelpunkte sind syntaktisch in der Basisebene XML erlaubt:

STag   ::= '<' Name (S Attribute)* S? '>' 
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] 
NameChar  ::= NameStartChar | "-" | "." | [0-9] | #xB7 | [#x0300-#x036F] | [#x203F-#x2040] 
Name   ::= NameStartChar (NameChar)* 

Aber die W3C XML Recommendation is clear die Doppelpunkte sollte nicht außer für Namensräume Zwecke verwendet werden:

Hinweis:

Die Namespaces in der XML-Empfehlung [XML Names] weisen den Namen, die Doppelpunkte enthalten, eine Bedeutung zu. Daher sollten die Autoren den Doppelpunkt nicht in XML-Namen verwenden, mit Ausnahme von Namespace-Zwecken, , aber XML-Prozessoren müssen den Doppelpunkt als Namenszeichen akzeptieren.

Und Namespaces erlauben nicht mehrere Namespacepräfixe, wie oben gezeigt. auch

Siehe:

+0

Heißt das '' ist gültig? –

+1

Mehrere Doppelpunkte in einem Elementnamen wären technisch *** wohlgeformt *** (auf der Basis-XML-Ebene), aber nicht *** namespace-well-formed ***. (Validität ist ein Schema-Level-Konzept; siehe [Well-formed vs Valid XML] (http://StackOverflow.com/a/25830482/290085) für weitere Details, einschließlich mehr über Namespace-Well-Form. Sie haben gewonnen Ich werde wahrscheinlich einen XML-Parser finden, der *** namespace-well-formed *** Verletzungen ignoriert. Kurz gesagt: Mehrere Namespacepräfixe: Do not. – kjhughes

Verwandte Themen