knowrob  2.1.0
A Knowledge Base System for Cognition-enabled Robots
semweb.cpp File Reference
#include <SWI-cpp.h>
#include "knowrob/reasoner/prolog/semweb.h"
#include "knowrob/reasoner/prolog/PrologReasoner.h"
#include "knowrob/reasoner/ReasonerManager.h"
#include "knowrob/semweb/ImportHierarchy.h"
#include "knowrob/semweb/OntologyFile.h"
#include "knowrob/URI.h"
Include dependency graph for semweb.cpp:

Go to the source code of this file.

Namespaces

 knowrob
 
 knowrob::prolog
 

Macros

#define PL_SAFE_ARG_MACROS
 

Functions

foreign_t sw_current_graph3 (term_t t_manager, term_t t_reasoner, term_t t_graph)
 
foreign_t sw_set_current_graph3 (term_t t_manager, term_t t_reasoner, term_t t_graph)
 
foreign_t sw_unset_current_graph3 (term_t t_manager, term_t t_reasoner, term_t t_origin)
 
foreign_t sw_graph_add_direct_import4 (term_t t_manager, term_t t_reasoner, term_t t_importer, term_t t_imported)
 
foreign_t sw_graph_get_imports4 (term_t t_manager, term_t t_reasoner, term_t t_importer, term_t t_importedList)
 
foreign_t sw_set_default_graph3 (term_t t_manager, term_t t_reasoner, term_t t_graph)
 
foreign_t sw_default_graph3 (term_t t_manager, term_t t_reasoner, term_t t_graph)
 
foreign_t sw_origin_any1 (term_t t_origin)
 
foreign_t sw_origin_system1 (term_t t_origin)
 
foreign_t sw_origin_session1 (term_t t_origin)
 
foreign_t sw_origin_user1 (term_t t_origin)
 
foreign_t sw_origin_reasoner1 (term_t t_origin)
 
foreign_t sw_origin_test1 (term_t t_origin)
 
foreign_t sw_url_graph2 (term_t t_url, term_t t_graph)
 
foreign_t sw_url_version2 (term_t t_url, term_t t_version)
 
foreign_t sw_load_rdf_xml4 (term_t t_manager, term_t t_reasoner, term_t t_url, term_t t_parentGraph)
 
foreign_t sw_assert6 (term_t t_manager, term_t t_reasoner, term_t t_subject, term_t t_predicate, term_t t_object, term_t t_graph)
 
foreign_t sw_retract6 (term_t t_manager, term_t t_reasoner, term_t t_subject, term_t t_predicate, term_t t_object, term_t t_graph)
 

Macro Definition Documentation

◆ PL_SAFE_ARG_MACROS

#define PL_SAFE_ARG_MACROS

Definition at line 6 of file semweb.cpp.

Function Documentation

◆ sw_assert6()

foreign_t sw_assert6 ( term_t  t_manager,
term_t  t_reasoner,
term_t  t_subject,
term_t  t_predicate,
term_t  t_object,
term_t  t_graph 
)

Definition at line 170 of file semweb.cpp.

170  {
171  auto kb = getKnowledgeBase(t_manager, t_reasoner);
172  if (!kb) return false;
173  auto s = PrologTerm::toKnowRobTerm(t_subject);
174  auto p = PrologTerm::toKnowRobTerm(t_predicate);
175  auto o = PrologTerm::toKnowRobTerm(t_object);
176  if (!s || !p || !o) return false;
177  TripleView tripleData;
178  tripleData.setSubject(((Atomic *) s.get())->stringForm());
179  tripleData.setPredicate(((Atomic *) p.get())->stringForm());
180  if(o->termType() == TermType::ATOMIC) {
181  auto atomic = std::static_pointer_cast<Atomic>(o);
182  if (atomic->isNumeric()) {
183  tripleData.setXSDValue(atomic->stringForm(),
184  std::static_pointer_cast<Numeric>(atomic)->xsdType());
185  } else if (atomic->isIRI()) {
186  tripleData.setObjectIRI(atomic->stringForm());
187  } else if (atomic->isBlank()) {
188  tripleData.setObjectBlank(atomic->stringForm());
189  } else {
190  tripleData.setStringValue(atomic->stringForm());
191  }
192  } else {
193  return false;
194  }
195  auto g = PrologTerm::toKnowRobTerm(t_graph);
196  if (g && g->termType() == TermType::ATOMIC) {
197  tripleData.setGraph(((Atomic *) g.get())->stringForm());
198  }
199  return kb->insertOne(tripleData);
200 }
void setXSDValue(std::string_view v, XSDType type)
Definition: Triple.cpp:32
void setStringValue(std::string_view v) override
Definition: Triple.h:464
void setObjectIRI(std::string_view object) override
Definition: Triple.h:452
void setPredicate(std::string_view predicate) override
Definition: Triple.h:449
void setObjectBlank(std::string_view identifier) override
Definition: Triple.h:461
void setGraph(std::string_view graph) override
Definition: Triple.h:497
void setSubject(std::string_view subject) override
Definition: Triple.h:446
TermRule & atomic()
Definition: terms.cpp:79

