문제

RAPTOR2 C 라이브러리를 사용하여 RDF / XML 파일을 구문 분석하는 데 잠시 동안 시도했습니다. 이 예제 코드는 NTRIPLE 파일을 읽고 인쇄하지만 RDF / XML이 아님을 인쇄합니다. 랩터 자습서 :

#include <stdio.h>
#include <raptor2.h>

/* rdfcat.c: parse any RDF syntax and serialize to RDF/XML-Abbrev */

static raptor_serializer* rdf_serializer;

static void
serialize_triple(void* user_data, raptor_statement* triple) 
{
  raptor_serializer_serialize_statement(rdf_serializer, triple);
}

static void
declare_namespace(void* user_data, raptor_namespace *nspace)
{
  raptor_serializer_set_namespace_from_namespace(rdf_serializer, nspace);
}

int
main(int argc, char *argv[])
{
  raptor_world *world = NULL;
  raptor_parser* rdf_parser = NULL;
  unsigned char *uri_string;
  raptor_uri *uri, *base_uri;

  world = raptor_new_world();

  uri_string = raptor_uri_filename_to_uri_string(argv[1]);
  uri = raptor_new_uri(world, uri_string);
  base_uri = raptor_uri_copy(uri);

  /* Ask raptor to work out which parser to use */
  rdf_parser = raptor_new_parser(world, "guess");
  raptor_parser_set_statement_handler(rdf_parser, NULL, serialize_triple);
  raptor_parser_set_namespace_handler(rdf_parser, NULL, declare_namespace);

  rdf_serializer = raptor_new_serializer(world, "rdfxml-abbrev");

  raptor_serializer_start_to_file_handle(rdf_serializer, base_uri, stdout);
  raptor_parser_parse_file(rdf_parser, uri, base_uri);
  raptor_serializer_serialize_end(rdf_serializer);

  raptor_free_serializer(rdf_serializer);
  raptor_free_parser(rdf_parser);

  raptor_free_uri(base_uri);
  raptor_free_uri(uri);
  raptor_free_memory(uri_string);

  raptor_free_world(world);

  return 0;
}
.

다음은 예제입니다 Wikipedia에서 Wikipedia에서 @ 두 가지 형식으로 작성된 것과 동일한 RDF ...에 첫 번째 버전은 (몇 가지 오류가 있지만, 나는 그것이 중요하다고 생각하지 않는다). 그러나 두 번째는 그렇지 않습니다.

ntriples :

<http://www.w3.org/2001/sw/RDFCore/ntriples/> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://xmlns.com/foaf/0.1/Document> .
<http://www.w3.org/2001/sw/RDFCore/ntriples/> <http://purl.org/dc/terms/title> "N-Triples"@en-US .
<http://www.w3.org/2001/sw/RDFCore/ntriples/> <http://xmlns.com/foaf/0.1/maker> _:art .
<http://www.w3.org/2001/sw/RDFCore/ntriples/> <http://xmlns.com/foaf/0.1/maker> _:dave .

_:art <http://www.w3.org/1999/02/22-rdf-syntax-ns#> <http://xmlns.com/foaf/0.1/Person> .
_:art <http://xmlns.com/foaf/0.1/name> "Art Barstow".

_:dave <http://www.w3.org/1999/02/22-rdf-syntax-ns#> <http://xmlns.com/foaf/0.1/Person> .
_:dave <http://xmlns.com/foaf/0.1/name> "Dave Beckett".
.

rdfxml :

<rdf:RDF 
    xmlns="http://xmlns.com/foaf/0.1/"
    xmlns:dc="http://purl.org/dc/terms/"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">

    <Document rdf:about="http://www.w3.org/2001/sw/RDFCore/ntriples/">
        <dc:title xml:lang="en-US">N-Triples</dc:title>
        <maker>
            <Person rdf:nodeID="art">
                <name>Art Barstow</name>
            </Person>
        </maker>
        <maker>
            <Person rdf:nodeID="dave">
                <name>Dave Beckett</name>
            </Person>
        </maker>
    </Document>
</rdf:RDF>
.

아이디어가있는 이유는 무엇입니까? 감사합니다!

편집 : W3C RDF 유효성 검사기 를 전달하기 때문에 rdfxml 하나가 유효해야합니다. / P>

편집 : 명시 적으로 파서를 "rdfxml"으로 설정하는 것이 도움이되지 않습니다. 나는 실제로이 예에서 추측 옵션에 대해 알아 냈고, 확장을 수동으로 확인하고 "nTriples"또는 "rdfxml"으로 전화를 걸기 전에 흥분했습니다.

도움이 되었습니까?

해결책

It's still just guessing what the input format is - the parser is "guess":

  /* Ask raptor to work out which parser to use */

Guesses can be wrong. Set the parser explicitly to "ntriples" or "rdfxml" and it won't guess, it'll parse exactly what you give it.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top