back to top   Strukturelle Grundkonzepte

 

Warum ist XML eine Baumstruktur?

Q: Warum sind XML-Dokumente streng hierarchisch als Baum konzipiert? Wäre eine Organisation als Wald (d.h. die Zulassung von mehr als genau einem Wurzelknoten) nicht flexibler?

A: Hierfür gibt es zwei wesentliche Gründe.
Zum einen sind Bäume ein sehr verbreitetes, gut verstandenes und gut untersuchtes Gebiet, so daß für dies Strukturierungsform eine Fülle verschiedener effizienter Algorithmen zur Verarbeitung existiert.
Zu anderen erlaubt die strenge Hierarchisierung von XML den Verzicht auf ein explizites Stromendesymbol (ähnlich einem hervorgehobenen End-of-File Zeichen), da das schließende Tag des Starttags des Wurzelknotens automatisch das Dokument begrenzt. Dieser Aspekt ist insbesondere bei der nicht-dateigebundenen Vererbeitung, etwa bei der Übertragung von XML-Inhalten über Netzleitungen, wichtig, da hierdurch die XML-verarbeitende Kompontente einfacher realisiert werden kann.

back to top   W3Cs XML-Schema

 

Definition einer Stringliste

Q: Warum müssen die einzelnen Einträge einer Liste von Zeichenketten immer in Elemente oder Attribute eingekleidet werden, obwohl mit list eine Möglichkeit zur Bildung von aggregierten Typen besteht?

A: Zwar ist es ohne weiteres syntaktisch möglich eine vermeintliche Stringliste anzulegen, etwa durch nachstehde Definition:

<xs:element name="Document">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="StringList1" type="stringListType"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:simpleType name="stringListType">
        <xs:list itemType="xs:string"/>
    </xs:simpleType>
</xs:element>

Jedoch leistet die Lösung nicht das Gewünschte.
Dies liegt in der lexikalischen Natur des Datentypen string aus XML-Schema Part 2 begründet. Dieser umfaßt neben den Alphabetsymbolen verschiedener Sprachen auch das Leerzeichen (0x20), den Tabulator (0x09) sowie die Zeichen für Zeilenumbruch (0x0A) und Wagenrücklauf (0x0D), die als Separatoren der einzelnen Einträge dienen.
Daher würde die Zeichenkette this is a string nicht als genau ein Eintrag der StringList1 interpretiert, sondern als vier separate Strings betrachtet werden.

Aus diesem Grunde sollten, sofern Leerzeichen in Zeichenketten generell zugelassen sind, die Einzelzeichenketten als eigenständige Attribut- oder Elementinhalte modelliert werden.

back to top   Strukturen und Inhaltsmodelle

 

Warum sind in Elementen, die ausschließlich über elementartigen Inhalt verfügen dürfen Leerzeichen zugelassen?

Q: Weshalb ist das nachfolgend wiedergegebene Dokument gültig (valid und sogar schema valid) zur abgedruckten DTD und zum dargestellten Schema, obwohl es formatierende Leerzeichen enthält, die gemäß den formulierten Inhaltsmodellen (es tritt weder PCDATA noch mixed content auf) nicht zugelassen sind?

XML-Dokument:

<?xml version="1.0" encoding="UTF-8"?>
<Root>
	<Child/>
</Root>

Document Type Definition:

<!ELEMENT Root (Child)>
<!ELEMENT Child EMPTY>

XML Schema:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:element name="Root">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="Child">
					<xs:complexType/>
				</xs:element>
			</xs:sequence>
		</xs:complexType>
	</xs:element>
</xs:schema>

A: Die XML-Spezifikation gestattet im Abschnitt über Elementinhalte ausdrücklich das Auftreten von separierenden white spaces zur Formatierung der Kindelemente.
Die muß nicht durch die DTD oder das zugehörige XML Schema ausgedrückt werden, sondern ist unabhängig davon immer zugelassen.
Auf der anderen Seite bedeutet dies auch, daß in der Konsequenz niemals mit den Mitteln der DTD oder eines Schemas das Auftreten von formatierenden white spaces unterbunden werden kann.

back to top   XPath

 

Q: Sind die XPath-Ausdrücke /node1/node3/node8/self::node8, /node1/node3/node8/self::* und /node1/node3/node8/self äquivalent?

A: /node1/node3/node8/self::* und /node1/node3/node8 sind gleichwertig und liefern daher dieselbe Knotenmenge -- welche nur aus dem Knoten node8 besteht -- als Resultat.
/node1/node3/node8/self ist hingegen kein syntaktisch korrekter XPath, da nach der Benennung der Achse -- in diesem Falle self zwingend der Name eines Knotens (d.h. der Knotentyp) stehen muß. Hierbei sind auch Jokerzeichen wie * zugelassen, jedoch darf diese Angabe keinesfalls fehlen.




separator line
Service provided by Mario Jeckle
Generated: 2004-06-11T07:12:03+01:00
Feedback Feedback       SiteMap SiteMap
This page's original location This page's original location: http://www.jeckle.de/vorlesung/xml/FAQ.html
RDF metadata describing this page RDF description for this page