◆ sw_current_graph3()

foreign_t sw_current_graph3 ( term_t  t_manager,
term_t  t_reasoner,
term_t  t_graph 
)

Definition at line 36 of file semweb.cpp.

36  {
37  auto hierarchy = getImportHierarchy(t_manager, t_reasoner);
38 
39  char *graph;
40  if (hierarchy && PL_get_atom_chars(t_graph, &graph)) {
41  return hierarchy->isCurrentGraph(graph);
42  } else {
43  return false;
44  }
45 }

◆ sw_default_graph3()

foreign_t sw_default_graph3 ( term_t  t_manager,
term_t  t_reasoner,
term_t  t_graph 
)

Definition at line 109 of file semweb.cpp.

109  {
110  auto hierarchy = getImportHierarchy(t_manager, t_reasoner);
111  return hierarchy && PL_unify_atom_chars(t_graph, hierarchy->defaultGraph().c_str());
112 }

◆ sw_graph_add_direct_import4()

foreign_t sw_graph_add_direct_import4 ( term_t  t_manager,
term_t  t_reasoner,
term_t  t_importer,
term_t  t_imported 
)

Definition at line 71 of file semweb.cpp.

71  {
72  auto hierarchy = getImportHierarchy(t_manager, t_reasoner);
73 
74  char *importer, *imported;
75  if (hierarchy &&
76  PL_get_atom_chars(t_importer, &importer) &&
77  PL_get_atom_chars(t_imported, &imported)) {
78  hierarchy->addDirectImport(importer, imported);
79  return true;
80  } else {
81  return false;
82  }
83 }

◆ sw_graph_get_imports4()

foreign_t sw_graph_get_imports4 ( term_t  t_manager,
term_t  t_reasoner,
term_t  t_importer,
term_t  t_importedList 
)

Definition at line 85 of file semweb.cpp.

85  {
86  auto hierarchy = getImportHierarchy(t_manager, t_reasoner);
87  char *importer;
88  if (hierarchy && PL_get_atom_chars(t_importer, &importer)) {
89  PlTail l(t_importedList);
90  for (auto &x: hierarchy->getImports(importer))
91  l.append(x->name().c_str());
92  l.close();
93  return true;
94  }
95  return false;
96 }

◆ sw_load_rdf_xml4()

foreign_t sw_load_rdf_xml4 ( term_t  t_manager,
term_t  t_reasoner,
term_t  t_url,
term_t  t_parentGraph 
)

Definition at line 156 of file semweb.cpp.

156  {
157  auto kb = getKnowledgeBase(t_manager, t_reasoner);
158  char *url, *parentGraph;
159  if (kb && PL_get_atom_chars(t_url, &url) && PL_get_atom_chars(t_parentGraph, &parentGraph)) {
160  URI ontologyURI(url);
161  auto ontologyFile = std::make_shared<OntologyFile>(kb->vocabulary(), ontologyURI, "rdf-xml");
162  ontologyFile->setParentOrigin(parentGraph);
163  if (kb->loadDataSource(ontologyFile)) {
164  return true;
165  }
166  }
167  return false;
168 }

◆ sw_origin_any1()

foreign_t sw_origin_any1 ( term_t  t_origin)

Definition at line 114 of file semweb.cpp.

114  {
115  return PL_unify_atom_chars(t_origin, ImportHierarchy::ORIGIN_ANY.data());
116 }

◆ sw_origin_reasoner1()

foreign_t sw_origin_reasoner1 ( term_t  t_origin)

Definition at line 130 of file semweb.cpp.

130  {
131  return PL_unify_atom_chars(t_origin, ImportHierarchy::ORIGIN_REASONER.data());
132 }

◆ sw_origin_session1()

foreign_t sw_origin_session1 ( term_t  t_origin)

Definition at line 122 of file semweb.cpp.

122  {
123  return PL_unify_atom_chars(t_origin, ImportHierarchy::ORIGIN_SESSION.data());
124 }

◆ sw_origin_system1()

foreign_t sw_origin_system1 ( term_t  t_origin)

Definition at line 118 of file semweb.cpp.

118  {
119  return PL_unify_atom_chars(t_origin, ImportHierarchy::ORIGIN_SYSTEM.data());
120 }

◆ sw_origin_test1()

