XML und Textverarbeitungsprogramme

Hallo,

ich bin mir nicht ganz sicher, ob ich hier richtig bin, aber fragen kann man ja trotzdem, dachte ich mir. Ich habe folgendes „Problem“:

Ich soll ein Referat über „XML und Textverarbeitungsprogramme“ halten und hab leider von dieser Materie nicht so viel Ahnung.

Mein Plan ist bisher folgender: Ich habe versucht ein Dokument in Word03, Word07 und Open Office Writer so gleich wie mir möglich zu gestalten.
Dann hab ich mir diese Dokumente in der „Webseitenvorschau“ bzw. „Vorschau im Webbrowser“ anzeigen lassen und mir so den Quelltext der einzelnen Dokumente anzeigen lassen und diesen gespeichert.

Jetzt wollte ich folgendes von euch wissen:

  1. Nach meinen Recherchen ist der Vorteil von .docx bzw. .odt im Vergleich zu .doc, dass diese Dokumente leichter ins Web einfügbar sind und sich auch besser parsen lassen, dass durch die Xml-Struktur das ganze viel besser komprimiert (zip?) und aufgeschlüsselt wird und dass man hier auch direkt Bilder und ähnliches in direkt in das Dokument einarbeiten kann.

Fallen euch noch andere Vorteile / Eigenschaften ein, die ich noch erwähnen muss bzw. bitte korrigiert mich, wenn ich was falsch verstanden habe.

  1. Habe ich jetzt über den Quelltext - die „echte“ Form der Dokumente oder gibt es eine andere Art die Originaldaten hinter dem Textdokument zu sehen bzw. zu öffnen? (Gerade .docx verwundert mich, weil ich hier den Quelltext nur als .txt-Datei und nicht als .htm bzw. ähnliches bekomme.)

  2. Wollte ich das ganze mit einer „echten“ Xml-Datei vergleichen, leider weiß ich aber nicht wie ich das schreiben bzw. erstellen kann. Könnt ihr mir sagen wie man eine DTD bzw. ein Schema schreibt, um eine Tabelle zu erzeugen?

  3. Bin ich für jeden Vorschlag, jede Idee von euch dankbar!

So das war’s erstmal von mir, ich hoffe ich verschwende mit meiner Frage nicht eure Zeit oder verärgere euch irgendwie!

Vielen Dank für eure Zeit und eure Antworten!

Mein Plan ist bisher folgender: Ich habe versucht ein Dokument in Word03, Word07 und Open Office Writer so gleich wie mir möglich zu gestalten.
Dann hab ich mir diese Dokumente in der „Webseitenvorschau“ bzw. „Vorschau im Webbrowser“ anzeigen lassen und mir so den Quelltext der einzelnen Dokumente anzeigen lassen und diesen gespeichert.

Da siehst du aber nicht den Quelltext des Dokuments, sondern lediglich den Quelltext einer nach HTML exportierten Version des Dokuments. Das ist absolut nicht das, was du erwartest. Die Formate sind grundverschieden.

Zu 1: Nein. Der Vorteil von .docx und .odt ist die generelle Offenheit des Quelltextes. .docx- und .odt-Dokumente sind im Prinzip gepackte Ordner. Wenn du die Dateiendung in .zip änderst, kannst du die Dokumente entpacken und siehst so den tatsächlichen Quelltext (ein Haufen XML-Dateien). .doc ist ein reines Binärformat. Aus der verlinkten Seite:

Insbesondere wenn das Dokumentenformat (wie etwa beim .doc-Format von Microsoft Word der Fall) proprietär und somit geistiges Eigentum einer Firma ist, das aus wirtschaftlichen Interessen (Kundenbindung) nicht offen ist (also unbekannt ist, wie diese Formate intern aufgebaut sind, oder der interne Aufbau wird zusätzlich durch Softwarepatente geschützt), lassen sich Informationen aus beschädigten Binärdateien, die die Originalapplikation nicht mehr öffnen kann, kaum mehr restaurieren.

Zu 2: Das habe ich bereits beantwortet.

Zu 3: Die Frage ergibt keinen Sinn. XML ist ein abstraktes Datenauszeichnungsformat. Wie/ob der Inhalt einer XML-Datei grafisch dargestellt wird, ist grundsätzlich nicht definiert. Zum Beispiel XHTML (also die in XML formulierte Variante von HTML) ist lediglich eine Ausprägung eines XML-Formats, für die „willkürlich“ festgelegt wurde, welche Kombination von XML-Tags nach einem bestimmten Dokument-Schema von Clients als „Tabelle“ dargestellt werden soll. Das ist bereits eine Anwendung von XML, also gewissermaßen eine konkrete Realisierung eines abstrakten Konzepts.

Noch mal klar gesagt: XHTML ist eine Anwendung von XML, XHTML/HTML ist auf keinen Fall „gleich“ XML.

