JavaRush /Java-Blog /Random-DE /XML in Java: Was ist das?

XML in Java: Was ist das?

Veröffentlicht in der Gruppe Random-DE
Hallo! Heute lernen wir ein anderes Datenformat namens XML kennen. Das ist ein sehr wichtiges Thema. Wenn Sie an echten Java-Anwendungen arbeiten, werden Sie mit ziemlicher Sicherheit auf XML-bezogene Probleme stoßen. Dieses Format wird fast überall in der Java-Entwicklung verwendet (wir erfahren weiter unten genau, warum), daher empfehle ich Ihnen, die Vorlesung nicht „schräg“ zu lesen, sondern alles gründlich zu verstehen und gleichzeitig zusätzliche Literatur/Links zu studieren :) Dies Zeit wird definitiv nicht verschwendet. Beginnen wir also mit den einfachen Fragen – „Was“ und „Warum“!

Was ist XML?

XML steht für eXtensible Markup Language. Möglicherweise kennen Sie bereits eine der Auszeichnungssprachen: Sie haben von HTML gehört, das zum Erstellen von Webseiten verwendet wird :) Was ist XML - 1HTML und XML sehen sogar ähnlich aus:
HTML 1
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML 1
<headline>title</headline>
<paragraph>paragraph</paragraph>
<paragraph>paragraph</paragraph>
HTML 2
<h1>title</h1>
<p>paragraph</p>
<p>paragraph</p>
XML 2
<chief>title</chief>
<paragraph>paragraph</paragraph>
<paragraph>paragraph</paragraph>
Mit anderen Worten: XML ist eine Sprache zur Beschreibung von Daten.

Warum wird XML benötigt?

XML wurde ursprünglich zur bequemeren Speicherung und Übertragung von Daten, auch über das Internet, erfunden. Es verfügt über eine Reihe von Vorteilen, die es ihm ermöglichen, diese Aufgabe erfolgreich zu bewältigen. Erstens ist es sowohl für Menschen als auch für Computer leicht lesbar. Ich denke, Sie können leicht verstehen, was diese XML-Datei beschreibt:
<?xml version="1.0" encoding="UTF-8"?>
<book>
   <title>Harry Potter and the Philosopher’s Stone</title>
   <author>J. K. Rowling</author>
   <year>1997</year>
</book>
Auch der Computer versteht dieses Format problemlos. Zweitens gibt es keine Kompatibilitätsprobleme bei der Übertragung von einem Computer auf einen anderen, da die Daten in einem einfachen Textformat gespeichert werden. Es ist wichtig zu verstehen, dass XML kein ausführbarer Code, sondern eine Datenbeschreibungssprache ist . Nachdem Sie die Daten mithilfe von XML beschrieben haben, müssen Sie Code schreiben (z. B. in Java), der diese Daten senden/empfangen/verarbeiten kann.

Wie funktioniert XML?

