- From: McBride, Brian <bwm@hplb.hpl.hp.com>
- Date: Tue, 2 May 2000 13:51:16 +0100
- To: "RDF Interest Group (E-mail)" <www-rdf-interest@w3.org>
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