XML ( Engelska eXtensible Markup Language ) utbyggbart märkningsspråk | |
---|---|
Förlängning | .xml |
MIME -typ | application/xml [1] , text/xml [2] (fasad i ett utgånget utkast) [3] |
Utvecklaren | World Wide Web Consortium |
publiceras | 1998 |
Formattyp | märkningsspråk |
Utökad från | SGML |
Utvecklad i | XHTML , RSS , Atom , KML , SVG och många andra format |
Standard(er) |
1.0 (femte upplagan), 26 november 2008 [4] 1.1 (andra upplagan), 16 augusti 2006 [5] |
öppet format ? | Ja |
Hemsida | w3.org/XML _ |
Mediafiler på Wikimedia Commons |
XML ( MFA : [ ˌ e k s . e m ˈ e l ], förkortning från engelskan. e X tensible Markup L anguage ) - "extensible markup language ". Rekommenderas av World Wide Web Consortium (W3C). XML-specifikationen beskriver XML-dokument och beskriver delvis beteendet hos XML-processorer (program som läser XML-dokument och ger tillgång till deras innehåll). XML designades för att vara ett språk med en enkel formell syntax , lätt att skapa och bearbeta dokument för både program och människor , med tonvikt på användning på Internet. Språket kallas utbyggbart eftersom det inte fixar uppmärkningen som används i dokument: utvecklaren är fri att skapa uppmärkning enligt behoven i ett visst område, endast begränsad av syntaxreglerna för språket. En XML-tillägg är en konkret grammatik baserad på XML och representerad av en ordbok med taggar och deras attribut, samt en uppsättning regler som definierar vilka attribut och element som kan finnas i andra element. Kombinationen av enkel formell syntax, människovänlighet, töjbarhet och beroende av Unicode -kodningar för att representera innehållet i dokument har lett till den utbredda användningen av både XML i sig och en mängd olika XML-härledda specialiserade språk i en mängd olika mjukvaruverktyg.
XML är en delmängd av SGML .
XML-specifikationen beskriver språket och ett antal frågor kring kodning och bearbetning av dokument. Materialet i detta avsnitt är en sammanfattning av språkbeskrivningen i XML-specifikationen, anpassad för denna artikel.
Den engelska versionen av dokumentet anses vara normativ, därför ges huvudtermerna med deras engelska original.
Översättningen av huvudvillkoren följer i princip översättningen av specifikationen till ryska som finns tillgänglig på Internet, med undantag för termerna tagg och deklaration . För termen tag används översättningstaggen här . För begreppet deklaration ges företräde åt den gemensamma översättningsdeklarationen (mot den också vanliga spårpappersdeklarationen ) .
Andra översättningar av huvudtermerna finns i litteraturen och på Internet.
Ur fysisk synvinkel består ett dokument av enheter , som var och en kan referera till en annan enhet. Det enda rotelementet är dokumententiteten . Innehållet i entiteter är symboler.
Ur logisk synvinkel består dokumentet av kommentarer ( engelska kommentarer ), deklarationer ( engelska deklarationer ), element ( engelska element ), entitetsreferenser ( engelska teckenreferenser ) och bearbetningsinstruktioner ( engelska processinstruktioner ). Allt detta i dokumentet är strukturerat av uppmärkning .
Fysisk strukturEn enhet är den minsta delen i ett dokument. Alla enheter innehåller något, och de har alla ett namn (det finns undantag, t.ex. dokumentenhet ). Enkelt uttryckt beskriver termen "essens" den "existerande saken", " något " [6] .
Ett dokument består av enheter vars innehåll är symboler. Alla tecken är indelade i två typer: datatecken ( engelska teckendata ) och uppmärkningstecken. Markeringen inkluderar:
Den icke-markerade delen av dokumentet är dokumentets teckendata.
Logisk strukturAlla ingående delar av dokumentet är sammanfattade i prologen och rotelementet . Rotelementet är en obligatorisk del av dokumentet, som utgör hela dess väsen (prologen, generellt sett, kan vara frånvarande). Rotelementet kan eller kanske inte inkluderar dess kapslade element, teckendata och kommentarer. Element kapslade i rotelementet kan i sin tur inkludera kapslade element, teckendata och kommentarer och så vidare. Prolog kan innehålla deklarationer , bearbetningsinstruktioner , kommentarer . Den bör börja med en XML-deklaration , även om denna deklaration kan utelämnas i vissa situationer.
Dokumentelement måste vara korrekt kapslade : alla element som börjar inuti ett annat element (det vill säga alla andra dokumentelement än rotelementet) måste sluta inuti elementet det började på. Teckendata kan förekomma i element antingen direkt eller i speciella "CDATA"-sektioner . Deklarationer, bearbetningsinstruktioner och element kan ha attribut kopplade till sig. Attribut används för att associera namn-värde-par med en logisk enhet av text.
Markering börjar alltid med ett tecken <och slutar med ett >.
Tillsammans med symbolerna <och >spelar symbolen också en speciell roll vid uppmärkning &. Vinkelparenteser markerar gränserna för element, bearbetningsinstruktioner och några andra sekvenser. Et-tecken låter dig ersätta text med hjälp av entiteter ( engelska entities ) [6] .
Användningen av uppmärkningstecken i teckendata gör det svårt att känna igen uppmärkningskonstruktioner och kan skapa ett strukturambiguitetsproblem. I XML löses detta problem enligt följande: <, > och & kan inte finnas i teckendata och i attributvärden i sin direkta form, speciella enheter är reserverade för deras representation i dessa fall :
Symbol | Ersättning |
---|---|
< | < |
> | > |
& | & |
Dessutom används följande enheter för att använda apostrof och citattecken inom attributvärden :
' | ' |
" | " |
Regeln att ersätta uppmärkningstecken med deras betecknande enheter gäller inte för teckendata i "CDATA"-sektionerna, utan utförs på alla andra platser i dokumentet.
Numeriska teckenreferenser indikerar tecknets kodposition i dokumentets teckenuppsättning. Numeriska teckenreferenser kan ha två former [7] :
Exempel på numeriska teckenreferenser:
I XML måste alla namn börja med en bokstav, understrecket (_) och fortsätta endast med tecken som är tillåtna för namn, nämligen: de får bara innehålla bokstäver som ingår i Unicode-bokstavssektionen, arabiska siffror, bindestreck, understreck , prickar. Eftersom bokstäver inte är begränsade till endast ASCII-tecken, kan bokstäver från alla språk användas i namn.
En XML-deklaration anger vilken språkversion dokumentet är skrivet på. Eftersom tolkningen av innehållet i ett dokument beror på språkversionen, föreskriver specifikationen att dokumentet ska startas med en XML-deklaration. I den första (1.0) versionen av språket var användningen av deklarationen valfri, i efterföljande versioner är det obligatoriskt. Språkversionen bestäms alltså utifrån deklarationen, och om det inte finns någon deklaration antas version 1.0.
Utöver XML-versionen kan deklarationen även innehålla information om dokumentets kodning och "om dokumentet ska finnas kvar med en egen DTD , eller med en sådan".
Exempel:
<?xml version="1.1" encoding="UTF-8" ?>eller:
<?xml version="1.0" encoding="windows-1251"?>I alla dessa exempel saknades attributet "fristående", vilket bara avgör om uppmärkningsbeskrivningar ska inkluderas i dokumentet från utsidan. Den har som standard "nej":
<?xml version="1.0" encoding="windows-1251" standalone="no"?>om XML-dokumentet refererar till andra DTD:er som beskriver vad dokumentet kan innehålla måste du specificerastandalone="no"
<?xml version="1.0" encoding="UTF-8" fristående="ja"?>om XML-dokumentet inte hänvisar till andra filer och kommer att använda sin egen DTD måste du specificerastandalone="yes"
DokumenttypsdeklarationDet finns en särskild instruktion för att deklarera en dokumenttyp !DOCTYPE. Det låter dig specificera, med hjälp av DTD-språket, vilka element som ingår i dokumentet, vilka är deras attribut, vilka enheter som kan användas och något annat.
Här är till exempel rätt dokument:
<?xml version="1.0"?> <greeting> Hej världen! </hälsning>Det har ett rotelement <greeting>Hello, world!</greeting>och logiskt sett existerar dokumentet. Den är dock inte giltig ( eng. not valid ) [8] .
Med hjälp av en Document Type Declaration (DTD) är det möjligt att beskriva dess innehåll och logiska struktur, samt att associera ett namn-värdepar med ett specifikt element. Så här ser prologen ut i Backus-Naur-posten [9] :
prolog ::= XMLDecl? Övrigt* (doctypedecl Övrigt*)? XMLDecl ::= '<?xml' VersionInfo EncodingDecl? SDDecl? S? '?>' VersionInfo ::= S 'version' Eq ("'" VersionNum "'" | '"' VersionNum '"') Ekv ::= S? '='S? VersionNum ::= '1.' [0-9]+ Övrigt ::= Kommentar | PI | S doctypedecl ::= '<!DOCTYPE's namn (S ExternalID)? S? ('[' intSubset ']' S?)? '>' DeclSep ::= PEReference | S intSubset ::= (markupdecl | DeclSep)* markupdecl ::= elementdecl | AttlistDecl | EntityDecl | Notation Decl | PI | Kommentar extSubset ::= TextDecl? extSubsetDecl extSubsetDecl ::= (markupdecl | conditionalSect | DeclSep)*XML-deklarationen kan följas av kommentarer, bearbetningsinstruktioner eller blanksteg [10] , men sedan kommer Document Type Declarations, där "Name" är namnet på rottaggen , "ExternalID" är den externa identifieraren och "intSubset" är uppmärkningsdeklarationen, eller annars enhetsreferens. Som specifikationen säger, om en extern identifierare deklareras tillsammans med en intern deklaration, kommer den senare före den förra [11] .
Till exempel:
<?xml version="1.0"?> <!DOCTYPE-hälsningsSYSTEM "hello.dtd"> <hälsning> Hej världen! </hälsning>Här SYSTEM "hello.dtd"är " " en extern identifierare: adressen "hello.dtd" låter dig använda data i dokumentet "hello.dtd" som uppmärkningsdeklarationer.
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE-hälsning [ <!ELEMENT-hälsning (#PCDATA)> ]> <greeting> Hej världen! </hälsning>Här deklarerades markeringen lokalt i !DOCTYPE.
BearbetningsinstruktionBehandlingsinstruktioner ( eng. processing instruction, PI ), låter dig placera instruktioner för ansökningar i dokumentet. Följande exempel visar en bearbetningsinstruktion för xml-stilmall som skickar instruktionerna i filen my-style.css till en xml-stilmallsapplikation (som en webbläsare) via href-attributet:
<?xml-stylesheet type="text/css" href="my-style.css"?> KommentarKommentarer ( eng. comment ) hänvisar inte till dokumentets teckendata. Kommentaren börjar med sekvensen "<!--" och slutar med sekvensen "-->", kombinationen av tecken "--" kan inte förekomma inuti. Tecknet & används inte som uppmärkning i en kommentar.
Exempel:
<!-- detta är en kommentar -->Ett element är ett koncept för den logiska strukturen i ett dokument. Varje dokument innehåller ett eller flera element. Elementgränser representeras av start- och sluttaggar . Elementnamnet i elementets start- och sluttaggar måste matcha. Ett element kan också representeras av en tom elementtagg , det vill säga som inte inkluderar andra element och teckendata.
Tag ( engelsk tag ) är en uppmärkningskonstruktion som innehåller namnet på ett element.
Starttagg: <element1>
Sluttagg: </element1>
Tom elementtagg: <empty_element1 />
I ett element kan attribut endast användas i starttaggen och den tomma elementtaggen.
Ett exempel på ett recept märkt med XML:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE recept> <receptnamn = "bröd" preptime= "5min" cooktime= "180min" > <title> enkelt bröd </title> <composition> <ingredient amount= "3" unit= "glass" > Mjöl </ingredient> <ingredient amount= "0.25" unit= "gram" > Jäst </ingredient> <ingredient amount= "1.5" unit= "glass" > Varmt vatten </ingredient> </composition> <instruktioner> <steg> Blanda alla ingredienser och knåda ordentligt. </step> <step> Stäng med en trasa och låt stå i en timme i ett varmt rum. </step> <!-- <step> Läs gårdagens tidning. </step> är ett tveksamt steg... --> <step> Knåda igen, lägg på en plåt och sätt in i ugnen. </step> </instructions> </recept> CDATA-sektionCDATA- sektionen är inte en logisk enhet av text. En sektion kan förekomma var som helst i ett dokument där syntaxen tillåter att teckendata placeras. Avsnittet börjar <![CDATA[och slutar ]]>. Mellan denna markering finns teckendata; teckendata innefattar alltså tecken < > &i sin omedelbara form.
Ett välformaterat dokument överensstämmer med alla allmänna XML-syntaxregler som gäller för alla XML-dokument : korrekt dokumentstruktur, matchande namn i start- och slutelementtaggen, etc. Ett dokument som inte är välformaterat kan inte betraktas som ett dokument-xml.
Dokumentexempel:
<?xml version="1.0" encoding="UTF-8"?> <!-- inloggningsskärm --> <edsscript> <sekvensnamn = "start" > <action cmd= "triggeron" > bt* </action> <action cmd= "triggeron" > msg_generic </action> <action cmd= "disablenbb" > Allt </action> <action cmd= "setscrtext" > @@System Giris@@ </action> <action cmd= "enablenbb" > framåt, huvudmenyn </action> <action cmd= "switchmsgtarget" > LOGIN_DLG </action> <action cmd= "sendmsg" > Start </action> <action cmd= "jump" > steg 2 </action> </sequence> <sequence name= "step2" > <action cmd= "waittrigger" > btnforward </action> <action cmd= "triggeron" > logga in* </action> <action cmd= "disablenbb" > Allt </action> <action cmd= "sendmsg" > kolla upp </action> </sequence> <trigger name= "login_succeded" > <condition type= "appmsg" > login_succeded </condition> <sequence> <action cmd= "endscript" /> </sequence> </trigger> <trigger name= "login_unknownuser" > <condition type= "appmsg" > login_unknownuser </condition> <sequence name= "login_unknownuser" > <action cmd= "disablenbb" > Allt </action> <action cmd= "setscrtext" > @@hata@@ </action> <action cmd= "showhtml" > generic_neg.htm,@@Yanlış kullanıcı ismi@@,@@Lütfen kullanıcı ismini doğru giriniz.@@ </action> <action cmd= "enablenbb" > tillbaka </action> <action cmd= "waittrigger" > btnback </action> <action cmd= "jump" > Start </action> </sequence> </trigger> <trigger name= "login_incorrectpwd" > <condition type= "appmsg" > login_incorrectpwd </condition> <sequence name= "login_incorrectpwd" > <action cmd= "disablenbb" > Allt </action> <action cmd= "setscrtext" > @@hata@@ </action> <action cmd= "showhtml" > generic_neg.htm,@@Hatalı parola@@,@@Lütfen parolanızı doğru giriniz.@@ </action> <action cmd= "enablenbb" > tillbaka </action> <action cmd= "waittrigger" > btnback </action> <action cmd= "jump" > Start </action> </sequence> </trigger> <!-- generiska utlösare --> <trigger name= "btnback" > <condition type= "buttonclick" > tillbaka </condition> <sequence name= "btnback" > <action cmd= "triggeron" > btnback </action> </sequence> </trigger> <trigger name= "btnforward" > <condition type= "buttonclick" > fram- </condition> <sequence name= "btnforward" > <action cmd= "triggeron" > btnforward </action> </sequence> </trigger> <trigger name= "btnmainmenu" > <condition type= "buttonclick" > huvudmeny </condition> <sequence> <action cmd= "jumpscript" > <value label= "mainmenuscript" scope= "local" /> </action> </sequence> </trigger> <trigger name= "btnquitapp" > < condition type= "buttonclick" > avsluta applikationen </condition> <sequence name= "btnquitapp" > <action cmd= "callscript" > quitapp.xml </action> <action cmd= "jump" > Start </action> </sequence> </trigger> <trigger name= "error_generic" > <condition type= "appmsg" > fel* </condition> <sequence> <action cmd= "showhtml" > errdsc_null.htm,@@Hata@@ </action> <action cmd= "disablenbb" > Allt </action> <action cmd= "enablenbb" > fram- </action> <action cmd= "waittrigger" > btnforward </action> <action cmd= "endscript" /> </sequence> </trigger> <trigger name= "msg_generic" > <condition type= "appmsg" > msg_generic </condition> <sequence> <action cmd= "showhtml" > generic_msg.htm </action> <action cmd= "triggeron" > msg_generic </action> </sequence> </trigger> <!-- Ett obehandlat undantag kastas från hårdkodssidan. --> <trigger name= "error_hardcodeside" > <condition type= "appmsg" > error_hardcodeside </condition> <sequence> <action cmd= "triggeroff" > * </action> <action cmd= "triggeron" > btnhuvudmenyn </action> <action cmd= "triggeron" > btnquitapp </action> <action cmd= "disablenbb" > Allt </action> <action cmd= "enablenbb" > huvudmeny </action> <action cmd= "showhtml" > errdsc_null.htm,Hata, @@İşlem sırasında bir hata meydana geldi.@@ </action> <action cmd= "waittrigger" > btnhuvudmenyn </action> </sequence> </trigger> </edscript>Det här avsnittet innehåller en sammanfattning av några av bestämmelserna i W3C:s rekommendationer relaterade till att arbeta med dokument. Motsvarande rekommendationer kan gälla både XML-dokument och den bredare klassen av dokument. Länkar tillhandahålls vanligtvis till de W3C-rekommenderade dokumenthanteringsverktygen.
Specifikationen kräver att processorer stöder minst två Unicode-kodningar: UTF-8 och UTF-16 .
XML-specifikationen definierar begreppen för en XML-processor och en applikation . En XML-processor ( parser ) är ett program som analyserar uppmärkning och skickar information om strukturen av ett dokument till ett annat program, en applikation.
XML-specifikationen ställer vissa krav på processorn utan att det påverkar kraven på applikationen.
Ett dokument är giltigt om det har en tillhörande dokumenttypsdefinition och om dokumentet uppfyller de begränsningar som presenteras i dokumenttypsdefinitionen.
XML-processorer är indelade i två klasser: validerande och icke-validerande.
Valideringsbehandlare kontrollerar dokumentets giltighet och måste rapportera (efter användarens val) överträdelser av de begränsningar som anges i dokumenttypsdefinitionen.
Icke-validerande handläggare kontrollerar inte dokumentets giltighet, men de uppgifter som nämns ovan för att bearbeta dokument förblir hos dem.
Schemaspråk används för att beskriva dokumenttyper . Eftersom XML är en delmängd av SGML- språket ärver det språket Document Type Definition ( DTD ) som utvecklats för SGML. Senare utvecklades andra schemaspråk, det mest kända är XML Schema , RELAX NG .
XSLT är designat för att lösa problemet med att omvandla ett XML-dokument till ett annat schema eller ett annat format .
För ett formaterat dokument (ett dokument förberett för rendering) är XSL-FO- formatet avsett .
XPath är en syntax för att adressera innehållet i ett dokument representerat i form av ett träd. XPath-uttryck används i XQuery- språket . XPath-uttryck kan i allmänhet användas i alla sammanhang där det är lämpligt att använda formella referenser till trädelement, i synnerhet som parametrar till metoder för dokumentåtkomstgränssnitt.
XQuery är ett dokumentorienterat programmeringsspråk.
Det finns tre API- alternativ för att läsa XML [12] .
Event API ( händelsedrivet API, push-stil API ) - XML-processor läser XML; vid en viss händelse (uppkomsten av en öppnings- eller stängningstagg, textsträng, attribut) anropas återuppringningsfunktionen .
Stream API (även pull-style API ) - arrangerat på samma sätt som I/O-strömmar . Applikationskoden frågar processorn om delar av XML, som bara kan gå framåt genom XML, och glömmer de delar som redan har passerats.
Object API ( Document Object Model , DOM, "document object model") - läser XML och återskapar det i minnet som en objektstruktur.
Det finns också hybrid-API:er: externa och oviktiga delar läses av streammetoden, medan interna och viktiga delar läses av objektmetoden.
Kodexempel (C++, fiktivt API) xml :: StreamReader- läsare ( "in.xml" ); std :: strängnamn , värde ; _ läsare . enterTag ( "dokument" ); while ( reader . getTag ( " sak " ) { xml :: Element * elThing = läsare . readEntireSubtree (); saker . emplace_back (); Sak & sak = saker . tillbaka (); sak . namn = elThing . requireStringAttr ( "namn" ); sak . värde = elThing . text (); }Direct Write API skriver XML-tagg för tagg, attribut för attribut.
Object API aka Document Object Model .
XML har parserimplementationer för alla moderna programmeringsspråk [17] .
Utan användning av CSS eller XSL renderas XML-dokumentet som vanlig text i de flesta webbläsare. Vissa webbläsare som Internet Explorer , Mozilla Firefox och Opera (Operas inbyggda Dragonfly - verktyg ) visar dokumentstrukturen som ett träd, vilket gör att noder kan komprimeras och expanderas med musklick.
Tillämpa CSS-stilarProcessen liknar att tillämpa CSS på ett HTML- dokument för visning. För att tillämpa CSS när det visas i en webbläsare måste XML-dokumentet innehålla en speciell länk till stilmallen. Till exempel:
<?xml-stylesheet type="text/css" href="myStyleSheet.css"?>Detta skiljer sig från HTML-metoden, som använder elementet <link>.
Tillämpa transformationer på XSL-FO-formatModerna webbläsare är bland verktygen som kan utföra XSLT-transformationer. I webbläsaren utförs vanligtvis en sådan transformation för att formatera dokumentet (konvertera dokumentet till XSL-FO-format). Följande uttalande i XML-dokumentets prolog instruerar webbläsaren att utföra XSLT-transformationen som beskrivs i filen transform.xsl:
<?xml-stylesheet type="text/xsl" href="transform.xsl"?>Du kan arbeta med ett XML-dokument i en vanlig textredigerare, men vanliga redigerare stöder inte strukturen i dokumentet. Det finns speciella XML-redigerare som gör arbetet med ett dokument mer bekvämt och effektivt.
DB2- databashanteringssystemet låter dig lagra data i XML-format och ger åtkomst till sådana data med hjälp av XQuery-språket.
XML stöds på låga hårdvaru-, firmware- och mjukvarunivåer i moderna hårdvarulösningar [18] .
XML är ett märkningsspråk, med andra ord ett sätt att beskriva ett dokument. Det är i nischen av dokument, texter, där andelen heterogen karaktärsdata är stor och andelen markering är liten - XML är framgångsrik. Å andra sidan är datautbytet i öppna system inte begränsat till utbyte av dokument. Redundansen av XML-uppmärkning (och för språkdesignsyften sägs det uttryckligen att kortfattadhet inte är en projektprioritet) påverkar situationer där data inte passar in i den traditionella dokumentmodellen. Ett nyhetsflöde, till exempel, formaterat med XML-syntax ( RSS , Atom-format ), är inte ett dokument i traditionell mening, utan en ström av samma typ av minidokument - verbose och redundant markering i detta fall är en väsentlig del av de överförda uppgifterna.
W3C är oroad över effektiviteten av XML, och de relevanta arbetsgrupperna undersöker denna fråga (i början av 2013 har inga normativa dokument tagits fram).
En annan situation där XML-format kanske inte är den bästa lösningen är när man arbetar med data med en enkel struktur och en liten mängd teckendata (datafält). I det här fallet är andelen uppmärkning av den totala volymen stor och programmatisk bearbetning av XML kan bli orimligt dyr jämfört med att arbeta med data av enklare struktur. Inom detta område tittar utvecklare på inbyggda dataorienterade verktyg som INI , YAML , JSON .
W3C arbetar med att skapa ett skriptspråk för att arbeta med XML (i början av 2013 har inga regulatoriska dokument utvecklats).
World Wide Web Consortium (W3C) | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Produkter och standarder |
| ||||||||||||||
Organisationer |
| ||||||||||||||
PÅ |
| ||||||||||||||
Konferenser |
|
semantisk webb | |
---|---|
Grunderna | |
Underavsnitt |
|
Ansökningar |
|
Relaterade ämnen | |
Standarder |
|
Webb och hemsidor | |
---|---|
globalt | |
Lokalt | |
Typer av webbplatser och tjänster |
|
Skapande och underhåll | |
Typer av layouter, sidor, webbplatser | |
Teknisk | |
Marknadsföring | |
Samhälle och kultur |
Dokumentmarkeringsspråk | |
---|---|
kontorsdokument _ | |
välkänd | |
Mindre känd |