2011-04-28 5 views
11

Je souhaite analyser un fichier RDF au format n-triple. Je peux écrire mon propre analyseur mais j'utiliserais plutôt une bibliothèque, et Jena me semble inutilement compliquée à cet effet (ou du moins je ne vois pas leurs docs expliquer comment lire les n-triples de façon sensée).Analyse RDF Java n-triple

Pourriez-vous s'il vous plaît pointer vers des bibliothèques utiles ou si vous connaissez bien Sésame ou Jena, vous savez peut-être quelque chose sur la façon dont ils peuvent résoudre ce problème.

Répondre

7

Si vous voulez juste analyser les NTriples et n'avez rien d'autre à faire que le traitement de base et l'interrogation, vous pouvez essayer le NxParser. C'est un très simple bit de code Java qui va passer n'importe quel NTriples comme le format (donc NQuads etc) qui vous donne un itérateur sur les instructions dans le fichier. Si vous ne voulez que NTriples, vous pouvez facilement ignorer les instructions avec moins de/plus de 3 éléments.

Adaptation de l'exemple sur la page liée donnerait le code simple suivant:

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

C'est ce que je suis allé avec, merci. – Ankur

+0

Le lien vers la bibliothèque NxParser ne semble pas fonctionner. Est-ce que [nxparser/nxparser] (https://github.com/nxparser/nxparser) est le nouvel emplacement de la bibliothèque? – DuffJ

8

Avec Jena, il est pas si difficile:

Compte tenu d'un fichier rdfexample.ntriple contenant les éléments suivants RDF en N-TRIPLE forme (exemple tiré de 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" . 

le code suivant

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);; 
    } 
} 

lit le fichier, et il imprime en forme 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" . 

Ainsi, avec Jena, vous pouvez facilement analyser RDF (sous quelque forme) dans un objet com.hp.hpl.jena.rdf.model.Model, qui vous permet de manipuler par programme, il .

+0

Merci MarcoS, la possibilité de changer les formats sera probablement utile dans le futur. – Ankur

2

Old question, mais puisque vous demandez explicitement sur les différentes bibliothèques, je pensais que je montrerais comment faire l'analyse RDF simple avec Eclipse RDF4JRio parser (divulgation: Je suis l'un des développeurs RDF4J).

Par exemple, pour analyser le fichier et mettre tous les triplets dans un Model, faites ceci:

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

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

Si vous souhaitez imprimer immédiatement la sortie de l'analyseur à stdout (par exemple au format tortue), faire quelque chose comme ceci:

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

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

Et bien sûr, il y a d'autres façons de jouer avec ces outils de base, consultez la documentation de boîte à outils pour plus de détails. Les analyseurs de Rio sont disponibles en tant qu'artéfacts Maven séparés, donc si vous souhaitez utiliser uniquement les analyseurs, sans le reste des outils RDF4J, vous pouvez le faire.