AW: RDFSchema in end-user application: Which Java-API to use?

Hi Max,

this site might help you:
http://www.wiwiss.fu-berlin.de/suhl/bizer/toolkits/index.htm

Chris


-- 
Chris Bizer
Freie Universität Berlin
Phone: +49 30 838 54057
Mail: chris@bizer.de
Web: www.bizer.de

-----Ursprüngliche Nachricht-----
Von: semantic-web-request@w3.org [mailto:semantic-web-request@w3.org] Im
Auftrag von Max Voelkel
Gesendet: Freitag, 22. April 2005 11:34
An: semantic-web@w3.org
Cc: max@xam.de
Betreff: RDFSchema in end-user application: Which Java-API to use?


Scenario:

I have a given RDF Schema [2] and would like to programatically add
some statements to a model. The statements should be instances of the
classes and properties given in the schema. Imagine for example that I am
writing a
FOAF-editor.

Later, I also want to query my model and prints
all friendship-relations like this:
    (person name) +" knows "+ (other person name)
Note that the end-user sees no URIs, just nice Strings. Example output
given in [4].

I used Jena 2.1 and came up with the code [3].

Questions to the community:
--------------------------
1. Is there a nicer way (shorter, more readdable) to do this in Jena?

2. Are there other Java-APIs that make this nicer (shorter, more
readable)? As I've never tried other APIs, I would be glad to see an
example.

If you can send me other code-examples for the same data and schema
they will make a nice introduction to the other APIs: I will put them
all togehter on some webpage...

Thanks in advance,

  Max Völkel
--
University of Karlsruhe, AIFB, Knowledge Management Group
room #258, building 11.40
mvo@aifb.uni-karlsruhe.de   +49 721 608-4754   www.xam.de


- Code snippets ---


[1] Desired RDF output (N-TRIPLES format)
-------------------------------------------------
<data://p1> <schema://hasFriend> <data://p2> .
<data://p1> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
"schema://Person" .
<data://p2> <schema://hasName> "York Sure" .
<data://p1> <schema://hasName> "Rudi Studer" .
<data://p2> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
"schema://Person" .
-------------------------------------------------



[2] Given RDF Schema  (N3)
-------------------------------------------------
@prefix rdf:  <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix foaf: <http://rdfreactor.ontoware.org/2005/04/foaf#> .

foaf:Person a rdfs:Class.

foaf:hasName a rdf:Property
; rdfs:domain foaf:Person
; rdfs:range rdfs:Literal
.

foaf:knows a rdf:Property
; rdfs:domain foaf:Person
; rdfs:range foaf:Person
.
-------------------------------------------------

[2] Given RDF Schema (N-TRIPLES format)
-------------------------------------------------
<http://rdfreactor.ontoware.org/2005/04/foaf#hasName>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> .
<http://rdfreactor.ontoware.org/2005/04/foaf#knows>
<http://www.w3.org/2000/01/rdf-schema#range>
<http://rdfreactor.ontoware.org/2005/04/foaf#Person> .
<http://rdfreactor.ontoware.org/2005/04/foaf#knows>
<http://www.w3.org/2000/01/rdf-schema#domain>
<http://rdfreactor.ontoware.org/2005/04/foaf#Person> .
<http://rdfreactor.ontoware.org/2005/04/foaf#knows>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#Property> .
<http://rdfreactor.ontoware.org/2005/04/foaf#Person>
<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
<http://www.w3.org/2000/01/rdf-schema#Class> .
<http://rdfreactor.ontoware.org/2005/04/foaf#hasName>
<http://www.w3.org/2000/01/rdf-schema#range>
<http://www.w3.org/2000/01/rdf-schema#Literal> .
<http://rdfreactor.ontoware.org/2005/04/foaf#hasName>
<http://www.w3.org/2000/01/rdf-schema#domain>
<http://rdfreactor.ontoware.org/2005/04/foaf#Person> .
-------------------------------------------------


[3] Source code in Jena
-------------------------------------------------
jenaDataModel = ModelFactory.createDefaultModel();

// create RDF [1] according to Schema [2]
Property name = jenaDataModel.createProperty("schema://hasName");
Property knows = jenaDataModel.createProperty("schema://hasFriend");

Resource p1 = jenaDataModel.createResource("data://p1");
Resource p2 = jenaDataModel.createResource("data://p2");
p1.addProperty( RDF.type, "schema://Person");
p2.addProperty( RDF.type, "schema://Person");

p1.addProperty(name, "Rudi Studer");
p2.addProperty(name, "York Sure");
p1.addProperty(knows, p2);

// query model and render output
StmtIterator it = p1.listProperties(knows);
while (it.hasNext()) {
   Statement s = it.nextStatement();
   System.out.println(s.getSubject().getProperty(name).getLiteral()
      .getLexicalForm()
      + " knows "
      + jenaDataModel.createResource(
          s.getObject().asNode().getURI()).getProperty(name)
          .getLiteral().getLexicalForm());

}
-------------------------------------------------

[4] Example output
-------------------
Rudi Studer knows York Sure
------------------

Received on Friday, 22 April 2005 09:56:21 UTC