summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--raul/RDFModel.hpp4
-rw-r--r--raul/RDFNode.hpp1
-rw-r--r--src/RDFModel.cpp24
3 files changed, 19 insertions, 10 deletions
diff --git a/raul/RDFModel.hpp b/raul/RDFModel.hpp
index 40d524f..fb7350c 100644
--- a/raul/RDFModel.hpp
+++ b/raul/RDFModel.hpp
@@ -39,6 +39,9 @@ public:
Model(World& world);
Model(World& world, const Glib::ustring& uri, Glib::ustring base_uri="");
~Model();
+
+ void set_base_uri(const Glib::ustring& uri);
+ const Node& base_uri() const { return _base; }
void serialise_to_file_handle(FILE* fd);
void serialise_to_file(const Glib::ustring& uri);
@@ -68,6 +71,7 @@ private:
void setup_prefixes();
World& _world;
+ Node _base;
librdf_storage* _storage;
librdf_model* _model;
librdf_serializer* _serialiser;
diff --git a/raul/RDFNode.hpp b/raul/RDFNode.hpp
index cdc103b..48e9b6d 100644
--- a/raul/RDFNode.hpp
+++ b/raul/RDFNode.hpp
@@ -51,6 +51,7 @@ public:
World* world() const { return _world; }
librdf_node* get_node() const { return _node; }
+ librdf_uri* get_uri() const { return librdf_node_get_uri(_node); }
operator bool() const { return (_world != NULL && _node != NULL); }
diff --git a/src/RDFModel.cpp b/src/RDFModel.cpp
index 5680ff1..95f6d68 100644
--- a/src/RDFModel.cpp
+++ b/src/RDFModel.cpp
@@ -47,7 +47,7 @@ Model::Model(RDF::World& world)
/** Load a model from a URI (local file or remote).
*/
-Model::Model(World& world, const Glib::ustring& data_uri, Glib::ustring base_uri_str)
+Model::Model(World& world, const Glib::ustring& data_uri, Glib::ustring base_uri)
: _world(world)
, _serialiser(NULL)
{
@@ -55,24 +55,18 @@ Model::Model(World& world, const Glib::ustring& data_uri, Glib::ustring base_uri
_storage = librdf_new_storage(_world.world(), "hashes", NULL, "hash-type='memory'");
_model = librdf_new_model(_world.world(), _storage, NULL);
+ set_base_uri(base_uri);
+
librdf_uri* uri = librdf_new_uri(world.world(), (const unsigned char*)data_uri.c_str());
- librdf_uri* base_uri = NULL;
- if (base_uri_str != "")
- base_uri = librdf_new_uri(world.world(), (const unsigned char*)base_uri_str.c_str());
if (uri) {
librdf_parser* parser = librdf_new_parser(world.world(), "guess", NULL, NULL);
- librdf_parser_parse_into_model(parser, uri, base_uri, _model);
-
-
+ librdf_parser_parse_into_model(parser, uri, _base.get_uri(), _model);
librdf_free_parser(parser);
} else {
cerr << "Unable to create URI " << data_uri << endl;
}
- if (base_uri)
- librdf_free_uri(base_uri);
-
if (uri)
librdf_free_uri(uri);
@@ -95,6 +89,16 @@ Model::~Model()
void
+Model::set_base_uri(const Glib::ustring& uri)
+{
+ if (uri == "")
+ return;
+
+ _base = Node(_world, Node::RESOURCE, uri);
+}
+
+
+void
Model::setup_prefixes()
{
assert(_serialiser);