John Squirrels
Nivå
San Francisco

XML i Java

Publisert i gruppen
Hei! I dag vil vi introdusere et annet dataformat kalt XML. Dette er et veldig viktig tema. Når du jobber med ekte Java-applikasjoner, vil du nesten helt sikkert møte XML-relaterte oppgaver. I Java-utvikling brukes dette formatet nesten universelt (vi finner ut hvorfor nedenfor), så jeg anbefaler at du ikke går over denne leksjonen overfladisk, men heller får en grundig forståelse av alt og også studerer tilleggslitteratur/lenker :) Dette vil definitivt ikke være bortkastet tid. Så la oss starte med de enkle tingene: "hva" og "hvorfor"!

Hva er Java XML?

XML står for eXtensible Markup Language. Du er kanskje allerede kjent med et markup-språk — har du hørt om HTML, som brukes til å lage nettsider :) Hva er XML?  - 1HTML og XML har til og med et lignende utseende:
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, XML er et språk for å beskrive data.

Hvorfor trenger du XML?

XML ble opprinnelig oppfunnet for mer praktisk å lagre og sende data, inkludert via Internett. Den har flere fordeler som hjelper deg å oppnå dette. For det første er det lett å lese av både et menneske og en datamaskin. Jeg tror du lett kan forstå hva denne XML-filen 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 datamaskin forstår også lett dette formatet. For det andre, siden dataene er lagret som ren tekst, vil det ikke være noen kompatibilitetsproblemer når vi overfører dem fra en datamaskin til en annen. Det er viktig å forstå at XML ikke er kjørbar kode - det er et databeskrivelsesspråk. Etter at du har beskrevet data ved hjelp av XML, må du skrive kode (for eksempel i Java) som kan sende/motta/behandle disse dataene.

Hvordan er XML strukturert?

Hovedkomponenten er tagger: dette er tingene i vinkelparenteser:
<book>
</book>
Det er åpningsmerker og avslutningsmerker. Den avsluttende taggen har et tilleggssymbol (" / "), som kan sees i eksempelet ovenfor. Hver åpningsbrikke må ha en lukkebrikke. De viser hvor beskrivelsen av hvert element i filen begynner og slutter. Tagger kan nestes! I bokeksemplet vårt har <book>-taggen 3 nestede tagger: <title>, <author> og <year>. Dette er ikke begrenset til ett nivå av nestet: nestede tagger kan ha sine egne nestede tagger osv. Denne strukturen kalles et tagtre. La oss se på dette treet ved å bruke en eksempel-XML-fil som 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 en tag på toppnivå: <carstore>. Det kalles også et rotelement. <carstore> har én underordnet tag: <car>. <bil> har på sin side også 3 underordnede tagger: <modell>, <år> og <pris>. Hver kode kan ha attributter som inneholder viktig tilleggsinformasjon. I vårt eksempel har <model>-taggen et "lang"-attributt, som indikerer språket som brukes til å registrere modellnavnet:
<model lang="en">Scania R 770</model>
Her indikerer vi at navnet er skrevet på engelsk. Vår <price>-tag har et "valuta"-attributt.
<price currency="US dollar">150000.00</price>
Her indikerer vi at bilens pris er oppgitt i amerikanske dollar. Dermed har XML en "selvbeskrivende" syntaks. Du kan legge til all informasjon du trenger for å beskrive dataene. I tillegg kan du øverst i filen legge til en linje som indikerer XML-versjonen og kodingen som ble brukt til å skrive dataene. Dette kalles "prolog" og ser slik ut:
<?xml version="1.0" encoding="UTF-8"?>
Vi bruker XML versjon 1.0 og UTF-8-koding. Dette er ikke nødvendig, men det kan være nyttig hvis for eksempel filen din bruker tekst på forskjellige språk. Vi nevnte at XML betyr "eXtensible Markup Language", men hva betyr "extensible"? Dette betyr at den er perfekt for å lage nye versjoner av objektene og filene dine. Tenk deg for eksempel at vi også vil begynne å selge motorsykler hos bilforhandleren vår! Når det er sagt, trenger vi at programbehovene våre støtter begge versjonene av <carstore>: den gamle (uten motorsykler) og den nye. Her er vår gamle versjon:
<?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 utvidede:
<?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å enkelt og enkelt er det å legge til en beskrivelse av motorsykler i filen vår :) Dessuten trenger vi absolutt ikke ha de samme barnebrikkene for motorsykler som for biler. Vær oppmerksom på at motorsykler, i motsetning til biler, har et <owner>-element. Dette hindrer ikke datamaskinen (eller mennesket) fra å lese dataene.

Forskjeller mellom XML og HTML

Vi har allerede sagt at XML og HTML er veldig like i utseende. Det gjør det veldig viktig å vite hvordan de er forskjellige. For det første brukes de til forskjellige formål. HTML er for å merke nettsider. For eksempel, mens du oppretter et nettsted, kan du bruke HTML for å spesifisere: "Menyen skal være i øvre høyre hjørne. Den skal ha slike og slike knapper". HTMLs jobb er med andre ord å vise data. XML er for å lagre og sende informasjon i en form som er praktisk for mennesker og datamaskiner. Dette formatet inneholder ingen indikasjon på hvordan disse dataene skal vises: det avhenger av koden til programmet som leser den. For det andre er det en stor teknisk forskjell. HTML-koder er forhåndsdefinerte. Med andre ord bruker du bare <h1></h1> for å lage en HTML-overskrift (for eksempel en stor bildetekst øverst på siden). tagger (<h2></h2> og <h3></h3> brukes for mindre overskrifter). Du kan ikke lage HTML-overskrifter med andre tagger. XML bruker ikke forhåndsdefinerte tagger. Du kan gi tagger hvilket som helst navn du vil: <header>, <title>, <idontknow2121>.

Konfliktløsning

Friheten som XML gir kan føre til noen problemer. For eksempel kan en og samme enhet (for eksempel en bil) brukes av et program til forskjellige formål. For eksempel har vi en XML-fil som beskriver biler. Våre programmerere kom imidlertid ikke til en forhåndsavtale seg imellom. Og nå, i tillegg til data om ekte biler, kan vi finne data om lekebiler i vår XML! Dessuten har de de samme egenskapene. La oss si at programmet vårt leser inn en slik XML-fil. Hvordan skiller vi en ekte bil fra en lekebil?
<?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 prefikser og navneområde hjelpe oss. For å skille lekebiler fra ekte i programmet vårt (og faktisk alle leker fra deres ekte motstykker), introduserer vi to prefikser: "ekte" og "leketøy".
<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>
Nå vil programmet vårt kunne skille mellom de forskjellige enhetene! Alt som har lekeprefikset vil bli behandlet som leker :) Vi er imidlertid ikke ferdige ennå. For å bruke prefikser må vi registrere hver av dem som et navneområde. Egentlig er "registrer" et sterkt ord :) Vi trenger rett og slett å komme opp med et unikt navn for hver av dem. Det er som med klasser: en klasse har et kort navn ( Cat ) og et fullt kvalifisert navn som inkluderer alle pakker ( zoo.animals.Cat). En URI brukes vanligvis til å lage et unikt navneområde. Noen ganger gjøres dette ved hjelp av en Internett-adresse, hvor funksjonene til dette navneområdet er beskrevet. Men det trenger ikke å være en gyldig Internett-adresse. Svært ofte bruker prosjekter ganske enkelt URI-lignende strenger som hjelper til med å spore navneromshierarkiet. 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 det ingen nettside på "http://testproject.developersgroup1.companyname/department2/namespaces/real" Men denne strengen inneholder nyttig informasjon: utviklerne av gruppe 1 i avdeling 2 er ansvarlige for å lage det "ekte" navneområdet . Hvis vi trenger å introdusere nye navn eller diskutere mulige konflikter, vet vi hvor vi skal henvende oss. Noen ganger bruker utviklere en ekte beskrivende nettadresse som et unikt navneområde. Dette kan for eksempel være tilfelle for et stort selskap hvis prosjekt vil bli brukt av millioner av mennesker over hele verden. Men dette er absolutt ikke alltid gjort: Stack Overflow har en diskusjon om dette problemet. Generelt er det ingen strenge krav til å bruke URI-er som navneromsnavn: du kan også ganske enkelt bruke tilfeldige strenger. Dette alternativet vil også fungere:
xmlns:real="nvjneasiognipni4435t9i4gpojrmeg"
Når det er sagt, har bruk av en URI flere fordeler. Du kan lese mer om dette her .

Grunnleggende XML-standarder

XML-standarder er et sett med utvidelser som legger til ekstra funksjonalitet til XML-filer. XML har mange standarder, men vi skal bare se på de viktigste og finne ut at de gjør AJAX mulig, som er en av de mest kjente XML-standardene. Den lar deg endre innholdet på en nettside uten å laste den på nytt! XSLT lar deg konvertere XML-tekst til andre formater. Du kan for eksempel bruke XSLT til å konvertere XML til HTML! Som vi har sagt, er hensikten med XML å beskrive data, ikke å vise dem. Men med XSLT kan vi komme rundt denne begrensningen! XML DOM lar deg hente, endre, legge til eller slette individuelle elementer fra en XML-fil. Her er et lite 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øker. Bøker har et <title>-element. Her kan vi bruke JavaScript for å hente alle boktitlene fra XML-filen vår og skrive ut 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 ("dokumenttypedefinisjon") lar deg definere en liste over tillatte elementer for en enhet i en XML-fil. Anta for eksempel at vi jobber med et bokhandelnettsted og at alle utviklingsteam er enige om at bare tittel, forfatter og årstall skal spesifiseres for bokelementene i XML-filene. Men hvordan beskytter vi oss mot uforsiktighet? Meget lett!
<?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 definert en liste over gyldige attributter for <bok>. Prøv å legge til et nytt element der og du vil umiddelbart få en feil!
<book>
   <title>The Lord of The Rings</title>
   <author>John R.R. Tolkien</author>
   <year>1954</year>
   <mainhero>Frodo Baggins</mainhero>
</book>
Feil! "Element mainhero er ikke tillatt her" Det finnes mange andre XML-standarder. Du kan gjøre deg kjent med hver av dem og prøve å grave dypere i koden. Uansett, hvis du trenger informasjon om XML, kan du finne nesten alt der :) Og med dette tar leksjonen vår slutt. Det er på tide å komme tilbake til oppgavene! :) Til neste gang!
Kommentarer
  • Populær
  • Ny
  • Gammel
Du må være pålogget for å legge igjen en kommentar
Denne siden har ingen kommentarer ennå