Nekompletní podpora SPARQL OPTIONAL v PHP frameworcích

Během práce na komunitní stránce Knowledge Engineering Group, která je kompletně implementována nad RDF úložištěm, jsem narazil na jeden problém s nekompatibilitou se standardem SPARQL. Používali jsme framework RDF API for PHP, což je téměř zažitý standard pro PHP aplikace pracující s RDF. Nyní popíšu náš případ užití. Měli jsme v úložišti několik instancí typu foaf:Group; některé měly jeden atribut foaf:name, jehož hodnotou bylo jméno v anglickém jazyce a jiné měly dva atributy foaf:name, jeden v angličtině a druhý v češtině. Jedním dotazem jsme chtěli zvolit obě jména a zobrazit je v XHTML editoru. SPARQL dotaz vypadal následovně:

PREFIX foaf: <http://xmlns.com/foaf/0.1/>
PREFIX rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
SELECT ?group ?nameEn ?nameCs
WHERE {
  ?group rdf:type foaf:Group .
  ?group foaf:name ?nameEn .
  OPTIONAL {
    ?group foaf:name ?nameCs .
    FILTER (lang(?nameCs) = "cs") 
  }
  FILTER (lang(?nameEn) = "en")
}

Když jsem však spustil dotaz vůči databázovému úložišti RAP, dostal jsem chybný výsledek dotazu – ten obsahoval pouze zdroje, které měly obě dvě jména. Dvě hodiny jsem opravoval dotaz, než mi Aristo potvrdil, že je správně. Navíc, služba OpenLink Virtuoso hostovaná na DBpedii vrátila korektní výsledek. Protože se zdá, že RAP je zmražený projekt, rozhodli jsme se migrovat náš kód z RAPu na ARC2 s očekáváním, že tento dotaz bez chyb spustíme a získáme správný výsledek. Bohužel, přepis kódu do ARCu náš problém nevyřešil. Po znovu spuštění skriptu jsme dostali jiný, avšak opět nesprávný výsledek. Toto nás donutilo prozatím vypustit česká jména z naší implementace a hledat zdroj či vysvětlení potíží. Alespoň stručnou odpověď jsme získali z přehledového reportu implementací SPARQLu od W3C. RAP ani ARC nepodporují 100% OPTIONAL promněnné. Navíc, z nejznámějších RDF frameworků má kompletní podporu pro SPARQL pouze Jena a Sesame2. ARC budeme používat v dalším vývoji a doufat, že podpora SPARQLu bude někdy kompletní…

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.