代码之家  ›  专栏  ›  技术社区  ›  Don Rhummy

在XML中可以有多个名称空间前缀吗?

  •  5
  • Don Rhummy  · 技术社区  · 8 年前

    我想这样做:

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

    有没有办法做到这一点 root:secondlevel:thirdlevel 作为有效的XML?

    1 回复  |  直到 8 年前
        1
  •  5
  •   Community Mr_and_Mrs_D    7 年前

    不,XML中最多只能有一个名称空间前缀。

    这个 XML Namespace 名称的BNF规则基于: QName ,它只允许一个 PrefixedName :

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

    也不 Prefix 也没有 LocalPart 允许冒号( : )字符,因此最多可以有一个冒号(最多一个 前缀 QName .

    Side note : 基本级别XML中语法上允许多个冒号:

    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)*
    

    但是 W3C XML Recommendation is clear 除了名称空间之外,不应使用冒号:

    注:

    XML推荐中的名称空间 [XML Names] 分配 表示包含冒号字符的名称。因此,作者 除了名称空间之外,不应在XML名称中使用冒号, 但是XML处理器必须接受冒号作为名称字符。

    并且名称空间不允许多个名称空间前缀,如上所示。

    另见: