XML - XML

XML (standard)
Extensible Markup Language
XML -logo (extensible Markup Language) .svg
Status Udgivet, W3C -anbefaling
Året startede 1996 ; 25 år siden ( 1996 )
Først udgivet 10. februar 1998 ; 23 år siden (som en W3C -anbefaling) ( 1998-02-10 )
Nyeste version 1.1 (anden udgave)
29. september 2006 ; 15 år siden ( 2006-09-29 )
Organisation World Wide Web Consortium (W3C)
Redaktører
Grundlæggende standarder SGML
Relaterede standarder XML -skema
Domæne Dataserialisering
Forkortelse XML
Internet side www .w3 .org /xml
XML (filformat)
Filnavn udvidelse
.xml
Internetmedietype
Uniform Type Identifier (UTI) public.xml
UTI -konformation offentlig.tekst
Magisk nummer <?xml
Udviklet af World Wide Web Consortium
Type format Markup sprog
Forlænget fra SGML
Udvidet til
Standard
Åbent format ? Ja

Extensible Markup Language ( XML ) er et markeringssprog, der definerer et sæt regler for kodning af dokumenter i et format, der er både læseligt og maskinlæsbart . Den World Wide Web Consortium 's XML 1.0 Specifikation af 1998 og flere andre relaterede specifikationer-dem alle fri åbne standarder DEF XML.

Designmålene for XML understreger enkelhed, generalitet og brugervenlighed på Internettet . Det er et tekstdataformat med stærk support via Unicode til forskellige menneskelige sprog . Selvom udformningen af ​​XML fokuserer på dokumenter, bruges sproget i vid udstrækning til repræsentation af vilkårlige datastrukturer, såsom dem, der bruges i webtjenester .

Der findes flere skemasystemer til at hjælpe med definitionen af ​​XML-baserede sprog, mens programmører har udviklet mange applikationsprogrammeringsgrænseflader (API'er) for at hjælpe med behandlingen af ​​XML-data.

Ansøgninger

Essensen af, hvorfor udvidelige markupsprog er nødvendige, forklares på Markup -sprog (se f.eks. Markup -sprog § XML ) og Standard Generalized Markup Language .

Hundredvis af dokumentformater ved hjælp af XML -syntaks er blevet udviklet, herunder RSS , Atom , SOAP , SVG og XHTML . XML-baserede formater er blevet standard for mange kontor-produktivitet værktøjer, herunder Microsoft Office ( Office Open XML ), OpenOffice.org og LibreOffice ( OpenDocument ), og Apples 's iWork . XML har også leveret grundsproget til kommunikationsprotokoller som f.eks. XMPP . Applikationer til Microsoft .NET Framework bruger XML -filer til konfiguration, og egenskabslister er en implementering af konfigurationslager, der er bygget på XML.

Mange branchedatastandarder , såsom Health Level 7 , OpenTravel Alliance , FpML , MISMO og National Information Exchange Model er baseret på XML og de rige funktioner i XML -skemaspecifikationen. Mange af disse standarder er ret komplekse, og det er ikke ualmindeligt, at en specifikation omfatter flere tusinde sider. Ved udgivelse er Darwin Information Typing Architecture en XML -industristandardstandard. XML bruges i vid udstrækning til at understøtte forskellige udgivelsesformater.

XML bruges meget i en serviceorienteret arkitektur (SOA). Forskellige systemer kommunikerer med hinanden ved at udveksle XML -meddelelser. Meddelelsesudvekslingsformatet er standardiseret som et XML -skema (XSD). Dette kaldes også det kanoniske skema. XML er blevet almindeligt anvendt til udveksling af data over internettet. IETF RFC: 3023 , nu afløst af RFC: 7303 , gav regler for konstruktion af internetmedietyper til brug ved afsendelse af XML. Det definerer også medietyperne application/xmlog text/xml, som kun siger, at dataene er i XML, og intet om dets semantik .

RFC 7303 anbefaler også, at XML-baserede sprog gives medietyper, der ender på +xml; for eksempel image/svg+xmltil SVG . Yderligere retningslinjer for brugen af ​​XML i en netværkskontekst findes i RFC 3470, også kendt som IETF BCP 70, et dokument, der dækker mange aspekter ved design og implementering af et XML-baseret sprog.

Nøgleterminologi

Materialet i dette afsnit er baseret på XML -specifikationen. Dette er ikke en udtømmende liste over alle de konstruktioner, der vises i XML; det giver en introduktion til de nøglekonstruktioner, der oftest findes i daglig brug.

Karakter

Et XML -dokument er en række tegn . Næsten alle juridiske Unicode -tegn vises muligvis i et XML -dokument.

Processor og applikation

Den Processoren analyserer markup og passerer struktureret information til en applikation . Specifikationen stiller krav til, hvad en XML -processor må og ikke må, men applikationen er uden for dens anvendelsesområde. Processoren (som specifikationen kalder det) omtales ofte i daglig tale som en XML -parser .

Markup og indhold

Karaktererne, der udgør et XML -dokument, er opdelt i markup og indhold , som kan kendetegnes ved anvendelse af enkle syntaktiske regler. Generelt begynder strenge, der udgør markup, enten med karakteren <og slutter med a >, eller de begynder med karakteren &og slutter med en ;. Strenge med tegn, der ikke er markup, er indhold. I en CDATA -sektion er afgrænserne <![CDATA[og ]]>klassificeret som markup, mens teksten mellem dem er klassificeret som indhold. Desuden er mellemrum før og efter det yderste element klassificeret som markup.

Tag

Et tag er en markup -konstruktion, der begynder med <og slutter med >. Der er tre typer mærker:
  • start-tag , såsom <section>;
  • slut-tag , såsom </section>;
  • tag med tomt element , f.eks <line-break />.

Element

Et element er en logisk dokumentkomponent, der enten begynder med et start-tag og slutter med et matchende slut-tag eller kun består af et tomt element-tag. Tegnene mellem start-tag og slut-tag, hvis nogen, er elementets indhold og kan indeholde markup, herunder andre elementer, som kaldes underordnede elementer . Et eksempel er <greeting>Hello, world!</greeting>. En anden er <line-break />.

Attribut

En attribut er en opmarkekonstruktion, der består af et navn-værdi-par, der findes i et start-tag eller tomt element-tag. Et eksempel er <img src="madonna.jpg" alt="Madonna" />, hvor navnene på attributterne er "src" og "alt", og deres værdier er henholdsvis "madonna.jpg" og "Madonna". Et andet eksempel er <step number="3">Connect A to B.</step>, hvor navnet på attributten er "nummer" og dens værdi er "3". En XML -attribut kan kun have en enkelt værdi, og hver attribut kan højst vises én gang på hvert element. I den almindelige situation, hvor der ønskes en liste med flere værdier, skal dette gøres ved at indkodning af listen til en velformet XML-attribut med et eller andet format ud over, hvad XML definerer sig selv. Normalt er dette enten en komma- eller semikolonafgrænset liste, eller hvis de individuelle værdier vides ikke at indeholde mellemrum, kan der bruges en mellemrumsafgrænset liste. <div class="inner greeting-box">Welcome!</div>, hvor attributten "klasse" både har værdien "indre hilsen" og også angiver de to CSS- klassenavne "indre" og "hilsen".

XML -erklæring

XML -dokumenter kan begynde med en XML -erklæring, der beskriver nogle oplysninger om sig selv. Et eksempel er <?xml version="1.0" encoding="UTF-8"?>.

Karakterer og flugt

XML -dokumenter består udelukkende af tegn fra Unicode -repertoiret. Bortset fra et lille antal specifikt udelukkede kontroltegn kan ethvert tegn, der er defineret af Unicode, vises i indholdet af et XML -dokument.

XML inkluderer faciliteter til at identificere kodningen af Unicode -tegn, der udgør dokumentet, og til at udtrykke tegn, der af en eller anden grund ikke kan bruges direkte.

Gyldige tegn

Unicode -kodepunkter i følgende områder er gyldige i XML 1.0 -dokumenter:

  • U+0009 (vandret fane), U+000A (linjeindføring), U+000D (vognretur): Disse er de eneste C0 -kontroller, der accepteres i XML 1.0;
  • U+0020 – U+D7FF, U+E000 – U+FFFD: dette udelukker nogle ikke-tegn i BMP (alle surrogater, U+FFFE og U+FFFF er forbudt);
  • U+10000 – U+10FFFF: dette inkluderer alle kodepunkter i supplerende fly, inklusive ikke-tegn.

XML 1.1 udvider sættet med tilladte tegn til at omfatte alt det ovenstående plus de resterende tegn i området U+0001 – U+001F. På samme tid begrænser det imidlertid brugen af ​​andre C0- og C1 -kontroltegn end U+0009 (vandret fane), U+000A (linjeindføring), U+000D (vognretur) og U+0085 (næste linje ) ved at kræve, at de skrives i undsluppet form (f.eks. skal U+0001 skrives som &#x01;eller tilsvarende). I tilfælde af C1 -tegn er denne begrænsning en bagudkompatibilitet; det blev introduceret for at tillade almindelige kodningsfejl at blive opdaget.

Kodepunktet U+0000 (Null) er det eneste tegn, der ikke er tilladt i noget XML 1.0- eller 1.1 -dokument.

Kodningsdetektering

Unicode -tegnsættet kan kodes i bytes til lagring eller transmission på en række forskellige måder, kaldet "kodninger". Unicode definerer selv kodninger, der dækker hele repertoiret; velkendte omfatter UTF-8 og UTF-16 . Der er mange andre tekstkodninger, der går forud for Unicode, såsom ASCII og ISO/IEC 8859 ; deres karakterrepertoirer er i næsten alle tilfælde undersæt af Unicode -tegnsættet.

XML tillader brug af enhver af de Unicode-definerede kodninger og andre kodninger, hvis tegn også vises i Unicode. XML giver også en mekanisme, hvorved en XML -processor pålideligt uden forudgående viden kan bestemme, hvilken kodning der bruges. Andre kodninger end UTF-8 og UTF-16 genkendes ikke nødvendigvis af hver XML-parser.

Undslippe

XML giver flugtfaciliteter til at inkludere tegn, der er problematiske at inkludere direkte. For eksempel:

  • Tegnene "<" og "&" er centrale syntaksmarkører og vises muligvis aldrig i indhold uden for en CDATA -sektion. Det er tilladt, men ikke anbefalet, at bruge "<" i XML -enhedsværdier.
  • Nogle tegnkodninger understøtter kun et undersæt af Unicode. For eksempel er det lovligt at kode et XML -dokument i ASCII, men ASCII mangler kodepunkter for Unicode -tegn som f.eks. "É".
  • Det er muligvis ikke muligt at skrive tegnet på forfatterens maskine.
  • Nogle tegn har glyfer, der ikke visuelt kan skelnes fra andre tegn, f.eks. Mellemrummet ( &#xa0;) "" og mellemrummet ( &#x20;) "" og det kyrilliske store bogstav A ( &#x410;) "А" og det latinske store bogstav A ( &#x41;) "A".

Der er fem foruddefinerede enheder :

  • &lt; repræsenterer "<";
  • &gt; repræsenterer ">";
  • &amp; repræsenterer "&";
  • &apos;repræsenterer " ' ";
  • &quot;repræsenterer ' " '.

Alle tilladte Unicode -tegn kan repræsenteres med en numerisk tegnreference . Overvej det kinesiske tegn "中", hvis numeriske kode i Unicode er hexadecimal 4E2D eller decimal 20.013. En bruger, hvis tastatur ikke tilbyder nogen metode til at indtaste dette tegn, kan stadig indsætte det i et XML -dokument, der er kodet enten som &#20013;eller &#x4e2d;. På samme måde kunne strengen "I <3 Jörg" kodes for at blive inkluderet i et XML -dokument som I &lt;3 J&#xF6;rg.

&#0;er imidlertid ikke tilladt, fordi nultegnet er et af kontroltegnene, der er udelukket fra XML, selv når der bruges en numerisk tegnreference. En alternativ kodningsmekanisme, såsom Base64, er nødvendig for at repræsentere sådanne tegn.

Kommentarer

Kommentarer kan forekomme hvor som helst i et dokument uden for anden markup. Kommentarer kan ikke vises før XML -erklæringen. Kommentarer begynder med <!--og slutter med -->. Af hensyn til kompatibilitet med SGML er strengen "-" (dobbelt bindestreg) ikke tilladt inde i kommentarer; det betyder, at kommentarer ikke kan indlejres. Ampersand har ingen særlig betydning inden for kommentarer, så entitets- og karakterreferencer genkendes ikke som sådan, og der er ingen måde at repræsentere tegn uden for tegnsættet i dokumentkodningen.

Et eksempel på en gyldig kommentar: <!--no need to escape <code> & such in comments-->

International brug

XML 1.0 (femte udgave) og XML 1.1 understøtter direkte brug af næsten ethvert Unicode -tegn i elementnavne, attributter, kommentarer, tegndata og behandlingsinstruktioner (andre end dem, der har særlig symbolsk betydning i XML selv, f.eks. -end tegn, "<"). Følgende er et velformet XML-dokument, der indeholder kinesiske , armenske og kyrilliske tegn:

<?xml version="1.0" encoding="UTF-8"?>
<俄语 լեզու="ռուսերեն">данные</俄语>

Syntaktisk korrekthed og fejlhåndtering

XML-specifikationen definerer et XML-dokument som en velformet tekst, hvilket betyder, at det opfylder en liste over syntaksregler i specifikationen. Nogle nøglepunkter i den temmelig lange liste omfatter:

  • Dokumentet indeholder kun korrekt kodede juridiske Unicode -tegn.
  • Ingen af ​​de særlige syntakstegn som f.eks. <Og &vises, undtagen når de udfører deres markup-afgrænsningsroller.
  • Start-tag, slut-tag og tom-element tag, der afgrænser elementer, er korrekt indlejret, uden at der mangler og ingen overlapper hinanden.
  • Tagnavne er store og små bogstaver; start-tag og slut-tag skal matche nøjagtigt.
  • Tagnavne må ikke indeholde nogen af ​​tegnene! "#$%& '()*+,/; <=>?@[\]^` {|} ~, Heller ikke et mellemrum, og kan ikke begynde med "-", "." eller et numerisk ciffer.
  • Et enkelt rodelement indeholder alle de andre elementer.

Definitionen af ​​et XML-dokument udelukker tekster, der indeholder overtrædelser af reglerne om velformning; de er simpelthen ikke XML. En XML -processor, der støder på en sådan overtrædelse, er påkrævet for at rapportere sådanne fejl og stoppe normal behandling. Denne politik, lejlighedsvis omtalt som " drakonisk fejlhåndtering", står i bemærkelsesværdig kontrast til adfærden hos programmer, der behandler HTML , som er designet til at producere et rimeligt resultat, selv i tilfælde af alvorlige markeringsfejl. XML's politik på dette område er blevet kritiseret som en overtrædelse af Postels lov ("Vær konservativ i det, du sender; vær liberal i det, du accepterer").

XML-specifikationen definerer et gyldigt XML-dokument som et velformet XML-dokument, der også overholder reglerne i en Document Type Definition (DTD).

Skemaer og validering

Ud over at være velformet kan et XML-dokument være gyldigt . Det betyder, at den indeholder en reference til en Document Type Definition (DTD), og at dens elementer og attributter deklareres i denne DTD og følger de grammatiske regler for dem, som DTD angiver.

XML-processorer klassificeres som validerende eller ikke-validerende, afhængigt af om de kontrollerer XML-dokumenter for gyldighed eller ej. En processor, der opdager en gyldighedsfejl, skal kunne rapportere den, men kan fortsætte normal behandling.

En DTD er et eksempel på et skema eller en grammatik . Siden den første udgivelse af XML 1.0 har der været omfattende arbejde inden for skemasprog for XML. Sådanne skemasprog begrænser typisk det sæt elementer, der kan bruges i et dokument, hvilke attributter der kan anvendes på dem, den rækkefølge, de kan vises i, og de tilladte forældre/barn -relationer.

Definition af dokumenttype

Det ældste skemasprog for XML er definitionendokumenttype (DTD), der er arvet fra SGML.

DTD'er har følgende fordele:

  • DTD -understøttelse er allestedsnærværende på grund af dens optagelse i XML 1.0 -standarden.
  • DTD'er er mere kompakte i forhold til elementbaserede skemasprog og præsenterer følgelig mere information på en enkelt skærm.
  • DTD'er tillader deklaration af offentlige offentlige enhedssæt til udgivelse af tegn.
  • DTD'er definerer en dokumenttype frem for de typer, der bruges af et navnerum, og grupperer således alle begrænsninger for et dokument i en enkelt samling.

DTD'er har følgende begrænsninger:

  • De har ingen eksplicit support til nyere funktioner i XML, vigtigst af alt navneområder .
  • De mangler udtryksfuldhed. XML DTD'er er enklere end SGML DTD'er, og der er visse strukturer, der ikke kan udtrykkes med almindelig grammatik. DTD'er understøtter kun rudimentære datatyper.
  • De mangler læsbarhed. DTD -designere gør typisk stor brug af parameterenheder (som hovedsagelig opfører sig som tekstmakroer ), hvilket gør det lettere at definere komplekse grammatikker, men på bekostning af klarhed.
  • De bruger en syntaks baseret på regulær udtrykssyntaks , arvet fra SGML, til at beskrive skemaet. Typiske XML-API'er som f.eks. SAX forsøger ikke at tilbyde applikationer en struktureret fremstilling af syntaksen, så den er mindre tilgængelig for programmører, end en elementbaseret syntaks kan være.

To særegne funktioner, der adskiller DTD'er fra andre skematyper, er den syntaktiske understøttelse til at integrere en DTD i XML -dokumenter og til at definere objekter , som er vilkårlige fragmenter af tekst eller markup, som XML -processoren indsætter i selve DTD'en og i XML -dokumentet, uanset hvor de der refereres til, som karakter undslipper.

DTD -teknologi bruges stadig i mange applikationer på grund af dets allestedsnærværende.

Skema

Et nyere skemasprog, beskrevet af W3C som efterfølgeren til DTD'er, er XML -skema , der ofte omtales af initialismen for XML -skema -forekomster, XSD (XML Schema Definition). XSD'er er langt mere kraftfulde end DTD'er til at beskrive XML -sprog. De bruger et rigt datatypesystem og giver mulighed for mere detaljerede begrænsninger for et XML -dokuments logiske struktur. XSD'er bruger også et XML-baseret format, som gør det muligt at bruge almindelige XML-værktøjer til at hjælpe med at behandle dem.

xs: skemaelement, der definerer et skema:

<?xml version="1.0" encoding="ISO-8859-1" ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"></xs:schema>

SLUKKE NG

RELAX NG (Regular Language for XML Next Generation) blev oprindeligt specificeret af OASIS og er nu en standard (Del 2: Regelmæssig grammatikbaseret validering af ISO/IEC 19757-DSDL ). RELAX NG-skemaer kan skrives i enten en XML-baseret syntaks eller en mere kompakt ikke-XML-syntaks; de to syntakser er isomorfe og James Clarks konverteringsværktøj - Trang - kan konvertere mellem dem uden tab af information. RELAX NG har en enklere definition og valideringsramme end XML -skema, hvilket gør det lettere at bruge og implementere. Det har også mulighed for at bruge datatype framework- plug-ins ; en RELAX NG -skemaforfatter kan f.eks. kræve, at værdier i et XML -dokument overholder definitionerne i XML -skema -datatyper.

Schematron

Schematron er et sprog til påstande om tilstedeværelse eller fravær af mønstre i et XML -dokument. Det bruger typisk XPath -udtryk . Schematron er nu en standard (del 3: regelbaseret validering af ISO/IEC 19757-DSDL ).

DSDL og andre skemasprog

DSDL (Document Schema Definition Languages) er en flerdelt ISO/IEC-standard (ISO/IEC 19757), der samler et omfattende sæt små skemasprog, der hver især er målrettet mod specifikke problemer. DSDL inkluderer RELAX NG fuld og kompakt syntaks, Schematron-påstandssprog og sprog til definition af datatyper, karakterrepertoirebegrænsninger, omdøbning og enhedsudvidelse og navnerumbaseret routing af dokumentfragmenter til forskellige validatorer. DSDL -skemasprog har ikke leverandørunderstøttelse af XML -skemaer endnu og er til en vis grad en reaktion fra industrielle udgivere på den manglende anvendelighed af XML -skemaer til udgivelse .

Nogle skemasprog beskriver ikke kun strukturen i et bestemt XML -format, men tilbyder også begrænsede muligheder for at påvirke behandlingen af ​​individuelle XML -filer, der er i overensstemmelse med dette format. DTD'er og XSD'er har begge denne evne; de kan f.eks. levere infoset -forstørrelsesfaciliteten og tildele standardindstillinger. RELAX NG og Schematron giver ikke bevidst disse.

Relaterede specifikationer

En klynge af specifikationer, der er tæt forbundet med XML, er blevet udviklet, der starter kort efter den første offentliggørelse af XML 1.0. Det er ofte sådan, at udtrykket "XML" bruges til at referere til XML sammen med en eller flere af disse andre teknologier, der er kommet til at blive set som en del af XML -kernen.

  • XML -navnerum gør det muligt for det samme dokument at indeholde XML -elementer og attributter hentet fra forskellige ordforråd, uden at der opstår navngivningskollisioner . Selvom XML -navnerum ikke er en del af selve XML -specifikationen, understøtter stort set al XML -software også XML -navnerum.
  • XML Base definerer xml:baseattributten, som kan bruges til at indstille grundlaget for opløsning af relative URI -referencer inden for et enkelt XML -element.
  • XML Information Set eller XML Infoset er en abstrakt datamodel for XML -dokumenter med hensyn til informationselementer . Infosettet bruges almindeligvis i specifikationerne for XML -sprog for nemheds skyld at beskrive begrænsninger for XML -konstruktionerne, som disse sprog tillader.
  • XSL (Extensible Stylesheet Language) er en familie af sprog, der bruges til at transformere og gengive XML -dokumenter, opdelt i tre dele:
  • XSLT (XSL Transformations), et XML-sprog til omdannelse af XML-dokumenter til andre XML-dokumenter eller andre formater såsom HTML, ren tekst eller XSL-FO. XSLT er meget tæt forbundet med XPath, som det bruger til at adressere komponenter i input -XML -dokumentet, hovedsageligt elementer og attributter.
  • XSL-FO (XSL-formateringsobjekter), et XML-sprog til gengivelse af XML-dokumenter, der ofte bruges til at generere PDF-filer.
  • XPath (XML Path Language), et ikke-XML-sprog til adressering af komponenterne (elementer, attributter og så videre) i et XML-dokument. XPath bruges i vid udstrækning i andre core-XML-specifikationer og i programmeringsbiblioteker til adgang til XML-kodede data.

Nogle andre specifikationer udtænkt som en del af "XML Core" har ikke fundet bred anvendelse, herunder XInclude , XLink og XPointer .

Programmeringsgrænseflader

Designmålene for XML inkluderer: "Det skal være let at skrive programmer, der behandler XML -dokumenter." På trods af dette indeholder XML -specifikationen næsten ingen oplysninger om, hvordan programmører kan gå til sådan behandling. Den XML Infoset specifikationen giver et ordforråd til at henvise til de konstruktioner i et XML-dokument, men giver ikke nogen vejledning om, hvordan man adgang til disse oplysninger. En række forskellige API'er til adgang til XML er blevet udviklet og brugt, og nogle er blevet standardiseret.

Eksisterende API'er til XML -behandling har en tendens til at falde ind i disse kategorier:

  • Stream-orienterede API'er tilgængelige fra et programmeringssprog, f.eks. SAX og StAX .
  • Træ-tværgående API'er tilgængelige fra et programmeringssprog, for eksempel DOM .
  • XML-databinding , som giver en automatisk oversættelse mellem et XML-dokument og programmeringssprogede objekter.
  • Deklarative transformationssprog som XSLT og XQuery .
  • Syntaksudvidelser til generelle programmeringssprog, f.eks. LINQ og Scala .

Streamorienterede faciliteter kræver mindre hukommelse, og for visse opgaver baseret på en lineær gennemgang af et XML-dokument er de hurtigere og enklere end andre alternativer. Træ-traversal og databindende API'er kræver typisk brug af meget mere hukommelse, men findes ofte mere bekvemme til brug af programmører; nogle omfatter deklarativ hentning af dokumentkomponenter via brug af XPath -udtryk.

XSLT er designet til deklarativ beskrivelse af XML-dokumenttransformationer og er blevet bredt implementeret både i serversider og i webbrowsere. XQuery overlapper XSLT i sin funktionalitet, men er designet mere til at søge i store XML -databaser .

Enkel API til XML

Simple API til XML (SAX) er en leksikalsk , hændelsesdrevet API, hvor et dokument læses serielt, og dets indhold rapporteres som tilbagekald til forskellige metoder på et håndteringsobjekt af brugerens design. SAX er hurtig og effektiv at implementere, men vanskelig at bruge til tilfældig udtrækning af oplysninger fra XML, da det har en tendens til at belaste applikationsforfatteren med at holde styr på, hvilken del af dokumentet der behandles. Det er bedre egnet til situationer, hvor visse typer oplysninger altid håndteres på samme måde, uanset hvor de forekommer i dokumentet.

Træk parsing

Pull parsing behandler dokumentet som en række elementer, der læses i rækkefølge ved hjælp af iterator -designmønsteret . Dette giver mulighed for skrivning af rekursive afstamningsparsere , hvor strukturen af ​​koden, der udfører analysen, afspejler strukturen af ​​XML, der analyseres, og mellemliggende analyserede resultater kan bruges og tilgås som lokale variabler inden for de funktioner, der udfører analysen, eller videregives ( som funktionsparametre) til funktioner på lavere niveau eller returneres (som funktionsreturværdier) til funktioner på højere niveau. Eksempler på pull -parsere inkluderer Data :: Edit :: Xml i Perl , StAX i Java -programmeringssproget, XMLPullParser i Smalltalk , XMLReader i PHP , ElementTree.iterparse i Python , System.Xml.XmlReader i .NET Framework og DOM traversal API (NodeIterator og TreeWalker).

En pull -parser opretter en iterator, der sekventielt besøger de forskellige elementer, attributter og data i et XML -dokument. Kode, der bruger denne iterator, kan teste det aktuelle element (for eksempel at fortælle, om det er et start-tag eller slut-tag eller tekst) og inspicere dets attributter (lokalt navn, navneområde , værdier af XML-attributter, værdi af tekst osv.), og kan også flytte iteratoren til det næste element. Koden kan således udtrække oplysninger fra dokumentet, når den krydser den. Metoden med rekursiv nedstigning har tendens til at låne sig til at beholde data som typede lokale variabler i koden, der udfører analysen, mens SAX f.eks. Typisk kræver en parser til manuelt at vedligeholde mellemliggende data i en stak elementer, der er overordnede elementer i elementet bliver analyseret. Pull-parsing-kode kan være mere ligetil at forstå og vedligeholde end SAX-parsingskode.

Dokumentobjektmodel

Document Object Model (DOM) er en API, der tillader navigation af hele dokumentet, som var det et træ af nodeobjekter , der repræsenterer dokumentets indhold. Et DOM -dokument kan oprettes af en parser eller kan genereres manuelt af brugere (med begrænsninger). Datatyper i DOM -noder er abstrakte; implementeringer giver deres egne programmeringssprogsspecifikke bindinger . DOM -implementeringer har en tendens til at være hukommelseskrævende , da de generelt kræver, at hele dokumentet indlæses i hukommelsen og konstrueres som et træ af objekter, før adgang er tilladt.

Databinding

XML -databinding er bindingen af ​​XML -dokumenter til et hierarki af brugerdefinerede og stærkt indtastede objekter, i modsætning til de generiske objekter, der er oprettet af en DOM -parser. Denne fremgangsmåde forenkler kodeudvikling og gør det i mange tilfælde muligt at identificere problemer på kompileringstidspunktet frem for løbetid. Det er velegnet til applikationer, hvor dokumentstrukturen er kendt og fastlagt på det tidspunkt, hvor ansøgningen skrives. Eksempel på databindingssystemer inkluderer Java Architecture for XML Binding (JAXB), XML Serialization i .NET Framework . og XML -serialisering i gSOAP .

XML som datatype

XML har vist sig som en førsteklasses datatype på andre sprog. Den ECMAScript til XML (E4X) udvidelse af ECMAScript / JavaScript udtrykkeligt definerer to specifikke objekter (XML og XMLList) til JavaScript, som støtte XML-dokument noder og XML-node lister som distinkte objekter og bruge en prik-notationen specificerer forældre-barn relationer . E4X understøttes af Mozilla 2.5+ browsere (dog nu udfaset) og Adobe Actionscript , men er ikke blevet vedtaget mere universelt. Lignende notationer bruges i Microsofts LINQ -implementering til Microsoft .NET 3.5 og nyere og i Scala (der bruger Java VM). Open-source xmlsh-applikationen, der giver en Linux-lignende shell med særlige funktioner til XML-manipulation, behandler XML på samme måde som en datatype ved hjælp af <[]> notationen. Den Resource Description Framework definerer en datatype rdf:XMLLiteraltil hold indpakket, kanonisk XML . Facebook har produceret udvidelser til PHP- og JavaScript -sprogene, der tilføjer XML til kernesyntaksen på lignende måde som E4X, nemlig henholdsvis XHP og JSX .

Historie

XML er et program profil af SGML (ISO 8879).

Alsidigheden af ​​SGML til dynamisk informationsvisning blev forstået af tidlige digitale medieudgivere i slutningen af ​​1980'erne før internetets fremkomst. I midten af ​​1990'erne havde nogle udøvere af SGML opnået erfaring med det dengang nye World Wide Web og mente, at SGML tilbød løsninger på nogle af de problemer, Internettet sandsynligvis ville møde, efterhånden som det voksede. Dan Connolly tilføjede SGML til listen over W3C's aktiviteter, da han kom i staben i 1995; arbejdet begyndte i midten af ​​1996, da Sun Microsystems- ingeniøren Jon Bosak udviklede et charter og rekrutterede samarbejdspartnere. Bosak var godt forbundet i det lille samfund af mennesker, der havde erfaring både i SGML og på nettet.

XML blev udarbejdet af en arbejdsgruppe på elleve medlemmer, understøttet af en (omtrent) 150-delt interessegruppe. Teknisk debat fandt sted på interessegruppens mailingliste, og spørgsmål blev løst ved konsensus eller, når det mislykkedes, flertal i arbejdsgruppen. En oversigt over designbeslutninger og deres rationaler blev udarbejdet af Michael Sperberg-McQueen den 4. december 1997. James Clark fungerede som teknisk leder for arbejdsgruppen og bidrog især med syntesen af ​​det tomme element <empty />og navnet "XML". Andre navne, der var blevet fremsat til overvejelse, omfattede "MAGMA" (Minimal Architecture for Generalized Markup Applications), "SLIM" (Structured Language for Internet Markup) og "MGML" (Minimal Generalized Markup Language). Medredaktørerne af specifikationen var oprindeligt Tim Bray og Michael Sperberg-McQueen . Halvvejs gennem projektet accepterede Bray et rådgivende engagement med Netscape , hvilket fremkaldte høje protester fra Microsoft. Bray blev midlertidigt bedt om at fratræde redaktionen. Dette førte til intens strid i arbejdsgruppen, der til sidst blev løst ved udnævnelsen af ​​Microsofts Jean Paoli som tredje medredaktør.

XML-arbejdsgruppen mødtes aldrig ansigt til ansigt; designet blev gennemført ved hjælp af en kombination af e -mail og ugentlige telekonferencer. De store designbeslutninger blev nået i en kort periode med intens arbejde mellem august og november 1996, da det første arbejdsudkast til en XML -specifikation blev offentliggjort. Yderligere designarbejde fortsatte gennem 1997, og XML 1.0 blev en W3C -anbefaling den 10. februar 1998.

Kilder

XML er en profil af en ISO -standard SGML, og det meste af XML kommer uændret fra SGML. Fra SGML kommer adskillelsen af ​​logiske og fysiske strukturer (elementer og enheder), tilgængeligheden af ​​grammatikbaseret validering (DTD'er), adskillelsen af ​​data og metadata (elementer og attributter), blandet indhold, adskillelse af behandling fra repræsentation ( behandling vejledning ) og standardsyntaksen for vinkelbeslag. SGML -erklæringen blev fjernet; således XML har en fast skilletegn sæt og vedtager Unicode som dokumentet tegnsæt .

Andre teknologikilder til XML var TEI (Text Encoding Initiative), der definerede en profil af SGML til brug som en "overføringssyntaks"; og HTML , hvor elementer var synkrone med deres ressource, dokumenttegnsæt var adskilt fra ressourcekodning, xml:langattributten blev opfundet, og (ligesom HTTP ) ledsagede metadata ressourcen frem for at være nødvendig ved erklæringen af ​​et link. ERCS (Extended Reference Concrete Syntax) -projektet i SPREAD (Standardization Project Abouting East Asian Documents) -projektet i den ISO-relaterede Kina/Japan/Korea Document Processing ekspertgruppe var grundlaget for XML 1.0's navngivningsregler; SPREAD introducerede også hexadecimale numeriske tegnreferencer og begrebet referencer for at gøre alle Unicode -tegn tilgængelige. For at understøtte ERCS, XML og HTML bedre blev SGML -standarden IS 8879 revideret i 1996 og 1998 med WebSGML -tilpasninger. XML -headeren fulgte ISO HyTime .

Ideer, der blev udviklet under diskussionen, og som er nye i XML, omfattede algoritmen til kodningsdetektering og kodningshovedet, behandlingsinstruktionsmålet, xml: space-attributten og den nye tætte afgrænser for tags med tomme elementer. Begrebet velformning i modsætning til validitet (som muliggør parsing uden et skema) blev først formaliseret i XML, selvom det var blevet implementeret med succes i elektronisk bogteknologis "Dynatext" software; softwaren fra University of Waterloo New Oxford English Dictionary Project; RISP LISP SGML -tekstbehandleren i Uniscope, Tokyo; den amerikanske hærs missilkommando IADS hypertekstsystem; Mentor Grafik Kontekst; Interleaf og Xerox Publishing System.

Versioner

Der er to aktuelle versioner af XML:

XML 1.0

Den første ( XML 1.0 ) blev oprindeligt defineret i 1998. Den har undergået mindre ændringer siden da, uden at have fået et nyt versionsnummer, og er i øjeblikket i sin femte udgave, som blev offentliggjort den 26. november 2008. Den er bredt implementeret og stadig anbefales til almindelig brug.

XML 1.1

Den anden ( XML 1.1 ) blev oprindeligt udgivet den 4. februar 2004, samme dag som XML 1.0 Third Edition, og er i øjeblikket i sin anden udgave, som blev offentliggjort den 16. august 2006. Den indeholder funktioner (nogle omstridte), der er tiltænkt for at gøre XML lettere at bruge i visse tilfælde. De vigtigste ændringer er at muliggøre brugen af linjeafslutningstegn , der bruges på EBCDIC- platforme, og brug af scripts og tegn, der mangler i Unicode 3.2. XML 1.1 er ikke særlig bredt implementeret og anbefales kun til brug af dem, der har brug for dets særlige funktioner.

Gyldige Unicode -tegn i XML 1.0 og XML 1.1

Før udgivelsen af ​​femte udgave adskilte XML 1.0 sig fra XML 1.1 ved at have strengere krav til tegn tilgængelige til brug i element- og attributnavne og unikke identifikatorer: i de første fire udgaver af XML 1.0 blev tegnene udelukkende opregnet ved hjælp af en specifik version af Unicode- standard (Unicode 2.0 til Unicode 3.2.) Den femte udgave erstatter mekanismen for XML 1.1, som er mere fremtidssikret, men reducerer redundans . Fremgangsmåden i den femte udgave af XML 1.0 og i alle udgaver af XML 1.1 er, at kun bestemte tegn er forbudt i navne, og alt andet har lov til at rumme passende navntegn i fremtidige Unicode -versioner. I den femte udgave kan XML -navne indeholde tegn i balinesisk , Cham eller fønikisk script blandt mange andre tilføjet til Unicode siden Unicode 3.2.

Næsten ethvert Unicode -kodepunkt kan bruges i tegndata og attributværdier i et XML 1.0- eller 1.1 -dokument, selvom det tegn, der svarer til kodepunktet, ikke er defineret i den aktuelle version af Unicode. I tegndata og attributværdier tillader XML 1.1 brug af flere kontroltegn end XML 1.0, men for "robusthed" skal de fleste kontroltegn, der introduceres i XML 1.1, udtrykkes som numeriske tegnreferencer (og #x7F til #x9F , som var tilladt i XML 1.0, skal i XML 1.1 endda udtrykkes som numeriske tegnreferencer). Blandt de understøttede kontroltegn i XML 1.1 er to linjepausekoder, der skal behandles som mellemrum. Mellemrumstegn er de eneste kontrolkoder, der kan skrives direkte.

XML 2.0

Der har været diskussion af en XML 2.0, selvom ingen organisation har annonceret planer for arbejdet med et sådant projekt. XML-SW (SW for skunkworks ), skrevet af en af ​​de originale XML-udviklere, indeholder nogle forslag til, hvordan en XML 2.0 kan se ud: eliminering af DTD'er fra syntaks, integration af navneområder , XML Base og XML Information Set i basen standard.

Binær XML

World Wide Web Consortium har også en arbejdsgruppe for binær karakterisering af XML, der foretager indledende undersøgelser af brugssager og egenskaber til en binær kodning af XML -informationssæt. Arbejdsgruppen er ikke chartret til at udarbejde officielle standarder. Da XML per definition er tekstbaseret, bruger ITU-T og ISO navnet Fast Infoset til deres eget binære infoset for at undgå forvirring (se ITU-T Rec. X.891 og ISO/IEC 24824-1).

Kritik

XML og dens udvidelser er regelmæssigt blevet kritiseret for verbositet, kompleksitet og redundans.

At kortlægge den grundlæggende træmodel af XML til typesystemer med programmeringssprog eller databaser kan være vanskelig, især når XML bruges til at udveksle meget strukturerede data mellem applikationer, hvilket ikke var dets primære designmål. Imidlertid tillader XML -databindingssystemer applikationer at få adgang til XML -data direkte fra objekter, der repræsenterer en datastruktur af dataene i det anvendte programmeringssprog, hvilket sikrer typesikkerhed , frem for at bruge DOM eller SAX til at hente data fra en direkte repræsentation af XML'en sig selv. Dette opnås ved automatisk at oprette en kortlægning mellem elementer i XML -skemaet XSD i dokumentet og medlemmer af en klasse, der skal repræsenteres i hukommelsen.

Anden kritik forsøger at tilbagevise påstanden om, at XML er et selvbeskrivende sprog (selvom XML-specifikationen i sig selv ikke gør noget sådant).

JSON , YAML og S-Expressions foreslås ofte som enklere alternativer (se Sammenligning af dataserialiseringsformater ), der fokuserer på at repræsentere stærkt strukturerede data frem for dokumenter, som kan indeholde både meget struktureret og relativt ustruktureret indhold. W3C -standardiserede XML -skemaspecifikationer tilbyder imidlertid et bredere udvalg af strukturerede XSD -datatyper sammenlignet med enklere serialiseringsformater og tilbyder modularitet og genbrug gennem XML -navnerum .

Se også

Noter

Referencer

Yderligere læsning

eksterne links