Comments on the Stanford RDF API

In general, I found the API pretty easy to work with and a good basis
for development.  

I've been working mainly with a database back end with some work on a low
level editor and a schema validator. I've split comments into three groups,
general issues, those motivated by database specific issues and stylistic.
Its pretty encouraging that the database specific section is so small.

Brian McBride
HPLabs

GENERAL
=======

o Issue: Vector.indexAt() does not work for a vector of RDFNode.

  Reason:  RDFNode.equals(RDFNode n) should be RDFNode.equals(Object o).

o Issue: No declared exceptions

  Discussion:  I've got a host of exception conditions that can arise
         there needs to be a way to report them.  Currently I'm using
         runtime exceptions so they don't have to be declared, but I'd
         prefer to be able to declare them.

o Issue:  Namespace names lost on import

  Reason: When I'm importing an RDF serialization into the database, I'm
	passed the full URI.  It is not possible in general, to parse that
      URI and pick out the namespace component.  It is better to retain
      the namespace component which can then be used for better user
      presentation in an editor and for better serialization of the model.

  Remedy: Add methods Model.createResource(String nsName, String roName), 
          String RDFResource.nsName() and String RDFResource.roName().

o Issue:  Current API has no way to set a namespace prefix

  Reason: When displaying URI's, and when serialising it would be good
	to display a namespace prefix that is meaningful to a human.

  Remedy: Add method Model.setNsPrefix(String nsName, String prefix)

o Issue: New query methods.

  Reason:	When generating an RDF serialization, it is convenient to be
able to
	list all the namespaces used in a model so they can be output at the
head
	of the serialization.  For my RDF editor, I want to be able to list
all
	all the unique subjects in the model, and I'd like to use a database
      query rather than troll through all the statements and pick them out
	myself.  See also the stylistic note below.

  Remedy:  Add methods:
		RDFEnum Model.namespaces();
		RDFEnum Model.subjects();
		RDFEnum Model.predicates();
		RDFEnum Model.objects();

o Issue: Id for RDFNodes

  Reason: My reading of the spec is that a model can contain anonymous
	resources.  I'm aware that you disagree with this.  In my
implementation
	an anonymous resource has an empty string as its URI, so I need some
	other way to distinguish them.  For now, I've added the following
function
	to RDFNode.  This is really just a placeholder for now, because I'd
really
	like to get this issues of anon resources cleared up.

  Remedy: long Resource.getId() returns an integer unique within this
database.

o Issue:  What to do with model.setSourceURI() and getSourceURI().

  Reason: I have some test files lying around.  When I import one of these,
	SiRPAC is calling this method with an arguement like 
	"c:\temp\rdfschema.rdf".  I'm just not sure how useful this is or
what
	to do with it.  Is this intended to be the URI for the model?  Is it
a 
	property to be attached to the model URI?

o Issue: Model.create() does not specify URI.

  Reason:  See my separate note, but I don't think we are far apart on this.
A
	model may have URI, so I'd expect Model.create() to take a URI
parameter,
	which may be null or empty if the model is anonymous.

  Remedy:  modify Model.create() to be Model.create(String URI).


DATABASE SPECIFIC
=================

o Issue: I need to free up resources when a model or an enumerator is no
	longer in use.

  Reason:  My database implementation allocates database resources such
	as connections, cursors and views.  I need to be able to release
these,
      preferably as soon as the application is finished with them.  If I
wait
	till the garbage collector runs, I tend to run out of cursors even
on
	simple applications, and I can't rely on finalizers being run when
an 
	application terminates.

  Remedy: Add close() method to Model and the enumeration returned by
 	Model.elements.


STYLISTIC
=========

o Suggestion:  I've added some public well known constants to the interfaces
	with things like the RDF and RDFS name spaces.

o Suggestion:  Not all models will be mutable.  Move those methods that
modify
	the model into another interface, MutableModel.  These methods would
	include addStatement, createStatement, createResource,
createLiteral.  Or
	need a not implemented exception.

o Suggestion:  Not all models shoud have to support a query interface so
move
	 the query methods into a separate SimpleQuery interface.

o Suggestion: Rename Model.size() to Model.numStatements().  There might be
many
	ways to measure the size of a model.  This naming is clearer.

o Suggestion: Rename Model.elements() to Model.statements().  This
terminology
	is more consistent with the language used in the spec.
	

Received on Tuesday, 2 May 2000 08:51:28 UTC