Vestavěné slovníky v RAP
RAP ve verzi 0.9.1 poskytuje již v základní instalaci slovníky zdrojů 8 nejpoužívanějších RDF schémat - RDF, RDF Schema, OWL, Dublin Core, FOAF, RSS, Atom a vCard. To je velmi dobrá zpráva pro všechny, protože se tím velice zpřehlední kód a zjednoduší práce. Má to však své velké ale!
Způsob, jakým byly tyto slovníky napsány a jakým se používají, se liší skoro verze od verze. Je pravda, že RAP je zatím (skoro) plně zpětně kompatibilní, takže aplikace, která byla vyvíjena na verzi 0.1 by měla jet, i kdyby jste jí „podstrčili“ poslední build z CVS, ale jsou zde jistá omezení ... která mě trošku potrápila a vadí mi.
Ani taková banalita, jako „instalace“ slovníků, nezůstala nedotčena. Původně se načítání nastavovalo přímo v jádru RdfApi.php, kde stačilo příslušné volání funkce require( string $path ) (za/od)komentovat. Ve verzi 0.8 byla zavedena konstanta, přes kterou šlo celý balíček slovníků načíst:
require( RDFAPI_INCLUDE_DIR . PACKAGE_VOCABULARY );
Verze 0.9 šla ještě dál a nyní si můžete načíst v rámci konkrétního PHP soubor přesně ty knihovny, které potřebujete a navíc máte výběr mezi „statement-centric“ a „resource-centric“ modelem.
Také použití se změnilo. Původně stačilo k získání určité vlastnosti/třídy vědět, jak se jmenuje její konstanta a tu zapsat do zdrojového kódu. Takže třeba vlastnost rdf:type byla definována jako $RDF_type. Nově jsou všechny vlastnosti sdruženy do třídy, kde jsou vytvářeny „statickými“ metodami - ty uvozovky jsou zde proto, že RAP je stále napsáno v PHP4 a to statické metody nepodporuje. K získání výše uvedené vlastnosti nyní musíme volat metodu příslušné třídy:
RDF::TYPE();
// nebo pro resource–centric model
RDF_RES::TYPE();
Poznamenejme, že jmenné prostory jednotlivých slovníků nejsou uchovávány uvnitř tříd, ale v mamutím souboru, který definuje všechny konstanty RAP. Možná je to přehnané, populistické, ale proč by nešlo napsat ty slovníky nějak takhle:
class RDF {
// definice jmenného prostoru
const NS = ' ... URI jmenného prostoru RDF ... ';
// zakážeme vytváření instancí této třídy
private function __construct() {}
// funkce vytvářející vlastnost "rdf:type"
public static function TYPE() {
return new Resource( self::NS . 'type' );
}
// Stejně tak i pro ostatní třídy
}
Bylo by to krásné, ale nemá cenu přepisovat balík slovníku do PHP5, když nebude ve stejném duchu napsaný celý model knihovny RAP, parsery, ošetření chybových stavů pomocí výjimek. No, jak řekl jeden z autorů této knihovny, bude to chtít prodiskutovat a hodně času na promyšlenou. Jediné, co mě může těšit, je, že RAP je plně funkční i pod PHP5.
Nový komentář:
Komentáře musí být před publikováním schváleny. Děkuji!