Wie der Leser (auch aus Devtrain) weis, ist XML ein Meta Daten Format. Erst mit der Festlegung von Regeln ( auch Schemas oder DTDs genannt) wird daraus ein Datenformat oder auch einen Schemasprache. Nun müssen diese Daten transportiert werden. Allgemein herrscht der Irrtum vor, das dies meist als "XML Datei" geschieht. Grundsätzlich ist es XML egal wie es seinen Weg findet.
Meist wird aber irgendein Protokoll des Internets verwendet und hier vor allem SMTP (MAIL), FTP ( File Transfer) und HTTP (Filtransfer). Der Ideale Fall ist es aber, wenn die Daten nicht als File sondern als serialisierter Stream fliessen. Für das empfangen von Daten steht das normale HTTP Protokoll offen. So kann in ein DOM Objekt über eine URL ein XML Stream geladen werden. Der Sender ist dabei ein Programm, das die Daten "on the fly" erzeugt. So könnte z.B. der SQL Server direkt per URL angesprochen werden.
Es steht zwar im Code, aber achten Sie immer darauf, das Sie DOM asynchron nutzen, da ansonsten die Anwendung weitermacht ohne die Daten zu haben!
Die offene Frage ist jetzt, wie bringe ich die Daten zurück an den "fernenserver"?
Dafür gib es in der MSXML.DLL ein Objekt Namens XMLHTTP. Damit lassen sich quasi XML Daten per Stream und Post zum Server laden. Am Server muss allerdings jemand diese Daten in Empfang nehmen und etwas damit tun. Wir nennen das hier Listener. Der Listener lauscht auf Port 80 und wird normalerweise als Erweiterung des Webserver implementiert. Dies könnten bei MS eine ISAPI DLL sein oder auch eine ASP Seite. Selbst mit Pearl und Linux lässt sich ein Listener bauen.
Der Sender kann mit jeder Programmierpsrache gebaut werden. Wir nehmen eine ASP Seite.
Auf der Empfänger Seite lauert unser Listener
<% ' Get XML data from client dim xmlReq set xmlReq = server.createobject("Microsoft.XMLDOM") xmlReq.load request %> |
In unserem Beispiel wird der Stream in ein DOM geladen. Sie könnten aber genauso per SAX direkt parsen und in eine DB schreiben. Wenn Sie Ihrem Sender auch eine Antwort senden wollen, können Sie dies per ContentType tun. Am ende schreiben Sie einfach den Inhalt des DOMs in den Response Stream.
set xmlResp = server.createobject("Microsoft.XMLDOM") xmlResp.loadXML "<result>" & time() & "</result>" response.ContentType = "text/xml" xmlResp.Save response |
Wir sind hier schon ganz nahe an einer Plattformübergreifenden Kommunikation. Mit SOAP gibt es ein Protokoll, das es erlaubt, Komponeten genau auf diese Art aber standardisiert über das Web zu nutzen.