ARC RDF Store for PHP - enSPARQL your LAMP

A
A first version of ARC RDF Store is now available. It's written entirely in PHP and has been optimized for basic LAMP environments where install and system configuration privileges are often not available. As with the other ARC components, I tried to keep things modular for easier integration in other PHP/MySQL-based systems.

A full store installation consists of just 7 files (à 10-50 KB each) but offers a variety of nice features:
  • It works with PHP 4 and MySQL 4
    It's also possible to use a single installation/DB to run multiple independent stores.
  • SPARQL queries are (almost) completely translated to SQL
    This not only avoids having to use interpreted PHP to process sub-results but also allows the RDBMS to optimize queries. (Note, however, that queries which can't be translated to SQL are not supported)
  • Cartesian Catastrophe protection ;-)
    Triple duplicates from different graphs can be moved to a dedicated table which is then only considered by GRAPH queries. GRAPH-independent queries ignore the duplicates, the combinatorial explosion is less likely to happen.
  • Application-specific table space customization
    PHP comes with certain performance limitations. And using shared, hosted Web servers often means that MySQL is running with standard settings. In order to still allow building advanced applications with ARC RDF Store, it provides options to split the triple tables. By default, triples with literal objects are separated from those with non-literal object values. On top of this, it's possible to specify so-called prop-tables to further split the table space used to store triples. For a calendaring app it might be useful to separate date/dateTime properties from the oher triples, a social networking site could define a prop-table for foaf:knows and related properties, foaf:depicts in case of a codepiction demo, rdfs:subClassOf for an ontology editor, etc. Splitting the triple space improves both query and insert speed.
  • Reversible resource consolidation
    The "Store keeper" class provides a smushing function for both functional and inverse functional properties. Pre-consolidation IDs are stored for each triple, enabling the un-smushing of merged resources to a certain extent (only one previous ID value can be restored of resources that have been smushed several times using different identifiers).
  • JSON results
    JSON results are available for all the main CRUD store methods (add_data, query, update_data, delete_data).
  • Multiple options for inserting and deleting data
    The store can add RDF/XML from the Web (including 3xx handling), RDF/XML passed as parameter, or single triples encoded in a turtle subset. Data removal is possible by providing a graph IRI, a concrete RDF/XML document, or a triple pattern including wildcards.

I've put up an ugly little demo service where you can run test queries against w3photo/CONFOTO data (~ 20K triples, prop-table for rdf:type). Might be fun to play with the JSONI generator, or to check out the SQL created by the rewriter.

Next action: A JavaScript CRUD frontend. Well, and bug-fixing...

Comments are disabled for this post.