3 Stimmen

XML-Schema. Verarbeiten von namespace-aware Attributwerten

Ein Teil meines Projekts beinhaltet umfangreiche Transformationen von benutzerdefinierten Schemadokumenten. Ich muss in der Lage sein, Zielnamensräume zu ändern, Typenkreuzverweise zu unterstützen und wsdl auf mehreren Schemadokumenten aufzubauen. Eine der am häufigsten verwendeten Operationen besteht darin, das Namensraumpräfix vor dem Importieren des Schemas in die wsdl-Datei zu ändern. Ich verwende org.xml.sax.ContentHandler und die Methode startPrefixMapping, um Namensräume zu behandeln. Alles funktioniert einwandfrei, es sei denn, ich möchte Elementtypen ändern.

Hier ist ein einfaches Schema-Fragment

das wie folgt in wsdl platziert werden muss:

Das Problem besteht darin, dass einige Attributwerte des Schemas (type in , base in ) namensraumbewusst sind und im obigen Beispiel geändert werden können. Soweit ich sehen kann, sind weder DOM- noch SAX-Parser in der Lage, mit dieser Situation umzugehen, sodass ich derzeit hässliche Zeichenfolgenoperationen verwende, um Namensrauminformationen aus bestimmten Attributwerten abzurufen.

Fehlt mir etwas? Gibt es APIs, Bibliotheken oder andere schema-spezifische Tools, um solche Aufgaben zu bewältigen?

3voto

jtahlborn Punkte 51903

Ja, dies ist ein schwerwiegender Fehler im XML-Schema/WSDL. Die Verwendung von XML-Namensraumpräfixen innerhalb von Attributwerten war ein riesiger Fehler (da die Präfixwerte selbst nicht bedeutsam sind, sondern nur Platzhalter für die tatsächlichen Namensräume). Leider kenne ich keine gute Lösung für das Problem (ich musste praktisch die gleiche Art von Idee implementieren: das Zusammenführen mehrerer benutzerdefinierter Schemata zu einem Schema/WSDL). Ich weiß, dass Xerces eine XML-Schema-Modell-API hat, aber ich weiß nicht, ob es Unterstützung für das Zusammenführen mehrerer Schemata und das Generieren des resultierenden Ausgabes hat.

1voto

Michael Kay Punkte 146092

SAX ist eine sehr niedrige Ebene, die zum Lesen von Schemadokumenten verwendet wird. Sie werden viel Ärger beseitigen, wenn Sie zu einer höheren Ebenenschnittstelle wie XSLT wechseln. Sie werden noch mehr Ärger beseitigen, wenn Sie die Schemadokumente mit einem Schemaprozessor lesen, der sie in ein Schemakomponentenmodell umwandelt - sowohl Xerces als auch Saxon können dies tun, und sie sind nicht die einzigen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X