Version handling of models

Sergey Melnik wrote:
> 
> do you think the API draft [1] and digest-based URIs for models
> adequately address the need for model versioning that you pointed out in
> your last posting [2]? Or is an explicit mechanism still needed in your
> view?
> 
> [1] http://www-db.stanford.edu/~melnik/rdf/api.html
> [2] http://lists.w3.org/Archives/Public/www-rdf-interest/1999Dec/0012.html


I wanted the model to 
  1. be a way to say something about a group of statements. 
  2. differ between local and remote statements.



Let's say we have a RDF service that give us some useful information
about a person, like phone number, home address, occupation, etc.  The
service URL could be:
    http://rdf.some.org/person/

The service has access to some sort of database over a lot of
persons. The URL http://www.some.org/person/ would lead to a HTML
search form, but the URL for the RDF version will lead to a document
in RDF, describing its identity and capabilities.

The URL for an actual person could be the country version of the
social secutiry number.  A swedish person:
    http://rdf.some.org/person/sv/19720529-1234

This would be the URL of a RDF document, stating the name, addres,
home phone number, occupation, e-mail address, birthdate, etc, for
this person.


Now, assuming MD5 model URIs, we would like to differ between:

 1. The URI of the service
 2. The URL of the service
 3. The URI for the physical person
 4. The URI of the model describing the person
 5. The URL of the model describing the person
 6. The URI of the model describing the service
 7. The URL of the model describing the service

* The person could change his phone number and even his name. (He
  could also change his SSN, but that would mean URI aliases and
  that is another story.)

* The service is controlled by some owner. But it could be mirrored
  across the world, thus the URL could differ.

* The RDF model could be copied or cached, thus the URL could differ.



The local application will directly or indirectrly state the degree of
trust in the service. In some form:
    service --trust--> 'high'

It will get a copy of other information about the service from the
Service URL. This would be a model with a MD5 URI:
    service -- owner --> some.org
    service --  url  --> alt1
    alt1    --  _1   --> http://rdf.some.org/person/
    alt1    --  _2   --> http://rdf.mirror.se/some.org/person/
    service -- label --> 'Some person directory'
    service --updated--> 'some date'
    and more... 
    (maby something aboutEach person model in the directory)


The local application would retrieve a copy of the service model, and
would have to say something about it:
    service_model --origin --> http://rdf.some.org/person/
    service_model --updated--> 'some other date'
    service_model -- owner --> some.org
    and more...

In the same way, the local application would annote the copy of the
person_model.


The application would internaly couple every statement with its
model. And it would handle identical statements in multiple models as
the same statement. The purpose would be to handle the version and
origin of the model.


What happens when a new version of the specific person model appears
and gets downloaded? The model would have a new URI. The application
would have something like:
    person_model1 --origin -->
http://rdf.some.org/person/sv/19720529-1234
    person_model1 --updated--> 'some time ago'
    person_model2 --origin -->
http://rdf.some.org/person/sv/19720529-1234
    person_model2 --updated--> 'a couple of minutes ago'

(The possibility of several URLs for the same model complicates
this. It is not realy the origin that is of intrest, but rather what
some.org has to say about this person.)

The application could keep a history if it wanted to. It would have to
contain som logic about what version to use. The only difference
between the two versions would perhaps be the home phone number. All
the other statements would now be coupled with two models.

If it wanted to do an update, it would have to delete all statements
from model1 that has no coupling to any other model. (reference
counts?)

If this was a small update in a very large model, it would still have
to go through every statement two times. First it would have to
couple the statement to the new model. After that, it would sever the
couple to the old model.

If the application do want to keep a history, it would have situations
like this:
    person --home_phone_number-->'+46-31-123456'
    person --home_phone_number-->'+46-31-445567'

These statements would have to diffrent URIs that will be used with
the reification of the statements. I have previously suggested that
the model could be modeled as a bag of statements. But now, I would
use something like this instead:
    statement1 --model--> person_model1
    statement2 --model--> person_model2

In this way, you could retrieve both the origin and date of the
statement. And the origion would lead yot to the degree of trust you
would put in the statement.



I like this. =-)  It seems that it does work to differ between the URI
and the URL.



-- 
/ Jonas  -  http://paranormal.o.se/perl/proj/rdf/schema_editor/

Received on Sunday, 12 December 1999 10:24:58 UTC