2011-04-28 12 views
11

Quiero analizar un archivo RDF que está en forma n-triple.Analisis Java n-triple RDF

Puedo escribir mi propio analizador pero prefiero usar una biblioteca, y Jena parece innecesariamente complicada para este propósito (o al menos no puedo ver sus documentos explicando cómo leer n-triples de una manera sensata).

Podrías dirigirme a cualquiera de las bibliotecas útiles o si conoces bien a Sesame o Jena, es posible que sepas algo sobre cómo pueden resolverlo.

Respuesta

7

Si solo desea analizar los NTriples y no necesita hacer nada más que procesamiento básico y consultas, puede probar el NxParser. Es un código muy simple de Java que pasará cualquier formato de NTriples como (por ejemplo, NQuads, etc.) que le da un iterador sobre las declaraciones en el archivo. Si solo quieres NTriples, puedes ignorar fácilmente las declaraciones con menos/más de 3 elementos.

Adaptar el ejemplo en la página enlazada daría el siguiente código simple:

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

Eso es lo que fui, gracias. – Ankur

+0

Parece que el enlace a la biblioteca NxParser no funciona. ¿Es [nxparser/nxparser] (https://github.com/nxparser/nxparser) la nueva ubicación de la biblioteca? – DuffJ

8

Con Jena no es tan difícil:

Dado un archivo rdfexample.ntriple que contenga la siguiente RDF en N-TRIPLE forma (ejemplo tomado 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" . 

el código siguiente

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

lee el archivo y lo imprime en forma TORTUGA:

<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" . 

Así, con Jena puede analizar fácilmente RDF (en cualquier forma) en un objeto com.hp.hpl.jena.rdf.model.Model, lo que le permite manipular mediante programación .

+0

Gracias MarcoS, la capacidad de cambiar formatos probablemente sea útil en el futuro. – Ankur

2

Pregunta anterior, pero como explícitamente preguntas sobre diferentes bibliotecas, pensé que mostraría cómo hacer un análisis RDF simple con Eclipse RDF4J 's Rio parser (revelación: soy uno de los desarrolladores de RDF4J).

Por ejemplo, para analizar el archivo y poner todos los triples en un Model, simplemente hacer esto:

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

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

Si desea imprimir inmediatamente la salida del analizador a la salida estándar (por ejemplo, en formato de tortuga), haga algo como esto:

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

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

Y por supuesto, hay más formas de jugar con estas herramientas básicas, echar un vistazo a la documentación kit de herramientas para obtener más información.

Los analizadores de Río están disponibles como artefactos Maven separados por el camino, por lo que si desea utilizar sólo los programas de análisis, sin que el resto de las herramientas RDF4J, puede hacerlo.