Sein Hauptbestandteil sind Tags: Dies sind die Dinge in spitzen Klammern:
<book>
</book>
Es gibt öffnende und schließende Tags. Das abschließende Symbol hat ein zusätzliches Symbol – „ /“, dies ist im obigen Beispiel zu sehen. Zu jedem öffnenden Tag muss ein entsprechendes schließendes Tag gehören. Sie zeigen an, wo die Beschreibung jedes Elements in der Datei beginnt und endet. Tags können verschachtelt werden! In unserem Buchbeispiel hat das Tag <book> drei Untertags: <title> , <author> und <year> . Dies ist nicht auf eine Ebene beschränkt: Untertags können eigene Untertags usw. haben. Dieses Design wird als Tag-Baum bezeichnet. Schauen wir uns den Baum am Beispiel einer XML-Datei mit der Beschreibung eines Autohauses an:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
Hier haben wir ein Top-Level-Tag – <carstore> . Es wird auch „root“ genannt – Root-Tag. <carstore> hat ein untergeordnetes Tag, <car>. <car> wiederum hat auch drei eigene untergeordnete Tags – <model>, <year> und <price>. Jedes Tag kann Attribute haben – zusätzliche wichtige Informationen. In unserem Beispiel hat das <model>-Tag ein Attribut „lang“ – die Sprache, in der der Name des Modells geschrieben ist:
<model lang="en">Scania R 770</model>
Auf diese Weise können wir angeben, dass der Titel auf Englisch verfasst ist. Unser <price>-Tag hat ein „Währungs“-Attribut.
<price currency="US dollar">150000.00</price>
Auf diese Weise können wir angeben, dass der Preis für das Auto in US-Dollar angegeben ist. Daher verfügt XML über eine „selbstbeschreibende“ Syntax . Sie können alle Informationen hinzufügen, die Sie zur Beschreibung der Daten benötigen. Sie können am Anfang der Datei auch eine Zeile hinzufügen, die die XML-Version und die Codierung angibt, in der die Daten geschrieben werden. Es heißt „ prolog “ und sieht so aus:
<?xml version="1.0" encoding="UTF-8"?>
Wir verwenden XML Version 1.0 und UTF-8-Kodierung. Dies ist nicht notwendig, kann aber sinnvoll sein, wenn Sie beispielsweise in Ihrer Datei Texte in verschiedenen Sprachen verwenden. Wir haben erwähnt, dass XML für „Extensible Markup Language“ steht, aber was bedeutet „erweiterbar“? Dadurch eignet es sich hervorragend für die Erstellung neuer Versionen Ihrer Objekte und Dateien. Wir möchten zum Beispiel, dass unser Autohaus auch Motorräder verkauft! Gleichzeitig müssen wir im Programm beide Versionen von <carstore> unterstützen – sowohl die alte (ohne Motorräder) als auch die neue. Hier ist unsere alte Version:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
</carstore>
Und hier ist das neue, erweiterte:
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">20000.00</price>
   </car>
   <car category="sport">
       <title lang="en">Ferrari 360 Spider</title>
       <year>2018</year>
       <price currency="US dollar">150000.00</price>
   </car>
   <motorcycle>
       <title lang="en">Yamaha YZF-R6</title>
       <year>2018</year>
       <price currency="Russian Ruble">1000000.00</price>
       <owner>Vasia</owner>
   </motorcycle>
   <motorcycle>
       <title lang="en">Harley Davidson Sportster 1200</title>
       <year>2011</year>
       <price currency="Euro">15000.00</price>
       <owner>Petia</owner>
   </motorcycle>
</carstore>
So einfach und unkompliziert haben wir die Beschreibung von Motorrädern zu unserer Datei hinzugefügt :) Gleichzeitig müssen wir für Motorräder absolut nicht die gleichen untergeordneten Tags festlegen wie für Autos. Bitte beachten Sie, dass Motorräder im Gegensatz zu Autos ein Element <Eigentümer> haben – den Eigentümer. Dies hindert einen Computer (oder auch eine Person) nicht daran, die Daten zu lesen.

Unterschiede zwischen XML und HTML

Wir haben bereits gesagt, dass XML und HTML optisch sehr ähnlich sind. Daher ist es sehr wichtig zu wissen, wie sie sich unterscheiden. Erstens werden sie für unterschiedliche Zwecke verwendet. HTML – zum Markieren von Webseiten. Wenn Sie beispielsweise eine Website erstellen müssen, können Sie mithilfe von HTML Folgendes angeben: „Das Menü sollte sich in der oberen rechten Ecke befinden.“ Es sollte diese und jene Knöpfe haben.“ Mit anderen Worten: Der Zweck von HTML besteht darin, Daten anzuzeigen. XML – zum Speichern und Übertragen von Informationen in einer für Menschen und Computer geeigneten Form. Dieses Format enthält keine Anweisungen, wie diese Daten angezeigt werden sollen: Es hängt vom Code des Programms selbst ab. Zweitens weisen sie einen wesentlichen technischen Unterschied auf. HTML-Tags sind vordefiniert. Mit anderen Worten: Um eine Überschrift zu erstellen (z. B. eine große Inschrift am Anfang der Seite), werden in HTML nur die Tags <h1></h1> verwendet (für kleinere Überschriften - <h2></h2>, < h3></h3>). Sie können in HTML keine Überschriften erstellen, die Tags mit unterschiedlichen Titeln verwenden. XML verwendet keine vordefinierten Tags. Sie können den Tags beliebige Namen geben – <header>, <title>, <idontknow2121>.

