Hlavní navigace

Akta X 0408

9. 9. 2004
Doba čtení: 5 minut

Sdílet

PHP 5 nabízí nové rozhraní pro snadnou práci s XML. Do implementace jazyka XSLT 2.0 se kromě jeho autora nikdo nehrne. Jaké mohou být důvody?

PHP: XML snadno a rychle

V posledních červencových dnech v Portlandu, OR probíhala O'Reilly Open Source Convention. Při pročítání programu sekce XML mě zaujala přednáška Sterlinga Hughese nazvaná A Truly Simple API for XML. Nutno dodat, že toto „vpravdě jednoduché“ API pro XML je součástí PHP verze 5. Sterling Hughes není ve zpracování XML pomocí PHP žádný nováček, poprvé jsem na něho narazil už v roce 2000, kdy pro PHP napsal extenzi pro náš XSLT procesor Sablotron. O to více mě zajímalo, na čem Hughes pracuje dnes. Informace o novém API pro XML jsem čerpal z dokumentace PHP (kapitola CII, SimpleXML).

SimpleXML je extenze, není tedy pevnou součástí PHP 5. Aby byla k dispozici, je třeba konfigurovat PHP s příznakem –enable-simplexml. Extenze závisí na knihovně libxml2. Díky rozhraní SimpleXML se PHP zařadilo mezi programovací jazyky poskytující takzvanou nativní podporu XML. Pod módním pojmem nativní podpora se většinou neskrývá nic jiného než možnost pracovat s dokumentem XML pomocí přirozených datových struktur toho kterého jazyka. Jak se tedy s touto úlohou popasoval Sterling Hughes a PHP?

Základním stavebním kamenem datového modelu extenze SimpleXML je objekt SimpleXMLElement. Dokument XML je reprezentován objektem kořenového elementu (root element). Dokument a jeho kořenový element jsou v SimpleXML jedna a táž entita. Objekt SimpleXMLElement lze vytvořit buď načtením souboru, řetězce, nebo objektu DOM vytvořeného pomocí extenze XML DOM. Každý objekt poté umožňuje přímý přístup ke svým potomkům a atributům. Místo dlouhých řečí budu práci s rozhraním SimpleXML ilustrovat příkladem:

<?php
$str = "<team><name>US Postal</name><rider @id="1">Armstrong</rider><rider @id="2">Padrnos</rider></team>";

$xml = simplexml_load_string($str);

echo $xml->name;
echo $xml->rider[0];

foreach ($xml->rider as $rider) {
   echo $rider['id'];
}
?> 

Více příkladů je k vidění ve výše zmíněné dokumentaci. SimpleXML opravdu přirozeným způsobem využívá datové struktury PHP. Příjemnou vlastností je navigace pomocí jazyka XPath (např. $xml->xpath(‚rider[@id=2]‘)­). Kromě čtení z XML nové API umožňuje také měnit textové hodnoty elementů a serializovat objekty zpět do XML. Co není možné, je změna struktury XML, tj. například přidávání a ubírání elemetů. I přes toto omezení je rozhraní SimpleXML velmi užitečné a vhodné pro běžné úlohy, jako je třeba načtení konfiguračního souboru.

Váhání kolem XPath 2.0

Minulý měsíc jsem se jen stručně zmínil o tom, že konsorcium W3C zveřejnilo celou sadu nových pracovních verzí specifikací XPath 2.0, XSLT 2.0 a XQuery 1.0. O něco později mě zaujal rozhovor s Michaelem Kayem, editorem jazyka XSLT 2.0 a spoluatorem souvisejících standardů. Kay je zároveň autorem úspěšného XSLT procesoru Saxon. Rozhovor je poněkud kašírovaný, ale odfiltrujeme-li jeho prvoplánovou marketingovou rovinu, obsahuje dost zajímavých informací.

