Parse an RDF document into an EasyRdf_Graph
object EasyRdf_Graph $graph the graph to load the data into:
string $data the RDF document data:
string $format the format of the input data:
string $baseUri the base URI of the data being parsed:
integer The number of triples added to the graph
Overrides EasyRdf_Parser::parse
public function parse($graph, $data, $format, $baseUri) {
parent::checkParseParams($graph, $data, $format, $baseUri);
$parser = librdf_new_parser($this->world, $format, null, null);
if (!$parser) {
throw new EasyRdf_Exception("Failed to create librdf_parser of type: {$format}");
}
$rdfUri = librdf_new_uri($this->world, $baseUri);
if (!$rdfUri) {
throw new EasyRdf_Exception("Failed to create librdf_uri from: {$baseUri}");
}
$stream = librdf_parser_parse_string_as_stream($parser, $data, $rdfUri);
if (!$stream) {
throw new EasyRdf_Exception("Failed to parse RDF stream for: {$rdfUri}");
}
do {
$statement = librdf_stream_get_object($stream);
if ($statement) {
$subject = EasyRdf_Parser_Redland::nodeUriString(librdf_statement_get_subject($statement));
$predicate = EasyRdf_Parser_Redland::nodeUriString(librdf_statement_get_predicate($statement));
$object = EasyRdf_Parser_Redland::nodeToArray(librdf_statement_get_object($statement));
$this
->addTriple($subject, $predicate, $object);
}
} while (!librdf_stream_next($stream));
$errorCount = $this
->parserErrorCount($parser);
if ($errorCount) {
throw new EasyRdf_Exception("{$errorCount} errors while parsing.");
}
librdf_free_uri($rdfUri);
librdf_free_stream($stream);
librdf_free_parser($parser);
return $this->tripleCount;
}