Nach mehreren Versuchen und weiteren Recherchen im Netz habe ich endlich mein Ziel erreicht.
Ich habe mich entschieden, eine hybride Lösung zu entwickeln, in der ich die Benutzeranmeldung und ihre Navigationsgenehmigungen über MS SQL Server und JDBCRealm verwalte, während ich Jena TDB verwende, um alle anderen Daten zu speichern.
Beginnend mit einem RDF-Schema habe ich eine Java-Klasse erstellt, die Ressourcen und Eigenschaften enthält, um meine Anweisungen einfach über Code zu erstellen. Hier ein Beispiel:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns="http://www.stackoverflow.com/example#"
xml:base="http://www.stackoverflow.com/example">
<rdfs:Class rdf:ID="User"></rdfs:Class>
<rdfs:Class rdf:ID="Project"></rdfs:Class>
<rdf:Property rdf:ID="email"></rdf:Property>
<rdf:Property rdf:ID="name"></rdf:Property>
<rdf:Property rdf:ID="surname"></rdf:Property>
<rdf:Property rdf:ID="description"></rdf:Property>
<rdf:Property rdf:ID="customer"></rdf:Property>
<rdf:Property rdf:ID="insertProject">
<rdfs:domain rdf:resource="http://www.stackoverflow.com/example#User"/>
<rdfs:range rdf:resource="http://www.stackoverflow.com/example#Project"/>
</rdf:Property>
</rdf:RDF>
Und das ist die Java-Klasse:
public class MY_ONTOLOGY {
private static final OntModel M = ModelFactory.createOntologyModel(OntModelSpec.RDFS_MEM);
private static final String NS = "http://www.stackoverflow.com/example#";
private static final String BASE_URI = "http://www.stackoverflow.com/example/";
public static final OntClass USER = M.createClass(NS + "User");
public static final OntClass PROJECT = M.createClass(NS + "Project");
public static final OntProperty EMAIL = M.createOntProperty(NS + "hasEmail");
public static final OntProperty NAME = M.createOntProperty(NS + "hasName");
public static final OntProperty SURNAME = M.createOntProperty(NS + "hasSurname");
public static final OntProperty DESCRIPTION = M.createOntProperty(NS + "hasDescription");
public static final OntProperty CUSTOMER = M.createOntProperty(NS + "hasCustomer");
public static final OntProperty INSERTS_PROJECT = M.createOntProperty(NS + "insertsProject");
public static final String getBaseURI() {
return BASE_URI;
}
}
Dann habe ich ein Verzeichnis auf meinem PC erstellt, wo ich die Daten gespeichert werden sollen, wie C:\MyTDBdataset
.
Zum Speichern von Daten im Inneren, ich benutze den folgenden Code:
String directory = "C:\\MyTDBdataset";
Dataset dataset = TDBFactory.createDataset(directory);
dataset.begin(ReadWrite.WRITE);
try {
Model m = dataset.getDefaultModel();
Resource user = m.createResource(MY_ONTOLOGY.getBaseURI() + "Ronnie", MY_ONTOLOGY.USER);
user.addProperty(MY_ONTOLOGY.NAME, "Ronald");
user.addProperty(MY_ONTOLOGY.SURNNAME, "Red");
user.addProperty(MY_ONTOLOGY.EMAIL, "[email protected]");
Resource project = m.createResource(MY_ONTOLOGY.getBaseURI() + "MyProject", MY_ONTOLOGY.PROJECT);
project.addProperty(MY_ONTOLOGY.DESCRIPTION, "This project is fantastic");
project.addProperty(MY_ONTOLOGY.CUSTOMER, "Customer & Co");
m.add(user, MY_ONTOLOGY.INSERTS_PROJECT, project);
dataset.commit();
} finally {
dataset.end();
}
Wenn ich in meinem TDB lesen Aussagen möchte ich etwas wie folgt verwenden können:
dataset.begin(ReadWrite.READ);
try {
Model m = dataset.getDefaultModel();
StmtIterator iter = m.listStatements();
while (iter.hasNext()) {
Statement stmt = iter.nextStatement();
Resource subject = stmt.getSubject();
Property predicate = stmt.getPredicate();
RDFNode object = stmt.getObject();
System.out.println(subject);
System.out.println("\t" + predicate);
System.out.println("\t\t" + object);
System.out.println("");
}
m.write(System.out, "RDF/XML"); //IF YOU WANT TO SEE AT CONSOLE YOUR DATA AS RDF/XML
} finally {
dataset.end();
}
Wenn Sie Möchten Sie Ihr Modell auf verschiedene Arten navigieren, schauen Sie sich tutorial von Apache an.
dataset.begin(ReadWrite.WRITE);
try {
Model m = dataset.getDefaultModel();
m.remove(m.createResource("http://http://www.stackoverflow.com/example/Ronnie"), MY_ONTOLOGY.NAME, m.createLiteral("Ronald"));
dataset.commit();
} finally {
dataset.end();
}
Das ist alles:
Wenn Sie spezifische Anweisungen in Ihrem Modell entfernen möchten, können Sie so etwas schreiben! Tschüss!
Willkommen bei stackoverflow. Bitte nehmen Sie sich einen Moment Zeit, um der [Tour] zu folgen, um zu erfahren, welche Art von Fragen Sie hier stellen können und was nicht.Ihre Frage ist sowohl off-topic, weil sie nach Offsite-Ressourcen fragt, als auch, dass sie viel zu weit entfernt ist. – Gimby
Ich habe den Begrüßungsleitfaden gelesen und denke, dass meine Frage nicht auf einer Meinung basiert und auf ein tatsächliches Problem bezogen ist und für die es auf dieser Seite keine Lösung gibt. – ronnie
@ Gimby ist höflich. Zeigen Sie, was Sie getan haben; zeigen, was fehlt; zeigen Sie, was Sie zu tun versucht haben, das hat nicht funktioniert; Stellen Sie eine spezielle Frage, wie das fehlende Bit funktionieren soll. –