Utökad DTD för mer semantik
Jag har slängt iväg några frågor till Roger Johansson angående webbstandarder och utökade DTD:er.
Tanken föddes genom Jeffrey Zeldmans inlägg om target och xhtml-strict, min eget sökande i ämnet samt genom funderingar kring vad jag kan göra med min XML-fil för iTunes musikbibliotek. Jag leker med tanken om en kultur-DTD.
XHTML 1.0 Culture. Typ.
Det hela bottnar i semantiken. I arbetet med redesignen av dagensskiva.com skulle jag vilja märka upp innehållet bättre än vad det är märkt idag. Främst menar jag då detaljer som artist, skiva, låt, producent, bolag, etikett och sånt.
Helt plötsligt blandar någon in <artist>Björk</artist>s "<song>The Anchor Song</song>" och den blåaste av <instrument>saxofoner</instrument> gråter i sin stilla ensamhet.
<artist>Martin Dosh</artist> hör hemma hos <label>Anticon</label> på så väldigt många sätt, samtidigt som han är en udda fågel.
I mina egna test la jag bara till förkastade element, men det funkar med vad som helst.
Jag använde mig av W3C:s XHTML 1.0 Strict och utökade den DTD:n med det jag ville göra. När jag testkörde sidor med den nya DTD:n var resultatet att Explorer 6, Mozilla och Safari gick in i Strict mode. W3C:s validator läste dessutom DTD:n och anmärkte på fel i enligt den nya DTD:n. Om webbläsarna verkligen gick in och läste den nya DTD:n eller ej har jag svårt att avgöra. Jag har helt enkelt inte testat, för jag vet inte hur jag skulle göra det.
Frågan är väl om jag fortfande följer webbstandarder? Eller om jag bryter dem för att det passar mig? Och om jag i så fall gör fel eller rätt, ändå? Strukturen för XHTML är ju uppbyggd för att kunna göra just det här. Och om man förlänger tanken till XML så är det ju precis så det används.
Mitt största problem är att jag inte har någon att diskutera det med på ett vettigt sätt, vända ut och in på problemet. Sen har jag varit tyst om det för jag skulle vilja testa det först. Egoistiskt vill jag äga frågan en stund till, tills jag visat att det går att använda på ett vettigt sätt eller inte. Friskt vågat och det där.
Kommentarer
Jag tror att du borde kolla på XML Namespaces för utökning. RSS och andra mer modulariserade XML-format använder det friskt. Kolla exempelvis på din egen RSS-feed:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:admin="http://webns.net/mvcb/"
xmlns:cc="http://web.resource.org/cc/"
xmlns="http://purl.org/rss/1.0/">
Där dras det in inte mindre än sex olika namespaces. Ta raden 'xmlns:dc="http://purl.org/dc/elements/1.1/"' som exempel, den säger att alla taggar som prefixas med 'dc:' i det här dokumentet egentligen ingår i namespacet (namnrymden) 'http://purl.org/dc/elements/1.1/'.
Om du vill göra en dagensskiva.com-semantik (DSCML? CultureML?) kan du göra den som en DTD (eller kanske hellre med XML Schema, Relax NG eller vad de coola kidsen använder för att definera XML-vokabulärer nuförtiden), med definitioner för 'artist', 'song', 'instrument' osv., och sen använda den ungefär såhär:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns:dsc="http://dagensskiva.com/dsc-ml"
xmlns="http://www.w3.org/1999/xhtml">
<html>
<head>
...
<body>
<p>Helt plötsligt blandar någon in <dsc:artist>Björk</artist>s
"<dsc:song>The Anchor Song</dsc:song>" och den blåaste av
<dsc:instrument>saxofoner</dsc:instrument> gråter i sin stilla
ensamhet.</p>
(Det är värt att påpeka att det inte MÅSTE ligga en DTD på URL'en "http://dagensskiva.com/dsc-ml", det är bara en unik identifierare, som dock måste vara en giltig URI. Den kan lika gärna gå till en förklaring om vad DSCML är)
Frågan om du följer webstandarder blir då lite meningslös, men du bryter iaf inte mot dem när du skickar ut ett sådant XHTML-dokument. Men jag tror inte du kan använda CSS för att layouta dina DSCML-element, eftersom CSS ännu inte är namespace-aware.
En lösning är att du inte presenterar dina DSCML-element ända ut till browsern, utan låter de genomg� en XSL-transformation som gör om '<dsc:artist>Björk</dsc:artist>' till <span class="artist">Björk</span>. Då tappar du visserligen lite av den semantiska informationen, men du kan å andra sidan låta läsare/robotar veta var det ursprungliga dokumentet finns, genom en <link rel="alternate">-tagg i <head>.
Kommenterat av: Staffan Malmgren den 2004-11-17 kl. 00.13 #
Jag håller med Staffan om att detta här är ett fall för namespaces. Namespaces gör att du kan blanda märkspråk från olika scheman (DTD är en typ av schema). Prefix framför taggarna gör att XML-tolken vet vilka scheman taggarna tillhör.
Mozilla och Internet Explorer validerar inte XML eftersom det är resurskrävande och man vill ju att det ska gå snabbt att surfa. Genom lite trixande kan man få IE att validera. Jag har ett enkelt skript som jag kan skicka om du vill. Det gör säkert att göra något liknande med Mozilla. Information om Mozillas XML-stöd finns här: http://www.mozilla.org/newlayout/xml/
Kommenterat av: Claes den 2004-11-17 kl. 09.41 #
Just namespace-stödet i olika XML-tekniker/-produkter är ett litet helvete har jag upptäckt. Det var inte av en slump som det var ritat en dödsskalle med texten "NAMESPACES" under på whiteboarden här under halva hösten.
Kommenterat av: David Pettersson den 2005-01-21 kl. 14.35 #
Kommentera