Chris@0
|
1 /*
|
Chris@0
|
2 * $Id$
|
Chris@0
|
3 *
|
Chris@0
|
4 * Copyright (C) 2004 by Maarten Menken mrmenken@cs.vu.nl
|
Chris@0
|
5 */
|
Chris@0
|
6
|
Chris@0
|
7 :- module(sesame_client,
|
Chris@0
|
8 [ sesame_login/3, % +User, +Password, +Options
|
Chris@0
|
9 sesame_logout/1, % +Options
|
Chris@0
|
10
|
Chris@0
|
11 sesame_current_repository/3,% -Id, -Attributes, +Options
|
Chris@0
|
12 sesame_clear_repository/1, % +Options
|
Chris@0
|
13
|
Chris@0
|
14 sesame_graph_query/3, % +Query, -RDF, +Options
|
Chris@0
|
15 sesame_table_query/3, % +Query, -Row, +Options
|
Chris@0
|
16 sesame_extract_rdf/2, % -RDF, +Options
|
Chris@0
|
17
|
Chris@0
|
18 sesame_upload_file/2, % +File, +Options
|
Chris@0
|
19 sesame_assert/2, % +Triples, +Options
|
Chris@0
|
20 sesame_retract/2, % +Triple, +Options
|
Chris@0
|
21
|
Chris@0
|
22 set_sesame_default/1 % +Option
|
Chris@0
|
23 ]).
|
Chris@0
|
24 :- use_module(library(rdf)).
|
Chris@0
|
25 :- use_module(library('http/http_open')).
|
Chris@0
|
26 :- use_module(library('http/http_client')).
|
Chris@0
|
27 :- use_module(xml_result).
|
Chris@0
|
28 :- use_module(library(rdf_write)).
|
Chris@0
|
29 :- use_module(library(lists)).
|
Chris@0
|
30 :- use_module(library(option)).
|
Chris@0
|
31 :- use_module(library(socket)).
|
Chris@0
|
32 :- use_module(library(debug)).
|
Chris@0
|
33
|
Chris@0
|
34
|
Chris@0
|
35 /*******************************
|
Chris@0
|
36 * REPOSITORIES *
|
Chris@0
|
37 *******************************/
|
Chris@0
|
38
|
Chris@0
|
39 %% sesame_current_repository(-Id, -Attributes, +Options)
|
Chris@0
|
40 %
|
Chris@0
|
41 % Retrieve the repositories from a Sesame server with their
|
Chris@0
|
42 % attributes.
|
Chris@0
|
43
|
Chris@0
|
44 sesame_current_repository(Id,
|
Chris@0
|
45 [ title(Title),
|
Chris@0
|
46 readable(Read),
|
Chris@0
|
47 writeable(Write)
|
Chris@0
|
48 ], Options) :-
|
Chris@0
|
49 sesame_param(host(Host), Options),
|
Chris@0
|
50 sesame_param(port(Port), Options),
|
Chris@0
|
51 sesame_param(path(Path), Options),
|
Chris@0
|
52
|
Chris@0
|
53 cookie_options(Host, Port, Path, Cookie),
|
Chris@0
|
54 atom_concat(Path, '/servlets/listRepositories', ListPath),
|
Chris@0
|
55
|
Chris@0
|
56 http_open([ protocol(http),
|
Chris@0
|
57 host(Host),
|
Chris@0
|
58 port(Port),
|
Chris@0
|
59 path(ListPath)
|
Chris@0
|
60 ], Sesame,
|
Chris@0
|
61 Cookie),
|
Chris@0
|
62
|
Chris@0
|
63 load_structure(stream(Sesame),
|
Chris@0
|
64 [ element(repositorylist, _, Repositories) ],
|
Chris@0
|
65 [ dialect(xml),
|
Chris@0
|
66 space(remove)
|
Chris@0
|
67 ]),
|
Chris@0
|
68 member(element(repository, Atts, Content), Repositories),
|
Chris@0
|
69 xml_req_attribute(Atts, id, Id),
|
Chris@0
|
70 xml_req_attribute(Atts, readable, Read),
|
Chris@0
|
71 xml_req_attribute(Atts, writeable, Write),
|
Chris@0
|
72 memberchk(element(title, _, [Title]), Content).
|
Chris@0
|
73
|
Chris@0
|
74
|
Chris@0
|
75 xml_req_attribute(Atts, Name, Value) :-
|
Chris@0
|
76 memberchk(Name=Value, Atts), !.
|
Chris@0
|
77 xml_req_attribute(_, Name, _) :-
|
Chris@0
|
78 throw(error(existence_error(attribute, Name), _)).
|
Chris@0
|
79
|
Chris@0
|
80
|
Chris@0
|
81 %% sesame_clear_repository(+Options)
|
Chris@0
|
82 %
|
Chris@0
|
83 % Remove all triples from the given repository
|
Chris@0
|
84
|
Chris@0
|
85 sesame_clear_repository(Options) :-
|
Chris@0
|
86 sesame_param(host(Host), Options),
|
Chris@0
|
87 sesame_param(port(Port), Options),
|
Chris@0
|
88 sesame_param(path(Path), Options),
|
Chris@0
|
89 sesame_param(repository(Repository), Options),
|
Chris@0
|
90
|
Chris@0
|
91 cookie_options(Host, Port, Path, Cookie),
|
Chris@0
|
92 debug(cookie, 'Adding cookie option: ~w', [Cookie]),
|
Chris@0
|
93 atom_concat(Path, '/servlets/clearRepository', ActionPath),
|
Chris@0
|
94
|
Chris@0
|
95 http_post([ protocol(http),
|
Chris@0
|
96 host(Host),
|
Chris@0
|
97 port(Port),
|
Chris@0
|
98 path(ActionPath)
|
Chris@0
|
99 ],
|
Chris@0
|
100 form([ repository=Repository
|
Chris@0
|
101 ]),
|
Chris@0
|
102 Reply,
|
Chris@0
|
103 [ reply_header(ReplyHeader)
|
Chris@0
|
104 | Cookie
|
Chris@0
|
105 ]),
|
Chris@0
|
106
|
Chris@0
|
107 ok(ReplyHeader, Reply).
|
Chris@0
|
108
|
Chris@0
|
109 ok(ReplyHeader, _Reply) :-
|
Chris@0
|
110 memberchk(status(ok, _), ReplyHeader), !.
|
Chris@0
|
111 ok(ReplyHeader, _Reply) :-
|
Chris@0
|
112 memberchk(status(forbidden, _), ReplyHeader), !,
|
Chris@0
|
113 throw(error(permission_error(sesame, http, action), _)). % TBD
|
Chris@0
|
114 ok(_, Reply) :-
|
Chris@0
|
115 format(user_error, 'ERROR: Reply: ~p~n', [Reply]),
|
Chris@0
|
116 fail.
|
Chris@0
|
117
|
Chris@0
|
118
|
Chris@0
|
119 /*******************************
|
Chris@0
|
120 * LOGIN *
|
Chris@0
|
121 *******************************/
|
Chris@0
|
122
|
Chris@0
|
123 :- dynamic
|
Chris@0
|
124 cookie/4. % Host, Port, Path, Cookie
|
Chris@0
|
125
|
Chris@0
|
126 %% sesame_login(+User, +Password, Options)
|
Chris@0
|
127 %
|
Chris@0
|
128 % Perform a login on a remote HTTP Sesame server.
|
Chris@0
|
129
|
Chris@0
|
130 sesame_login(User, Password, Options) :-
|
Chris@0
|
131 sesame_param(host(Host), Options),
|
Chris@0
|
132 sesame_param(port(Port), Options),
|
Chris@0
|
133 sesame_param(path(Path), Options),
|
Chris@0
|
134
|
Chris@0
|
135 atom_concat(Path, '/servlets/login', LoginPath),
|
Chris@0
|
136
|
Chris@0
|
137 ( Password == ''
|
Chris@0
|
138 -> PwdOptions = []
|
Chris@0
|
139 ; PwdOptions = [ password=Password ]
|
Chris@0
|
140 ),
|
Chris@0
|
141
|
Chris@0
|
142 http_post([ protocol(http),
|
Chris@0
|
143 host(Host),
|
Chris@0
|
144 port(Port),
|
Chris@0
|
145 path(LoginPath)
|
Chris@0
|
146 ],
|
Chris@0
|
147 form([ user=User
|
Chris@0
|
148 | PwdOptions
|
Chris@0
|
149 ]),
|
Chris@0
|
150 Reply,
|
Chris@0
|
151 [ reply_header(ReplyHdr)
|
Chris@0
|
152 ]),
|
Chris@0
|
153 memberchk(set_cookie(set_cookie(sesame_sid, Cookie, _Opts)), ReplyHdr),
|
Chris@0
|
154 retractall(cookie(Host, Port, Path, _)),
|
Chris@0
|
155 assert(cookie(Host, Port, Path, Cookie)),
|
Chris@0
|
156 ok(ReplyHdr, Reply).
|
Chris@0
|
157
|
Chris@0
|
158 %% sesame_logout(+Options)
|
Chris@0
|
159 %
|
Chris@0
|
160 % Perform a logout from a remote HTTP Sesame server.
|
Chris@0
|
161
|
Chris@0
|
162 sesame_logout(Options) :-
|
Chris@0
|
163 sesame_param(host(Host), Options),
|
Chris@0
|
164 sesame_param(port(Port), Options),
|
Chris@0
|
165 sesame_param(path(Path), Options),
|
Chris@0
|
166
|
Chris@0
|
167 cookie_options(Host, Port, Path, Cookie),
|
Chris@0
|
168
|
Chris@0
|
169 atom_concat(Path, '/servlets/logout', LogoutPath),
|
Chris@0
|
170
|
Chris@0
|
171 http_open([ protocol(http),
|
Chris@0
|
172 host(Host),
|
Chris@0
|
173 port(Port),
|
Chris@0
|
174 path(LogoutPath)
|
Chris@0
|
175 ], Sesame,
|
Chris@0
|
176 Cookie),
|
Chris@0
|
177 close(Sesame),
|
Chris@0
|
178 retract(cookie(Host, Port, Path, _)).
|
Chris@0
|
179
|
Chris@0
|
180 cookie_options(Host, Port, Path,
|
Chris@0
|
181 [ request_header('Cookie'=Cookie)
|
Chris@0
|
182 ]) :-
|
Chris@0
|
183 cookie(Host, Port, Path, CookieValue), !,
|
Chris@0
|
184 sformat(Cookie, 'sesame_sid=~w', [CookieValue]).
|
Chris@0
|
185 cookie_options(_, _, _, []).
|
Chris@0
|
186
|
Chris@0
|
187
|
Chris@0
|
188
|
Chris@0
|
189 /*******************************
|
Chris@0
|
190 * QUERY *
|
Chris@0
|
191 *******************************/
|
Chris@0
|
192
|
Chris@0
|
193 %% sesame_graph_query(+Query, rdf(-Subj, -Pred, -Obj), +Options)
|
Chris@0
|
194 %
|
Chris@0
|
195 % Run query on a remote SeRQL server using the HTTP protocol,
|
Chris@0
|
196 % returning the triples of the result-graph one-by-one on
|
Chris@0
|
197 % backtracking
|
Chris@0
|
198
|
Chris@0
|
199 sesame_graph_query(Query, rdf(Subject, Predicate, Object), Options) :-
|
Chris@0
|
200 sesame_param(host(Host), Options),
|
Chris@0
|
201 sesame_param(port(Port), Options),
|
Chris@0
|
202 sesame_param(path(Path), Options),
|
Chris@0
|
203 sesame_param(repository(Repository), Options),
|
Chris@0
|
204
|
Chris@0
|
205 cookie_options(Host, Port, Path, Cookie),
|
Chris@0
|
206 atom_concat(Path, '/servlets/evaluateGraphQuery', GraphQueryPath),
|
Chris@0
|
207 SearchVars = [ repository = Repository,
|
Chris@0
|
208 query = Query,
|
Chris@0
|
209 queryLanguage = 'SeRQL'
|
Chris@0
|
210 ],
|
Chris@0
|
211
|
Chris@0
|
212 concat_atom([ 'http', '://', Host, ':', Port,
|
Chris@0
|
213 GraphQueryPath,
|
Chris@0
|
214 '?', 'repository=', Repository,
|
Chris@0
|
215 '&', 'query=', Query
|
Chris@0
|
216 ], BaseUri),
|
Chris@0
|
217
|
Chris@0
|
218 http_open([ protocol(http),
|
Chris@0
|
219 host(Host),
|
Chris@0
|
220 port(Port),
|
Chris@0
|
221 path(GraphQueryPath),
|
Chris@0
|
222 search(SearchVars)
|
Chris@0
|
223 ], Sesame, Cookie),
|
Chris@0
|
224
|
Chris@0
|
225 call_cleanup(load_rdf(Sesame, Triples, [base_uri(BaseUri)]),
|
Chris@0
|
226 close(Sesame)),
|
Chris@0
|
227
|
Chris@0
|
228 member(rdf(Subject,Predicate,Object), Triples).
|
Chris@0
|
229
|
Chris@0
|
230
|
Chris@0
|
231 %% sesame_table_query(+Query, -Row, +Options)
|
Chris@0
|
232 %
|
Chris@0
|
233 % Run query on a remote SeRQL server using the HTTP protocol,
|
Chris@0
|
234 % returning the rows of the result-table one-by-one on
|
Chris@0
|
235 % backtracking
|
Chris@0
|
236
|
Chris@0
|
237 sesame_table_query(Query, Row, Options) :-
|
Chris@0
|
238 sesame_param(host(Host), Options),
|
Chris@0
|
239 sesame_param(port(Port), Options),
|
Chris@0
|
240 sesame_param(path(Path), Options),
|
Chris@0
|
241 sesame_param(repository(Repository), Options),
|
Chris@0
|
242
|
Chris@0
|
243 cookie_options(Host, Port, Path, Cookie),
|
Chris@0
|
244 atom_concat(Path, '/servlets/evaluateTableQuery', ActionPath),
|
Chris@0
|
245 SearchVars = [ repository = Repository,
|
Chris@0
|
246 query = Query,
|
Chris@0
|
247 queryLanguage = 'SeRQL'
|
Chris@0
|
248 ],
|
Chris@0
|
249
|
Chris@0
|
250 http_open([ protocol(http),
|
Chris@0
|
251 host(Host),
|
Chris@0
|
252 port(Port),
|
Chris@0
|
253 path(ActionPath),
|
Chris@0
|
254 search(SearchVars)
|
Chris@0
|
255 ], Sesame, Cookie),
|
Chris@0
|
256
|
Chris@0
|
257 ( debugging(sesame_reply(File))
|
Chris@0
|
258 -> open(File, write, Out),
|
Chris@0
|
259 copy_stream_data(Sesame, Out),
|
Chris@0
|
260 close(Sesame)
|
Chris@0
|
261 ; call_cleanup(xml_read_result_table(Sesame, Rows, VarNames),
|
Chris@0
|
262 close(Sesame)),
|
Chris@0
|
263
|
Chris@0
|
264 ( memberchk(variables(VarNames), Options)
|
Chris@0
|
265 -> true
|
Chris@0
|
266 ; true
|
Chris@0
|
267 ),
|
Chris@0
|
268
|
Chris@0
|
269 member(Row, Rows)
|
Chris@0
|
270 ).
|
Chris@0
|
271
|
Chris@0
|
272
|
Chris@0
|
273 %% sesame_extract_rdf(-Triple, +Options)
|
Chris@0
|
274 %
|
Chris@0
|
275 % Extract all contents from a remote Sesame repository, In
|
Chris@0
|
276 % addition to the server location, the following options are
|
Chris@0
|
277 % provided:
|
Chris@0
|
278 %
|
Chris@0
|
279 %% schema(OnOff) Extract schema data [on]
|
Chris@0
|
280 %% data(OnOff) Extract RDF data [on]
|
Chris@0
|
281 %% explicitOnly(OnOff) Use entailment rules?
|
Chris@0
|
282
|
Chris@0
|
283 sesame_extract_rdf(Triple, Options) :-
|
Chris@0
|
284 sesame_param(host(Host), Options),
|
Chris@0
|
285 sesame_param(port(Port), Options),
|
Chris@0
|
286 sesame_param(path(Path), Options),
|
Chris@0
|
287 sesame_param(repository(Repository), Options),
|
Chris@0
|
288
|
Chris@0
|
289 option(schema(IncludeSchema), Options, on),
|
Chris@0
|
290 option(data(IncludeData), Options, on),
|
Chris@0
|
291 option(explicit_only(Explicitonly), Options, off),
|
Chris@0
|
292
|
Chris@0
|
293 cookie_options(Host, Port, Path, Cookie),
|
Chris@0
|
294 atom_concat(Path, '/servlets/extractRDF', ExtractPath),
|
Chris@0
|
295 SearchVars = [ repository = Repository,
|
Chris@0
|
296 schema = IncludeSchema,
|
Chris@0
|
297 data = IncludeData,
|
Chris@0
|
298 explicitOnly = Explicitonly
|
Chris@0
|
299 ],
|
Chris@0
|
300
|
Chris@0
|
301 concat_atom([ 'http', '://', Host, ':', Port,
|
Chris@0
|
302 ExtractPath,
|
Chris@0
|
303 '?', 'repository=', Repository
|
Chris@0
|
304 ], BaseUri),
|
Chris@0
|
305
|
Chris@0
|
306 http_open([ protocol(http),
|
Chris@0
|
307 host(Host),
|
Chris@0
|
308 port(Port),
|
Chris@0
|
309 path(ExtractPath),
|
Chris@0
|
310 search(SearchVars)
|
Chris@0
|
311 ], Sesame,
|
Chris@0
|
312 Cookie),
|
Chris@0
|
313
|
Chris@0
|
314 call_cleanup(load_rdf(Sesame, Triples, [base_uri(BaseUri)]),
|
Chris@0
|
315 close(Sesame)),
|
Chris@0
|
316
|
Chris@0
|
317 member(Triple, Triples).
|
Chris@0
|
318
|
Chris@0
|
319
|
Chris@0
|
320 /*******************************
|
Chris@0
|
321 * UPLOAD *
|
Chris@0
|
322 *******************************/
|
Chris@0
|
323
|
Chris@0
|
324 sesame_upload_file(File, Options) :-
|
Chris@0
|
325 sesame_param(host(Host), Options),
|
Chris@0
|
326 sesame_param(port(Port), Options),
|
Chris@0
|
327 sesame_param(path(Path), Options),
|
Chris@0
|
328 sesame_param(repository(Repository), Options),
|
Chris@0
|
329
|
Chris@0
|
330 option(data_format(DataFormat), Options, rdfxml),
|
Chris@0
|
331 option(base_uri(BaseURI), Options, _),
|
Chris@0
|
332 option(verify_data(Verify), Options, off),
|
Chris@0
|
333
|
Chris@0
|
334 ( var(BaseURI)
|
Chris@0
|
335 -> absolute_file_name(File, AbsFile),
|
Chris@0
|
336 gethostname(MyHost),
|
Chris@0
|
337 concat_atom(['file:/', MyHost, '/', AbsFile], BaseURI)
|
Chris@0
|
338 ; true
|
Chris@0
|
339 ),
|
Chris@0
|
340
|
Chris@0
|
341 cookie_options(Host, Port, Path, Cookie),
|
Chris@0
|
342 atom_concat(Path, '/servlets/uploadFile', ActionPath),
|
Chris@0
|
343
|
Chris@0
|
344 http_post([ protocol(http),
|
Chris@0
|
345 host(Host),
|
Chris@0
|
346 port(Port),
|
Chris@0
|
347 path(ActionPath)
|
Chris@0
|
348 ],
|
Chris@0
|
349 form_data([ repository = Repository,
|
Chris@0
|
350 fileData = file(File),
|
Chris@0
|
351 dataFormat = DataFormat,
|
Chris@0
|
352 baseURI = BaseURI,
|
Chris@0
|
353 verifyData = Verify
|
Chris@0
|
354 ]),
|
Chris@0
|
355 Reply,
|
Chris@0
|
356 [ reply_header(ReplyHdr)
|
Chris@0
|
357 | Cookie
|
Chris@0
|
358 ]),
|
Chris@0
|
359 ok(ReplyHdr, Reply).
|
Chris@0
|
360
|
Chris@0
|
361
|
Chris@0
|
362 %% sesame_assert(+TripleOrList, +Options)
|
Chris@0
|
363 %
|
Chris@0
|
364 % Add a triple or list of triples to the server.
|
Chris@0
|
365
|
Chris@0
|
366 sesame_assert(Var, _) :-
|
Chris@0
|
367 var(Var),
|
Chris@0
|
368 throw(error(instantiation_error, _)).
|
Chris@0
|
369 sesame_assert(rdf(S,P,O), Options) :- !,
|
Chris@0
|
370 sesame_assert([rdf(S,P,O)], Options).
|
Chris@0
|
371 sesame_assert(Triples, Options) :-
|
Chris@0
|
372 sesame_param(host(Host), Options),
|
Chris@0
|
373 sesame_param(port(Port), Options),
|
Chris@0
|
374 sesame_param(path(Path), Options),
|
Chris@0
|
375 sesame_param(repository(Repository), Options),
|
Chris@0
|
376
|
Chris@0
|
377 option(base_uri(BaseURI), Options, 'foo:bar'),
|
Chris@0
|
378
|
Chris@0
|
379 cookie_options(Host, Port, Path, Cookie),
|
Chris@0
|
380 atom_concat(Path, '/servlets/uploadData', ActionPath),
|
Chris@0
|
381
|
Chris@0
|
382 new_memory_file(X),
|
Chris@0
|
383 open_memory_file(X, write, Out),
|
Chris@0
|
384 rdf_write_xml(Out, Triples),
|
Chris@0
|
385 close(Out),
|
Chris@0
|
386 memory_file_to_atom(X, Data),
|
Chris@0
|
387
|
Chris@0
|
388 http_post([ protocol(http),
|
Chris@0
|
389 host(Host),
|
Chris@0
|
390 port(Port),
|
Chris@0
|
391 path(ActionPath)
|
Chris@0
|
392 ],
|
Chris@0
|
393 form([ repository = Repository,
|
Chris@0
|
394 data = Data,
|
Chris@0
|
395 dataFormat = rdfxml,
|
Chris@0
|
396 baseURI = BaseURI,
|
Chris@0
|
397 verifyData = off,
|
Chris@0
|
398 resultFormat = xml
|
Chris@0
|
399 ]),
|
Chris@0
|
400 Reply,
|
Chris@0
|
401 [ reply_header(ReplyHdr)
|
Chris@0
|
402 | Cookie
|
Chris@0
|
403 ]),
|
Chris@0
|
404 ok(ReplyHdr, Reply).
|
Chris@0
|
405
|
Chris@0
|
406
|
Chris@0
|
407 %% sesame_retract(+Triple, +Options)
|
Chris@0
|
408 %
|
Chris@0
|
409 % Retract facts from a sesame server
|
Chris@0
|
410
|
Chris@0
|
411 sesame_retract(Triple, Options) :-
|
Chris@0
|
412 sesame_param(host(Host), Options),
|
Chris@0
|
413 sesame_param(port(Port), Options),
|
Chris@0
|
414 sesame_param(path(Path), Options),
|
Chris@0
|
415 sesame_param(repository(Repository), Options),
|
Chris@0
|
416
|
Chris@0
|
417 cookie_options(Host, Port, Path, Cookie),
|
Chris@0
|
418 atom_concat(Path, '/servlets/removeStatements', ActionPath),
|
Chris@0
|
419 phrase(remove_options(Triple), TripleOptions),
|
Chris@0
|
420
|
Chris@0
|
421 http_post([ protocol(http),
|
Chris@0
|
422 host(Host),
|
Chris@0
|
423 port(Port),
|
Chris@0
|
424 path(ActionPath)
|
Chris@0
|
425 ],
|
Chris@0
|
426 form([ repository = Repository,
|
Chris@0
|
427 resultFormat = xml
|
Chris@0
|
428 | TripleOptions
|
Chris@0
|
429 ]),
|
Chris@0
|
430 Reply,
|
Chris@0
|
431 [ reply_header(ReplyHdr)
|
Chris@0
|
432 | Cookie
|
Chris@0
|
433 ]),
|
Chris@0
|
434 ok(ReplyHdr, Reply).
|
Chris@0
|
435
|
Chris@0
|
436 remove_options(rdf(S,P,O)) -->
|
Chris@0
|
437 remove_option(S, subject),
|
Chris@0
|
438 remove_option(P, predicate),
|
Chris@0
|
439 remove_option(O, object).
|
Chris@0
|
440
|
Chris@0
|
441 remove_option(X, _) -->
|
Chris@0
|
442 { var(X) }, !,
|
Chris@0
|
443 [].
|
Chris@0
|
444 remove_option(X, Field) -->
|
Chris@0
|
445 { ntriple_encode(X, Encoded)
|
Chris@0
|
446 },
|
Chris@0
|
447 [ Field = Encoded
|
Chris@0
|
448 ].
|
Chris@0
|
449
|
Chris@0
|
450 % VERY simple minded encoding. Need to do escapes!!
|
Chris@0
|
451
|
Chris@0
|
452 ntriple_encode(Atom, Encoded) :-
|
Chris@0
|
453 atom(Atom), !,
|
Chris@0
|
454 concat_atom(['<', Atom, '>'], Encoded).
|
Chris@0
|
455 ntriple_encode(literal(lang(Lang, String)), Encoded) :- !,
|
Chris@0
|
456 concat_atom(['"', String, '"@', Lang], Encoded).
|
Chris@0
|
457 ntriple_encode(literal(type(Type, String)), Encoded) :- !,
|
Chris@0
|
458 concat_atom(['"', String, '"^^<', Type, '>'], Encoded).
|
Chris@0
|
459 ntriple_encode(literal(String), Encoded) :-
|
Chris@0
|
460 concat_atom(['"', String, '"'], Encoded).
|
Chris@0
|
461
|
Chris@0
|
462
|
Chris@0
|
463 /*******************************
|
Chris@0
|
464 * SETTINGS *
|
Chris@0
|
465 *******************************/
|
Chris@0
|
466
|
Chris@0
|
467 :- dynamic
|
Chris@0
|
468 sesame_setting/1.
|
Chris@0
|
469
|
Chris@0
|
470 sesame_param(Param, Options) :-
|
Chris@0
|
471 memberchk(Param, Options), !.
|
Chris@0
|
472 sesame_param(Param, _Options) :-
|
Chris@0
|
473 sesame_setting(Param), !.
|
Chris@0
|
474 sesame_param(Param, _Options) :-
|
Chris@0
|
475 functor(Param, Name, _),
|
Chris@0
|
476 throw(error(existence_error(option, Name), _)).
|
Chris@0
|
477
|
Chris@0
|
478 %% set_sesame_default(+OptionOrList)
|
Chris@0
|
479 %
|
Chris@0
|
480 % Set sesame server default options. Provided defaults are:
|
Chris@0
|
481 % host, port and repository. For example:
|
Chris@0
|
482 %
|
Chris@0
|
483 %% set_sesame_default([ host(localhost),
|
Chris@0
|
484 %% port(8080)
|
Chris@0
|
485 %% repository(world)
|
Chris@0
|
486 % ])
|
Chris@0
|
487
|
Chris@0
|
488 set_sesame_default([]) :- !.
|
Chris@0
|
489 set_sesame_default([H|T]) :- !,
|
Chris@0
|
490 set_sesame_default(H),
|
Chris@0
|
491 set_sesame_default(T).
|
Chris@0
|
492 set_sesame_default(Term) :-
|
Chris@0
|
493 functor(Term, Name, Arity),
|
Chris@0
|
494 functor(Unbound, Name, Arity),
|
Chris@0
|
495 retractall(sesame_setting(Unbound)),
|
Chris@0
|
496 assert(sesame_setting(Term)).
|
Chris@0
|
497
|