Java 用D2RQ映射数据库

Java 用D2RQ映射数据库,java,rdf,jena,d2rq,Java,Rdf,Jena,D2rq,我正在尝试使用我的数据库在之间进行映射。我正在使用Jena和D2RQ引擎 我不知道如何使用有关与数据库连接的信息配置文件.ttl 这是我的代码: public class CreateOntModel5 { public static void main(String[] args) throws OWLOntologyStorageException, OWLOntologyCreationException, IOException, SQLException {

我正在尝试使用我的数据库在之间进行映射。我正在使用Jena和D2RQ引擎

我不知道如何使用有关与数据库连接的信息配置文件.ttl

这是我的代码:

public class CreateOntModel5 {

    public static void main(String[] args) throws OWLOntologyStorageException,
    OWLOntologyCreationException, IOException, SQLException  {


        // Set up the ModelD2RQ using a mapping file
        Model m = new ModelD2RQ("C:/Users/Tiziano/workspace/rules/prova0-mappings.ttl");

        // Find anything with an rdf:type of iswc:InProceedings
        StmtIterator paperIt = m.listStatements(null, RDF.type, ISWC.InProceedings);

        // List found papers and print their titles
        while (paperIt.hasNext()) {
            Resource paper = paperIt.nextStatement().getSubject();
            System.out.println("Paper: " + paper.getProperty(DC.title).getString());

            // List authors of the paper and print their names
            StmtIterator authorIt = paper.listProperties(DC.creator);
            while (authorIt.hasNext()) {
                Resource author = authorIt.nextStatement().getResource();
                System.out.println("Author: " + author.getProperty(FOAF.name).getString());
            }
            System.out.println();
        }
        m.close();
    }
}
在这里您可以找到映射文件代码:

@前缀sdb:。
@前缀rr:。
@前缀xsd:。
@前缀:。
@基地。
:myModel
d2rq:d2rq模型;
d2rq:映射文件;
d2rq:resourceBaseURI;
.
a rr:triplemap;
rr:logicalTable[rr:tableName“esame”];
rr:subjectMap[rr:template”http://www.semanticweb.org/aalisabeth/ontologies/2014/0/untitled-ontology-352/scrittura/campowrite1={“campowrite1\”};
rr:类
];
rr:谓词对象映射[
rr:谓词;
rr:objectMap[rr:列“\”campowrite1\”;rr:datatype]
];
rr:谓词对象映射[
rr:谓词;
rr:objectMap[rr:column“\”campowrite2\”“]
].
我认为错误在ttl文件上

错误是:

线程“main”com.hp.hpl.jena.n3.turtle.TurtleParseException中的异常:第11行第7列:未解析的前缀名称:d2rq:D2RQModel 位于com.hp.hpl.jena.n3.turtle.ParserBase.throwParseException(ParserBase.java:274) 在com.hp.hpl.jena.n3.turtle.ParserBase.resolvePName(ParserBase.java:195)上 位于com.hp.hpl.jena.n3.turtle.parser.TurtleParser.PrefixedName(TurtleParser.java:680) 位于com.hp.hpl.jena.n3.turtle.parser.TurtleParser.IRIref(TurtleParser.java:664) 位于com.hp.hpl.jena.n3.turtle.parser.TurtleParser.GraphTerm(TurtleParser.java:475) 位于com.hp.hpl.jena.n3.turtle.parser.TurtleParser.VarOrTerm(TurtleParser.java:399) 位于com.hp.hpl.jena.n3.turtle.parser.TurtleParser.GraphNode(TurtleParser.java:362) 位于com.hp.hpl.jena.n3.turtle.parser.TurtleParser.Object(TurtleParser.java:215) 位于com.hp.hpl.jena.n3.turtle.parser.TurtleParser.ObjectList(TurtleParser.java:197) 位于com.hp.hpl.jena.n3.turtle.parser.TurtleParser.PropertyListNotEmpty(TurtleParser.java:165) 在com.hp.hpl.jena.n3.turtle.parser.TurtleParser.TriplesSameSubject(TurtleParser.java:130)上 位于com.hp.hpl.jena.n3.turtle.parser.TurtleParser.Statement(TurtleParser.java:76) 位于com.hp.hpl.jena.n3.turtle.parser.TurtleParser.parse(TurtleParser.java:46) 在com.hp.hpl.jena.n3.turtle.ParserTurtle.parse(ParserTurtle.java:37) 位于com.hp.hpl.jena.n3.turtle.TurtleReader.readWorker(TurtleReader.java:21) 位于com.hp.hpl.jena.n3.JenaReaderBase.readImpl(JenaReaderBase.java:101) 请访问com.hp.hpl.jena.n3.JenaReaderBase.read(JenaReaderBase.java:68) 位于com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:226) 位于com.hp.hpl.jena.util.FileManager.readModelWorker(FileManager.java:395) 位于com.hp.hpl.jena.util.FileManager.loadModelWorker(FileManager.java:299) 位于com.hp.hpl.jena.util.FileManager.loadModel(FileManager.java:250) 位于de.fuberlin.wiwiss.d2rq.jena.ModelD2RQ.(ModelD2RQ.java:35) 位于src.jenalib.CreateOntModel5.main(CreateOntModel5.java:28)
我认为我在ttl文件中做了一些错误的事情,但我不知道是什么。 有什么帮助吗


谢谢。

正如错误消息所说:

第11行第7列:未解析的前缀名称:d2rq:D2RQModel
您的数据以

@前缀sdb:。
@前缀rr:。
@前缀xsd:。
@前缀:。
@基地。
:myModel
d2rq:d2rq模型;

您使用的是
d2rq:D2RQModel
,而没有声明
d2rq
命名空间前缀。

就像错误消息所说:

第11行第7列:未解析的前缀名称:d2rq:D2RQModel
您的数据以

@前缀sdb:。
@前缀rr:。
@前缀xsd:。
@前缀:。
@基地。
:myModel
d2rq:d2rq模型;

您使用的是
d2rq:D2RQModel
,而没有声明
d2rq
命名空间前缀。

就像错误消息所说:

第11行第7列:未解析的前缀名称:d2rq:D2RQModel
您的数据以

@前缀sdb:。
@前缀rr:。
@前缀xsd:。
@前缀:。
@基地。
:myModel
d2rq:d2rq模型;

您使用的是
d2rq:D2RQModel
,而没有声明
d2rq
命名空间前缀。

就像错误消息所说:

第11行第7列:未解析的前缀名称:d2rq:D2RQModel
您的数据以

@前缀sdb:。
@前缀rr:。
@前缀xsd:。
@前缀:。
@基地。
:myModel
d2rq:d2rq模型;

您使用的是
d2rq:D2RQModel
,而没有声明
d2rq
名称空间前缀。

//关系DB2RDF生成

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ResultSet;

public class DB2RDF {

    /*
     * Input Arguments host:port, dbname, username, password
     */
    public static void main(String args[]) {
        // Data source details
        String databaseName = "testdb";
        String userName = "testuser";
        String password = "";
        String mySQLPort = "3306";
        String hostUrl = "localhost";
        Txt2XMLConversion xml=new Txt2XMLConversion();

        // Setup the connection with the DB
        try {
            Class.forName("com.mysql.jdbc.Driver");
            Connection conn = DriverManager.getConnection("jdbc:mysql://"
                    + hostUrl + ":" + mySQLPort + "/" + databaseName, userName,
                    password);

            // --- LISTING DATABASE SCHEMA NAMES ---
            ResultSet resultSet = conn.getMetaData().getCatalogs();
            while (resultSet.next()) {
                //System.out.println("Schema Name = "+ resultSet.getString("TABLE_CAT"));
            }
            resultSet.close();

            // --- LISTING DATABASE TABLE NAMES ---
            String[] types = { "TABLE" };
            resultSet = conn.getMetaData().getTables(databaseName, null, "%",types);
            String tableName = "";
            StringBuilder sb = new StringBuilder();

            while (resultSet.next()) {
                xml.initXML();
                tableName = resultSet.getString(3);
                sb.append(tableName + "\n");

                // --- LISTING DATABASE COLUMN NAMES ---
                DatabaseMetaData meta = conn.getMetaData();
                ResultSet resultTable = meta.getColumns(databaseName, null, tableName, "%");

                while (resultTable.next()) {

                    //System.out.println("Column Name of table " + tableName+ " = " + resultTable.getString(4));
                    sb.append(resultTable.getString(4) + "\n");
                }
                String data=sb.toString();
                String[] dd=data.split("\n");
                for(int i=0;i<dd.length;i++){
                    System.out.println(dd[i]);

                    xml.addNode(dd[i], i);  
                    xml.writeXML(tableName);
                }

                System.out.println("*****************************");
                sb=sb.delete(0, sb.length());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
导入java.sql.Connection;
导入java.sql.DatabaseMetaData;
导入java.sql.DriverManager;
导入java.sql.ResultSet;
公共类DB2RDF{
/*
*输入参数主机:端口、数据库名、用户名、密码
*/
公共静态void main(字符串参数[]){
//数据源详细信息
字符串databaseName=“testdb”;
字符串userName=“testuser”;
字符串密码=”;
字符串mySQLPort=“3306”;
字符串hostUrl=“localhost”;
Txt2XMLConversion xml=新的Txt2XMLConversion();
//设置与数据库的连接
试一试{
Class.forName(“com.mysql.jdbc.Driver”);
Connection conn=DriverManager.getConnection(“jdbc:mysql://”
+hostUrl+“:“+mySQLPort+”/“+数据库名,用户名,
密码);
//---列出数据库架构名称---
ResultSet ResultSet=conn.getMetaData().getCatalogs();
while(resultSet.next()){
//System.out.println(“Schema Name=“+resultSet.getString(“TABLE_CAT”));
}
resultSet.close();
//---列出数据库表名---
字符串[]类型={“表”};
结果集=con