Java n-тройной синтаксический анализ RDF - PullRequest
11 голосов
/ 28 апреля 2011

Я хочу проанализировать RDF-файл, который имеет n-тройную форму.

Я могу написать свой собственный анализатор, но я бы предпочел использовать библиотеку, и Йена кажется излишне сложной для этой цели (или, по крайней мере,Я не вижу, чтобы их документы объясняли, как правильно читать n-тройки).

Не могли бы вы указать мне какие-нибудь полезные библиотеки или, если вы хорошо знаете Сезам или Йену, вы можете кое-что знатьо том, как они могут решить это.

Ответы [ 3 ]

8 голосов
/ 28 апреля 2011

С Дженой это не так сложно:

Имеется файл rdfexample.ntriple, содержащий следующий RDF в форме N-TRIPLE (пример взят из здесь ):

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

следующий код

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

читает файл и распечатывает его в виде 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" .

Итак, с Jena вы можете легко анализировать RDF (в любой форме) в com.hp.hpl.jena.rdf.model.Model объект, который позволяет программно манипулировать им.

7 голосов
/ 28 апреля 2011

Если вы просто хотите проанализировать NTriples и вам не нужно ничего делать, кроме базовой обработки и запросов, тогда вы можете попробовать NxParser . Это очень простой фрагмент кода Java, который будет передавать любые NTriples, такие как формат (например, NQuads и т. Д.), Который дает вам итератор для операторов в файле. Если вам нужны только NTriples, вы можете легко игнорировать операторы, содержащие менее / более 3 элементов.

Адаптация примера на связанной странице даст следующий простой код:

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(".");
  }
}
3 голосов
/ 18 ноября 2014

Старый вопрос, но, поскольку вы явно задаете вопрос о разных библиотеках, я подумал, что покажу, как выполнять простой анализ RDF с Eclipse RDF4J Rio parser (раскрытие Я один из разработчиков RDF4J.

Например, чтобы проанализировать файл и поместить все тройки в Model, просто сделайте это:

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

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

Если вы хотите немедленно распечатать вывод парсера на стандартный вывод (например, в формате Turtle), сделайте что-то вроде этого:

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

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

И, конечно, есть и другие способы поиграть с этими базовыми инструментами, за подробностями обращайтесь к документации инструментария.

Кстати, парсеры Rio доступны как отдельные артефакты maven, так что если вы хотите использовать только парсеры, без остальных инструментов RDF4J, вы можете сделать это.

...