使用 ARQ(Jena 的 SPARQL 处理器)将 OntModel 实例插入三重存储(如 TDB)
Inserting an OntModel instance into a Triple Store (like TDB) using ARQ (SPARQL processor for Jena)
如何使用 ARQ(Jena 的 SPARQL 处理器)将 OntModel 实例插入到三重存储(如 TDB)中?我有以下代码,它只是创建书籍,并将它们添加到 OntModel 中。现在我想插入这变成三重存储:
public static void createDummyBooks(){
// Create an empty ontology model
OntModel ontModel = ModelFactory.createOntologyModel();
String ns = new String("http://www.iexample.com/book#");
String baseURI = new String("http://www.iexample.com/book");
Ontology onto = ontModel.createOntology(baseURI);
//creating a book
OntClass book = ontModel.createClass(ns + "Book");
OntClass nonFinctionBook = ontModel.createClass(ns + "NonFictionBook");
OntClass fictionBook = ontModel.createClass(ns + "FictionBook");
// Create datatype property 'hasAge'
DatatypeProperty hasTtitle = ontModel.createDatatypeProperty(ns + "hasTitle");
// 'hasAge' takes integer values, so its range is 'integer'
// Basic datatypes are defined in the ‘vocabulary’ package
hasTtitle.setDomain(book);
hasTtitle.setRange(XSD.xstring); // com.hp.hpl.jena.vocabulary.XSD
// Create individuals
Individual theProgrammingBook = nonFinctionBook.createIndividual(ns + "ProgrammingBook");
Individual theFantasyBook = fictionBook.createIndividual(ns + "FantasyBook");
Literal bookTitle = ontModel.createTypedLiteral("Programming with Ishmael", XSDDatatype.XSDstring);
Literal fantasyBookTitle = ontModel.createTypedLiteral("The adventures of Ishmael", XSDDatatype.XSDstring);
// Create statement 'ProgrammingBook hasTitle "Programming with Ishmael" '
Statement theProgrammingBookHasTitle = ontModel.createStatement(nonFinctionBook, hasTtitle, bookTitle);
// Create statement 'FantasyBook hasTitle "The adventures of Ishmael" '
Statement theFantasyBookHasTitle = ontModel.createStatement(theFantasyBook, hasTtitle, fantasyBookTitle);
List<Statement> statements = new ArrayList<Statement>();
statements.add(theProgrammingBookHasTitle);
statements.add(theFantasyBookHasTitle);
ontModel.add(statements);
//just displaying here - but how do I now write/insert this into my Triple Store/TDB using AQR API?
ontModel.write(System.out, "RDF/XML-ABBREV");
}
有什么想法吗?非常感谢。
经过一番搜索和试用 API。我遇到了这个 very useful tutorial - 虽然它有一个特定的重点,但它确实让我对我需要做什么有了一些很好的了解。所以这就是我最终如何使用 HTTP 数据集访问器 DatasetAccessor
将我的 OntModel
OntModel
成功地 dataset
到我现有的 dataset
中。
//The Graph Store protocol for sem_tutorials (my dummy dataset) is http://localhost:3030/sem_tutorials/data
private static final String FUSEKI_SERVICE_DATASETS_URI = "http://localhost:3030/sem_tutorials/data";
private void testSavingModel(OntModel model){
DatasetAccessor accessor = DatasetAccessorFactory.createHTTP(FUSEKI_SERVICE_DATASETS_URI);
if(accessor != null){
//because I already had a number of Triples there already - I am only adding this model
accessor.add(model);
}
}
就是这么简单!因此,当我通过 运行 SPARQL 查询 select * {?s ?p ?o}
检查时 - 数据就在那里!
我希望这对那些使用 Jena 开发语义 Web 应用程序的人也有用。
这里介绍的教程很棒,最后展示了如何通过 http 将 OntModel 传输到 Fuseki。以下是如何在嵌入式 Fuseki 3.4.0 中执行相同操作以确保完整性的示例:
// this will represent content of the db
Dataset ds = DatasetFactory.createTxnMem();
DatasetGraph dsg = ds.asDatasetGraph();
// here some Jena Objects to be inserted
String NS = "http://myexample.com/#"
OntModel m = ModelFactory.createOntologyModel();
OntClass r = m.createClass( NS + Request.class.getName() );
Individual i = r.createIndividual( NS + request.hashCode() );
FusekiServer server = FusekiServer.create()
.setPort(4321)
.add("/ds", ds)
.build();
server.start();
DatasetAccessor accessor = DatasetAccessorFactory.create(ds);
//upload Jena Model into Fuseki
Txn.executeWrite(dsg, () -> {
accessor.add(m);
TDB.sync(dsg);
dsg.commit();
});
//query content of Fuseki
Txn.executeWrite(dsg, () -> {
Quad q = SSE.parseQuad("(_ :s :p _:b)");
dsg.add(q);
});
与 http 一样,DatasetAccessor 是这里的关键。如果你知道如何优化我想出的这个例子,请评论!
如果您知道更多有关 Jena API <-> 嵌入式 Fuseki 示例的来源,请也将其添加到此处!
如何使用 ARQ(Jena 的 SPARQL 处理器)将 OntModel 实例插入到三重存储(如 TDB)中?我有以下代码,它只是创建书籍,并将它们添加到 OntModel 中。现在我想插入这变成三重存储:
public static void createDummyBooks(){
// Create an empty ontology model
OntModel ontModel = ModelFactory.createOntologyModel();
String ns = new String("http://www.iexample.com/book#");
String baseURI = new String("http://www.iexample.com/book");
Ontology onto = ontModel.createOntology(baseURI);
//creating a book
OntClass book = ontModel.createClass(ns + "Book");
OntClass nonFinctionBook = ontModel.createClass(ns + "NonFictionBook");
OntClass fictionBook = ontModel.createClass(ns + "FictionBook");
// Create datatype property 'hasAge'
DatatypeProperty hasTtitle = ontModel.createDatatypeProperty(ns + "hasTitle");
// 'hasAge' takes integer values, so its range is 'integer'
// Basic datatypes are defined in the ‘vocabulary’ package
hasTtitle.setDomain(book);
hasTtitle.setRange(XSD.xstring); // com.hp.hpl.jena.vocabulary.XSD
// Create individuals
Individual theProgrammingBook = nonFinctionBook.createIndividual(ns + "ProgrammingBook");
Individual theFantasyBook = fictionBook.createIndividual(ns + "FantasyBook");
Literal bookTitle = ontModel.createTypedLiteral("Programming with Ishmael", XSDDatatype.XSDstring);
Literal fantasyBookTitle = ontModel.createTypedLiteral("The adventures of Ishmael", XSDDatatype.XSDstring);
// Create statement 'ProgrammingBook hasTitle "Programming with Ishmael" '
Statement theProgrammingBookHasTitle = ontModel.createStatement(nonFinctionBook, hasTtitle, bookTitle);
// Create statement 'FantasyBook hasTitle "The adventures of Ishmael" '
Statement theFantasyBookHasTitle = ontModel.createStatement(theFantasyBook, hasTtitle, fantasyBookTitle);
List<Statement> statements = new ArrayList<Statement>();
statements.add(theProgrammingBookHasTitle);
statements.add(theFantasyBookHasTitle);
ontModel.add(statements);
//just displaying here - but how do I now write/insert this into my Triple Store/TDB using AQR API?
ontModel.write(System.out, "RDF/XML-ABBREV");
}
有什么想法吗?非常感谢。
经过一番搜索和试用 API。我遇到了这个 very useful tutorial - 虽然它有一个特定的重点,但它确实让我对我需要做什么有了一些很好的了解。所以这就是我最终如何使用 HTTP 数据集访问器 DatasetAccessor
将我的 OntModel
OntModel
成功地 dataset
到我现有的 dataset
中。
//The Graph Store protocol for sem_tutorials (my dummy dataset) is http://localhost:3030/sem_tutorials/data
private static final String FUSEKI_SERVICE_DATASETS_URI = "http://localhost:3030/sem_tutorials/data";
private void testSavingModel(OntModel model){
DatasetAccessor accessor = DatasetAccessorFactory.createHTTP(FUSEKI_SERVICE_DATASETS_URI);
if(accessor != null){
//because I already had a number of Triples there already - I am only adding this model
accessor.add(model);
}
}
就是这么简单!因此,当我通过 运行 SPARQL 查询 select * {?s ?p ?o}
检查时 - 数据就在那里!
我希望这对那些使用 Jena 开发语义 Web 应用程序的人也有用。
这里介绍的教程很棒,最后展示了如何通过 http 将 OntModel 传输到 Fuseki。以下是如何在嵌入式 Fuseki 3.4.0 中执行相同操作以确保完整性的示例:
// this will represent content of the db
Dataset ds = DatasetFactory.createTxnMem();
DatasetGraph dsg = ds.asDatasetGraph();
// here some Jena Objects to be inserted
String NS = "http://myexample.com/#"
OntModel m = ModelFactory.createOntologyModel();
OntClass r = m.createClass( NS + Request.class.getName() );
Individual i = r.createIndividual( NS + request.hashCode() );
FusekiServer server = FusekiServer.create()
.setPort(4321)
.add("/ds", ds)
.build();
server.start();
DatasetAccessor accessor = DatasetAccessorFactory.create(ds);
//upload Jena Model into Fuseki
Txn.executeWrite(dsg, () -> {
accessor.add(m);
TDB.sync(dsg);
dsg.commit();
});
//query content of Fuseki
Txn.executeWrite(dsg, () -> {
Quad q = SSE.parseQuad("(_ :s :p _:b)");
dsg.add(q);
});
与 http 一样,DatasetAccessor 是这里的关键。如果你知道如何优化我想出的这个例子,请评论!
如果您知道更多有关 Jena API <-> 嵌入式 Fuseki 示例的来源,请也将其添加到此处!