2016-04-13 3 views
1

Ein QName ist ein Namespace-qualifizierter Name. Hier ist XML mit zwei QNames:Warum ist es besser, XML-QNames statisch aufzulösen, als XML-QNames dynamisch aufzulösen?

<ac:aircraft xmlns:ac="http://www.aircraft.org"> 
    <ac:altitude>12,000 feet</ac:altitude> 
</ac:aircraft> 

Die beiden abgekürzt QNames sind:

ac:aircraft 
ac:altitude 

Die erweiterte QNames sind:

{http://www.aircraft.org}aircraft 
{http://www.aircraft.org}altitude 

XML-Parser kennen die Regeln für Kurznamen Umwandlung (abgekürzt Namen) zu langen Namen (erweiterte Namen).

Die abgekürzte Form der Namen ist statisch - bei Parse-Zeit - auf die langen Namen auflösbar.

QNames kann auch in Daten verwendet werden. In der folgenden XML, der Wert des <log> Element ist ein QName:

<network-traffic xmlns:network="http://www.network-traffic.org"> 
     <log>network:client-error</log> 
</network-traffic> 

XML-Parser arbeiten nur auf Markup, keine Daten. Daher konvertiert ein XML-Parser den Kurznamen nicht in den Langnamen. Die Zuordnung von Kurzname zu Langname muss von einer übergeordneten Anwendung wie einem XSLT-Prozessor oder einem XML-Schema-Validierer vorgenommen werden. Mit anderen Worten, die Auflösung von Kurzname zu Langname muss dynamisch erfolgen, nicht statisch.

Frage: Warum ist es besser, kurze Namen zu langen Namen statisch aufzulösen? Was sind die Nachteile der dynamischen Auflösung von kurzen Namen zu langen Namen? Können Sie ein konkretes Beispiel dafür nennen, wo Probleme entstehen, wenn kurze Namen dynamisch in lange Namen aufgelöst werden müssen? Was sind die praktischen Vorteile für die statische Analyse von QNames?

+0

Nicht sicher, warum Sie die Frage stellen, so ist es schwierig, sinnvoll zu reagieren. Kannst du erklären, warum du es wissen willst? – kimbert

+0

Auf der XML-Dev-Liste charakterisierte Michael Kay einige der Probleme mit XML-Namespaces. Er schrieb: Wenn eine abgekürzte Form des Namens erlaubt ist, sollte sie immer statisch auf den langen Namen auflösbar sein.Dies ist bei "QNames in content" nicht möglich, da die Softwarekomponente, die die Regeln für die Konvertierung von Kurznamen in lange Namen kennt (der XML-Parser), das Vorhandensein eines Kurznamens nicht erkennen kann und daher nicht kann es ausweiten; Es muss daher die Zuordnung von Kurznamen zu Langnamen für andere Komponenten im System verfügbar machen. ... Ich möchte das besser verstehen. –

+0

verwandt: [Verwenden von qualifizierten Namen (QNames) als Bezeichner in XML-Inhalten] (https://www.w3.org/2001/tag/doc/qnameids-2004-03-17) –

Antwort

1

Ich denke, der Punkt von Michael ist, dass Namespacepräfixe als eine lexikalische Bequemlichkeit angesehen werden sollten. Der echte qualifizierte Name ist ein (Namespace, Name) -Paar, kein (Prefix, Name) -Paar. Ein einzelner Namespace kann unter Verwendung verschiedener Präfixe dargestellt werden, sogar innerhalb desselben Dokuments.
Die Unterscheidung ist oft egal. Wenn die Namespace-Bindungen verfügbar sind, ist es trivial, von einem Präfix in einen Namespace zu konvertieren. Einige Entwickler werden jedoch faul und schreiben Code, der von bestimmten Namespacepräfixen abhängt. Das ist eine fragile Strategie, denn wenn ein Teil des XML-Infosets an anderer Stelle kopiert wird, kann sich die Hierarchie der Namespace-Bindungen ändern, und die Bedeutung dieser Präfixe könnte sich ebenfalls ändern. Um dagegen zu wappnen, sollten Anwendungen, die XML-Infosätze verarbeiten, keine APIs anbieten, die direkten Zugriff auf das Präfix bieten (außer für den Zweck der Manipulation der Präfix-zu-Namespace-Bindungen). Stattdessen sollte das Info-Set den vollständigen Namespace für jeden Knoten enthalten. Wenn Sie jemals einen XPath-Prozessor innerhalb eines Programms aufgerufen haben, ist dieses Problem möglicherweise aufgetreten. XPath ist Präfix-bewusst, und es ist oft notwendig, ein "Namespace-Kontext" -Objekt für den XPath-Prozessor einzurichten, bevor ein XPath-Ausdruck ausgeführt wird. Andernfalls können die Präfixe im XPath-Ausdruck falsch interpretiert werden.

Verwandte Themen