2012-06-19 29 views
5

Tôi mới sử dụng cả Jena-TDB và SPARQL, vì vậy nó có thể là một câu hỏi ngớ ngẩn. Tôi đang sử dụng tdb-0.9.0, trên Windows XP.Jena TDB để lưu trữ và truy vấn bằng API

Tôi đang tạo mô hình TDB cho tệp trail_1.rdf của mình. Sự hiểu biết của tôi ở đây (sửa tôi nếu tôi sai) là đoạn mã sau sẽ đọc tập tin rdf đã cho trong mô hình TDB và cũng lưu trữ/tải (không chắc chắn từ nào tốt hơn) mô hình trong thư mục đã cho D:\Project\Store_DB\data1\tdb:

// open TDB dataset 
String directory = "D:\\Project\\Store_DB\\data1\\tdb"; 
Dataset dataset = TDBFactory.createDataset(directory); 

Model tdb = dataset.getDefaultModel(); 

// read the input file 
String source = "D:\\Project\\Store_DB\\tmp\\trail_1.rdf"; 
FileManager.get().readModel(tdb, source); 

tdb.close(); 
dataset.close(); 

Sự hiểu biết này có đúng không?


Theo hiểu biết của tôi kể từ bây giờ các mô hình được lưu trữ tại thư mục D:\Project\Store_DB\data1\tdb, tôi sẽ có thể chạy truy vấn trên nó tại một số điểm sau đó của thời gian.

Vì vậy, để truy vấn Cửa hàng TDB tại D:\Project\Store_DB\data1\tdb tôi đã cố gắng sau, nhưng nó in không có gì:

String directory = "D:\\Project\\Store_DB\\data1\\tdb" ; 
Dataset dataset = TDBFactory.createDataset(directory) ; 

Iterator<String> graphNames = dataset.listNames(); 
while (graphNames.hasNext()) { 
    String graphName = graphNames.next(); 
    System.out.println(graphName); 
} 

Tôi cũng đã cố gắng này, mà cũng không in bất cứ điều gì:

String directory = "D:\\Project\\Store_DB\\data1\\tdb" ; 
    Dataset dataset = TDBFactory.createDataset(directory) ; 

    String sparqlQueryString = "SELECT (count(*) AS ?count) { ?s ?p ?o }" ; 

    Query query = QueryFactory.create(sparqlQueryString) ; 
    QueryExecution qexec = QueryExecutionFactory.create(query, dataset) ; 
    ResultSet results = qexec.execSelect() ; 
    ResultSetFormatter.out(results) ; 

Tôi đang làm gì sai? Có điều gì sai trái với sự hiểu biết của tôi mà tôi đã đề cập ở trên không?

Trả lời

3

Đối với phần (i) câu hỏi của bạn, có, sự hiểu biết của bạn là chính xác.

Đối với phần (ii), lý do mà listNames không trả lại bất kỳ kết quả nào là vì bạn chưa đưa dữ liệu của mình vào biểu đồ có tên. Cụ thể,

Model tdb = dataset.getDefaultModel(); 

có nghĩa là bạn đang lưu trữ dữ liệu vào đồ thị mặc định của TDB, tức là biểu đồ không có tên. Nếu bạn muốn listNames để trả lại thứ gì đó, hãy thay đổi dòng đó thành:

Model tdb = dataset.getNamedGraph("graph42"); 

hoặc tương tự. Bạn sẽ, tất nhiên, sau đó cần phải tham khảo đồ thị đó theo tên khi bạn truy vấn dữ liệu.

Nếu mục tiêu của bạn chỉ đơn giản là kiểm tra xem bạn có tải thành công dữ liệu vào cửa hàng hay không, hãy thử các công cụ dòng lệnh bin/tdbdump (Linux) hoặc bat\tdbdump.bat (Windows).

Đối với một phần (iii), tôi đã thử mã của bạn trên hệ thống của tôi, chỉ vào một trong những hình ảnh TDB của tôi và nó hoạt động giống như hình ảnh mong đợi. Vì vậy: hình ảnh TDB bạn đang sử dụng không có bất kỳ dữ liệu nào trong đó (kiểm tra bằng tdbdump) hoặc mã bạn thực sự chạy khác với mẫu ở trên.

2

Vấn đề trong mã số 1 của bạn là, tôi nghĩ, bạn không cam kết dữ liệu.

Hãy thử với phiên bản này của mã phần 1 của bạn:

String directory = "D:\\Project\\Store_DB\\data1\\tdb"; 
    Dataset dataset = TDBFactory.createDataset(directory); 

    Model tdb = dataset.getDefaultModel(); 

    // read the input file 
    String source = "D:\\Project\\Store_DB\\tmp\\trail_1.rdf"; 
    FileManager.get().readModel(tdb, source); 

    dataset.commit();//INCLUDE THIS STAMEMENT 

    tdb.close(); 
    dataset.close(); 

và sau đó thử với mã phần 3 của bạn :) ....

Các vấn đề liên quan