Samizdat RDF Implementation Report
==================================

http://lists.w3.org/Archives/Public/www-rdf-interest/2003Sep/0043.html

Implementation
--------------

http://www.nongnu.org/samizdat/

Samizdat is a generic RDF-based engine for building collaboration and
open publishing web sites. Samizdat will let everyone publish, view,
comment, edit, and aggregate text and multimedia resources, vote on
ratings and classifications, filter resources by flexible sets of
criteria, cooperate and coordinate on all kinds of activities (see
Design Goals document). Samizdat intends to promote values of freedom,
openness, equality, and cooperation.

Samizdat engine is implemented using Ruby programming language, Apache
mod_ruby module, and PostgreSQL RDBMS, and is available under the GNU
General Public License, version 2 or later.

Project development started in December 2002, first public release was
announced in June 2003. This report refers to the Samizdat 0.0.4,
released on 2003-09-01.

Functionality covered by this version includes: registering site
members, publishing and replying to messages, uploading multimedia
messages, voting on standard tags on resources; hand-editing or using
GUI for constructing and publishing Squish queries that can be used to
search and filter site resources.


RDF Schema
----------

Samizdat defines its own RDF schema for description of site members,
published messages, votes, and other site resources (see Concepts
document). One of the outstanding features of Samizdat schema is the use
of statement reification in approval of content classification with
votes cast by site members.

Samizdat RDF schema uses Dublin Core metadata where applicable; also,
integration of site member descriptions with FOAF is planned.

One of the problems encountered in Samizdat RDF Schema development was
the lack of standard metadata describing discussion threads. While other
properties defined in Samizdat schema denote Samizdat-specific concepts,
such as "vote" and "rating", it is more desirable to use commonly agreed
metadata for threading structure in place of implementation-local
"thread" and "inReplyTo" properties.


RDF Import and Export
---------------------

While Samizdat model follows RDF Concepts and RDF Semantics
recommendations (with the exceptions put down below), the engine does
not externally interchange RDF data and thus does not use RDF/XML or
other RDF serialization format. It is assumed that, when the need for
RDF import and export arises, it can be implemented externally on top of
the Samizdat RDF storage module and using existing RDF frameworks such
as Redland.


Datatyped Literals
------------------

Samizdat doesn't implement datatyped literals, and relies on underlying
PostgreSQL capabilities for mapping between literal values and their
string representations. Outside of SQL context, literals are interpreted
as opaque strings; XML literals are not treated specially, and datatype
information is not preserved.

However, support of XML schema datatypes is considered necessary in
order to untie a Samizdat knowledge base from specifics of underlying
RDF storage, and will be implemented as a prerequisite for migration to
a selection of alternative RDF storage backends (candidates are FramerD,
3store, and Redland).


Language Tags
-------------

Literal language tags are not honoured, "dc:language" property is
supposed to be used to denote message language.


Entailments
-----------

Samizdat RDF storage only implements simple entailment, vocabulary
entailment is not implemented yet. At the moment, simple entailment
suffices for all features of the Samizdat engine. If and when vocabulary
entailment becomes necessary, it will be implemented in Samizdat RDF
storage module or relegated to an alternative RDF storage backend,
depending on status of backend alternatives for Samizdat at that time.


Query Support
-------------

Samizdat RDF storage implements a translation of RDF query graphs
written in extended Squish into relational SQL queries and allows purely
relational representation of selected properties of site resources (see
RDF Storage and Storage Implementation documents).

It must be noted that at the moment, status of RDF query language
standards is found unsatisfactory.

DAML Query Language abstract specification provides excellent formal
basis, but does not encompass all capabilities of existing RDF query
languages. Also, existing query languages are limited in one way or
another, are underformalized (most are defined by single
implementation), and often overloaded with baroque syntax.

Two major features that were missed the most in existing query languages
at the time of Samizdat RDF storage implementation were: knowledge base
update allowing to merge complex constructs into the site KB graph
(implemented in Samizdat RDF Data Manipulation Language), and workflow
control providing at least transaction rollback (in Samizdat, underlying
PostgreSQL transactions are used). Other Squish extensions implemented
in Samizdat are literal conditions and answer collection ordering
(currently, relegated to PostgreSQL; ideally, interpreted according to
literal datatypes).

