2012-03-30 8 views
0

Ich fand diesen sehr hilfreichen Artikel auf WSDL auf http://msdn.microsoft.com/en-us/library/ms996486.aspx, wie auf SO in einem anderen Post irgendwo empfohlen.Ist die Verwendung von XML-Namespaces korrekt?

Ich frage mich jedoch, ob es in diesem Beispiel keinen Fehler gab.

Hier ist der (vereinfacht) Schema:

<xs:schema 
     targetNamespace="http://example.org/math/types/" 
     xmlns="http://example.org/math/types/" 
    > 
    <xs:complexType name="MathInput"> 
     <xs:sequence> 
      <xs:element name="x" type="xs:double"/> 
      <xs:element name="y" type="xs:double"/> 
     </xs:sequence> 
    </xs:complexType> 
    <xs:element name="Add" type="MathInput"/> 
</xs:schema> 

Hier ist die Instanz (in SOAP aufgeführt):

<SOAP-ENV:Envelope 
    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
> 
    <SOAP-ENV:Body> 
     <m:Add xmlns:m="http://example.org/math/types/"> 
      <x>3.14159265358979</x> 
      <y>3.14159265358979</y> 
     </m:Add> 
    </SOAP-ENV:Body> 
</SOAP-ENV:Envelope> 

Meine Unsicherheit über die < x> und < y> Elemente. Ist es o.k. dass sie unqualifiziert sind?

[Update] Wird die XML-Instanz anhand des angegebenen Schemas validiert?

Antwort

0

Es hängt davon ab, was Sie wollen. Wenn ich die folgende XPath gegen Ihre XML ausführen:

//*[namespace-uri()='http://example.org/math/types/' and local-name()='x'] 

keine Elemente zurückgegeben werden.

Wenn ich Ihre XML wie folgt ändern: -

<m:x>3.14159265358979</m:x> 

Das Element zurückgegeben wird.

Wenn Sie X und Y unqualifizierte verlassen wollen, ein XPath wie diese wird sie ausgraben: -

//*[namespace-uri()='http://example.org/math/types/' and local-name()='Add']/x 
+0

Schöne Antwort! Ich mag die sehr praktischen Beispiele, die Sie verwenden, um zu erklären, was vor sich geht. Auf diese Weise kann ich meine X-Path Fähigkeiten gleichzeitig auffrischen :-). Das Beispiel ist nicht mein eigenes und deshalb habe ich mich nur gefragt, ob sie einen Fehler gemacht haben und vergessen haben, x und y zu qualifizieren, oder ob es einen toleranten XML-Validierungsmodus gab, dem es nichts ausmachte, wenn Sie vergessen haben, die Präfixe hinzuzufügen. – Student

+0

Ich denke, ich könnte genauer sein und fragen: Wird die XML-Instanz gegen das gegebene Schema validieren? – Student

+0

Ja, mit dem Schema, das Sie angegeben haben, wird der XML-Code für dieses Schema validiert. Ich habe es mit einem Tool namens OxygenXml überprüft. Wenn Sie an der XSD-Validierung arbeiten, empfehle ich Ihnen dringend, es herunterzuladen. –

2

Es ist ein unkonventionelles XML-Design, und ich es nicht gern, aber es ist durchaus möglich, . Das Schema gibt nicht elementFormDefault = "Qualified" an, daher befinden sich die lokalen Elemente x und y in keinem Namespace.

+0

+1 Genau richtig. "unqualifiziert" gibt an, dass Elemente aus dem Zielnamespace nicht mit dem Namespacepräfix qualifiziert werden müssen. –

Verwandte Themen