Zu 4: Einen generellen Überblick dürften diese beiden Artikel bieten:

Die Etablierung von ODF als offenem Standardformat für „Office“-Dokumente ist eines der Hauptanliegen von Free Software-Advokaten.

Erstmal vielen vielen Dank für die Antwort!

Trotzdem muss ich noch einige Verständnisfragen stellen:

Zu 1. - was ich nicht ganz verstehe: eigentlich werden doch alle Informationen binär übertragen - liegt der Unterschied zwischen .doc und .docx darin, dass die Decordierung bei .docx immer den gleichen Standard hat und bei .doc diese Decodierung erst von Word gemacht wird, oder stehe ich hier wieder auf dem Schlauch?

Zu 3. - in dem Kurs in dem ich das Referat halten soll, lernen wir auch die Grundlagen von XML und einfache Anwendungsbeispiele wie man mit XML (von XHTML hab ich nix gesagt) direkt ein Dokument schreiben kann, dabei sollten wir letztes Mal als Hausaufgabe den Inhalt eines tabellarischen Raumplans als XML-Dokument schreiben - allerdings eben nur den Inhalt, aber keine DTD bzw. kein Schema in dem wir dann die ganzen Informationen zu Schriftart, Schriftgröße, Zeilenabstand oder eben dass das ganze als Tabelle dargestellt werden soll, etc. - genau das würde ich aber gerne versuchen - das Dokument direkt in XML schreiben, so dass es dann die Webdarstellung genauso aussieht wie meine Word bzw. Open Office Writer Dokumente - nur dazu bräuchte ich einen Tipp, wie man in einem Schema bzw. einer DTD eine Tabelle schreibt.

Nocheinmal vielen Dank für eure Zeit und eure Antworten - besonders an MERMSHAUS!

Zu 1: Ja, das stimmt schon: Grundsätzlich wird alles „binär“ (oder sagen wir der Deutlichkeit halber: als Folge von Bytes – „binär“ ist in diesem Kontext leider etwas missverständlich) gespeichert. Als Programmautor hast du dann die Wahl, ob du offenlegst, nach welcher Logik welche Bytes in deinem Speicherformat aufeinander folgen und was sie inhaltlich bedeuten. Grob gesagt: Microsoft hat diese Logik für das .doc-Format nicht veröffentlicht, sodass Word im Grunde die einzige Anwendung ist, die weiß, wie .doc-Dateien korrekt gelesen und geschrieben werden müssen. Andere Programme sehen beim Öffnen von .doc-Dateien nur eine Kette von scheinbar willkürlich angeordneten Bytes, wissen aber nichts damit anzufangen. .doc ist also ein proprietäres (= „geschlossenes“) Binärformat. (Kurioserweise wird auf jeder dieser Wikipediaseiten .doc als Negativbeispiel gewählt. :)) „Binär“ bedeutet hier das Gegenteil zu „Plaintext“. Ein Binärformat ist ein Format, das die Daten in irgendeiner Weise „verschlüsselt“ ablegt, sodass eine bestimmte Logik notwendig ist, um sie korrekt auszulesen. Ein Plaintextformat (etwa HTML oder XML-Formate) erfordert zwar auch Ausleselogik, der Inhalt ist aber ungleich verständlicher.

Die Absicht hinter einem Binärformat besteht üblicherweise darin, den Inhalt der Dateien vor Konkurrenzprodukten zu schützen bzw. den Nutzer zum Einsatz der eigenen Software zu zwingen, weil nur diese in der Lage ist, das Format zu lesen und zu schreiben. Proprietäre Formate werden deshalb in der Regel „binär“ gespeichert.

Es gibt allerdings in beide Richtungen Ausnahmen. Offene Formate, bei denen die Dateigröße entscheidend ist (Audio/Video, Archivierung, …), werden binär gespeichert, die Lese- und Schreiblogik ist jedoch offen dokumentiert, sodass problemlos Software geschrieben werden kann, die mit den Formaten umgehen kann. – Ein gutes Beispiel für ein proprietäres Format, das als Plaintext gespeichert wird, habe ich ehrlichgesagt gerade nicht. Das wäre auch in gewisser Hinsicht ein Widerspruch… Es gibt jedoch proprietäre Formate, die in etwa so aussehen: „3:17:29:Hund:Storch“. Das ist Plaintext, nur verrät niemand, was „3“, „17“ und „29“ bedeuten. „Hund“ und „Storch“ wird man sich im Kontext wohl noch erklären können. :wink:

.docx ist im Gegensatz zu .doc ein offenes Format (siehe letzter Post bzw. Wikipedia). Es ist in Plaintext gespeichert und – auf zig tausend Seiten – dokumentiert. Deine Aussage, dass .docx einem (bekannten) Standard folgt, während bei .doc nur Word weiß, wie es die Binärdaten zu „dekodieren“ hat, passt also ganz gut.

