2009-02-26 3 views
2

In Programmiersprachen, ich bin Wie werden XML-Namespaces verschachtelt?

namespace foo 
{ 
    namespace bar 
    { 
     void DoIt() 
     { 
     } 
    } 
} 

int main() 
{ 
    foo::bar::DoIt() 
} 

In einem Schema (XSD) zu

verwendet, würde ich ähnliche Dinge tun, wenn complex

<xsd:schema targetNamespace="http://www.stackoverflow.com/foo"> 
<xsd:complexType name="bar1"> 
    ... 
</xsd:complexType> 
<xsd:complexType name="bar2"> 
</xsd:complexType> 
    ... 
<xsd:complexType name="foo1" type = "bar1"> 
    ... 
</xsd:complexType> 
</xsd:schema> 

Konzeptionell definiert, ich möchte bar1 und bar2 in einem http://www.stackoverflow.com/foo::bar Namespace verschachtelt werden (:: entlehnt von C++). Ich habe Beispiele gesehen, die scheinbar ein ganz zweiter Namespace sind, der für das Bar-Zeug definiert ist. In diesen Beispielen wird der Balken in einem zweiten Namespace "http://www.stackoverflow.com/foo/bar" wie im folgenden Beispiel definiert. Dies ist das, was ich einem "verschachtelten" Namespace am nächsten gesehen habe.

So eins kann ich Art ist tun, um die Bar Sachen aus einem anderen Schema importieren

<xsd:schema targetNamespace="http://www.stackoverflow.com/foo" 
    xmlns:bar = "http://www.stackoverflow.com/foo/bar"> 
<xsd:schema namespace="http://www.stackoverflow.com/foo/bar" 
<xsd:complexType name="foo1"> 
    <xsd:element name="bar1Instance" type="bar:bar1"/> 
    ... 
</xsd:complexType> 
</xsd:schema> 

Ein Teil davon ist, dass ich versuche nur grok wie Namespaces in XML unterscheiden vs sagen C++. Gibt es ein Konzept verschachtelter Namespaces in XML oder ist jeder Namespace unabhängig? Wie wird das Konzept verschachtelter Namespaces implementiert oder typischerweise durchgeführt? Ist es wie mein Beispiel oben getan? Sind Namespaces völlig unabhängig oder besteht eine Verschachtelung?

Antwort

6

In XML ist jeder Namespace vollständig unabhängig. Die tatsächliche Zeichenfolge eines Namespace wird nicht sinnvoll ausgewertet. Es ist einfach so. XML-Namespace-Zeichenfolgen sind normalerweise URLs, da dies die Wahrscheinlichkeit erhöht, dass Personen nicht versehentlich den gleichen Namespace für nicht verwandte Schemas auswählen.

Wenn Sie Google, finden Sie Beispiele für "verschachtelte XML-Namespaces." Diese Beispiele sprechen nicht darüber, wonach Sie fragen, nicht im Sinne von C++ - (oder Java oder C# ...) Namespaces. Diese Beispiele zeigen XML-Dokumente mit mehreren verwendeten Namespaces.

Eine XML-Namespace-Zeichenfolge ist einfach eine undurchsichtige und eindeutige Zeichenfolge, die das Schema darstellt. Wenn zwei Namensraumzeichenfolgen sehr ähnlich sind, bedeutet das nichts.

+4

Nur ein nit: XML-Namespaces sind * erforderlich *, um IRIs (Internationalized Resource Identifier) ​​zu sein, was eine Obermenge von URIs ist, was eine Obermenge von URLs darstellt. Dein wirklicher Punkt ist jedoch absolut richtig; Der Parser behandelt den Namespace als vollständig undurchsichtigen String. Ref: http://www.w3.org/TR/REC-xml-names/ – Peeja

+0

@Peeja: Gute Klarstellung. Vielen Dank. – Eddie