2011-04-28 31 views
11

Tôi muốn phân tích cú pháp tệp RDF ở dạng n-triple.Phân tích cú pháp RDF n-triple Java

Tôi có thể viết trình phân tích cú pháp của riêng mình nhưng muốn sử dụng thư viện và Jena có vẻ phức tạp không cần thiết cho mục đích này (hoặc ít nhất tôi không thể xem tài liệu giải thích cách đọc n-triples theo cách hợp lý).

Bạn có thể vui lòng chỉ cho tôi bất kỳ thư viện hữu ích nào hoặc nếu bạn biết rõ Sesame hoặc Jena, bạn có thể biết điều gì đó về cách họ có thể giải quyết vấn đề này.

Trả lời

7

Nếu bạn chỉ muốn phân tích các tệp tin NTriples và không cần thực hiện bất cứ điều gì ngoài xử lý cơ bản và truy vấn thì bạn có thể thử NxParser. Nó là một đoạn mã Java rất đơn giản sẽ chuyển qua bất kỳ định dạng nào giống như NTriples (như vậy là NQuads vv), nó cung cấp cho bạn một trình lặp qua các câu lệnh trong tệp. Nếu bạn chỉ muốn NTriples bạn có thể dễ dàng bỏ qua các câu lệnh với ít hơn/nhiều hơn 3 mục.

Thích ứng với ví dụ trên trang liên kết sẽ cung cấp cho mã đơn giản sau đây:

NxParser nxp = new NxParser(new FileInputStream("filetoparse.nq"),false); 

while (nxp.hasNext()) 
{ 
    Node[] ns = nxp.next(); 
    if (ns.length == 3) 
    { 
    //Only Process Triples 
    //Replace the print statements with whatever you want 
    for (Node n: ns) 
    { 
     System.out.print(n.toN3()); 
     System.out.print(" "); 
    } 
    System.out.println("."); 
    } 
} 
+0

Đó là những gì tôi đã làm với, cảm ơn. – Ankur

+0

Liên kết tới thư viện NxParser dường như không hoạt động. Có phải [nxparser/nxparser] (https://github.com/nxparser/nxparser) vị trí mới của thư viện không? – DuffJ

8

Với Jena nó không phải là quá khó khăn:

Cho một tập tin rdfexample.ntriple chứa RDF sau trong N-TRIPLE hình thức (ví dụ lấy từ here):

<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#year> "1988" . 
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#price> "9.90" . 
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#company> "CBS Records" . 
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#country> "UK" . 
<http://www.recshop.fake/cd/Hide your heart> <http://www.recshop.fake/cd#artist> "Bonnie Tyler" . 
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#year> "1985" . 
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#price> "10.90" . 
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#company> "Columbia" . 
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#country> "USA" . 
<http://www.recshop.fake/cd/Empire Burlesque> <http://www.recshop.fake/cd#artist> "Bob Dylan" . 

đoạn mã sau

public static void main(String[] args) { 
    String fileNameOrUri = "src/a/rdfexample.ntriple"; 
    Model model = ModelFactory.createDefaultModel(); 
    InputStream is = FileManager.get().open(fileNameOrUri); 
    if (is != null) { 
     model.read(is, null, "N-TRIPLE"); 
     model.write(System.out, "TURTLE"); 
    } else { 
     System.err.println("cannot read " + fileNameOrUri);; 
    } 
} 

đọc các tập tin, và in nó ra dưới dạng TURTLE:

<http://www.recshop.fake/cd/Hide your heart> 
     <http://www.recshop.fake/cd#artist> 
       "Bonnie Tyler" ; 
     <http://www.recshop.fake/cd#company> 
       "CBS Records" ; 
     <http://www.recshop.fake/cd#country> 
       "UK" ; 
     <http://www.recshop.fake/cd#price> 
       "9.90" ; 
     <http://www.recshop.fake/cd#year> 
       "1988" . 

<http://www.recshop.fake/cd/Empire Burlesque> 
     <http://www.recshop.fake/cd#artist> 
       "Bob Dylan" ; 
     <http://www.recshop.fake/cd#company> 
       "Columbia" ; 
     <http://www.recshop.fake/cd#country> 
       "USA" ; 
     <http://www.recshop.fake/cd#price> 
       "10.90" ; 
     <http://www.recshop.fake/cd#year> 
       "1985" . 

Như vậy, với Jena bạn có thể dễ dàng phân tích cú pháp RDF (dưới mọi hình thức) vào một đối tượng com.hp.hpl.jena.rdf.model.Model, cho phép bạn lập trình thao tác nó .

+0

Cảm ơn MarcoS, khả năng thay đổi định dạng có thể sẽ có ích trong tương lai. – Ankur

2

Câu hỏi cũ, nhưng vì bạn đã hỏi một cách rõ ràng về các thư viện khác nhau, tôi nghĩ tôi sẽ chỉ cách thực hiện phân tích cú pháp RDF đơn giản với Eclipse RDF4J 'Rio parser (tiết lộ: Tôi là một trong những nhà phát triển RDF4J).

Ví dụ, để phân tích các tập tin và đặt tất cả ba trong một Model, chỉ cần làm điều này:

FileInputStream in = new FileInputStream("/path/to/file.nt"); 

Model m = Rio.parse(in, RDFFormat.NTRIPLES); 

Nếu bạn muốn ngay lập tức in ra phân tích cú pháp để stdout (ví dụ như trong định dạng Rùa), làm một cái gì đó như thế này:

FileInputStream in = new FileInputStream("/path/to/file.nt"); 

RDFParser parser = Rio.createParser(RDFFormat.NTRIPLES); 
parser.parse(in, "", Rio.createWriter(RDFFormat.TURTLE, System.out)); 

Và tất nhiên có nhiều cách để chơi với các công cụ cơ bản này, hãy xem tài liệu của bộ công cụ để biết chi tiết.

Trình phân tích cú pháp Rio có sẵn dưới dạng các tạo phẩm maven riêng biệt, vì vậy nếu bạn chỉ muốn sử dụng các trình phân tích cú pháp, mà không có các công cụ RDF4J còn lại, bạn có thể làm như vậy.

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