** Basic concepts

The most basic RDF concepts.

Node
    IRIs
    Literal(lexical form, datatype node, lang tag)  No "value"
    BlankNode

and add in

    Var (a named variable), NodeGraph (graph literals)
    NodeSymbol (a keyword e.g. ANY for a wildcard)

Adding these generalized-RDF node types both recognizes possible futures and mean RDF datastructures can be used inside subsystems.

NodeFactory
   createIRI, createBNode, createLiteral etc etc.

e.g. A SPARQL query pattern is a graph of triples with variables.

** triples and quads

Triple - three Nodes (this is more generalised than RDF but they arise in query and in inference; literals-as-subject, bnode-predicates etc)

Generalized triples, for example, turn up in inference and in SPARQL query. Enforcement-by-type can be done in a presentation API. Here, as a uniform layer, we need to address the uses that arise in RDF systems.

Quad - four nodes.

** Producer/consumer

SinkTriple
  send(Triple)

SinkQuad
  send(Quad)

** Sets of ...

Graph
  add(Triple)
  delete(Triple)
  find(S?,P?,O?) -> Iterator<Triple> using a wildcard node for a slot.

X? is concrete node or wild card.  Not a named variable.

Not sure about a "removeAll" which would cover the case of "clear()";

Dataset

This is harder -- there are two views of datasets
    A default graph and some named graphs
    A set of triples and a set of quads.
but a basic approach is a set of quads, where the G slot can indicate default graph (another NodeSymbol)

  add(Quad)
  delete(Quad)
  find(G,S,P,O)
  getGraph(G) -- a view.

Reply via email to