Mutasd a névjegyed!

Avagy a vCardról, a hCardról és azok kiszolgálásáról.

A vCard többnyire a mobileszközök és asztali alkalmazások kényelmes adatcseréjét biztosító elektronikus névjegykártya formátum. A hCard az XHTML-en alapuló, a vCardnak teljes mértékben megfelelő mikroformátum – szintén névjegy adatok tárolására. Milyen kényelmes volna, ha egyszerre tudnánk nyújtani mindkettőt, egyszeres munkával. Kell egy közös nevező, de már meg is van: az XML. Hogyan lesz majd a pure XML-ből vCard vagy hCard? Megdörzsöljük a lámpást, és előjön az XSLT. Én mondom, ez klassz!

Szükséges tehát kialakítanunk egy XML formátumot a névjegy adatok tárolására. Mi lusták vagyunk, nem írunk saját DTD-t, hanem felhasználjuk a W3C RDF-es megvalósítását. Lássuk, hogyan festene a nevjegy.xml:




	
		Róbert Gedeon
		
			Róbert
			Gedeon
			Gida
			
		
		1974-01-12
		tanuló
		
			+36201234567
			
			
		
		
			gida@100holdas.pg
			
		
		
		
			Erdősor 10
			Százholdaspagony
			6124
			Micimackó
		
	


Ez egy tetszőleges kód, ettől tartalmazhat többet és kevesebbet is egyaránt a névjegyünk, valamint megadhatók olyan opcionális adatok is, amelyek nem feltétlenül részei a vCard szabványnak. Lássuk azt a hcard.xsl stíluslapot, ami ebből XHTML kimenetet gyárt.










	
		 névjegye
		
	

	
	<div class="vcard">
		
	</div>
	




	
	
	
	
	
	



	<h1><a class="url fn" href="{@*}"></a></h1>



	



	<div class="adr">
		<div class="street-address"></div>
		<span class="locality"></span>
		<span class="postal-code"></span>
	</div>



	<div class="tel"></div>



	<div class="bday"></div>



	<div class="role"><em></em></div>



	<div><a class="email" href="mailto:{.}"></a></div>



A boldoguláshoz ez így még édeskevés, csatoljuk hozzá az XML dokumentumunkhoz.


Az eredmény pedig, íme: nevjegy_kesz.xml

Természetesen ebben az esetben csak hCard formátumban érkezik a névjegy. (Házifeladatként készítsük el a vCard specifikációjának megfelelően a vCardba transzformáló stíluslapot.) A kliensfüggő kiszolgálás azonban nem olyan egyszerű, mert tapasztalataim szerint a vCard-képes szoftverek nem tudnak HTTP-n keresztül kinyerni egy névjegyet, így nem dönthetünk egyszerűen a HTTP_ACCEPT tartalma alapján; tehát a szerveroldali futtató környezetnek kell a feldolgozást is elvégezni, hiszen míg a korszerű böngészők (Gecko, Opera 9, IE 6, Safari) képesek stíluslap alapján átalakítani egy XML dokumentumot, addig a vCard-képes ügyfelek (például levelezőprogram) többnyire erre képtelenek.

<?php
header('Content-type: text/xml; enconding=utf-8');
print '' . "\n";
if (isset($_GET['type']) && $_GET['type'] == 'vcard') {
    print '' . "\n";
} else {
    print '' . "\n";
}
/* Az XML dokumentum fennmaradó része. */
?>

Ez így rusnya, mi? Szerintem is. Egyszerűnek egyszerű, működik is, de próbáljuk elkülöníteni a logikát a tartalomtól. Vannak PHP-ben XML függvények? Vannak. Hát akkor használjuk is őket! PHP5 barátoknak:

load("vcard.xsl");
} else {
    header('Content-type: text/xml; charset=utf-8');
    $dom->load("hcard.xsl");
}
$proc = new xsltprocessor;
$xsl = $proc->importStylesheet($dom);

$document = new domDocument();
$document->load("nevjegy.xml");
print $proc->transformToXml($document);
?>

És régi motorosoknak:

 $xmldata);

$xsltproc = xslt_create();
print xslt_process($xsltproc, 'arg:/_xml', $xsl, NULL, $arguments);
?>

Kész: hCard és vCard. Mindkét verzióban gondoskodtunk a tartalomnak megfelelő MIME típus szerinti kiszolgálásról. A vCardot nem böngészőben szeretnénk nézegetni, így felajánljuk letöltésre.

Ismert hibák:

  • A PHP-vel feldolgozott változat Internet Exploler 6 alatt nem megy, mert az XHTML 1.1-et application/xhtml+xml fejléccel kell kiszolgálni, azonban az IE azt még nem ismeri.

Felhasznált irodalom: