XHTMLs framtid

W3C har mycket ambitiösa planer beträffande XHTML. Man vill följa XMLs spår och modulisera språket. Redan idag finns det ett antal olika utkast (Working Drafts) som beskriver hur ska det gå till. Förhoppningsvis kommer dessa utkast att så småningom leda till rekommendationer. Det senaste utkastet finns på http://www.w3.org/TR/xhtml-modularization.

Modulisering

Modulisering är en komposition och dekomposition av DTDer. Genom att fragmentera (åtskilja eller gruppera) deklarationer i olika abstrakta delar kan man skapa specifika typer av funktionaliteter. Dessa abstrakta delar kallas för moduler. Modulerna kan sedan infogas i XML-dokument och dess applikationer, t ex XHTML. Modulerna kan infogas med hjälp av namnrymder XML-namespaces .

Namnrymder in XHTML

I HXTML, såsom XML, kan andra XML applikationer (dokumenttyper) infogas t ex MathML, SVG, eller en typ man skapar själv. Då element- och attributnamngivning är valfritt kan var och en av dessa dokumenttyper innehålla samma elementnamn men ändå referera till två olika elementtyper. Till exempel:

<html>
<head>
<title>Introduktion till XHTML</title>
</head>
<body>
...

I HTML och XHTML får ett och endast ett title-element finnas - varken mindre eller mer. Dessutom är elementets placering bestämt. Det får endast finnas i dokumentets huvud.

<?xml version="1.0">
<bok>
<kapitel>
<title>Introduktion till XHTML</title>
....
</kapitel>
<kapitel>
<title>Introduktion till XML</title>
....
</kapitel>
</bok>

I XML har man friheten att namnge element enligt eget huvud.

I exemplet till vänster refererar elementet-title till titeln på kapitlar och inte (som i HTML) till titeln på själva dokumentet. Elementtypens förekomst motsvarar antal kapitlar.

Båda dokumenttyper använder elementet title. Trots sitt gemensamma namn är dessa element av två olika typer. Mao, det handlar om två helt olika element. Hade de förekommit i ett och samma dokument skulle de enbart skappa en förvirring. Därför måste de åtskiljas på något sätt. Det görs med en s.k. XML-namnrymd, XML-namespace.

XML-namnrymd är en namnkollektion av ett specifikt dokumenttyp som identifieras genom en URI-referens, dvs genom att peka till det dokumentet (DTDn) som beskriver dessa namn. Dokumentets källa identifieras med hjälv av attributet xmlns.

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

Här pekar man till dokumentet som beskriver de gällande namnrymder i XHTML.

Om man nu skulle vilja inkludera några matematiska beräkningar i sitt XHTML-dokument tar man till hjälp attributet xmlns och pekar till MathML.

<?xml version="1.0"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>XHTML och MathML dokument</title></head>
<body>
<p>här använder man sig av DTDn för XHTML 1.0 Strict och för att infoga MathML skriver man:</p>
<math xmlns="http://www.w3.org/1998/Math/MathML">
... här använder man markorden beskrivna i MathML ...
</math>
<p>och här återgår man till XHTML för att rask takt infoga tebell-DTDn. I den närmaste framtiden bör man även kunna inkludera SVG-grafik på samma sätt</p>
<table xmlns='http://www.w3.org/TR/REC-html40'>
... här kommer tabellen ...
</table>
<svg xmlns="http://www.w3.org/Graphics/SVG/SVG-19990812.dtd">
.... här skulle man kunna använda SVGs-markorden ...
</svg>
<p>och åter igen tillbaka till XHTML</p>
</body>
</html>

Scalable Vector Graphics (SVG) är en applikation av XML och ett av de många nya markeringsspråken som är under utveckling den senaste tiden. Språket beskriver tvådimentionell grafik som skapas med hjälp av element (markord). Än så länge är språkets utveckling på utkastnivå. Ändå finns det redan verktyg för att både skapa och kunna se på så sätt skapade grafik.

Språket kan användas för sig själv, som vilket annat markeringsspråk som helst, eller som modul. Då ingen rekommendation har ännu publicerats, mao de slutliga markorden kan fortfarande ändras, exemplificerar jag språket med den i SVG-läsaren bifogade prover.

SVGViewer

Det är allt som behövs (markorden nedan) gör att skapa alla dessa former. Men SVG kan göra mycket mer än så. Utöver alla möjliga och omöjliga former som t ex spirografritningar kan man med språkets hjälp skapa olika textdeformeringar, t ex skuggor eller cirkulärt/vågigt text och även helt "vanliga bilder". De sistnämnda kan dock vara lite komplicerade. Därför kan man rita dem i vanliga ritprogram och sedan exportera till SVG. CorellDraw, t ex, kom nyligen med en speciell filter för just detta ändamål.

SVG-läsare har ett zoomredskap som kan vara mycket behjälpligt vid till exempel förstorningar av kartor. Kartorna kan zoomas så att även de minsta detaljerna, t ex gatunamn, är synliga utan att bilden förlorar kvalité.

<svg width="600" height="500" >
<g style="text-rendering: optimizeLegibility">
<text x="5" y="20" style="font-size:22">SVG Demo: Some basic SVG regular polygons</text>
<g style="stroke:black; fill:none; shape-rendering:default" >
<polygon points="99,50,143,125,56,124, 99,50" />
<polygon points="225,50,275,99,225,150, 175,100,224,50" />
<polygon oints="350,50,397,84,379,140, 320,140,302,84,350,50" />
<polygon points="475,50,518,74,518,125, 475,150,431,124,431,75,475,50" />
<polygon points="99,175,138,193,148,235, 122,269,79,270,51,237,59,195, 97,175" />
<polygon points="225,175,260,189, 275,225,260,260,225,275,189, 260,175,225, 189,189,224,175" />
<polygon points="350,175,382,186, 399,216,393,250,367,271,332, 271,306,250,300,216,317,186, 350,175" />
<polygon points="475,175,504,184, 522,209,522,240,504,265,475,275, 445,265,427,240,427,209, 445,184,475,175" />
</g>
</g>
</svg>

SVG-läsaren (obs! prototyp) kan laddas från http://www.alphaworks.ibm.com/tech/svgview.
SVG utkast http://www.w3.org/TR/SVG

Valid XHTML
1.0