John Squirrels
Niveau
San Francisco

XML i Java

Udgivet i gruppen
Hej! I dag vil vi introducere et andet dataformat kaldet XML. Dette er et meget vigtigt emne. Når du arbejder med rigtige Java-applikationer, vil du næsten helt sikkert støde på XML-relaterede opgaver. I Java-udvikling bruges dette format næsten universelt (vi finder ud af hvorfor nedenfor), så jeg anbefaler, at du ikke overfladisk gennemgår denne lektion, men hellere får en grundig forståelse af alt og også studerer yderligere litteratur/links :) vil bestemt ikke være spild af tid. Så lad os starte med de nemme ting: "hvad" og "hvorfor"!

Hvad er Java XML?

XML står for eXtensible Markup Language. Du er måske allerede bekendt med et opmærkningssprog — har du hørt om HTML, som bruges til at oprette websider :) Hvad er XML?  - 1HTML og XML har endda et lignende udseende:
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>
Med andre ord er XML et sprog til at beskrive data.

Hvorfor har du brug for XML?

XML blev oprindeligt opfundet for mere bekvemt at gemme og sende data, herunder via internettet. Det har flere fordele, der hjælper dig med at opnå dette. For det første er det let at læse af både et menneske og en computer. Jeg tror, ​​du nemt kan forstå, hvad denne XML-fil beskriver:
<?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>
En computer forstår også nemt dette format. For det andet, da dataene er gemt som almindelig tekst, vil der ikke være nogen kompatibilitetsproblemer, når vi overfører dem fra en computer til en anden. Det er vigtigt at forstå, at XML ikke er eksekverbar kode – det er et databeskrivelsessprog. Når du har beskrevet data ved hjælp af XML, skal du skrive kode (for eksempel i Java), der kan sende/modtage/behandle disse data.

Hvordan er XML opbygget?

Hovedkomponenten er tags: disse er tingene i vinkelparenteser:
<book>
</book>
Der er åbningsmærker og lukkemærker. Det afsluttende tag har et ekstra symbol (" / "), som det kan ses i eksemplet ovenfor. Hvert åbningsmærke skal have et lukkemærke. De viser, hvor beskrivelsen af ​​hvert element i filen begynder og slutter. Tags kan indlejres! I vores bogeksempel har <book>-tagget 3 indlejrede tags: <title>, <author> og <year>. Dette er ikke begrænset til ét niveau af indlejring: indlejrede tags kan have deres egne indlejrede tags osv. Denne struktur kaldes et tag-træ. Lad os se på dette træ ved hjælp af en eksempel-XML-fil, der beskriver en bilforhandler:
<?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>
Her har vi et tag på øverste niveau: <carstore>. Det kaldes også et rodelement. <carstore> har et underordnet tag: <car>. <bil> har til gengæld også 3 underordnede tags: <model>, <år> og <pris>. Hvert tag kan have attributter, som indeholder yderligere vigtig information. I vores eksempel har <model>-tagget en "lang"-attribut, som angiver det sprog, der bruges til at registrere modelnavnet:
<model lang="en">Scania R 770</model>
Her angiver vi, at navnet er skrevet på engelsk. Vores <price>-tag har en "valuta"-attribut.
<price currency="US dollar">150000.00</price>
Her angiver vi, at bilens pris er angivet i amerikanske dollars. XML har således en "selv-beskrivende" syntaks. Du kan tilføje enhver information, du har brug for til at beskrive dataene. Derudover kan du øverst i filen tilføje en linje, der angiver XML-versionen og den kodning, der bruges til at skrive dataene. Dette kaldes "prolog", og det ser sådan ud:
<?xml version="1.0" encoding="UTF-8"?>
Vi bruger XML version 1.0 og UTF-8-kodning. Dette er ikke nødvendigt, men det kan være nyttigt, hvis din fil for eksempel bruger tekst på forskellige sprog. Vi nævnte, at XML betyder "eXtensible Markup Language", men hvad betyder "extensible"? Det betyder, at den er perfekt til at skabe nye versioner af dine objekter og filer. Antag for eksempel, at vi også vil begynde at sælge motorcykler hos vores bilforhandler! Når det er sagt, har vi brug for, at vores programbehov understøtter begge versioner af <carstore>: den gamle (uden motorcykler) og den nye. Her er vores gamle 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>
Og her er den nye udvidede:
<?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>
Så nemt og enkelt er det at tilføje en beskrivelse af motorcykler til vores fil :) Desuden behøver vi absolut ikke have de samme børnemærker til motorcykler som til biler. Bemærk venligst, at motorcykler, i modsætning til biler, har et <owner>-element. Dette forhindrer ikke computeren (eller mennesket) i at læse dataene.

Forskelle mellem XML og HTML

Vi har allerede sagt, at XML og HTML ligner hinanden meget i udseende. Det gør det meget vigtigt at vide, hvordan de adskiller sig. For det første bruges de til forskellige formål. HTML er til markering af websider. For eksempel, mens du opretter en hjemmeside, kan du bruge HTML til at specificere: "Menuen skal være i øverste højre hjørne. Den skal have sådanne og sådanne knapper". HTMLs opgave er med andre ord at vise data. XML er til lagring og afsendelse af information i en form, der er praktisk for mennesker og computere. Dette format indeholder ingen indikation af, hvordan disse data skal vises: det afhænger af koden for det program, der læser dem. For det andet er der en stor teknisk forskel. HTML-tags er foruddefinerede. Med andre ord bruger du kun <h1></h1> ved at oprette en HTML-header (f.eks. en stor billedtekst øverst på siden). tags (<h2></h2> og <h3></h3> bruges til mindre overskrifter). Du kan ikke oprette HTML-headers ved hjælp af andre tags. XML bruger ikke foruddefinerede tags. Du kan give tags et hvilket som helst navn, du ønsker: <header>, <title>, <idontknow2121>.