Auf Punkt 3 antworte ich später. Dazu muss weiter ausgeholt werden. :slight_smile:

Zu 3: Wie in der ersten Antwort bereits gesagt: XML ist ein abstraktes Datenauszeichnungsformat, das von sich aus keinerlei Möglichkeit vorsieht, irgendeine Art von Darstellung festzulegen. Grafisch darstellbare XML-Formate sind immer konkrete Realisierungen von XML, für die – etwa in einer begleitenden Dokumentation – festgelegt wurde, wie sie von einem Client angezeigt werden sollen.

Das beste Beispiel dafür ist XHTML (DTD: XHTML 1.0: The Extensible HyperText Markup Language (Second Edition), Darstellungsrichtlinien (mit denen von HTML 4.01 identisch): HTML 4.01 Specification).

Das heißt, wenn du nun ein eigenes XML-Format über eine DTD oder ein Schema definierst und für dieses Format Darstellungsrichtlinien festlegst (etwa in einem begleitenden Dokument), brauchst du zusätzlich einen Client, der genau dieses Format mit der entsprechenden Darstellung deinen Vorgaben gemäß umsetzt. Für XHTML gibt es zahlreiche solcher Clients, für dein Raumplan-Format (nennen wir es mal… RPF) gibt es keine Clientsoftware.

Was also tun, um trotzdem ein RPF-Dokument irgendwie grafisch darstellen zu können? Na ja, es geht hauptsächlich um Tabellen mit Text, und ein Format, das gut darin ist, Tabellen mit Text darzustellen und für das es zahlreiche Client-Programme gibt, ist XHTML. Günstig wäre es also, RPF zum Zwecke der Darstellung irgendwie in XHTML umwandeln zu können. Hier kommt eine weitere praktische Eigenschaft von XML-Formaten zum Tragen: Es gibt für XML-Formate eine spezielle Technologie bzw. ein spezielles Regelvokabular, mit dem das Umwandeln eines Formats (etwa RPF) in ein anderes (etwa XHTML) festgelegt werden kann.[1] Dieses Format zur Festlegung von Umwandlungsregeln nennt sich XSLT und ist wiederum selbst ein in XML definiertes Format. Entsprechenden Konverter-Tools kann dann etwa eine RPF-Datei übergeben werden und zusätzlich eine XSLT-Datei, die festlegt, wie die RPF-Datei umgewandelt werden soll. Der Konverter erstellt daraus automatisch nach den in der XSLT-Datei definierten Regeln eine neue Datei (etwa im XHTML-Format).

Ein solcher Konverter ist auch im Firefox-Browser enthalten. Soll eine RPF-Datei im Firefox dargestellt werden, muss sie lediglich zusammen mit einem Hinweis auf die XSLT-Datei, die von RPF→XHTML „übersetzt“, im Browser aufgerufen werden.

Ein Beispiel:

demo.xml

[code]<?xml version="1.0" encoding="UTF-8"?>

<?xml-stylesheet type="text/xsl" href="rpf_to_xhtml.xsl"?> Deutsch Deutsch Deutsch Englisch Englisch Englisch Mathematik Mathematik Mathematik Informatik Informatik Informatik Sport Sport Sport [/code]

rpf_to_xhtml.xsl:

[code]<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl=„http://www.w3.org/1999/XSL/Transform“ version=„1.0“>
<xsl:output method=„html“/>

<xsl:template name="row">
    <xsl:param name="count" select="1"/>

    <xsl:if test="$count <= 16">
        <tr>
            <td><xsl:value-of select="$count" /></td>
            <xsl:for-each select="/rpf/day">
                <td>
                <xsl:choose>
                    <xsl:when test="course[@hour=$count]">
                        <xsl:value-of select="course[@hour=$count]" />
                    </xsl:when>
                    <xsl:otherwise>-</xsl:otherwise>
                </xsl:choose>
                </td>
            </xsl:for-each>
        </tr>
        <xsl:call-template name="row">
            <xsl:with-param name="count" select="$count + 1"/>
        </xsl:call-template>
    </xsl:if>
</xsl:template>

<xsl:template match="/">
    <html>
        <head>
            <title>rpf_to_xhtml.xsl</title>
        </head>
        <body>
            <table border="1">
                <tr>
                    <th>#</th>
                    <th>Montag</th>
                    <th>Dienstag</th>
                    <th>Mittwoch</th>
                    <th>Donnerstag</th>
                    <th>Freitag</th>
                </tr>

                <xsl:call-template name="row">
                    <xsl:with-param name="count" select="8"/>
                </xsl:call-template>
            </table>
        </body>
    </html>
</xsl:template>

</xsl:stylesheet>[/code]

Rufst du nun demo.xml im Firefox auf, solltest du eine HTML-Tabelle als Ausgabe bekommen.


[1] Das Zielformat muss nicht zwingend ebenfalls ein XML-Format sein.