2016-04-19 6 views
-1

Как я могу вставить экземпляр OntModel в Triple Store (например, TDB) с использованием ARQ (процессор SPARQL для Jena? У меня есть следующее . код, который просто создает книги, и добавить их в OntModel Теперь я хочу, чтобы вставить это в тройной магазин:?.Вставка экземпляра OntModel в трехмерный магазин (например, TDB) с использованием ARQ (процессор SPARQL для Jena)

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"); 

    } 

Все идеи высоко ценится

+1

Почему вы проголосовали бы за этот вопрос, не утруждая себя указанием на то, что вы находите бесполезным - вы даже работаете в пространстве развивающихся онтологий? Если вы не можете ответить на вопрос, просто пропустите его и посмотрите на другие вопросы, где вы можете помочь. – ishmaelMakitla

ответ

1

После некоторого поиска и играя с API Я наткнулся на это very useful tutorial - хотя у него был определенный фокус, это дало мне некоторое представление о том, что мне нужно было сделать. как мне в итоге удалось вставить/добавить мой OntModel в мой существующий dataset на сервере Fuseki с помощью HTTP Access Data AccessorDatasetAccessor.

//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.

+1

Наконец, спасибо за полезное учебное пособие, посвященное тому, как устранить разрыв между API Jena и сервером Fuseki. Я не понимаю, почему этот вопрос был занижен, учитывая чистую документацию и учебную базу по этой теме. – Macilias

0

Пособие, представленное здесь, является отличным и, наконец, показывает, как передать OntModel в Fuseki по http. Вот пример того, как сделать то же самое в внедренного фусеки 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 является ключевым здесь. Если вы знаете, как оптимизировать этот пример, я придумал, пожалуйста, комментарий!

Если вы знаете больше источников с примерами относительно API Jena < -> встроенные Fuseki, пожалуйста, добавьте их здесь!