Senaste nytt
2008-06-19 14:02
FRA-lagen genomröstad
2008-06-13 17:52
Muhammed Riaz utvisad
2008-06-10 14:04
Yelah Förlag släpper
bok
Tipsa en kompis om denna artikel Skriv ut denna artikel Fredag 19 november 1999

Hur XML används på
Yelahs site

XML är hjärtat i den tekniska lösningen för Yelah's sitestruktur. Genom att tillämpa XML in extenso gör vi det möjligt att komma åt siten från alla möjliga och omöjliga klienter. Yelahs XML-mall är en mycket nedskalad version av XHTML som liknar HTML. Det är meningen att om en läsare kommer in med en High-End browser som Internet Explorer, använder man den till HTML konverterade artikeln som en "stomme" och bygger sedan på diverse godis utanpå. Om läsaren kommer in med Lynx eller en liknande, enbart text-kapabel läsare, så skalas allt godis av. Yelahs XML-mall innehåller således bara element som kan visas av i princip ALLA läsare, plus RTF ordbehandlingsformat och ren ISO 8859-1 råtext. (Läs mer här.)

Yelahs XML-Mall

Alla befintliga artiklar i arkivet (till att börja med) och online-tidningen Yelah (senare) måste konverteras till det XML-format som definierats för Yelahs artiklar. XML-konvertering innebär i huvudsak att alla artiklar skall se ut något åt det här hållet:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article SYSTEM "article.dtd">
<article>
<metadata cathegory="anarchism" language="SE">
<description>Detta &auml;r en beskrivning av artikeln</description>
<author>Linus Walleij</author>
<keywords>Linus Walleij, om XML, anarkistisk praktik</keywords>
<published>199909231200</published>
</metadata>
<body>
<h1>Titel p&aring; artikeln.</h1>
<p>F&ouml;rsta stycket b&ouml;rjar h&auml;r.<footnote>En fotnot</footnote></p>
<h2>En uppr&auml;kningslista!</h2>
<ul>
<li>Punkt 1</li>
<li>Punkt 2</li>
<li>Punkt 3</li>
</ul>
</body>
</article>

Viktigt att notera är att alla sk element (article, metadata osv) både måste inledas <article> och avslutas </article>. Detta gäller även <p>, <li> och liknande element som man kanske vant sig vid att inte behöva avsluta. Det gäller också exempelvis sidbrytningar och radbrytningar (<hr />, <br />) som man kanske är van att skriva såhär: <hr> <br>. Dessa måste "slutas" med en avrundande />. Dessutom måste alla element (eller som man också säger, taggar) skrivas med gemener, små bokstäver. I HTML spelar det ingen roll om man skriver en tagg med små eller stora bokstäver, men det gör det i XML! I min mall används bara små bokstäver, och det ska du också göra! Om detta inte görs så fungerar inte artikeln i arkivet. Vidare MÅSTE man följa mallen, det MÅSTE finnas keywords exempelvis. När det gäller artikeltexten MÅSTE det finnas en huvudrubrik (h1) följd av MINST ett stycke normal text.

Indragen här visar hur man kan formatera XML-texten på ett elegant sätt. Genom att titta i DTD-filen article.dtd kan man få veta exakt hur filen skall struktureras för att vara godkänd som artikel, men detta format är dessvärre något svårbegripligt. Därför sammanfattar jag här den mall som gjorts för artiklarna i Yelahs arkiv.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article SYSTEM "article.dtd">

Dessa två rader måste föregå varje dokument som skall använda Yelahs XML-mall. Filen article.dtd måste finnas i samma directory som filen man skapar, annars kan inte systemet hitta den och verifiera artikeln mot den. article.dtd inkluderar i sin tur filen HTMLlat1x.ent som innehåller definitionen av svenska tecken. Eftersom språket XML innebär att man in i minsta detalj måste definiera vad som skall ingå i språket, är man till och med tvungen att tala om att man vill använda svenska tecken, och hur man använder dem!

<article>
...
</article>

