-1

jena モデルに保存されているデータを取得しようとすると、空の結果セットが返されます。

これはデータをロードするコードです (簡潔にするためにインポートを削除しました)

package basic;    

//imports here

public class DataLoaderQn {
    public static void main(String[] args) throws FileNotFoundException {

        String resourceURI = "http://www.abc123.com/riskmodelling/static/risks";
        String directory = "D:/mywork/dp/projs/static-risks/data/test";
        Dataset dataset = TDBFactory.createDataset(directory);
        Model model = null;

        try {
            dataset.begin(ReadWrite.WRITE);
            model = dataset.getDefaultModel();
            model.enterCriticalSection(Lock.WRITE);

            model = model.removeAll();

            Resource projectNatureRes = model.createResource(resourceURI+":PROJECT_NATURE");

            Property projectNatureRiskProps = model.createProperty(resourceURI + ":COMPLEX_FUNCTIONALITY");         
            Bag projectNatureRisks = model.createBag();         
            projectNatureRisks.add("More defects");
            projectNatureRisks.add("Effort estimation inaccurate");         
            projectNatureRes.addProperty(projectNatureRiskProps, projectNatureRisks);

            Property migrationRiskProps = model.createProperty(resourceURI + ":MIGRATION");         
            Bag migrationRisks = model.createBag();         
            migrationRisks.add("Lack of knowledge of exsting application");
            migrationRisks.add("Documentation not available");          
            projectNatureRes.addProperty(migrationRiskProps, migrationRisks);

            model.write(System.out);
            model.write(new FileOutputStream(new File(directory + "/Project_risk.ttl")), "N-TRIPLES");
            model.commit();

            dataset.commit();

            TDB.sync(model);

        } finally {
            dataset.end();
            model.leaveCriticalSection();
        }

    }

}

そして、これがJavaプログラムからデータを読み込む方法です

public class ReadBasicQn {
public static void main(String[] args) {
    String directory = "D:/mywork/dp/projs/static-risks/data/test";
    Dataset dataset = TDBFactory.createDataset(directory);

    Model model = null;
    ResultSet rs;
    QueryExecution qexeExecution = null;
    try{
        /*model = ModelFactory.createDefaultModel();
        TDBLoader.loadModel(model, directory + "/Project_risk.ttl");*/

        model = dataset.getDefaultModel();

        String queryString = "PREFIX proj: <http://www.abc123.com/riskmodelling/static/risks#> ";
        queryString += "select ?risks where ";
        queryString += "{proj:PROJECT_NATURE proj:COMPLEX_FUNCTIONALITY ?risks}";


        String queryString2 = "SELECT * WHERE { ?s ?p ?o }";

        Query q = QueryFactory.create(queryString);
        qexeExecution = QueryExecutionFactory.create(q, model);
        rs = qexeExecution.execSelect();
        ResultSetFormatter.out(System.out, rs);
        qexeExecution.close();

        q = QueryFactory.create(queryString2);
        qexeExecution = QueryExecutionFactory.create(q, model);
        rs = qexeExecution.execSelect();
        ResultSetFormatter.out(System.out, rs);

        /*while(rs.hasNext()){
            QuerySolution qSol = rs.nextSolution();
            RDFNode n = qSol.get("risks");
            System.out.println(n);
        }*/

    }finally{
        qexeExecution.close();
    }
}

}

ResultSetFormatter からの 2 番目のクエリ (select *) の出力は、次のように表示されます。

------------------------------------------------------------------------------------------------------------------------------------------------
| s                                                                 | p                                                                        | o                                                |
===================================================================================================================================================================================================
| <http://www.abc123.com/riskmodelling/static/risks:PROJECT_NATURE> | <http://www.abc123.com/riskmodelling/static/risks:COMPLEX_FUNCTIONALITY> | _:b0                                             |
| <http://www.abc123.com/riskmodelling/static/risks:PROJECT_NATURE> | <http://www.abc123.com/riskmodelling/static/risks:MIGRATION>             | _:b1                                             |
| _:b0                                                              | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>                        | <http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag> |
| _:b0                                                              | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1>                          | "More defects"                                   |
| _:b0                                                              | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_2>                          | "Effort estimation inaccurate"                   |
| _:b1                                                              | <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>                        | <http://www.w3.org/1999/02/22-rdf-syntax-ns#Bag> |
| _:b1                                                              | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_1>                          | "Lack of knowledge of exsting application"       |
| _:b1                                                              | <http://www.w3.org/1999/02/22-rdf-syntax-ns#_2>                          | "Documentation not available"                    |
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

これは、データが利用可能で正しくロードされていることを意味します (正しいですか?)。ただし、カスタム クエリは次の出力を返します。

---------
| risks |
=========
---------

どんな助けでも大歓迎です。私はイエナを始めたばかりなので、本当にばかげたことをしているのかもしれません。

4

1 に答える 1

3

タイプミスがあります。プレフィックスは で終わり#ますが、URI には:. プレフィックス宣言と URI を並べると、次のようになります。

prefix proj: http://www.abc123.com/riskmodelling/static/risks#>
             http://www.abc123.com/riskmodelling/static/risks:PROJECT_NATURE
                                                             ^
                                                             |

URI では、risks[COLON]PROJECT_NATUREであり、risks[HASH] PROJECT_NATURE ではありません。プレフィックスを次のように変更する必要があります。

prefix proj: http://www.abc123.com/riskmodelling/static/risks:>

またはデータを次のように変更します

Resource projectNatureRes = model.createResource(resourceURI+"#PROJECT_NATURE");
// ...and in a few other places, too
于 2015-09-14T14:53:56.523 に答える