Kay mluví o své nové firmě Saxonica. Po letech opustil zázemí větších firem (naposledy Software AG) a spustil svůj vlastní projekt založený na procesoru Saxon. Saxon verze 6 patří mezi nejoblíbenější procesory XSLT 1.0. Saxon 7 byl jedinou experimentální implementací XSLT verze 2.0. Nedávno Kay dokončil verzi 8.0, jež spojuje XSLT 1.0 a 2.0 a navíc implementuje jazyk XQuery 1.0 a dokáže podporovat XML Schema. Specifikace XSLT 2.0/XQuery 1.0 rozlišuje mezi dvěma možnými implementacemi – základním procesorem a procesorem podporujícím jazyk XML Schema. Saxon 8.0 existuje ve dvou verzích; v základním provedení zůstává open source softwarem, verze s podporou jazyka XML Schema se stala komerčním produktem, jehož prodej a podpora jsou jádrem obchodního modelu firmy Saxonica.

Obchodní model je to přinejmenším riskantní. Nutnou podmínkou jeho úspěchu je úspěch XSLT 2.0. Skutečnost, že je Saxon zatím jedinou implementací, je velkou výhodou, ale skrývá v sobě i riziko. Riziko celkového odmítnutí druhé verze XSLT. Michal Kay dosavadní nezájem dalších vendorů vysvětluje tím, že pro nezávislé open source vývojáře je implementace XSLT 2.0 příliš pracná a složitá, zatímco velké firmy čekají na definitivní verzi specifikace. S první částí tvrzení snad lze s menšími výhradami souhlasit, o druhé bych si dovolil pochybovat. Microsoft implementoval XSLT 1.0 v takovém předstihu před finální specifikací, že to nakonec nemělo s XSLT 1.0 skoro nic společného. IBM a Oracle projevily méně zbrklosti (nebo více respektu ke standardům?), ale také zbytečně neotálely. O užitečnosti XSLT 1.0 nikdo nepochyboval a nikdo nechtěl ztratit konkurenční výhodu.

Hlavním důvodem, proč se nikdo nežene do XSLT 2.0, nejspíš bude, že přínos druhé verze není tak zřetelný. Daní za nové, nepochybně zajímavé možnosti a funkce je obrovské zesložitění, nejen pro vývojáře, ale hlavně pro uživatele. Namísto intuitivního a elegantního transformačního jazyka, jehož základy průměrný programátor zvládne za hodinu, je tu komplexní kolos, k jehož plnému pochopení je třeba prostudovat nejméně pět rozsáhlých, netriviálních specifikací (a to nemluvím o vazbě na XML Schema). Navíc, jazyk XSLT 1.0 byl v době svého nástupu unikátní, zatímco XSLT 2.0 se musí potýkat s konkurencí v podobě své první verze, která je pro většinu běžných úloh postačující. Není divu, že pro velké hráče není XSLT 2.0 dostatečně komerčně zajímavé.

root_podpora

Rozhodující možná nakonec bude, jak se ke XSLT 2.0 postaví velké otevřené projekty. Pro Gnome s Red Hatem v zádech (procesor libxslt) a Apache XML Project (procesory Xalan-J a Xalan-C++) určitě není složitost nepřekonatelnou překážkou. Oba projekty mají za cíl zpřístupnit co nejvíce standardů z oblasti XML. Ani jeden z nich zatím ohledně XSLT 2.0 nejeví žádnou aktivitu, ale na lámání chleba dojde až po publikování konečných doporučení W3C.

Kay doufá, že se mu podaří přesvědčit o smysluplnosti XSLT 2.0 aspoň silné komerční dodavatele řešení, jež si nemohou dovolit selhání. Validace a typová kontrola pro ně může být zásadním přínosem. Firmy tohoto typu také často dávají přednost komerčním produktům právě proto, že si je mohou koupit a pak spoléhat na jejich kvalitu. Buď jak buď, Saxonica bude muset o své místo na slunci bojovat. A Michalu Kayovi můžu jen popřát, aby jeho Saxon dopadl lépe než jeho historičtí předchůdci u Hastingsu.

Byl pro vás článek přínosný?