Själva huvuddelen av artikeln omges av taggen för artikel. Det är inget speciellt med dessa, det är bara det att de MÅSTE finnas. XML-Parsern använder taggen för att veta vart den skall börja och sluta arbeta.

<metadata cathegory="anarchism" language="SE">
...
</metadata>

Innanför metadata-taggarna finns, ja just det, all metadata för artikeln. Metadatan är den data som sedan skall användas för att indexera artikeln i en databas, och därför är det vilktigt att man väljer sin metadata med omsorg och tex inte glömmer något nyckelord.

<metadata>-taggen har två attribut: cathegory och language. Möjliga värden för cathegory är anarchism, antifascism, chiapas, ecology, english, feminism, history, culture, organizations, situationism, papers, yelahold, tech och misc och är kategorier som jag skapat med utgångspunkt från engelska uttryck för de sektioner Pelle använder i arkivet idag. Givetvis kan man ta bort och lägga till nya kategorier här, men det är nog dumt att längre fram ta bort kategorier som redan använts. Det går däremot bra att när som helst lägga till nya kategorier.

Attributet language använder ISO-tvåbokstavskoderna för att tala om vilket språk artikeln är skriven i. Möjliga värden är SE (Svenska) och EN (Engelska). Givetvis kan vi lägga till fler språk längre fram om det skulle behövas.

<description>Detta &auml;r en beskrivning av artikeln</description>

Detta element är ganska självförklarande. Skriv in en beskrivning av din artikel här. Notera at ä har bytts mot &auml;!

<author>Linus Walleij</author>

All form av förklaring fullständigt överflödig.

<keywords>Linus Walleij, om XML, anarkistisk praktik</keywords>

I <keywords> elementet är det tänkt att man skall räkna upp alla de ord som någon som letar efter artiklar kan vara intresserade att söka efter. Dessa kommer dessutom att publiceras utåt i form av <meta>-taggar i HTML-sidan som skapas från XML-filen när tex sökrobotar surfar in på Yelahs site.

<published>199909231200</published>

Här anger man datum och tid för när artikeln först publicerades (inte när du gjorde din XML-fil!). Datum/tid strängen har formen ååååmmddhhmm dvs år / månad / dag / timmar / minuter, och används på diverse sätt av indexmaskiner och sökmotorer.

<body>
<h1> ... </h1>
<p> ... </p>
...
</body>

<body>-taggen omsluter själva artikelns råtext. Här inuti hittar man substansen, dvs det som verkligen går att läsa. Som du ser har jag snott <body>-taggen från HTML, men det betyder inte att du kan göra samma sak med en <body>-tag i Yelahs XML-format som du kan göra med den i HTML. Du kan exempelvis INTE skriva: <body bgcolor="#ffffff">. Detta är nämligen presentationsdata, det talar om att dokumentets kropp skall skrivas på vit bakgrund, och så är det inte meningen att man ska använda XML. <body> i min tappning har INGA attribut.

Det finns vissa regler för vad som får förekomma i <body>-taggen. Det MÅSTE alltid först komma en rubrik (<h1> ... </h1>), följt av MINST ett stycke (<p> ... </p>). Resten av artikeln kan man bygga upp med diverse element som beskrivs i det som följer. Huvudrubriken (<h1> ... </h1>) kan BARA användas överst i artikeln, dvs första elementet efter <body>, så man kan inte ha mer än EN huvudrubrik, precis som i en riktig artikel. Vill man ha underrubriker är man hänvisad till underrubrikelementet (<h2> ... </h2>).

<body>-elementet kan innehålla följande underelement:

<h1> ... </h1>

<h1> Huvudrubrikelementet måste som sagt finnas och får som sagt bara förekomma en gång och endast överst i <body>-elementet. <h1>-elementet MÅSTE följas av minst ett eller flera styckeelement (<p> ... </p>). <h1>-elementet kan innehålla <br /> element (ex för att dela av centrerade rubriker), men inga andra element.

<h2> ... </h2>
<h3> ... </h3>

<h2> eller <h3>, underrubrikelementet kan förekomma godtyckligt antal gånger i artikeln. Den kan innehålla <br />-element för att dela av underrubriken.

<blockquote> ... </blockquote>

<blockquote> Blockcitatelementet kan förekomma godtyckligt antal gånger i texten. Blockcitatelementet kan innehålla <br />-element för att dela av rader, eller hela <p>-element (stycken), eller <footnote>-element (fotnoter), fetstil (<b> ... </b>), kursiveringar (<i> ... </i>).

<p> ... </p>

<p> Styckeelementet kan förekomma godtyckligt antal gånger i texten (såklart!) innehålla radbrytningar <br />, fotnoter (<footnote> ... </footnote>), fetstil (<b> ... </b>), kursiveringar (<i> ... </i>).

<table>
<tr>
<td> ... </td>
<td> ... </td>
...
</tr>
...
</table>

<table> Tabellelementet kan innehålla en eller flerar tabellrader <tr>. Ingenting annat. Du kan inte sätta bredd el dyl på tabellen som i HTML. <tr> Tabellraden kan innehålla en eller flera tabellceller <td>. Ingenting annat. Tabellcellen kan innehålla innehålla radbrytningar <br />, fotnoter (<footnote> ... </footnote>), fetstil (<b> ... </b>), kursiveringar (<i> ... </i>). Det finns heller ingen möjlighet att "nästla" tabeller som i HTML, dvs ha tabeller inuti tabeller.

<ol>
<li> ... </li>
<li> ... </li>
...
</ol>
<ul>
<li> ... </li>
<li> ... </li>
...
</ul>

Den ordnade (numrerade) listan <ol> ... </ol>, och den onumrerade punktlistan <ul> ... </ul> kan innehålla ett eller flera listindex <li> ... </li>. Ett listindex kan i sin tur innehålla radbrytningar <br />, fotnoter (<footnote> ... </footnote>), fetstil (<b> ... </b>), kursiveringar (<i> ... </i>). Listor kan inte "nästlas", dvs du kan inte ha listor inuti listor.

<dl>
<dt> ... </dt>
<dd> ... </dd>
<dt> ... </dt>
<dd> ... </dd>
...
</dl>

<dl> Definitionslistan kan innehålla godtyckligt antal definiander <dt> ... </dt> följda av var sin definition <dd> ... </dd> Observera att till skillnad från HTML MÅSTE det finnas exakt en definition till varje definiand, och de måste följa strikt efter varandra. Definianderna och definitionerna kan i sin tur innehålla radbrytningar <br />, fotnoter (<footnote> ... </footnote>), fetstil (<b> ... </b>), kursiveringar (<i> ... </i>). Definitionslistor kan inte nästlas.

<hr />

<hr /> "Sidbrytningar" eller "horizontal rulers" som engelsmännen kan kalla det kan förekomma i <body>-taggen, dvs mellan stycken och blockcitat och annat, men aldrig exempelvis inuti ett stycke.

<img src="...." alt="...." />

<img> Bildelement kan förekomma i <body>-elementet, dvs mellan stycken, tabeller och listor och rubriker, aldrig mitt i dem. Både src och alt-attributen är obligatoriska. För tillfället pekar alla src-anrop till den virtuella katalogen /images, vilket i filsystemet för närvarande motsvarar /usr/rss/images, så en bild som exempelvis ligger i /usr/rss/images/archive/minbild.jpg skall länkas med kommandot <img src="archive/minbild.jpg" alt="Min Bild" /> observera också här att img-elementen måste avslutas med />.

<a href="..."> ... </a>

<a> (anchor) elementet används som vanligt för att länka till andra artiklar. OBSERVERA: du kan bara länka till andra artiklar i Yelahs arkiv! Exempelvis: <a href="xmlyelah">Yelahs XML </a> för att länka till detta dokument.

<footnote> ... </footnote>

Fotnoter kan placeras vart som helst i texten, dock enbart i löpande text inte exempelvis i rubriker och dylikt. Fotnoter bryts automatiskt ut ur XML-dokumentet och placeras sist i dokumentet när man exempelvis konverterar till HTML eller RTF. Detta sätt att "fälla in" fotnoterna i texten gör det lätt att exempelvis lägga till nya fotnoter mitt i texten utan att behöva numrera om alla efterföljande fotnoter som annars ofta är nödvändigt. Arbetssättet påminner om det sätt man lägger till fotnoter i typsättningsprogrammet LaTeX.

Externa länkar till artiklarna?

Men länkar då? Frågar du. Hur länkar jag från en artikel till en annan? Ja, detta har jag tänkt lösa genom att den databas som indexerar artiklarna innehåller en separat korsreferenslista över vilka länkar som hör ihop med en viss artikel. Dessa kommer att behandlas antingen som interna länkar (mellan olika artiklar på yelah:s site) eller som externa länkar (som länkarna i länkarkivet). På det viset kommer de att kunna automatkollas av länkvalideringsroboten.

Länkarna från diverse artiklar hamna i en egen länkkategori (linked from articles) om de inte passar in i någon av de redan befintliga kategorierna.

En sak man måste offra med detta är möjligheten att ha en extern länk mitt inne i artikeln. Detta blir bara FÖR bökigt att hantera. Kanske kan vi lösa detta bättre i framtiden? Åtminstone interna länkar kan man ju lita på, så dessa borde ju kunna dyka upp var som helst.

Autoindexering och XML-filernas placering

Yelahs filträd för XML-filerna ligger i /usr/rss/xml_content. Där ligger filerna på ett sådant vis att de är lätta att hålla reda på, exempelvis ligger artiklar ur gamla tidningar som Kaos eller A-Fil för sig, även om de individuella artiklarna från dessa tidningar hör hemma i kategorier som "anarkism", "ekologi" osv. Hur filerna ligger i filträdet har INGENTING att göra med hur Yelahs site (/archive) sedan presenterar artiklarna. Där kommer nämligen artiklarna att placeras ut efter hur de klassificerats, som "anarkism", "organisationer" osv osv.

Ett program som heter "xmlindexer" kan med jämna mellanrum, eller på begäran, att vandra igenom artikelträdet och indexera upp artiklarna i databasen. Som primärindex i artikeltabellen i databasen kommer filnamnet på XML-filen att användas. Heter XML-filen exempelvis "souchy.xml" kommer primärindex att blir "souchy". Detta medför givetvis att två artiklar under inga som helst omständigheter får ha samma namn, även om de ligger i olika fysiska foldrar.

Således kan man inte ha en massa filer som heter 1.html, 2.html osv utan de bör istället döpas om till maq-1.html maq-2.html osv. Programmet "xmlindexer", och därmed databasen, ser inte det fysiska filträdet, det är bara avsett för administratörerna som skall lägga till / ta bort nya artiklar.

Det finns vissa problem med detta. För det första går det inte på något enkelt sätt att pressa in bildarkivet i den här mallen. Bildarkivet innehåller bara bilder och behöver en egen databaslösning där alla bilder kan kodas med metadata och indexeras. Bildarkivet bör därför lyftas ur arkivet och bli just ett separat bildarkiv.

Vissa "underkataloger" som fanns i Yelahs gamla arkiv, tex katalogen för maquiladoraindustrin (EKO-MAQ) har istället gjorts om till en, stor artikel. Andra avdelningar, ex varje nummer av Anarkistisk Tidskrift eller Kaos, hålls samman av ett dokument som i princip bara innehåller länkar till de olika artiklarna, vilka är utplacerade i sina respektive kategorier.

Linus Walleij


Fler texter av Linus Walleij


Relaterade länkar:
Expat (XML-Parser) Homepage
XML @ W3C.ORG
XML FAQ
XML Guiden
LCDtools - motorn i Yelahs XML-hantering
ANNONSER
http://yelah.net/butiken/product=73
http://www.yelah.net/articles/information20071218
http://www.arbetaren.se/prenumerera
http://www.uppmana.nu
http://www.stefanbergmark.se/
http://www.anarkistisktidning.org