XML-Erstellung mit Director (MX-Magazin 2006/01)

In diesem Bereich befinden sich Artikel und Tutorials zum Thema Director.

Moderatoren: Bär, Admin

Antworten
Admin
Site Admin
Beiträge: 41344
Registriert: 07.02.2006, 2006 16:09
Wohnort: München
Kontaktdaten:

XML-Erstellung mit Director (MX-Magazin 2006/01)

Beitrag von Admin » 09.08.2006, 2006 14:55

XML Erstellung mit Director

Wann haben Sie das letzte Mal mit Director eine XML Datei erzeugt?
Das geht mir Director leider nicht, sagen Sie? Doch und es ist sogar ganz einfach. Wie einfach und nützlich das Lesen und besonders das Schreiben von XML Dateien in Director ist, soll der folgende Artikel zeigen.
XML ist in aller Munde. Bereits seit einigen Jahren ist in der Internet- und Multimediawelt immer wieder von XML zu hören, davon wie einfach, praktisch, universell einsetzbar etc. XML für alle Arten von Anwendungen ist. Dabei klingt es oft, als ob hier von einer Anwendung ähnlich einer Datenbank oder einem Format ähnlich einem Video Codec die Rede ist. Doch XML ist davon alles und nichts, die „eXtensible Markup Language“ bezeichnet lediglich einen Standard zur Erstellung von Dokumenten (siehe auch http://de.wikipedia.org/wiki/XML) dessen Grundgedanke es ist Form und Inhalt von einander zu trennen.

Was bedeutet das in der Praxis? Wenn Sie z.B. in Ihrer Anwendung ein Auswahlmenü als Dropdown Feld anbieten möchten, liegen zunächst einmal Daten zugrunde deren Struktur noch nichts über die Art der Darstellung aussagt. Nehmen wir den einfachen Fall einer Auswahlliste für die Anrede in einem Formular. Der Inhalt, also die Anredevarianten Herr, Frau usw. sagt noch nichts über die Form aus in der dieser Inhalt dargestellt werden soll. Sie planen vielleicht eine Auswahlliste in Form eines Dropdown Feldes, es wäre aber auch möglich dieses in einem Formular über Radio Buttons darzustellen. Das Prinzip der Trennung von Form und Inhalt besagt nun, dass zum Zeitpunkt der Festlegung der Inhalt die Form der späteren Darstellung noch nicht bekannt sein muss. Und ein solches Prinzip macht sehr viel Sinn, denn in vielen Fällen wird an Form und Inhalt zu unterschiedlichen Zeitpunkten und von unterschiedlichen Personen gearbeitet. Dieses Prinzip funktioniert in beiden Richtungen, es kann sowohl der Inhalt als auch die Form zuerst definiert werden, weil sie völlig unabhängig von einander sind.

Was hat das nun mit XML zu tun und wie kann XML als Standard hier weiter helfen? XML ist die Schnittstelle zwischen Form und Inhalt, das bedeutet mit Inhalten die in einer XML Datei gespeichert sind kann völlig unabhängig von der Form der Darstellung dieser Inhalte gearbeitet werden. Und der größte Vorteil ist, da XML ein offizieller system- und applikationsunabhängiger Standard ist, kann sowohl die Verwaltung der Inhalte als auch ihre spätere Darstellung in beliebigen Formen und Anwendungen stattfinden.

XML in der Praxis.
Das klingt nun alles sehr abstrakt und bedarf vielleicht eines Beispiels um das Prinzip etwas zu verdeutlichen. Bleiben wir beim Beispiel der Anrede. Die Inhalte sind klar, wir definieren zunächst nur den einen Fall „Herr“. Weitere Anreden können später hinzukommen, doch dank XML ist das zu diesem Zeitpunkt völlig unerheblich für den weiteren Arbeitsverlauf. Für die Verwaltung dieser Inhalte verwenden wir eine sehr einfache XML Struktur:

Code: Alles auswählen

<PERSONENDATEN>
<ANREDE>Herr</ANREDE>
<PERSONENDATEN>
Mehr Informationen zum Thema XML
Dieses Beispiel einer XML-Baumstruktur ist sehr vereinfacht und zeigt längst nicht alle Möglichkeiten diese Inhalte in XML abzubilden. Eine sehr gute Einführung zum Thema XML und über die unterschiedlichen Formate gibt es bei Wikipedia unter dem Stichwort XML: http://de.wikipedia.org/wiki/XML

Diese Struktur ist sehr einfach zu verstehen und mit jedem Texteditor zu erstellen. Da die Struktur ein sogenanntes „wohl geformtes“, also den XML-Standards entsprechendes XML Dokument ergibt, ist nun jeder XML-Parser in der Lage die Inhalte zu verstehen und darzustellen.

Allerdings sagt die Struktur noch nichts über die Form der Darstellung aus, eine grundlegende Bedingung des XML-Prinzips. Ob wir die Inhalte nun mit einem Texteditor erstellen und mit einer Webapplikation darstellen möchten, oder lieber die Erstellung in Director und die Darstellung in Flash machen möchten ist völlig frei gestellt. Da es in diesem Artikel aber um die Arbeit mit Director geht, soll nun konkret um die Erstellung der XML Struktur sowie die Darstellung der Inhalte in Director behandelt werden. Die Auswahlmöglichkeiten der Anrede könnten in einem Dropdown Feld dargestellt werden oder auch einfach nur als Liste angezeigt werden. Neben der Anzeige, soll es aber auch im die Erstellung und Speicherung von Inhalten gehen, so dass andere Anwendungen die XML verstehen auch in der Lage sind die Daten anzuzeigen.

Director und XML. Director verfügte schon in Version 7 über ein im Lieferumfang enthaltenes XML-Parser Xtra, also ein Xtra das in der Lage war „wohl geformte“ XML Dateien zu lesen und die Daten Director zur Verfügung zu stellen. Mit Hilfe dieses Xtras kann die Struktur eines XML Dokuments ausgelesen und auf beliebige Inhalte zugegriffen werden. Es gibt sogar die Möglichkeit die XML Baumstruktur in eine Lingo Eigenschaftsliste umwandeln zu lassen, wobei schon jetzt vorausgeschickt werden sollte, dass diese Funktion in der Praxis nicht so hilfreich ist wie sie scheint. Leider verfügt das XML-Parser Xtra außerdem nicht über die Möglichkeit XML-Strukturen zu erstellen, noch dazu gibt es bis zur Director Version MX2004 einen „Memory Leak“ Bug der schon so manchen Entwickler mit Abstürzen zur Verzweiflung gebracht hat.
Aufgrund dieser und einiger anderer Unzulänglichkeiten des XML-Parser Xtras, hat der englische Director Entwickler Andy White einen eigenen Lingo XML-Parser geschrieben, der in Form einer Sammlung von Lingo Scripts frei erhältlich ist und den Vorteil bietet, dass kein Xtra nötig ist.

XML Lingo Parser & Tutorial
Die jeweils aktuellste Version von Andy White’s Lingo XML Parser ist unter folgender URL in Form einer Director Castlib erhältlich:

http://www.cathode.co.uk/director/xml/p ... parser.cst

Ein sehr gutes Tutorial für die Arbeit mit dem XML Parser von Andy White finden Sie unter:

http://www.shocknet.org.uk/defpage.asp?pageID=90

Die dritte und mittlerweile beste und leistungsstärkste Variante mit XML in Director zu arbeiten, ist das im Lieferumfang von Director enthaltene Flash Asset Xtra. Dieses Xtra stellt eine Schnittstelle zum Flash Player zur Verfügung und ermöglicht es in Director Funktionen von Flash und sogar Action Script über Lingo zu nutzen. Der Vorteil bei dieser Variante ist, dass das Xtra von Macromedia gepflegt, aktualisiert und mit jeder Director Version kostenlos ausgeliefert wird (wichtiger Hinweis für alle Director MX Anwender: ein Update des Flash Asset Xtras kann kostenlos bei Macromedia unter
http://www.macromedia.com/cfusion/knowl ... d=tn_16830 heruntergeladen werden). Da Flash seit Version 6 mit einem nativen XML Objekt über die Fähigkeit verfügt XML nicht nur zu parsen, sondern auch zu erstellen, eignet sich das Flash Asset Xtra ideal um XML Dateien mit Director zu lesen und zu schreiben. Flash selbst kann keine Dateien erstellen, genau hier aber liegt einer der vielen Stärken von Director. Die Kombination der beiden macht also die Lösung des Problems perfekt.

Bevor es um die konkrete Programmierung geht, noch eine kurze Übersicht zu den Möglichkeiten der Arbeit mit XML in Director:


XML mit Director

1. XML-Parser Xtra.
Vorteile: Im Lieferumfang enthalten, einfache Handhabung in Lingo, Erklärung und Beispiele in Director bzw. Lingo Hilfe
Nachteile: Memory Leak Bug in einigen Versionen, langsamer Parser, XML Erstellung nicht möglich

2. XML Lingo Parser
Vorteile: Reiner Lingo Parser, kein Xtra, stellt die gleichen Funktionen zur Verfügung wie das XML-Parser Xtra
Nachteile: Scripts müssen in Anwendung integriert werden, keine deutschsprachige Hilfe, keine Updates

3. Flash Asset Xtra
Vorteile: Im Lieferumfang enthalten, Hilfe & Tutorials für Flash XML Objekt vorhanden, XML Erstellung möglich
Nachteile: Keine Dokumentation in Director, Flash Hilfe wird benötigt, Debugging umständlich
Hinweis: Alle drei Varianten sind kostenlos erhältlich und auch in Shockwave anwendbar.


Das Flash Asset Xtra.
Die Arbeit mit dem Flash Asset Xtra in Director kann grundsätzlich über zwei verschiedene Wege geschehen:

1. Ein Flash Darsteller wird erzeugt oder importiert, auf die Bühne gezogen und über Lingo gesteuert. Mit jedem Flash Sprite wird eine eigene Instanz des Flash Players erzeugt, daher ist zu beachten, dass bei gleichzeitiger Nutzung vieler Flash Sprites auf der Bühne die Performance stark beeinträchtigt werden kann. Seit Director MX2004 gibt es allerdings die Möglichkeit, dass mehrere Flash Sprites sich eine Flash Player Instanz über das commonPlayer System Property teilen (siehe auch http://www.macromedia.com/devnet/direct ... 04_04.html), dadurch kann dieses Problem umgangen werden. Über Lingo kann dann auf Flash Variablen über Funktionen wie sprite().getVariable() oder Action Script Funktionen über Callbacks mit sprite().setCallback() zugegriffen werden (siehe auch Director Hilfe zum Thema Flash Asset Xtra).

2. In vielen Fällen wird kein Flash Film, sondern lediglich eine bestimmte Funktion des Flash Players bzw. ein Objekt benötigt, so dass die Erzeugung eines Flash Darstellers nicht zwingend notwendig ist. Über die Funktion newObject() stellt das Flash Asset Xtra die Möglichkeit des direkten Zugriffs auf ein natives Flash Objekt zur Verfügung. Ein solches Objekt ist z.B. das Array Objekt in Flash, mit der Funktion newObject(„Array“) wird also eine Objekt Referenz zu einem Action Script Array an Lingo übergeben. Der Vorteil liegt auf der Hand, von Lingo aus kann jedes Flash Objekt erstellt und alle ihm zur Verfügung stehenden Funktionen genutzt werden.

Beispiel der Nutzung des Flash Array Objekts
Das Flash Array Objekt stellt viele praktische Funktionen zur Verfügung die Lingo Listen nicht bieten :

Code: Alles auswählen

arr = newObject("Array")
put arr
-- <FlashObject>
put arr.length
-- 0.0000
arr.push("foo")
arr.push("bar")
put arr.length
-- 4.0000
put arr.join(",")
-- "foo,bar"

Das XML Objekt.
Das XML Objekt ist genau wie das Array Objekt lediglich eines der vielen nativen Objekte die der Flash Player zur Verfügung stellt (siehe auch http://www.macromedia.com/devnet/flash/ ... bject.html). Die zur Verfügung stehenden Funktionen und Eigenschaften dieses Objekts findet man natürlich nicht in der Director Hilfe, sondern nur in der Flash Hilfe. Wer Flash nicht als lokal Programm auf seinem Rechner installiert hat, kann sich auch online die Macromedia Livedocs unter http://livedocs.macromedia.com/flash/8_de/index.html ansehen, dort gibt es viele gute Artikel und Hilfestellungen zum XML Objekt, auch in Deutsch.
Um ein XML Objekt zu erzeugen und in Lingo zu nutzen, wird genau wie beim Flash Array Objekt lediglich die newObject() Funktion verwendet:

Code: Alles auswählen

XML_Obj = newObject("XML")
XML_Obj.ignoreWhite = true
Dem Objekt stehen nun alle Funktionen und Eigenschaften zur freien Verfügung, so dass zunächst das ignoreWhite Property auf TRUE gesetzt werden sollte damit Whitespace, also Leerzeichen und Leerzeilen beim Parsen von XML ignoriert werden und es nicht zu Fehlern kommt. Nun kann das Objekt verwendet werden um XML Daten zu lesen oder sogar XML zu erstellen.

XML parsen.
Beim Parsen von XML wird dem Objekt einfach ein String mit den XML Daten übergeben. Soll eine XML Datei geladen und geparsed werden, so kann dies entweder über Flash mit Hilfe der onLoad() und setCallback() Funktionen oder in Lingo mit dem FileIO Xtra oder anderen Xtras gemacht werden. Dazu später noch ein paar Worte.
Nehmen wir an, dass die XML Daten bereits als String in Lingo übergeben werden:

Code: Alles auswählen

XML_Obj = newObject("XML")
XML_Obj.ignoreWhite = true
XML_Obj.parseXML("<foo><bar></bar></foo>")
put XML_Obj.status
-- 0.0000
put XML_Obj.toString()
-- "<foo><bar></foo>"
Das Beispiel zeigt wie einfach die Arbeit mit dem Flash Objekt in Lingo ist, da die Funktionen wie native Lingo Funktionen genutzt werden können. Das bis jetzt gezeigte kann jedoch auch das XML-Parser Xtra, der Unterschied wird erst deutlich wenn es darum geht eine XML Struktur zu erzeugen.

XML erstellen.
Die Erstellung einer XML Struktur wird durch die Festlegung eines wohlgeformten (well-formed) XML Dokuments definiert. Dabei übernimmt das XML Objekt des Flash Players diese Aufgabe völlig selbstständig über die entsprechenden Funktionen wie createElement() oder appendChild(), ohne dass die Tags von Hand geschrieben werden müssen. Lediglich die XML Deklaration mit einem optionalen Encoding Attribut zu Beginn des Dokument ist wichtig, damit auch andere XML Parser damit klar kommen:

Code: Alles auswählen

XML_Obj = newObject("XML")
XML_Obj.ignoreWhite = true
XML_OBj.xmlDecl = "<xml>"
myNode = XML_Obj.createElement("foo")
XML_Obj.appendChild(myNode)
put XML_Obj.toString()
-- "<xml><foo>"
Auf diese Weise können nun noch weitere Child Nodes und sogar Attribute hinzugefügt oder auch entfernt werden. Ein kompletter XML Editor lässt sich auf diese Weise mit Hilfe des Flash Asset Xtras erstellen, auch wenn das angesichts der vielen bereits frei verfügbaren XML Editoren nicht sehr sinnvoll wäre.

Das XML-DB Objekt.
Die Arbeit mit XML im Rahmen einer Multimedia Anwendung kann vieles erleichtern. Stellen Sie sich vor, eine Anwendung soll auf Daten zugreifen die von einer noch nicht bekannten Applikation erstellt werden. Oder umgekehrt, Ihre Director Anwendung soll einer noch nicht definierten anderen Anwendung Daten zur Verfügung stellen. In solchen Fällen bietet XML das ideale Format zum Austausch von Daten an. Dabei kann es sich um Wetterberichtsdaten in XML handeln, die ein Webserver zur Verfügung stellt, um Blog- oder Forumsbeiträge die in einer Director Anwendung online oder offline dargestellt werden sollen. Oder ein Redaktionssystem in Director soll Daten in XML Form einer oder mehreren online Anwendungen zur Verfügung stellen. Die Liste der möglichen Anwendungen ist praktisch unendlich.

Da die Arbeit mit einer XML Struktur teilweise etwas umständlich ist, bietet es sich an diese Struktur in eine Struktur von Lingo Listen zu übersetzen, da die Arbeit mit Listen in Lingo einfacher ist. Mit Hilfe eines einfachen Parent Scripts in Lingo soll ein Objekt erzeugt werden, dass eine XML Datei laden, ihre Struktur in mehrdimensionale Eigenschaftslisten übersetzen und diese ebenso umgekehrt in eine XML Struktur wandeln und einer XML Datei speichern kann. Die XML Struktur wird dabei in eine Eigenschaftsliste übersetzt.

Nehmen wir als Beispiel an, eine Adressliste oder eine Songliste von Musikstücken soll in einer Director Anwendung verwaltet werden. Allerdings soll es zu einem späteren Zeitpunkt auch möglich sein diese Liste in Flash oder einer PHP Anwendung darstellen zu können. Aus diesem Grund sollen die Daten in einer XML Datei gespeichert werden. In Director verwalten wir aber die Daten in Form einer Eigenschaftsliste, weil es die Arbeit erleichtert und wir es gewohnt sind damit zu arbeiten:

Code: Alles auswählen

myAddressList = ["ADDRESS": [["NAME": "Macromedia", "STREET": "601 Townsend Street", "ZIP": "94103", "CITY": "San Francisco"]]]
Diese Eigenschaftsliste könnte man nun als eine Form von Datenbank bezeichnen, deren Tabelle „ADDRESS“ einen Adresseintrag besitzt. Die Form ermöglicht einem Director Entwickler später die einfache Darstellung der Adressliste in beliebiger grafischer Form. Für die Speicherung dieser Daten soll die Liste jedoch in XML umgewandelt werden und später folgendermaßen aussehen:

Code: Alles auswählen

<ADDRESS><NAME>Macromedia</NAME><STREET>601 Townsend Street</STREET><ZIP>94103</ZIP><CITY>San Francisco</CITY></ADDRESS>
Diese XML Struktur kann von jedem XML Parser gelesen und weiter verwendet werden. Das Parent Script des eigenen XML-DB Objekts soll also Daten in einer vorgegebenen Form von Eigenschaftslisten in XML umwandeln und umgekehrt XML aus einer Datei in eben diese Eigenschaftslisten parsen können. Ein fertiges, frei nutzbares und dokumentiertes Lingo Parent Script liegt der CD zum Heft bei, die ausführliche Beschreibung im Einzelnen würde an dieser Stelle zu weit führen. Die Anwendung des Objekts soll lediglich zeigen wie praktisch eine solche Funktionalität ist:

Beispiel 1 der Nutzung des XML-DB Objekts

Code: Alles auswählen

xmldb = (script "Class: XML-DB").new("DATABASE")
xmldb.mAddTable("ADDRESS")
xmldb.mAddRow("ADDRESS", ["NAME": "Macromedia", "STREET": "601 Townsend Street", "ZIP": "94103", "CITY": "San Francisco"])
xmldb.mAddRow("ADDRESS", ["NAME": "Adobe Systems ", "STREET": "345 Park Avenue", "ZIP": "95110-2704", "CITY": "San Jose"])
xmldb.mAddTable("MUSIC")
xmldb.mAddRow("MUSIC", ["ARTIST": "Madonna", "TITLE": "Holiday", "LENGTH": "3 min."])
xmldb.mAddRow("MEETINGS", ["DATE": "15.05.2006", "PLACE": "Hamburg", "TOPIC": "Meeting"])
xmldb.mAddRow("MEETINGS", ["DATE": "01.07.2006", "PLACE": "Berlin", "TOPIC": "Walk in the park"])
myFile = the moviePath & "test_db.xml"
xmldb.mSaveXML(myFile)
-- "<xml><DATABASE><ADDRESS><NAME>Macromedia</NAME><STREET>601 Townsend Street</STREET><ZIP>94103</ZIP><CITY>San Francisco</CITY></ADDRESS><ADDRESS><NAME>Adobe Systems </NAME><STREET>345 Park Avenue</STREET><ZIP>95110-2704</ZIP><CITY>San Jose</CITY></ADDRESS><MUSIC><ARTIST>Madonna</ARTIST><TITLE>Holiday</TITLE><LENGTH>3 min.</LENGTH></MUSIC><MEETINGS><DATE>15.02.2006</DATE><PLACE>Hamburg</PLACE><TOPIC>Meeting</TOPIC></MEETINGS><MEETINGS><DATE>01.03.2006</DATE><PLACE>Berlin</PLACE><TOPIC>Walk in the park</TOPIC></MEETINGS></DATABASE>"
Auf die gleiche Weise kann mit Hilfe des XML-DB Objekts eine mit dem Objekt erstellte XML Datei wieder geladen und in eine Eigenschaftsliste umgewandelt werden:

Beispiel 2 der Nutzung des XML-DB Objekts

Code: Alles auswählen

xmldb = (script "Class: XML-DB").new("DATABASE")
myFile = the moviePath & "test_db.xml"
xmldb.mLoadXML (myFile)
-- ["ADDRESS": [["NAME": "Macromedia", "STREET": "601 Townsend Street", "ZIP": "94103", "CITY": "San Francisco"], ["NAME": "Adobe Systems ", "STREET": "345 Park Avenue", "ZIP": "95110-2704", "CITY": "San Jose"]], "MUSIC": [["ARTIST": "Madonna", "TITLE": "Holiday", "LENGTH": "3 min."]], "MEETINGS": [["DATE": "15.02.2006", "PLACE": "Hamburg", "TOPIC": "Meeting"], ["DATE": "01.03.2006", "PLACE": "Berlin", "TOPIC": "Walk in the park"]]]
Fazit.
Director ist nicht nur im Umgang mit Medientypen unterschiedlichster Art ein versatiles und leistungsstarkes Tool, sondern zeigt auch im Umgang mit zukunftssicheren Datenformaten wie XML seine Stärken. Die Arbeit mit XML erleichtert nicht nur den Austausch von Daten mit anderen Anwendungen, sie macht auch die eigene Anwendung unabhängig von Format Änderungen im Laufe des Projekts oder bei zukünftigen Aktualisierungen.

http://www.directordevelopers.com/forum ... xml-db.zip

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast