Проблемы с отображением базы данных Jena

#java #eclipse #mapping #jena #ontology

#java #eclipse #отображение #jena #онтология

Вопрос:

У меня проблема с отображением в Йене. Я создал соединение с моей базой данных MySQL, но когда я пытаюсь прочитать файл, в котором есть сопоставление, Eclipse выдает мне эту ошибку:

 Exception in thread "main" com.hp.hpl.jena.sdb.SDBException: Can't find store description
    at com.hp.hpl.jena.sdb.StoreDesc.read(StoreDesc.java:85)
    at com.hp.hpl.jena.sdb.StoreDesc.read(StoreDesc.java:46)
    at OntModel3.main(OntModel3.java:89)
  

Вот мой java-код:

 public class OntModel3 {

    public static void main(String[] args) throws OWLOntologyStorageException,
    OWLOntologyCreationException, IOException, SQLException  {
        String className = "com.mysql.jdbc.Driver";  
        String DB_URL = "jdbc:mysql://localhost:3306/prova_rules"; 
        String DB_USER = "root";                         
        String DB_PASSWD = "";    

        //create store description

        StoreDesc storeDesc = new StoreDesc(LayoutType.LayoutTripleNodesHash, DatabaseType.MySQL) ;

        JDBC.loadDriverMySQL();

        SDBConnection conn = SDBFactory.createConnection(DB_URL, DB_USER, DB_PASSWD) ;
        System.out.println("mi sono connesso, forse");


        Store store = SDBFactory.connectStore(conn, storeDesc) ;
        StoreUtils.isFormatted(store);

        storeDesc = StoreDesc.read("prova-mappings.ttl");

        /*
        //  storeDesc = StoreDesc.read("prova0-mappings.ttl") ;
        Model model = SDBFactory.connectDefaultModel(store) ;

        StmtIterator sIter = model.listStatements() ;
        for ( ; sIter.hasNext() ; )
    {
        Statement stmt = sIter.nextStatement() ;
        System.out.println(stmt) ;
    }
    sIter.close() ;
    store.close() ;

    /*
    // create SDBConnection
    SDBConnection sdbConnection = new SDBConnection(DB_URL,DB_USER,DB_PASSWD);
    // connect to store
    Store store = SDBFactory.connectStore(sdbConnection,storeDesc);

    // connect store to dataset
    Dataset dataset = SDBFactory.connectDataset(store);

    System.out.println("yuppi, mi sono connesso");

    // prepare the model
    Model tmpModel = ModelFactory.createDefaultModel();
    FileManager.get().readModel(tmpModel,ontologyFile);
    System.out.println(tmpModel.size());

    System.out.println("yuppi, mi sono preparato");

    // add the model into the dataset
    dataset.getDefaultModel().add(tmpModel);

    System.out.println("yuppi, mi sono adattato");
    // all done ... hopefully
    store.close();

    /* 
     * JDBC.loadDriverMySQL();

    String jdbcURL = "jdbc:mysql://localhost:3306/provadbprogconont";

    storeDesc = StoreDesc.read("C:/Users/Michela/Desktop/Prova2/prova0-mapping.ttl") ;

    String queryString ="";

    //SDBConnectionDesc jdbcConnection;

        SDBConnection conn = SDBFactory.createConnection(jdbcURL, "root", "01234") ;
        Query query = QueryFactory.create(queryString ) ;


    Store store = SDBFactory.connectStore(conn, storeDesc) ;

    Dataset ds = SDBFactory.connectDataset(store) ;
    QueryExecution qe = QueryExecutionFactory.create(query, ds) ;
    try {
        ResultSet rs = qe.execSelect() ;
        ResultSetFormatter.out(rs) ;
    } finally { qe.close() ; }
    store.close() ;
     */
}
}
  

И здесь вы можете найти мой файл сопоставления:

 @prefix: <http://example/> .
@prefix rr: <http://www.w3.org/ns/r2rml#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix : <http://www.semanticweb.org/prova_rules_M#> .
@base <http://example.com/base/> .

# D2RQ Namespace  
@prefix d2rq: <http://www.wiwiss.fu-berlin.de/suhl/bizer/D2RQ/0.1#> .

# Namespace of the mapping file; does not appear in mapped data
@prefix map: <C:/Users/Tiziano/workspace/Prova2/prova-mappings.ttl> .

map:Database1 a d2rq:Database;
    d2rq:jdbcDSN "jdbc:mysql://localhost:3306/prova_rules";
    d2rq:jdbcDriver "com.mysql.jdbc.Driver";
    d2rq:username "root";
    d2rq:password "";

<MAPPING-ID1>
    rr:TriplesMap;
    rr:logicalTable [ rr:tableName ""esame"" ];
    rr:subjectMap [ rr:template "http://www.semanticweb.org/aalisabeth/ontologies/2014/0/untitled-ontology-352/scrittura/campowrite1={"campowrite1"}";
                     rr:class <http://www.semanticweb.org/aalisabeth/ontologies/2014/0/untitled-ontology-352/scrittura>
 ];
    rr:predicateObjectMap [
         rr:predicate   <http://www.semanticweb.org/aalisabeth/ontologies/2014/0/untitled-ontology-352/scrittura#campowrite1> ;
         rr:objectMap   [ rr:column ""campowrite1""; rr:datatype <http://www.w3.org/2001/XMLSchema#integer> ]
    ];
    rr:predicateObjectMap [
         rr:predicate   <http://www.semanticweb.org/aalisabeth/ontologies/2014/0/untitled-ontology-352/scrittura#campowrite2> ;
         rr:objectMap [ rr:column ""campowrite2"" ]
    ].

Can anyone help me with this error: 

Exception in thread "main" com.hp.hpl.jena.sdb.SDBException: Can't find store description
    at com.hp.hpl.jena.sdb.StoreDesc.read(StoreDesc.java:85)
    at com.hp.hpl.jena.sdb.StoreDesc.read(StoreDesc.java:46)
    at OntModel3.main(OntModel3.java:89)
  

Ответ №1:

Apache Jena SDB использует свою собственную схему базы данных; он не обеспечивает отображение существующей схемы SQL в RDF.

Попробуйте систему, подобную D2RQ.