- From: Chris Bizer <chris@bizer.de>
- Date: Fri, 22 Apr 2005 11:54:49 +0200
- To: <semantic-web@w3.org>
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