foreign_t sw_origin_test1 ( term_t  t_origin)

Definition at line 134 of file semweb.cpp.

134  {
135  return PL_unify_atom_chars(t_origin, ImportHierarchy::ORIGIN_TEST.data());
136 }

◆ sw_origin_user1()

foreign_t sw_origin_user1 ( term_t  t_origin)

Definition at line 126 of file semweb.cpp.

126  {
127  return PL_unify_atom_chars(t_origin, ImportHierarchy::ORIGIN_USER.data());
128 }

◆ sw_retract6()

foreign_t sw_retract6 ( term_t  t_manager,
term_t  t_reasoner,
term_t  t_subject,
term_t  t_predicate,
term_t  t_object,
term_t  t_graph 
)

Definition at line 202 of file semweb.cpp.

202  {
203  auto kb = getKnowledgeBase(t_manager, t_reasoner);
204  if (!kb) return false;
205  auto s = PrologTerm::toKnowRobTerm(t_subject);
206  auto p = PrologTerm::toKnowRobTerm(t_predicate);
207  auto o = PrologTerm::toKnowRobTerm(t_object);
208  if (!s || !p || !o) return false;
209  TripleView tripleData;
210  tripleData.setSubject(((Atomic *) s.get())->stringForm());
211  tripleData.setPredicate(((Atomic *) p.get())->stringForm());
212  if(o->termType() == TermType::ATOMIC) {
213  auto atomic = std::static_pointer_cast<Atomic>(o);
214  if (atomic->isNumeric()) {
215  tripleData.setXSDValue(atomic->stringForm(),
216  std::static_pointer_cast<Numeric>(atomic)->xsdType());
217  } else if (atomic->isIRI()) {
218  tripleData.setObjectIRI(atomic->stringForm());
219  } else if (atomic->isBlank()) {
220  tripleData.setObjectBlank(atomic->stringForm());
221  } else {
222  tripleData.setStringValue(atomic->stringForm());
223  }
224  } else {
225  return false;
226  }
227  auto g = PrologTerm::toKnowRobTerm(t_graph);
228  if (g && g->termType() == TermType::ATOMIC) {
229  tripleData.setGraph(((Atomic *) g.get())->stringForm());
230  }
231  return kb->removeOne(tripleData);
232 }

◆ sw_set_current_graph3()

foreign_t sw_set_current_graph3 ( term_t  t_manager,
term_t  t_reasoner,
term_t  t_graph 
)

Definition at line 47 of file semweb.cpp.

47  {
48  auto hierarchy = getImportHierarchy(t_manager, t_reasoner);
49 
50  char *graph;
51  if (hierarchy && PL_get_atom_chars(t_graph, &graph)) {
52  hierarchy->addCurrentGraph(graph);
53  return true;
54  } else {
55  return false;
56  }
57 }

◆ sw_set_default_graph3()

foreign_t sw_set_default_graph3 ( term_t  t_manager,
term_t  t_reasoner,
term_t  t_graph 
)

Definition at line 98 of file semweb.cpp.

98  {
99  auto hierarchy = getImportHierarchy(t_manager, t_reasoner);
100  char *graph;
101  if (hierarchy && PL_get_atom_chars(t_graph, &graph)) {
102  hierarchy->setDefaultGraph(graph);
103  return true;
104  }
105  return false;
106 
107 }

◆ sw_unset_current_graph3()

foreign_t sw_unset_current_graph3 ( term_t  t_manager,
term_t  t_reasoner,
term_t  t_origin 
)

Definition at line 59 of file semweb.cpp.

59  {
60  auto kb = getKnowledgeBase(t_manager, t_reasoner);
61  if(!kb) return false;
62 
63  char *origin;
64  if (PL_get_atom_chars(t_origin, &origin)) {
65  return kb->removeAllWithOrigin(origin);
66  } else {
67  return false;
68  }
69 }

◆ sw_url_graph2()

foreign_t sw_url_graph2 ( term_t  t_url,
term_t  t_graph 
)

Definition at line 138 of file semweb.cpp.

138  {
139  char *url;
140  if (PL_get_atom_chars(t_url, &url)) {
141  auto name = DataSource::getNameFromURI(url);
142  return PL_unify_atom_chars(t_graph, name.c_str());
143  }
144  return false;
145 }

◆ sw_url_version2()

foreign_t sw_url_version2 ( term_t  t_url,
term_t  t_version 
)

Definition at line 147 of file semweb.cpp.

147  {
148  char *url;
149  if (PL_get_atom_chars(t_url, &url)) {
150  auto version = DataSource::getVersionFromURI(url);
151  return PL_unify_atom_chars(t_version, version.c_str());
152  }
153  return false;
154 }