32
33:- module(rdf_html,
34 [
35 ]). 36:- use_module(library(http/html_write)). 37:- use_module(library(http/http_dispatch)). 38:- use_module(library(http/html_head)). 39:- use_module(library(semweb/rdf_db)). 40:- use_module(library(semweb/rdfs)). 41
42:- use_module(components(label)).
51
61:- multifile
62 rdf_io:write_table/4,
63 rdf_io:write_graph/4. 64
65rdf_io:write_table(html, _Serialization, Rows, Options) :- !,
66 length(Rows, Count),
67 reply_html_page(cliopatria(default),
68 title('Query result'),
69 [ \query_statistics([count(Count)|Options], rows),
70 \select_result_table(Rows, Options),
71 \new_query
72 ]).
73
74select_result_table(Rows, Options) -->
75 html_requires(css('rdf.css')),
76 html(table([ class(block)
77 ],
78 [ \variables(Options)
79 | \rows(Rows, Options, odd)
80 ])).
81
82
83variables(Options) -->
84 { memberchk(variables(Vars), Options),
85 Vars =.. [_|Names]
86 }, !,
87 html(tr(\varnames(Names))).
88
89varnames([]) -->
90 [].
91varnames([Name|T]) -->
92 html(th(Name)),
93 varnames(T).
94
95rows([], _, _) --> [].
96rows([H|T], Options, Class) -->
97 { H =.. [_|Cells],
98 odd_even(Class, NextClass)
99 },
100 html(tr(class(Class), \cells(Cells, Options))),
101 rows(T, Options, NextClass).
102
103cells([], _) -->
104 [].
105cells([H|T], Options) -->
106 cell(H, Options),
107 cells(T, Options).
108
109cell(H, _) -->
110 { var(H) }, !,
111 html(td(span(class(rdf_unbound), '<unbound>'))).
112cell(H, Options) -->
113 html(td(\rdf_link(H, Options))).
114
115odd_even(odd, even).
116odd_even(even, odd).
117
118
119
134rdf_io:write_graph(html, _Serialization, Triples, Options) :-
135 length(Triples, Count),
136 reply_html_page(cliopatria(default),
137 title('Query result'),
138 [ \query_statistics([count(Count)|Options], triples),
139 \consult_result_table(Triples, Options)
140 ]).
141
142
143consult_result_table(Triples, Options) -->
144 html_requires(css('rdf.css')),
145 html(table([ class(block)
146 ],
147 [ tr([th('Subject'), th('Predicate'), th('Object')])
148 | \triples(Triples, Options, odd)
149 ])).
150
151triples([], _, _) -->
152 [].
153triples([H|T], Options, Class) -->
154 { odd_even(Class, NextClass) },
155 triple(H, Options, Class),
156 triples(T, Options, NextClass).
157
158triple(rdf(S,P,O), Options, Class) -->
159 html(tr(class(Class),
160 [ td(\rdf_link(S, Options)),
161 td(\rdf_link(P, Options)),
162 td(\rdf_link(O, Options))])).
170query_statistics(Options, Units) -->
171 { memberchk(cputime(CPU), Options),
172 memberchk(count(Count), Options)
173 }, !,
174 html(p(class(msg_informational),
175 'Query completed in ~3f seconds ~D ~w'-[CPU, Count, Units])).
176query_statistics(_, _) -->
177 [].
181new_query -->
182 { http_link_to_id(query_form, [], QueryForm)
183 },
184 html([ br(clear(all)),
185 a([class('new-query'), href(QueryForm)], 'New query')
186 ])
Write query-results as HTML table.
This module writes a SPARQL-table as an HTML table. It acts as a hook into
rdf_io.pl
. */