Konfliktløsning

Den frihed, som XML giver, kan føre til nogle problemer. For eksempel kan en og samme enhed (for eksempel en bil) bruges af et program til forskellige formål. For eksempel har vi en XML-fil, der beskriver biler. Vores programmører nåede dog ikke til en forudgående aftale indbyrdes. Og nu kan vi ud over data om rigtige biler finde data om legetøjsbiler i vores XML! Desuden har de de samme egenskaber. Lad os sige, at vores program læser i sådan en XML-fil. Hvordan skelner vi en rigtig bil fra en legetøjsbil?
<?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>
Her vil præfikser og navneområde hjælpe os. For at skelne legetøjsbiler fra rigtige i vores program (og faktisk alt legetøj fra deres rigtige modstykker), introducerer vi to præfikser: "rigtigt" og "legetøj".
<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>
Nu vil vores program være i stand til at skelne mellem de forskellige enheder! Alt der har legetøjspræfikset vil blive behandlet som legetøj :) Vi er dog ikke færdige endnu. For at bruge præfikser skal vi registrere hver af dem som et navneområde. Faktisk er "registrer" et stærkt ord :) Vi skal simpelthen finde på et unikt navn til hver af dem. Det er ligesom med klasser: en klasse har et kort navn ( Cat ) og et fuldt kvalificeret navn, der inkluderer alle pakker ( zoo.animals.Cat). En URI bruges normalt til at oprette et unikt navneområde. Nogle gange gøres dette ved hjælp af en internetadresse, hvor funktionerne i dette navneområde er beskrevet. Men det behøver ikke at være en gyldig internetadresse. Meget ofte bruger projekter simpelthen URI-lignende strenge, der hjælper med at spore navnerumshierarkiet. Her er et eksempel:
<?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>
Selvfølgelig er der ingen hjemmeside på "http://testproject.developersgroup1.companyname/department2/namespaces/real" Men denne streng indeholder nyttig information: udviklerne af gruppe 1 i afdeling 2 er ansvarlige for at skabe det "rigtige" navneområde . Hvis vi skal introducere nye navne eller diskutere mulige konflikter, ved vi, hvor vi skal henvende os. Nogle gange bruger udviklere en rigtig beskrivende webadresse som et unikt navneområde. Det kan for eksempel være tilfældet for en stor virksomhed, hvis projekt vil blive brugt af millioner af mennesker rundt om i verden. Men dette er bestemt ikke altid gjort: Stack Overflow har en diskussion om dette spørgsmål. Generelt er der ikke noget strengt krav om at bruge URI'er som navneområdenavne: du kan også blot bruge tilfældige strenge. Denne mulighed ville også fungere:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Når det er sagt, har brugen af ​​en URI flere fordele. Det kan du læse mere om lige her .

Grundlæggende XML-standarder

XML-standarder er et sæt udvidelser, der tilføjer ekstra funktionalitet til XML-filer. XML har mange standarder, men vi skal lige se på de vigtigste og finde ud af, at de gør AJAX muligt, som er en af ​​de mest kendte XML-standarder. Det lader dig ændre indholdet af en webside uden at genindlæse den! XSLT lader dig konvertere XML-tekst til andre formater. For eksempel kan du bruge XSLT til at konvertere XML til HTML! Som vi har sagt, er formålet med XML at beskrive data, ikke at vise dem. Men med XSLT kan vi komme uden om denne begrænsning! XML DOM giver dig mulighed for at hente, ændre, tilføje eller slette individuelle elementer fra en XML-fil. Her er et lille eksempel på, hvordan dette fungerer. Vi har en books.xml fil:
<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>
Den har to bøger. Bøger har et <title>-element. Her kan vi bruge JavaScript til at hente alle bogtitlerne fra vores XML-fil og udskrive den første til konsollen:
<!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>
DTD ("dokumenttypedefinition") lader dig definere en liste over tilladte elementer for en enhed i en XML-fil. Antag for eksempel, at vi arbejder på et boghandelswebsted, og at alle udviklingsteams er enige om, at kun titel, forfatter og årstal skal angives for bogelementerne i XML-filerne. Men hvordan beskytter vi os selv mod skødesløshed? Meget let!
<?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>
Her har vi defineret en liste over gyldige attributter for <bog>. Prøv at tilføje et nyt element der, og du vil straks få en fejl!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Fejl! "Element mainhero er ikke tilladt her" Der er mange andre XML-standarder. Du kan sætte dig ind i hver af dem og prøve at grave dybere ned i koden. Anyway, hvis du har brug for information om XML, kan du finde næsten alt der :) Og med dette slutter vores lektion. Det er tid til at vende tilbage til opgaverne! :) Indtil næste gang!
Kommentarer
  • Populær
  • Ny
  • Gammel
Du skal være logget ind for at skrive en kommentar
Denne side har ingen kommentarer endnu