
XML-sprÄket uppfanns 1996. Inte sÄ fort hade det dykt upp förrÀn möjligheterna med dess tillÀmpning redan hade börjat missförstÄs, och för de syften som de försökte anpassa det till var det inte det bÀsta valet.
Det Àr ingen överdrift att sÀga att de allra flesta XML-scheman jag har sett var olÀmpliga eller felaktiga anvÀndningar av XML. Dessutom visade denna anvÀndning av XML ett grundlÀggande missförstÄnd av vad XML handlade om.
XML Àr ett mÀrkningssprÄk. Detta Àr inte ett dataformat. De flesta XML-scheman har uttryckligen förbisett denna distinktion och blandar ihop XML med ett dataformat, vilket i slutÀndan resulterar i ett misstag nÀr man vÀljer XML eftersom det Àr dataformatet som faktiskt behövs.
Utan att gÄ in pÄ för mycket detaljer Àr XML bÀst lÀmpat för att kommentera textblock med struktur och metadata. Om ditt huvudmÄl inte Àr att arbeta med ett textblock Àr det osannolikt att valet av XML Àr motiverat.
Ur denna synvinkel finns det ett enkelt sÀtt att kontrollera hur vÀl XML-schemat Àr gjort. LÄt oss som exempel ta ett dokument i det avsedda schemat och ta bort alla taggar och attribut frÄn det. Om det som Àr kvar inte Àr meningsfullt (eller om det finns en tom rad kvar), sÄ Àr antingen ditt schema inte byggt korrekt eller sÄ borde du helt enkelt inte ha anvÀnt XML.
Nedan kommer jag att ge nÄgra av de vanligaste exemplen pÄ felaktigt konstruerade kretsar.
<roĐŸt>
<item name="name" value="John" />
<item name="city" value="London" />
</roĐŸt>HĂ€r ser vi ett exempel pĂ„ ett ogrundat och mĂ€rkligt (men mycket vanligt) försök att uttrycka en enkel nyckel-vĂ€rde-lexikon i XML. Om du tar bort alla taggar och attribut kommer du att lĂ€mnas med en tom rad. I huvudsak Ă€r detta dokument, hur absurt det Ă€n lĂ„ter, en semantisk anteckning av en tom rad.
<root name="John" city="London" />För att göra saken vĂ€rre har vi inte bara en semantisk anteckning av en tom strĂ€ng hĂ€r som ett extravagant sĂ€tt att uttrycka en ordbok â den hĂ€r gĂ„ngen Ă€r "ordboken" direkt kodad som attribut för rotelementet. Detta gör den givna uppsĂ€ttningen av attributnamn pĂ„ ett element odefinierad och dynamisk. Dessutom visar det att allt författaren verkligen ville uttrycka var en enkel nyckel-vĂ€rde-syntax, men i stĂ€llet tog han det absolut bisarra beslutet att tillĂ€mpa XML, och tvingade anvĂ€ndningen av ett enda tomt element helt enkelt som ett prefix för att anvĂ€nda attributsyntax. Och jag stöter pĂ„ sĂ„dana upplĂ€gg vĂ€ldigt ofta.
<roĐŸt>
<item key="name">John</item>
<item key="city">London</item>
</roĐŸt>Det hĂ€r Ă€r nĂ„got bĂ€ttre, men nu Ă€r nycklarna av nĂ„gon anledning metadata och vĂ€rdena Ă€r det inte. En mycket mĂ€rklig titt pĂ„ ordböcker. Om du tar bort alla taggar och attribut kommer hĂ€lften av informationen att gĂ„ förlorad.
Ett korrekt ordboksuttryck i XML skulle se ut ungefÀr sÄ hÀr:
<roĐŸt>
<item>
<key>Name</key>
<value>John</value>
</item>
<item>
<key>City</key>
<value>London</value>
</item>
</roĐŸt>Men om mĂ€nniskor har tagit det konstiga beslutet att anvĂ€nda XML som dataformat och sedan anvĂ€nda det för att organisera ett ordförrĂ„d, dĂ„ borde de förstĂ„ att det de gör Ă€r olĂ€mpligt och inte bekvĂ€mt. Det Ă€r ocksĂ„ vanligt att designers av misstag vĂ€ljer XML för att skapa sina applikationer. Men Ă€nnu oftare gör de saken vĂ€rre genom att meningslöst anvĂ€nda XML i nĂ„gon av de former som beskrivs ovan, utan att ignorera att XML helt enkelt inte Ă€r lĂ€mplig för detta.
SÀmsta XML-schemat? Förresten, priset för det sÀmsta XML-schemat jag nÄgonsin sett, HÀmtar filformatet för automatisk provisioneringskonfiguration för Polycom IP-telefonitelefoner. SÄdana filer krÀver nedladdning av XML-förfrÄgningsfiler via TFTP, vilket... I allmÀnhet Àr hÀr ett utdrag frÄn en sÄdan fil:
<softkey
softkey.feature.directories="0"
softkey.feature.buddies="0"
softkey.feature.forward="0"
softkey.feature.meetnow="0"
softkey.feature.redial="1"
softkey.feature.search="1"
softkey.1.enable="1"
softkey.1.use.idle="1"
softkey.1.label="Foo"
softkey.1.insert="1"
softkey.1.action="..."
softkey.2.enable="1"
softkey.2.use.idle="1"
softkey.2.label="Bar"
softkey.2.insert="2"
softkey.2.action="..." />Det hÀr Àr inte nÄgons dÄliga skÀmt. Och det hÀr Àr inte min uppfinning:
- element anvÀnds helt enkelt som ett prefix för att bifoga attribut, som sjÀlva har hierarkiska namn.
- Om du vill tilldela vÀrden till flera instanser av en viss typ av post mÄste du anvÀnda attributnamn för att göra detta. som har index.
- Dessutom attribut som börjar med
softkey., mÄste placeras pÄ element<softkey/>, attribut som börjar medfeature., mÄste placeras pÄ element<feature/>osv, trots att det ser helt onödigt och vid första anblicken meningslöst ut. - Och slutligen, om du hoppades att den första komponenten i ett attributnamn alltid skulle vara samma som elementnamnet - inget liknande! Till exempel attribut
up.mÄste fÀstas vid<userpreferences/>. Ordningen för att koppla attributnamn till element Àr godtycklig, nÀstan helt.
Dokument eller data. DĂ„ och dĂ„ gör nĂ„gon nĂ„got helt konstigt genom att försöka jĂ€mföra XML och JSON â och dĂ€rmed visa att de inte heller förstĂ„r. XML Ă€r ett dokumentuppmĂ€rkningssprĂ„k. JSON Ă€r ett strukturerat dataformat, sĂ„ att jĂ€mföra dem med varandra Ă€r som att försöka jĂ€mföra varma med mjuka.
Begreppet skillnaden mellan dokument och data. Som en analog till XML kan vi villkorligt ta ett maskinlĂ€sbart dokument. Ăven om det Ă€r tĂ€nkt att vara maskinlĂ€sbart, hĂ€nvisar det metaforiskt till dokument, och Ă€r ur denna synvinkel faktiskt jĂ€mförbart med PDF-dokument, som oftast inte Ă€r maskinlĂ€sbara.
Till exempel, i XML spelar ordningen pÄ element roll. Men i JSON Àr ordningen för nyckel-vÀrdepar inom objekt meningslös och odefinierad. Om du vill fÄ en oordnad ordlista med nyckel-vÀrdepar spelar ingen roll i vilken ordning elementen visas i den filen. Men du kan bilda mÄnga olika typer av data frÄn denna data. av dokument, eftersom det finns en viss ordning i dokumentet. Metaforiskt Àr det analogt med ett dokument pÄ papper, Àven om det inte har fysiska dimensioner, till skillnad frÄn en utskrift eller PDF-fil.
Mitt exempel pÄ en riktig XML-ordboksrepresentation visar ordningen pÄ elementen i ordboken, i motsats till JSON-representationen. Jag kan inte ignorera denna ordning: denna linjÀritet Àr inneboende i dokumentmodellen och XML-formatet. Vissa kanske vÀljer att ignorera ordningen nÀr de tolkar detta XML-dokument, men det Àr ingen idé att brÄka om detta eftersom frÄgan ligger utanför ramen för en diskussion om sjÀlva formatet. Dessutom, om du gör dokumentet synligt i webblÀsaren genom att bifoga en överlappande stilmall till det, kommer du att se att ordbokselementen visas i en viss ordning och inte i nÄgon annan.
Med andra ord kan en ordbok (ett stycke strukturerad data) konverteras till n olika möjliga dokument (i XML, PDF, papper, etc.), dÀr n - antalet möjliga kombinationer av element i ordboken, och vi har Ànnu inte tagit hÀnsyn till andra möjliga variabler.
Men det följer ocksÄ att om du bara vill överföra data, kommer det inte att vara effektivt att anvÀnda ett maskinlÀsbart dokument för detta. Den anvÀnder en modell, som i det hÀr fallet Àr överflödig, den kommer bara att vara i vÀgen. Dessutom, för att extrahera kÀlldata, mÄste du skriva ett program. Det finns knappast nÄgon mening med att anvÀnda XML för nÄgot som inte kommer att formateras som ett dokument nÄgon gÄng (sÀg att anvÀnda CSS eller XSLT, eller bÄda), eftersom det Àr den frÀmsta (om inte den enda) anledningen till att göra det. till dokumentmodellen.
Dessutom, eftersom XML inte har nÄgot begrepp för siffror (eller booleska uttryck eller andra datatyper), betraktas alla siffror som representeras i detta format bara som extra text. För att extrahera data mÄste schemat och dess förhÄllande till motsvarande data som uttrycks vara kÀnt. Du behöver ocksÄ veta nÀr, baserat pÄ sammanhanget, ett visst textelement representerar ett tal och bör konverteras till ett tal osv.
Processen att extrahera data frÄn XML-dokument skiljer sig sÄledes inte sÄ mycket frÄn processen att kÀnna igen skannade dokument som innehÄller till exempel tabeller som bildar mÄnga sidor med numerisk data. Ja, det Àr möjligt att göra detta i princip, men detta Àr inte det mest optimala sÀttet, förutom som en sista utvÀg, nÀr det absolut inte finns nÄgra andra alternativ. En rimlig lösning Àr att helt enkelt hitta en digital kopia av originaldata som inte Àr inbÀddad i en dokumentmodell som kombinerar data med dess specifika textrepresentation.
Som sagt, det förvĂ„nar mig inte alls att XML Ă€r populĂ€rt i nĂ€ringslivet. Anledningen till detta Ă€r just att dokumentformatet (pĂ„ papper) Ă€r begripligt och bekant för nĂ€ringslivet, och de vill fortsĂ€tta anvĂ€nda en bekant och begriplig modell. Av samma anledning anvĂ€nder företag alltför ofta PDF-dokument istĂ€llet för mer maskinlĂ€sbara format â eftersom de fortfarande Ă€r bundna till konceptet med en utskriven sida med en viss fysisk storlek. Detta gĂ€ller till och med dokument som sannolikt inte kommer att skrivas ut (till exempel en 8000 XNUMX-sidig PDF-fil med registerdokumentation). Ur denna synvinkel Ă€r anvĂ€ndningen av XML i affĂ€rer i huvudsak en manifestation av skeuomorfism. MĂ€nniskor förstĂ„r den metaforiska idĂ©n med en tryckt sida av begrĂ€nsad storlek, och de förstĂ„r hur man skapar affĂ€rsprocesser baserade pĂ„ tryckta dokument. Om det Ă€r din guide, dokument utan fysiska storleksbegrĂ€nsningar som Ă€r maskinlĂ€sbara â XML-dokument â âârepresenterar innovation samtidigt som de Ă€r en vĂ€lbekant och bekvĂ€m dokumentmotsvarighet. Detta hindrar inte dem frĂ„n att förbli ett felaktigt och alltför skeuomorft sĂ€tt att presentera data.
Hittills Àr de enda XML-scheman jag kÀnner till som jag verkligen kan kalla en giltig anvÀndning av formatet XHTML och DocBook.
KĂ€lla: will.com
