diff --git a/Modules/CMakeLists.txt b/Modules/CMakeLists.txt index 9eff325843..d8b1c2c153 100644 --- a/Modules/CMakeLists.txt +++ b/Modules/CMakeLists.txt @@ -1,82 +1,82 @@ # Modules must be listed according to their dependencies set(module_dirs - RDF LegacyIO DataTypesExt AlgorithmsExt MapperExt DICOMReader DICOMTesting Qt4Qt5TestModule SceneSerializationBase PlanarFigure ImageDenoising ImageExtraction ImageStatistics LegacyAdaptors SceneSerialization GraphAlgorithms ContourModel SurfaceInterpolation Segmentation PlanarFigureSegmentation OpenViewCore QmlItems Overlays QtWidgets QtWidgetsExt SegmentationUI DiffusionImaging GPGPU IGTBase IGT CameraCalibration RigidRegistration RigidRegistrationUI DeformableRegistration DeformableRegistrationUI OpenCL OpenCVVideoSupport QtOverlays InputDevices ToFHardware ToFProcessing ToFUI US USUI DicomUI Simulation Remeshing Python Persistence IGTUI VtkShaders DicomRT IOExt XNAT + RDF ) if(MITK_ENABLE_PIC_READER) list(APPEND module_dirs IpPicSupportIO) endif() set(MITK_DEFAULT_SUBPROJECTS MITK-Modules) foreach(module_dir ${module_dirs}) add_subdirectory(${module_dir}) endforeach() if(MITK_PRIVATE_MODULES) file(GLOB all_subdirs RELATIVE ${MITK_PRIVATE_MODULES} ${MITK_PRIVATE_MODULES}/*) foreach(subdir ${all_subdirs}) string(FIND ${subdir} "." _result) if(_result EQUAL -1) if(EXISTS ${MITK_PRIVATE_MODULES}/${subdir}/CMakeLists.txt) message(STATUS "Found private module ${subdir}") add_subdirectory(${MITK_PRIVATE_MODULES}/${subdir} private_modules/${subdir}) endif() endif() endforeach() endif(MITK_PRIVATE_MODULES) diff --git a/Modules/RDF/CMakeLists.txt b/Modules/RDF/CMakeLists.txt index 572f6c337c..d76f15ad3a 100644 --- a/Modules/RDF/CMakeLists.txt +++ b/Modules/RDF/CMakeLists.txt @@ -1,9 +1,10 @@ -mitk_create_module(PACKAGE_DEPENDS Redland - WARNINGS_AS_ERRORS - ) +mitk_create_module( + PACKAGE_DEPENDS Redland + WARNINGS_AS_ERRORS +) add_subdirectory(Testing) if(MSVC AND TARGET ${MODULE_TARGET}) set_property(TARGET ${MODULE_TARGET} APPEND_STRING PROPERTY COMPILE_FLAGS " /wd4251") endif() diff --git a/Modules/RDF/mitkRdfNode.cpp b/Modules/RDF/mitkRdfNode.cpp index f7f11fd20a..c0a2db771c 100644 --- a/Modules/RDF/mitkRdfNode.cpp +++ b/Modules/RDF/mitkRdfNode.cpp @@ -1,115 +1,116 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkRdfNode.h" -#include "mitkRdfUri.h" #include #include #include #include namespace mitk { + RdfNode::RdfNode() - : type(Nothing), value(), datatype("") + : type(NOTHING) { } RdfNode::RdfNode(RdfUri uri) - : type(URI), value(uri.ToString()), datatype("") + : type(URI), value(uri.ToString()) { } RdfNode::RdfNode(std::string text) - : type(Literal), value(text), datatype(RdfUri("")) + : type(LITERAL), value(text) { } RdfNode::RdfNode(std::string text, RdfUri dataType) - : type(Literal), value(text), datatype(dataType) + : type(LITERAL), value(text), datatype(dataType) { } RdfNode::~RdfNode() { } bool RdfNode::dummy() { librdf_world* world; librdf_storage *storage; librdf_model* model; librdf_statement* statement; raptor_world *raptor_world_ptr; raptor_iostream* iostr; world=librdf_new_world(); librdf_world_open(world); raptor_world_ptr = librdf_world_get_raptor(world); model=librdf_new_model(world, storage=librdf_new_storage(world, "hashes", NULL, "hash-type='memory'"), NULL); librdf_model_add_statement(model, statement=librdf_new_statement_from_nodes(world, librdf_new_node_from_uri_string(world, (const unsigned char*)"http://www.dajobe.org/"), librdf_new_node_from_uri_string(world, (const unsigned char*)"http://purl.org/dc/elements/1.1/creator"), librdf_new_node_from_literal(world, (const unsigned char*)"Dave Beckett", NULL, 0) ) ); librdf_free_statement(statement); iostr = raptor_new_iostream_to_file_handle(raptor_world_ptr, stdout); librdf_model_write(model, iostr); raptor_free_iostream(iostr); librdf_free_model(model); librdf_free_storage(storage); librdf_free_world(world); #ifdef LIBRDF_MEMORY_DEBUG librdf_memory_report(stderr); #endif return true; } // Define outstream of a Node - std::ostream & operator<<(std::ostream &out, const mitk::RdfNode &n) + std::ostream & operator<<(std::ostream &out, const RdfNode &n) { switch (n.type) { - case mitk::RdfNode::Nothing: + case RdfNode::NOTHING: out << "[]"; break; - case mitk::RdfNode::URI: + case RdfNode::URI: if (n.value == "") { out << "[empty-uri]"; } else { out << "<" << n.value << ">"; } break; - case mitk::RdfNode::Literal: + case RdfNode::LITERAL: out << "\"" << n.value << "\""; - if (n.datatype != mitk::RdfUri()) out << "^^" << n.datatype; + if (n.datatype != RdfUri()) out << "^^" << n.datatype; break; - case mitk::RdfNode::Blank: + case RdfNode::BLANK: out << "[blank " << n.value << "]"; break; } return out; } + } diff --git a/Modules/RDF/mitkRdfNode.h b/Modules/RDF/mitkRdfNode.h index 611777d2bb..55d5e8a212 100644 --- a/Modules/RDF/mitkRdfNode.h +++ b/Modules/RDF/mitkRdfNode.h @@ -1,59 +1,59 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef MITKRDFNODE_H #define MITKRDFNODE_H #include -#include "MitkRdfUri.h" +#include "mitkRdfUri.h" #include #include namespace mitk { /** * \ingroup MitkRDFModule */ class MitkRDF_EXPORT RdfNode { public: - enum Type { Nothing, URI, Literal, Blank}; + enum Type { NOTHING, URI, LITERAL, BLANK}; - // Construct a empty Node + // Construct a empty invalid Node RdfNode(); RdfNode(RdfUri uri); RdfNode(std::string text); RdfNode(std::string text, RdfUri dataType); virtual ~RdfNode(); Type type; RdfUri datatype; std::string value; // dummy method for dummy test bool dummy(); }; MitkRDF_EXPORT std::ostream & operator<<(std::ostream &out, const mitk::RdfNode &n); } #endif diff --git a/Modules/RDF/mitkRdfStore.cpp b/Modules/RDF/mitkRdfStore.cpp index a4d4f73b09..b8e42f0cdc 100644 --- a/Modules/RDF/mitkRdfStore.cpp +++ b/Modules/RDF/mitkRdfStore.cpp @@ -1,316 +1,338 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkRdfStore.h" -#include "mitkRdfUri.h" -#include "mitkRdfTriple.h" -#include "mitkRdfNode.h" -#include +#include namespace mitk { class RdfStorePrivate { public: RdfStorePrivate(); ~RdfStorePrivate(); }; RdfStore::RdfStore() - : m_BaseUri(0), m_World(0), m_Storage(0), m_Model(0) + : m_World(0), m_Storage(0), m_Model(0) { // SetUp base prefixes m_Prefixes["rdf"] = RdfUri("http://www.w3.org/1999/02/22-rdf-syntax-ns#"); m_Prefixes["rdfs"] = RdfUri("http://www.w3.org/2000/01/rdf-schema#"); m_Prefixes["xsd"] = RdfUri("http://www.w3.org/2001/XMLSchema#"); m_Prefixes["owl"] = RdfUri("http://www.w3.org/2002/07/owl#"); // SetUp new store CleanUp(); } RdfStore::~RdfStore() { if(m_Model) librdf_free_model(m_Model); if(m_Storage) librdf_free_storage(m_Storage); if(m_World) librdf_free_world(m_World); } void RdfStore::SetBaseUri(RdfUri uri) { m_BaseUri = uri; m_Prefixes[""] = m_BaseUri; } RdfUri RdfStore::GetBaseUri() { return m_BaseUri; } void RdfStore::AddPrefix(std::string prefix, RdfUri uri) { m_Prefixes[prefix] = uri; } void RdfStore::CleanUp() { // CleanUp old Store if there is one if(m_Model) librdf_free_model(m_Model); if(m_Storage) librdf_free_storage(m_Storage); if(m_World) librdf_free_world(m_World); // SetUp new Store m_World = librdf_new_world(); librdf_world_open(m_World); m_Storage = librdf_new_storage(m_World, "memory", 0, 0); m_Model = librdf_new_model(m_World, m_Storage, 0); } bool RdfStore::Add(RdfTriple triple) { librdf_statement* statement = RdfTripleToStatement(triple); - if (CheckComplete(statement)) + if (!CheckComplete(statement)) { librdf_free_statement(statement); return false; } // Store already contains statement if (Contains(triple)) return false; if (librdf_model_add_statement(m_Model, statement) != 0) { librdf_free_statement(statement); return false; } else { librdf_free_statement(statement); return true; } - return true; } bool RdfStore::Remove(RdfTriple triple) { librdf_statement* statement = RdfTripleToStatement(triple); - if (CheckComplete(statement)) + if (!CheckComplete(statement)) { librdf_free_statement(statement); return false; } // Store does not contain statement if (!Contains(triple)) return false; if (librdf_model_remove_statement(m_Model, statement) != 0) { librdf_free_statement(statement); return false; } else { librdf_free_statement(statement); return true; } return false; } bool RdfStore::Contains(RdfTriple triple) { librdf_statement* statement = RdfTripleToStatement(triple); // if 0 there is no triple if (librdf_model_contains_statement(m_Model, statement) == 0) { librdf_free_statement(statement); return false; } else { librdf_free_statement(statement); return true; } return false; } -void RdfStore::Save(std::string filename) +void RdfStore::Save(std::string filename, std::string format) { - SaveAs(filename, "turtle"); -} + if (format == "") format = "turtle"; -void RdfStore::SaveAs(std::string filename, std::string format) -{ librdf_uri* baseUri = RdfUriToLibRdfUri(m_BaseUri); librdf_serializer* s = librdf_new_serializer(m_World, format.c_str(), 0, 0); - for (PrefixMap::const_iterator i = m_Prefixes.begin(); i != m_Prefixes.end(); ++i) + for (PrefixMap::const_iterator i = m_Prefixes.begin(); i != m_Prefixes.end(); i++) { librdf_serializer_set_namespace(s, RdfUriToLibRdfUri(i->second), i->first.c_str()); } // May this is not relevant - librdf_serializer_set_namespace(s, RdfUriToLibRdfUri(m_BaseUri), ""); + int error = librdf_serializer_set_namespace(s, librdf_new_uri(m_World, + (const unsigned char*) m_BaseUri.ToString().append("#").c_str()), ""); //FAILED + + if (error != 0) std::cout << "________FAIL________" << std::endl; FILE* f = fopen(filename.c_str(), "w+"); librdf_serializer_serialize_model_to_file_handle(s, f, baseUri, m_Model); librdf_free_serializer(s); librdf_free_uri(baseUri); + fclose(f); } void RdfStore::Import(std::string url, std::string format) { std::string baseUri = m_BaseUri.ToString(); if (baseUri.empty()) { baseUri = url; + SetBaseUri(RdfUri(baseUri)); } - // Redland uses relative paths like file:readme.txt - if (false) + if (format == "") { - /* TODO */ + format= "turtle"; } -} -RdfStore* RdfStore::Load(std::string baseUri, std::string format) -{ - RdfStore* store = new RdfStore(); - store->SetBaseUri(RdfUri(baseUri)); - store->Import(baseUri, format); - return store; + // Redland uses file paths like file:D:/home/readme.txt + librdf_uri* uri = librdf_new_uri(m_World, (const unsigned char*) url.c_str()); + librdf_uri* libRdfBaseUri = librdf_new_uri(m_World, (const unsigned char*) baseUri.c_str()); + + librdf_parser* p = librdf_new_parser(m_World, format.c_str(), 0, 0); + + if (librdf_parser_parse_into_model(p, uri, libRdfBaseUri, m_Model) != 0 ) + { + librdf_free_parser(p); + std::cout << "Parsing failed."; + return; + } + + int namespaces = librdf_parser_get_namespaces_seen_count(p); + + for (int i = 0; i < namespaces; i++) { + const char* prefixChar = librdf_parser_get_namespaces_seen_prefix(p, i); + + if ( !prefixChar ) continue; + + std::string prefix = prefixChar; + RdfUri uri = LibRdfUriToRdfUri(librdf_parser_get_namespaces_seen_uri(p, i)); + + if (uri == RdfUri()) return; + + RdfStore::PrefixMap::iterator it = m_Prefixes.find(prefix); + + // map iterator is equal to iterator-end so it is not already added + if (it == m_Prefixes.end()) { + AddPrefix(prefix, uri); + } + } } /***************************************************************************** ********************************** Private ********************************** *****************************************************************************/ bool RdfStore::CheckComplete(librdf_statement* statement) { if (librdf_statement_is_complete(statement) != 0) return true; else return false; } librdf_statement* RdfStore::RdfTripleToStatement(RdfTriple triple) { librdf_node* subject = RdfNodeToLibRdfNode(triple.GetSubject()); librdf_node* predicate = RdfNodeToLibRdfNode(triple.GetPredicate()); librdf_node* object = RdfNodeToLibRdfNode(triple.GetObject()); librdf_statement* statement = librdf_new_statement_from_nodes(m_World, subject, predicate, object); - if(!statement) return NULL; + if(!statement) return 0; return statement; } librdf_node* RdfStore::RdfNodeToLibRdfNode(RdfNode node) { - librdf_node* newNode = NULL; + librdf_node* newNode = 0; switch (node.type) { - case RdfNode::Nothing: + case RdfNode::NOTHING: break; - case RdfNode::Blank: + case RdfNode::BLANK: newNode = librdf_new_node_from_blank_identifier(m_World, (const unsigned char*) node.value.c_str()); break; - case RdfNode::Literal: + case RdfNode::LITERAL: { if (node.datatype != RdfUri()) { librdf_uri* typeUri = RdfUriToLibRdfUri(node.datatype); newNode = librdf_new_node_from_typed_literal(m_World, (const unsigned char*) node.value.c_str(), 0, typeUri); } else { newNode = librdf_new_node_from_literal(m_World, (const unsigned char*) node.value.c_str(), 0, 0); } } break; case RdfNode::URI: newNode = librdf_new_node_from_uri( m_World, librdf_new_uri(m_World, (const unsigned char*) node.value.c_str()) ); break; default: break; } return newNode; } librdf_uri* RdfStore::RdfUriToLibRdfUri(RdfUri uri) { librdf_uri* libUri = librdf_new_uri(m_World, (const unsigned char*) uri.ToString().c_str()); - if (!libUri) return NULL; + if (!libUri) return 0; return libUri; } RdfTriple RdfStore::StatementToRdfTriple(librdf_statement* statement) { librdf_node *subject = librdf_statement_get_subject(statement); librdf_node *predicate = librdf_statement_get_predicate(statement); librdf_node *object = librdf_statement_get_object(statement); RdfTriple triple(LibRdfNodeToRdfNode(subject), LibRdfNodeToRdfNode(predicate), LibRdfNodeToRdfNode(object)); return triple; } RdfNode RdfStore::LibRdfNodeToRdfNode(librdf_node* node) { - RdfNode mitkNode = NULL; + RdfNode mitkNode; - if (!node) return mitkNode; + if (!node) return 0; if (librdf_node_is_resource(node)) { mitkNode.type = RdfNode::URI; librdf_uri *uri = librdf_node_get_uri(node); mitkNode.value = LibRdfUriToRdfUri(uri).ToString(); } else if (librdf_node_is_literal(node)) { - mitkNode.type = RdfNode::Literal; + mitkNode.type = RdfNode::LITERAL; std::string value = (const char*) librdf_node_get_literal_value(node); if (!value.empty()) mitkNode.value = value; librdf_uri* typeUri = librdf_node_get_literal_value_datatype_uri(node); if (typeUri) mitkNode.datatype = LibRdfUriToRdfUri(typeUri); } else if (librdf_node_is_blank(node)) { - mitkNode.type = RdfNode::Blank; + mitkNode.type = RdfNode::BLANK; std::string str = (const char*) librdf_node_get_blank_identifier(node); if (!str.empty()) mitkNode.value = str; } return mitkNode; } RdfUri RdfStore::LibRdfUriToRdfUri(librdf_uri* uri) { std::string str = (const char*) librdf_uri_as_string(uri); if (!str.empty()) return RdfUri(str); return RdfUri(); } } // end of namespace mitk diff --git a/Modules/RDF/mitkRdfStore.h b/Modules/RDF/mitkRdfStore.h index b6c355d7e4..97080d98ae 100644 --- a/Modules/RDF/mitkRdfStore.h +++ b/Modules/RDF/mitkRdfStore.h @@ -1,79 +1,75 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef MITKRDFSTORE_H #define MITKRDFSTORE_H #include #include #include -#include "mitkRdfUri.h" +#include "mitkRdfTriple.h" namespace mitk { -class RdfTriple; -class RdfNode; - class MitkRDF_EXPORT RdfStore { public: RdfStore(); ~RdfStore(); void SetBaseUri(RdfUri uri); RdfUri GetBaseUri(); void AddPrefix(std::string prefix, RdfUri uri); void CleanUp(); bool Add(RdfTriple triple); bool Remove(RdfTriple triple); bool Contains(RdfTriple triple); - void Save(std::string filename); - void SaveAs(std::string filename, std::string format); - - void Import(std::string url, std::string format); + // Supported formats are: "ntriples", "turtle"(default), "nquads" + void Save(std::string filename, std::string format = ""); - static RdfStore* Load(std::string baseUri, std::string format=""); + // Supported formats are: "ntriples", "turtle"(default), "nquads" + void Import(std::string url, std::string format = ""); private: RdfUri m_BaseUri; typedef std::map PrefixMap; PrefixMap m_Prefixes; librdf_model* m_Model; librdf_storage* m_Storage; librdf_world* m_World; librdf_statement* RdfTripleToStatement(RdfTriple triple); librdf_node* RdfNodeToLibRdfNode(RdfNode node); librdf_uri* RdfUriToLibRdfUri(RdfUri uri); RdfTriple StatementToRdfTriple(librdf_statement* statement); RdfNode LibRdfNodeToRdfNode(librdf_node* node); RdfUri LibRdfUriToRdfUri(librdf_uri* uri); bool CheckComplete(librdf_statement* statement); }; } #endif // MITKRDFSTORE_H diff --git a/Modules/RDF/mitkRdfTriple.cpp b/Modules/RDF/mitkRdfTriple.cpp index e3bd0f49c6..07d8cf6fcf 100644 --- a/Modules/RDF/mitkRdfTriple.cpp +++ b/Modules/RDF/mitkRdfTriple.cpp @@ -1,55 +1,60 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkRdfTriple.h" namespace mitk { RdfTriple::RdfTriple() { } -RdfTriple::RdfTriple(RdfNode x, RdfNode y, RdfNode z) - : subject(x), predicate(y), object(z) +RdfTriple::RdfTriple(RdfNode subject, RdfNode predicate, RdfNode object) + : subject(subject), predicate(predicate), object(object) +{ +} + +RdfTriple::RdfTriple(RdfNode subject, RdfNode property, std::string value) + : subject(subject), predicate(property), object(RdfNode(value)) { } RdfTriple::~RdfTriple() { } RdfNode RdfTriple::GetSubject() const { return subject; } RdfNode RdfTriple::GetPredicate() const { return predicate; } RdfNode RdfTriple::GetObject() const { return object; } // Define outstream of a Triple std::ostream & operator<<(std::ostream &out, const RdfTriple &t) { return out << "( " << t.GetSubject() << " " << t.GetPredicate() << " " << t.GetObject() << " )"; } } // end of namespace mitk diff --git a/Modules/RDF/mitkRdfTriple.h b/Modules/RDF/mitkRdfTriple.h index cef0735006..997a885130 100644 --- a/Modules/RDF/mitkRdfTriple.h +++ b/Modules/RDF/mitkRdfTriple.h @@ -1,52 +1,54 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef MITKRDFTRIPLE_H #define MITKRDFTRIPLE_H #include #include "mitkRdfNode.h" namespace mitk { class MitkRDF_EXPORT RdfTriple { public: // Construct a empty Triple RdfTriple(); // Construct a triple with three nodes - RdfTriple(RdfNode x, RdfNode y, RdfNode z); + RdfTriple(RdfNode subject, RdfNode predicate, RdfNode object); + + RdfTriple(RdfNode subject, RdfNode property, std::string value); virtual ~RdfTriple(); RdfNode GetSubject() const; RdfNode GetPredicate() const; RdfNode GetObject() const; private: RdfNode subject; RdfNode predicate; RdfNode object; }; MitkRDF_EXPORT std::ostream & operator<<(std::ostream &out, const RdfTriple &t); } #endif // MITKRDFTRIPLE_H diff --git a/Modules/RDF/mitkRdfUri.cpp b/Modules/RDF/mitkRdfUri.cpp index 1fff733855..f5fd2be4e2 100644 --- a/Modules/RDF/mitkRdfUri.cpp +++ b/Modules/RDF/mitkRdfUri.cpp @@ -1,53 +1,52 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkRdfUri.h" #include namespace mitk { RdfUri::RdfUri() - : m_Uri("") { } RdfUri::RdfUri(std::string uri) : m_Uri(uri) { } RdfUri::~RdfUri() { } std::string RdfUri::ToString() { return m_Uri; } bool RdfUri::operator==(const RdfUri &u) const { if (this->m_Uri.compare(u.m_Uri) != 0) return false; return true; } bool RdfUri::operator!=(const RdfUri &u) const { return !operator==(u); } } // end of namespace mitk diff --git a/Modules/RDF/mitkRdfUri.h b/Modules/RDF/mitkRdfUri.h index 8c1c62d514..09394186a0 100644 --- a/Modules/RDF/mitkRdfUri.h +++ b/Modules/RDF/mitkRdfUri.h @@ -1,45 +1,45 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef MITKRDFURI_H #define MITKRDFURI_H #include #include namespace mitk { class MitkRDF_EXPORT RdfUri { public: RdfUri(); - RdfUri(std::string uri); + explicit RdfUri(std::string uri); virtual ~RdfUri(); std::string ToString(); bool operator==(const RdfUri &u) const; bool operator!=(const RdfUri &u) const; private: std::string m_Uri; }; } #endif // MITKRDFURI_H diff --git a/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreView.cpp b/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreView.cpp index 6fa9cc672b..1dc5ea77d1 100644 --- a/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreView.cpp +++ b/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreView.cpp @@ -1,84 +1,134 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ // Blueberry #include #include // Qmitk #include "QmitkRdfTriplestoreView.h" // Qt #include +#include // MitkRdf #include -#include -#include -#include const std::string QmitkRdfTriplestoreView::VIEW_ID = "org.mitk.views.rdftriplestore"; +typedef mitk::RdfStore Store; +typedef mitk::RdfTriple Triple; +typedef mitk::RdfNode Node; +typedef mitk::RdfUri Uri; + void QmitkRdfTriplestoreView::SetFocus() { - m_Controls.buttonPerformImageProcessing->setFocus(); + //m_Controls.buttonPerformGenerate->setFocus(); } void QmitkRdfTriplestoreView::CreateQtPartControl( QWidget *parent ) { // create GUI widgets from the Qt Designer's .ui file m_Controls.setupUi( parent ); - connect( m_Controls.buttonPerformImageProcessing, SIGNAL(clicked()), this, SLOT(DoImageProcessing()) ); + connect( m_Controls.buttonPerformGenerate, SIGNAL(clicked()), this, SLOT(GenerateRdfFile()) ); + connect( m_Controls.buttonPerformImport, SIGNAL(clicked()), this, SLOT(ImportRdfFile()) ); + + m_Controls.lineEditDataNode->setEnabled( false ); + m_Controls.comboBoxProperty->setAutoCompletionCaseSensitivity(Qt::CaseInsensitive); + m_Controls.comboBoxProperty->setAutoCompletion(true); + m_Controls.comboBoxProperty->setEditable(false); + + QStringList s; + s << ""; + s << "hasA"; + m_Controls.comboBoxProperty->addItems(s); + m_Controls.comboBoxProperty->addItem("title"); + m_Controls.comboBoxProperty->addItem("source"); + m_Controls.comboBoxProperty->addItem("format"); } void QmitkRdfTriplestoreView::OnSelectionChanged( berry::IWorkbenchPart::Pointer /*source*/, const QList& nodes ) { + // iterate all selected objects, adjust warning visibility + foreach( mitk::DataNode::Pointer node, nodes ) + { + if( node.IsNotNull() ) + { + m_Controls.labelWarning->setVisible( false ); + m_Controls.widgetAddTriple->setEnabled( true ); + m_Controls.lineEditDataNode->setText(QString(node->GetName().c_str())); + //m_Controls.lineEditProperty->setText(QString(node->GetProperty("path")->GetValueAsString().c_str())); + + for( mitk::PropertyList::PropertyMap::const_iterator i = node->GetPropertyList()->GetMap()->begin(); + i != node->GetPropertyList()->GetMap()->end(); i++ ) + { + //MITK_INFO << i->first << " " << i->second->GetValueAsString(); + } + return; + } + } + + m_Controls.labelWarning->setVisible( true ); + m_Controls.widgetAddTriple->setEnabled( false ); } -void QmitkRdfTriplestoreView::DoImageProcessing() +void QmitkRdfTriplestoreView::GenerateRdfFile() { - typedef mitk::RdfStore Store; - typedef mitk::RdfTriple Triple; - typedef mitk::RdfNode Node; - typedef mitk::RdfUri Uri; - // Create a new Store - Store store; + mitk::RdfStore store; // Create a new base URI for the store and set it into the store - std::string base = "http://www.mitk.org/Base"; - Uri baseUri(base); + std::string base = "http://www.mitk.org/BaseOntology"; + mitk::RdfUri baseUri(base); + + store.SetBaseUri(baseUri); + store.Import("file:C:/Users/knorr/Desktop/BaseOntologyMitk.rdf"); // Create some nodes - mitk::RdfNode project1(mitk::RdfUri("http://www.mitk.org/rdfOntology/resource.rdf#Project1")); - mitk::RdfNode subject1(mitk::RdfUri("http://www.mitk.org/rdfOntology/resource.rdf#Subject1")); + mitk::RdfNode project1(mitk::RdfUri("Project1")); + mitk::RdfNode subject1(mitk::RdfUri("Subject1")); // Create some predicate(/property) nodes - mitk::RdfNode hasA(mitk::RdfUri("http://www.mitk.org/rdfOntology/property.rdf#hasA")); - mitk::RdfNode name(mitk::RdfUri("http://www.mitk.org/rdfOntology/property.rdf#name")); + mitk::RdfNode hasA(mitk::RdfUri("hasA")); + mitk::RdfNode name(mitk::RdfUri("name")); // Create some triples mitk::RdfTriple t1(project1, hasA, subject1); - mitk::RdfTriple t2(project1, name, (std::string) "MyProject"); + mitk::RdfTriple t2(project1, name, mitk::RdfNode("MyProject")); // Add triples to store store.Add(t1); store.Add(t1); + store.Add(t2); // Save the store in a local path store.Save("C:/Users/knorr/Desktop/storeFromMitk.rdf"); + store.CleanUp(); +} + +void QmitkRdfTriplestoreView::ImportRdfFile() +{ + Store store; + //store.SetBaseUri(Uri("http://mitk.org/wiki/MITK")); + store.Import("file:C:/Users/knorr/Desktop/BaseOntologyMitk.rdf"); + store.Import("file:C:/Users/knorr/Desktop/BaseOntologyMITK.owl"); + //store.Import("http://dublincore.org/documents/2012/06/14/dcmi-terms/?v=elements#"); + + + store.Save("C:/Users/knorr/Desktop/storeFromMitkWithDC.rdf"); } diff --git a/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreView.h b/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreView.h index 64b4895ff4..bcd21307bd 100644 --- a/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreView.h +++ b/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreView.h @@ -1,62 +1,63 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef QmitkRdfTriplestoreView_h #define QmitkRdfTriplestoreView_h #include #include #include "ui_QmitkRdfTriplestoreViewControls.h" /*! \brief QmitkRdfTriplestoreView \warning This class is not yet documented. Use "git blame" and ask the author to provide basic documentation. \sa QmitkFunctionality \ingroup ${plugin_target}_internal */ class QmitkRdfTriplestoreView : public QmitkAbstractView { // this is needed for all Qt objects that should have a Qt meta-object // (everything that derives from QObject and wants to have signal/slots) Q_OBJECT public: static const std::string VIEW_ID; virtual void CreateQtPartControl(QWidget *parent); protected slots: /// \brief Called when the user clicks the GUI button - void DoImageProcessing(); + void GenerateRdfFile(); + void ImportRdfFile(); protected: virtual void SetFocus(); /// \brief called by QmitkFunctionality when DataManager's selection has changed virtual void OnSelectionChanged( berry::IWorkbenchPart::Pointer source, const QList& nodes ); Ui::QmitkRdfTriplestoreViewControls m_Controls; }; #endif // QmitkRdfTriplestoreView_h diff --git a/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreViewControls.ui b/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreViewControls.ui index bd92fb02ba..7819a72a65 100644 --- a/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreViewControls.ui +++ b/Plugins/org.mitk.gui.qt.rdftriplestore/src/internal/QmitkRdfTriplestoreViewControls.ui @@ -1,64 +1,134 @@ QmitkRdfTriplestoreViewControls 0 0 - 222 - 161 + 374 + 322 0 0 QmitkTemplate - - - QLabel { color: rgb(255, 0, 0) } + + + Do image processing - Please select an image! + Generate Rdf File - - - Do image processing - + - Do Something + Import Generated Rdf File + + + + + + + false + + + + + New Triple + + + + + + + true + + + + + + + Property + + + + + + + + + + Value + + + + + + + QLabel { color: rgb(255, 0, 0) } + + + Please select a DataNode. + + + + + + + DataNode + + + + + + + + 0 + 0 + + + + + 136 + 0 + + + + + Qt::Vertical QSizePolicy::Expanding 20 220