Konfliktlösung

Die Freiheit, die XML bietet, kann auch zu einigen Problemen führen. Beispielsweise kann dieselbe Entität (z. B. ein Auto) von einem Programm für verschiedene Zwecke verwendet werden. Wir haben zum Beispiel eine XML-Datei, die Maschinen beschreibt. Allerdings waren sich unsere Programmierer im Vorfeld nicht einig. Und jetzt enthält unser XML neben Daten von echten Autos auch Daten von Spielzeugmodellen! Darüber hinaus haben sie die gleichen Eigenschaften. Unser Programm erhält die folgende XML-Datei. Wie können wir ein echtes Auto von einem Spielzeugmodell unterscheiden?
<?xml version="1.0" encoding="UTF-8"?>
<carstore>
   <car category="truck">
       <model lang="en">Scania R 770</model>
       <year>2005</year>
       <price currency="US dollar">200000.00</price>
   </car>
   <car category="sedan">
       <title lang="en">Ford Focus</title>
       <year>2012</year>
       <price currency="US dollar">100.00</price>
   </car>
</carstore>
Dabei helfen uns Präfixe und Namensräume. Um in unserem Programm Spielzeugautos von echten zu unterscheiden (und im Allgemeinen alle Spielzeugdinge von ihren echten Prototypen), führen wir zwei Präfixe ein – „echt“ und „Spielzeug“.
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
Jetzt kann unser Programm zwischen Entitäten unterscheiden! Alles mit dem Präfix „Spielzeug“ wird als Spielzeug klassifiziert :) Allerdings sind wir noch nicht fertig. Um Präfixe verwenden zu können, müssen wir jedes davon als Namespace registrieren. Eigentlich ist „Registrieren“ ein starkes Wort :) Sie müssen sich nur einen eindeutigen Namen für jeden von ihnen ausdenken. Es ist wie bei Klassen: Eine Klasse hat einen Kurznamen ( Cat) und einen vollständigen Namen mit allen Paketen ( zoo.animals.Cat) . Um eindeutige Namespaces zu erstellen, wird normalerweise ein URI verwendet . Manchmal wird hier die Internetadresse ersetzt, wobei die Funktionen und der Zweck dieses Namensraums ausführlich beschrieben werden. Dies muss jedoch keine gültige Internetadresse sein. Sehr oft verwenden Projekte einfach URI-ähnliche Zeichenfolgen, die dabei helfen, die Hierarchie von Namespaces zu verfolgen. Hier ist ein Beispiel:
<?xml version="1.0" encoding="UTF-8"?>
<carstore xmlns:real="http://testproject.developersgroup1.companyname/department2/namespaces/real"
         xmlns:toy="http://testproject.developersgroup1.companyname/department2/namespaces/toy">
<real:car category="truck">
   <model lang="en">Scania R 770</model>
   <year>2005</year>
   <price currency="US dollar">200000.00</price>
</real:car>
<toy:car category="sedan">
   <title lang="en">Ford Focus</title>
   <year>2012</year>
   <price currency="US dollar">100.00</price>
</toy:car>
</carstore>
Natürlich gibt es im Internet keine Seite unter der Adresse http://testproject.developersgroup1.companyname/department2/namespaces/real. Aber es gibt nützliche Informationen: Für die Erstellung ist die Entwicklergruppe „developersgroup1“ aus der Abteilung „department2“ verantwortlich der „echte“ Namensraum. Wenn Sie neue Namen hinzufügen oder mögliche Konflikte mit ihnen besprechen müssen, wissen wir, an wen wir uns wenden können. Manchmal wird eine echte Internetadresse mit einer Beschreibung dieses Namensraums als eindeutiger Name für einen Namensraum verwendet. Wenn es sich beispielsweise um ein großes Unternehmen handelt und sein Projekt von Millionen Menschen auf der ganzen Welt genutzt wird. Dies geschieht jedoch nicht immer: Auf Stackoverflow wird dieses Problem diskutiert . Grundsätzlich ist die Anforderung, URIs als Namen für Namespaces zu verwenden, nicht streng: Sie können einfach zufällige Zeichenfolgen verwenden. Diese Option funktioniert auch:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Die Verwendung von URIs bietet jedoch eine Reihe von Vorteilen. Mehr dazu können Sie hier lesen .

