Algae Evaluation

An Evaluation of Algae (or Algae2)

[algae+] supports a requirement or design objective
[algae-] does not support it
[algea?] unknown or undeterminable


Algae is described at http://www.w3.org/2004/05/06-Algae/
and is used in the W3C Annotea Server and implemented in Perl.

In general Algae looks like:

  ns rss=<<http://purl.org/rss/1.0/>
  ns prose=<http://example.org/proseInfo#>

  read <http://example.org/some-data> ()
  read <file:mydata.rdf> (inputlang=\"rdf\")
  ask (
      ?article <http://purl.org/rss/1.0/title> ?title .
      ?article <http://purl.org/rss/1.0/link> ?link .
      ?article <http://purl.org/rss/1.0/description> ?description
      ?article prose:wordCount ?words { ?words < 1000 }.
  )
  collect (?title ?link ?description ?words)

The execution is done in the order specified in the file so that
multiple read(...) ask(...) etc. can be performed, extending the
query graph as well as supplementing the results.

There are other keywords not described here, such as attach for
connecting to a store (in a SQL database).


Requirements
------------

[algae+] 3.1 RDF Graph Pattern Matching

  ?article <http://purl.org/rss/1.0/title> ?title  

[algae+] 3.2 Variable Binding Results

  collect (?title ?link ?description ?words)

[algae-] 3.3 Extensible Value Testing

  an extensibility declaration "requires" exists but not for value testing.

[algae-] 3.4 Subgraph Results

[algae+] 3.5 Local Queries

  the default is local/in-memory and can also read from file URIs, databases.

[algae+] 3.6 Optional Match

  The ~ term inside ask(..) allows optional matches such as:
  
  ~?article foaf:mbox ?mbox .

  which are declared to be analogous to SQL outer joins, and
  implemented as such.

[algae+] 3.7 Limited Datatype Support

  Integers, floating point literals, strings, datatyped strings and a
  variety of common numeric, boolean and comparison operators.

      ?article prose:wordCount ?words { ?words < 1000 }.

[algae?] 3.8 Bookmarkable Queries

[algae-] 3.10 Result Limits

  The document claims limits are implemented in the core profile but
  the language does not seem to have a way to use them.

  [Typo?  "required features" or "requires features" the doc has both]

[algae-] 3.11 Iterative Query

[algae+] 3.12 Streaming Results


Design Objectives
-----------------

[algae-] 4.1 Human-friendly Syntax

IMHO of course:
 - terse keywords ('ns', 'slurp') [although 'namespace' is also legal]
 - lispy brackets in an XML world :)
 - '.' triple separator versus more typical ',' and ';'
 - many operators
 - unfamiliar graph operators || |& |-

[algae+] 4.2 Provenance

  After reading the explanation in
    http://lists.w3.org/Archives/Public/public-rdf-dawg/2004AprJun/0519

  algae provides this by %ATTRIB and can be constrained or assigned
  to variables in a clause after a triple:

  ?an a:body ?body { %ATTRIB == <http://example.com/a1.rdf> } 

  This is also used for constraining literal datatypes, languages
  and XML encodings (%DATATYPE, %LANG and %ENCODING)

  [Typo?  document says %ATTRIB, email says %PROV]

[algae-] 4.3 Non-existent Triples

[algae-] 4.4 User-specifiable Serialization

[algae+] 4.5 Aggregate Query

  Conjunction, shortcut disjunction, union disjunction and merged
  union disjunction are present.

[algae-] 4.6 Additional Semantic Information

[algae-] 4.7 Bandwidth-efficient Protocol

[algae-] 4.8 Literal Search

[algae-] 4.9 Boolean Query

  But I find this design objective difficult to understand, as written.

Received on Monday, 28 June 2004 14:45:34 UTC