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 forfoaf:knowsand related properties,foaf:depictsin case of a codepiction demo,rdfs:subClassOffor 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...

