:- module(waisda_search, []). :- use_module(library(http/html_write)). :- use_module(library(semweb/rdf_db)). :- use_module(library(semweb/rdfs)). :- use_module(components(yaz_video_item)). :- rdf_equal(pprime:'Video', Video), set_setting_default(search:target_class, Video). :- set_setting_default(search:pattern_literal, false). :- set_setting_default(search:pattern_resource, false). cliopatria:facet_weight(P, 0) :- rdf_equal(pprime:description,P), !. cliopatria:facet_weight(P, 0) :- rdf_equal(pprime:duration,P), !. cliopatria:facet_weight(P, 0) :- rdf_equal(pprime:source,P), !. cliopatria:search_pattern(Label, Target, [ rdf(TN, PN, literal(Value)), rdf(Target, P, TN) ]) :- rdf_equal(PN, rdf:value), rdf_equal(P, pprime:hasAnnotation), rdf(TN, PN, literal(exact(Label), Value)), rdf(Target, P, TN). cliopatria:search_pattern(Label, Target, [ rdf(Tag, PL, literal(Value)), rdf(TN, PN, Tag), rdf(Target, P, TN) ]) :- rdf_equal(PL, rdfs:label), rdf_equal(PN, rdf:value), rdf_equal(P, pprime:hasAnnotation), rdf(Tag, PL, literal(exact(Label), Value)), rdf(TN, PN, Tag), rdf(Target, P, TN). cliopatria:format_search_result(R, Query, Graph) --> { Query = query(Search,_,_,_,_,_,_), result_frame(R, Graph, Frame) }, html(div(class('result-item'), \yaz_video_result(R, [desc(true), query(Search), frame(Frame)]))). cliopatria:facet_weight(P, 0) :- rdf_equal(pprime:hasAnnotation, P). result_frame(R, Graph, Frame) :- rdf_equal(pprime:hasAnnotation, P), memberchk(rdf(R,P,Entry), Graph), rdf(Entry, pprime:videoPlayhead, literal(F0)), atom_number1(F0, F), ( rdf(Entry, pprime:typingDuration, literal(D0)), atom_number1(D0, D) -> Frame is (F-D)/1000 ; Frame is F/1000 ). result_frame(_, _, 5). atom_number1(N,N) :- number(N), !. atom_number1(A,N) :- atom_number(A,N).