Kern-XML-Standards

XML-Standards sind eine Reihe von Erweiterungen, die XML-Dateien zusätzliche Funktionen hinzufügen. XML hat viele Standards, aber wir schauen uns nur die wichtigsten an und finden heraus, was sie AJAX , einem der bekanntesten XML-Standards, ermöglichen. Damit können Sie den Inhalt einer Webseite ändern, ohne sie neu laden zu müssen! Hört sich cool an? :) Sie können diese Technologie hier persönlich ausprobieren . XSLT – ermöglicht die Konvertierung von XML-Text in andere Formate. Mit XSLT können Sie beispielsweise XML in HTML umwandeln! Der Zweck von XML besteht, wie bereits erwähnt, darin, Daten zu beschreiben und nicht darin, sie anzuzeigen. Aber mit XSLT können wir diese Einschränkung umgehen! Hier ist eine Sandbox mit einem funktionierenden Beispiel, in der Sie selbst sehen können, wie es funktioniert :) XML DOM – ermöglicht Ihnen das Abrufen, Ändern, Hinzufügen oder Entfernen einzelner Elemente aus einer XML-Datei. Hier ist ein kleines Beispiel, wie es funktioniert. Wir haben eine Books.xml-Datei:
<bookstore>
   <book category="cooking">
       <title lang="en">Everyday Italian</title>
       <author>Giada De Laurentiis</author>
       <year>2005</year>
       <price>30.00</price>
   </book>
   <book category="children">
       <title lang="en">Harry Potter</title>
       <author>J K. Rowling</author>
       <year>2005</year>
       <price>29.99</price>
   </book>
</bookstore>
Darin sind zwei Bücher. Bücher haben ein solches Element wie einen Titel – <title>. Und hier können wir mit JavaScript alle Buchtitel aus unserer XML-Datei holen und den ersten davon auf der Konsole ausgeben:
<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
    if (this.readyState == 4 && this.status == 200) {
  myFunction(this);
  }
};
xhttp.open("GET", "books.xml", true);
xhttp.send();

function myFunction(xml) {
    var xmlDoc = xml.responseXML;
  document.getElementById("demo").innerHTML =
  xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue;
}
</script>

</body>
</html>
Auch hier empfehle ich, zu sehen, wie dieses Beispiel mit einer Sandbox funktioniert :) DTD („Dokumenttypdefinition“) – ermöglicht Ihnen, eine Liste zulässiger Elemente für eine Entität in einer XML-Datei zu definieren. Wir arbeiten beispielsweise an einer Buchladen-Website und alle Entwicklungsteams haben vereinbart, dass für das Buchelement nur die Attribute „Titel“, „Autor“ und „Jahr“ in den XML-Dateien angegeben werden sollten. Doch wie können wir uns vor Unaufmerksamkeit schützen? Sehr leicht!
<?xml version="1.0"?>
<!DOCTYPE book [
       <!ELEMENT book (title,author,year)>
       <!ELEMENT title (#PCDATA)>
       <!ELEMENT author (#PCDATA)>
       <!ELEMENT year (#PCDATA)>
       ]>

<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
</book>
Hier haben wir eine Liste gültiger Attribute für <book> definiert. Versuchen Sie dort ein neues Element hinzuzufügen und Sie erhalten sofort eine Fehlermeldung!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Fehler! „Element mainhero ist hier nicht erlaubt“ Es gibt viele andere XML-Standards. Sie können sich mit jedem von ihnen vertraut machen und versuchen, tiefer in den Code auf der WC3-Website einzutauchen (Abschnitt „Wichtige XML-Standards“). Und im Allgemeinen: Wenn Sie Informationen zu XML benötigen, finden Sie dort fast alles :) Nun, unsere Vorlesung ist zu Ende. Es ist Zeit, sich wieder den Aufgaben zuzuwenden! :) Auf Wiedersehen!
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION