1:- module(
    2  rdf_prefix,
    3  [
    4    assert_prefixes/1,       % +File
    5   %rdf_equal/2,             % +Term1, +Term2
    6    rdf_prefix/1,            % ?Alias
    7   %rdf_prefix/2,            % ?Alias, ?Prefix
    8   %rdf_prefix_any/2,        % +Abbr, -PrologTerm
    9    rdf_prefix_append/2,     % +Ls, -L
   10    rdf_prefix_append/3,     % +L1, +L2, -L
   11   %rdf_prefix_iri/2,        % +Abbr, -Iri
   12    rdf_prefix_iri/3,        % ?Alias, ?Local, ?Iri
   13    rdf_prefix_map/1,        % -Alias2Prefix
   14    rdf_prefix_maplist/2,    % :Goal_1, +Args1
   15    rdf_prefix_maplist/3,    % :Goal_2, +Args1, +Args2
   16    rdf_prefix_maplist/4,    % :Goal_3, +Args1, +Args2, +Args3
   17    rdf_prefix_member/2,     % ?Elem, +L
   18    rdf_prefix_memberchk/2,  % ?Elem, +L
   19    rdf_prefix_selectchk/3,  % +Elem, +L, -Rest
   20   %rdf_prefix_term/2,       % +Abbr, -Term
   21    rdf_register_prefix/1,   % +PairOrAlias
   22   %rdf_register_prefix/2,   % +Alias, +Prefix
   23   %rdf_register_prefix/3,   % +Alias, +Prefix, +Options
   24    rdf_register_prefixes/0
   25  ]
   26).   27:- reexport(library(semweb/rdf_db), [
   28     rdf_equal/2
   29   ]).   30:- reexport(library(semweb/rdf_prefixes), [
   31     rdf_current_prefix/2 as rdf_prefix,
   32     rdf_global_id/2 as rdf_prefix_iri,
   33     rdf_global_object/2 as rdf_prefix_term,
   34     rdf_global_term/2 as rdf_prefix_any,
   35     rdf_register_prefix/2,
   36     rdf_register_prefix/3,
   37     (rdf_meta)/1,
   38     op(1150, fx, (rdf_meta))
   39   ]).

RDF prefix support

This module extends module `rdf_prefixes' that is part of the standards SWI-Prolog distribution.

To be done
- There is currently no way to retract prefix declarations. */
   49:- use_module(library(aggregate)).   50:- use_module(library(apply)).   51:- use_module(library(assoc)).   52:- use_module(library(error)).   53:- use_module(library(uri)).   54:- use_module(library(yall)).   55
   56:- use_module(library(dcg)).   57:- use_module(library(file_ext)).   58
   59:- initialization
   60   init_rdf_prefix.   61
   62:- meta_predicate
   63    rdf_prefix_maplist(1, +),
   64    rdf_prefix_maplist(2, +, +),
   65    rdf_prefix_maplist(3, +, +, +).   66
   67:- rdf_meta
   68   rdf_prefix_append(t, t),   rdf_prefix_append(t, t, t),   rdf_prefix_maplist(:, t),   rdf_prefix_maplist(:, t, t),   rdf_prefix_maplist(:, t, t, t),   rdf_prefix_member(t, t),   rdf_prefix_memberchk(t, t),   rdf_prefix_selectchk(t, t, t).
 assert_prefixes(+File:atom) is det
Asserts prefixes that appear at the top of the given N-Quads, N-Triples, TriG, or Turtle file.
   86assert_prefixes(File) :-
   87  read_from_file(File, assert_prefixes_).
   88
   89assert_prefixes_(In) :-
   90  repeat,
   91  read_line_to_string(In, String),
   92  (   String == end_of_file
   93  ->  !, fail
   94  ;   once(string_phrase(prefix_declaration_(Alias, Prefix), String)),
   95      rdf_register_prefix(Alias, Prefix)
   96  ->  fail
   97  ;   string_phrase(whites, String)
   98  ->  fail
   99  ;   !, true
  100  ).
  101
  102prefix_declaration_(Alias, Prefix) -->
  103  whites,
  104  "prefix",
  105  whites,
  106  '...'(Codes1),
  107  ":", !,
  108  {atom_codes(Alias, Codes1)},
  109  whites,
  110  "<",
  111  '...'(Codes2),
  112  ">", !,
  113  {atom_codes(Prefix, Codes2)}.
 rdf_prefix(+Alias:atom) is semidet
rdf_prefix(-Alias:atom) is nondet
  120rdf_prefix(Alias) :-
  121  rdf_prefix(Alias, _).
 rdf_prefix_append(+Lists:list(list), +List:list) is semidet
rdf_prefix_append(+Lists:list(list), -List:list) is det
  128rdf_prefix_append(Ls, L) :-
  129  append(Ls, L).
  130
  131
  132rdf_prefix_append(L1, L2, L) :-
  133  append(L1, L2, L).
 rdf_prefix_iri(-Alias:atom, -Local:atom, +Iri:atom) is det
rdf_prefix_iri(+Alias:atom, +Local:atom, -Iri:atom) is det
rdf_prefix_iri(+Alias:atom, +Local:list(atom), -Iri:atom) is det
See also
- Like rdf_prefix_iri/2, but works with maplist/3.
  143rdf_prefix_iri(Alias, Local0, Iri) :-
  144  (   var(Local0)
  145  ->  Local = Local0
  146  ;   atom(Local0)
  147  ->  Local = Local0
  148  ;   atomic_list_concat(Local0, /, Local)
  149  ),
  150  rdf_prefix_iri(Alias:Local, Iri).
 rdf_prefix_map(-Alias2Prefix:assoc(atom,iri)) is det
  156rdf_prefix_map(Alias2Prefix) :-
  157  aggregate_all(
  158    set(Alias-Prefix),
  159    rdf_prefix(Alias, Prefix),
  160    Pairs
  161  ),
  162  ord_list_to_assoc(Pairs, Alias2Prefix).
 rdf_prefix_maplist(:Goal_1, +Args1:list) is det
 rdf_prefix_maplist(:Goal_2, +Args1:list, +Args2:list) is det
 rdf_prefix_maplist(:Goal_3, +Args1:list, +Args2:list, +Args3:list) is det
  170rdf_prefix_maplist(Goal_1, L1) :-
  171  maplist(Goal_1, L1).
  172
  173
  174rdf_prefix_maplist(Goal_2, L1, L2) :-
  175  maplist(Goal_2, L1, L2).
  176
  177
  178rdf_prefix_maplist(Goal_3, L1, L2, L3) :-
  179  maplist(Goal_3, L1, L2, L3).
 rdf_prefix_member(?Elem, +L:list) is nondet
Calls member/2 under RDF prefix expansion.
  187rdf_prefix_member(Elem, L) :-
  188  member(Elem, L).
 rdf_prefix_memberchk(?Elem, +L:list) is nondet
Calls memberchk/2 under RDF prefix expansion.
  196rdf_prefix_memberchk(Elem, L) :-
  197  memberchk(Elem, L).
 rdf_prefix_selectchk(+Elem, +L:list, -Rest:list) is det
Calls selectchk/3 under RDF prefix expansion.
  205rdf_prefix_selectchk(Elem, L, Rest) :-
  206  selectchk(Elem, L, Rest).
 rdf_register_prefix(+PairOrAlias:or([atom,pair(atom)])) is det
Syntactic variant of rdf_register_prefix/2 that allows for pair notation (i.e., pairs of the form `Alias-Prefix'), which in convenient in combination with maplist/2.
  216rdf_register_prefix(Alias-Prefix) :- !,
  217  rdf_register_prefix(Alias, Prefix).
  218rdf_register_prefix(Alias) :-
  219  prefix_(Alias, Prefix),
  220  rdf_register_prefix(Alias-Prefix).
 rdf_register_prefixes is det
Registers RDF prefixes that are standardized and/or commonly used in the LOD Cloud.
  229rdf_register_prefixes :-
  230  rdf_register_dbpedia_prefixes,
  231  forall(prefix_(Alias,Iri), rdf_register_prefix(Alias, Iri)).
  232
  233rdf_register_dbpedia_prefixes :-
  234  forall(ltag_(LTag), rdf_register_dbpedia_prefixes(LTag)).
  235
  236rdf_register_dbpedia_prefixes(LTag) :-
  237  atomic_list_concat([LTag,dbpedia,org], ., DBpediaAuthority),
  238  % category prefix
  239  atomic_list_concat([LTag,dbc], ., Alias1),
  240  uri_components(Uri1, uri_components(http,DBpediaAuthority,'/resource/Category:',_,_)),
  241  rdf_register_prefix(Alias1, Uri1),
  242  % property prefix
  243  atomic_list_concat([LTag,dbp], ., Alias2),
  244  uri_components(Uri2, uri_components(http,DBpediaAuthority,'/property/',_,_)),
  245  rdf_register_prefix(Alias2, Uri2),
  246  % resource prefix
  247  atomic_list_concat([LTag,dbr], ., Alias3),
  248  uri_components(Uri3, uri_components(http,DBpediaAuthority,'/resource/',_,_)),
  249  rdf_register_prefix(Alias3, Uri3),
  250  % Wikidata
  251  atomic_list_concat([LTag,wikidata], ., Alias4),
  252  atomic_list_concat([LTag,wikipedia,org], ., WikidataAuthority),
  253  uri_components(Uri4, uri_components(http,WikidataAuthority,'/wiki/',_,_)),
  254  rdf_register_prefix(Alias4, Uri4).
  255
  256
  257
  258
  259
  260% LANGUAGE TAGS THAT ARE USED IN DBPEDIA %
  261
  262ltag_(ab).
  263ltag_(ace).
  264ltag_(af).
  265ltag_(als).
  266ltag_(am).
  267ltag_(an).
  268ltag_(ang).
  269ltag_(ar).
  270ltag_(arc).
  271ltag_(arz).
  272ltag_(as).
  273ltag_(ast).
  274ltag_(av).
  275ltag_(ay).
  276ltag_(az).
  277ltag_(ba).
  278ltag_(bar).
  279ltag_('bat-smg').
  280ltag_(bat_smg).
  281ltag_(bcl).
  282ltag_(bcl_smg).
  283ltag_(be).
  284ltag_('be-x-old').
  285ltag_(be_x_old).
  286ltag_(bg).
  287ltag_(bi).
  288ltag_(bjn).
  289ltag_(bm).
  290ltag_(bn).
  291ltag_(bo).
  292ltag_(bpy).
  293ltag_(br).
  294ltag_(bs).
  295ltag_(bxr).
  296ltag_(ca).
  297ltag_(cdo).
  298ltag_(ce).
  299ltag_(ceb).
  300ltag_(chr).
  301ltag_(chy).
  302ltag_(ckb).
  303ltag_(co).
  304ltag_(commons).
  305ltag_(cr).
  306ltag_(crh).
  307ltag_(cs).
  308ltag_(csb).
  309ltag_(cv).
  310ltag_(cy).
  311ltag_(da).
  312ltag_(de).
  313ltag_(diq).
  314ltag_(dv).
  315ltag_(ee).
  316ltag_(el).
  317ltag_(en).
  318ltag_(eo).
  319ltag_(es).
  320ltag_(et).
  321ltag_(ext).
  322ltag_(eu).
  323ltag_(fa).
  324ltag_(fi).
  325ltag_(fiu).
  326ltag_(fiu_vro).
  327ltag_(fj).
  328ltag_(fo).
  329ltag_(fr).
  330ltag_(frp).
  331ltag_(frr).
  332ltag_(fy).
  333ltag_(ga).
  334ltag_(gan).
  335ltag_(gd).
  336ltag_(gl).
  337ltag_(gn).
  338ltag_(got).
  339ltag_(gu).
  340ltag_(gv).
  341ltag_(ha).
  342ltag_(hak).
  343ltag_(he).
  344ltag_(hi).
  345ltag_(hif).
  346ltag_(hr).
  347ltag_(hsb).
  348ltag_(ht).
  349ltag_(hu).
  350ltag_(hy).
  351ltag_(ia).
  352ltag_(id).
  353ltag_(ig).
  354ltag_(ilo).
  355ltag_(io).
  356ltag_(is).
  357ltag_(it).
  358ltag_(ja).
  359ltag_(jbo).
  360ltag_(jv).
  361ltag_(ka).
  362ltag_(kaa).
  363ltag_(kab).
  364ltag_(kbd).
  365ltag_(ki).
  366ltag_(kk).
  367ltag_(kl).
  368ltag_(km).
  369ltag_(kn).
  370ltag_(ko).
  371ltag_(koi).
  372ltag_(ks).
  373ltag_(ku).
  374ltag_(kv).
  375ltag_(ky).
  376ltag_(la).
  377ltag_(lb).
  378ltag_(lbe).
  379ltag_(lez).
  380ltag_(li).
  381ltag_(lmo).
  382ltag_(ln).
  383ltag_(lt).
  384ltag_(lv).
  385ltag_(map_bms).
  386ltag_(mg).
  387ltag_(mhr).
  388ltag_(mk).
  389ltag_(ml).
  390ltag_(mn).
  391ltag_(mr).
  392ltag_(mrj).
  393ltag_(ms).
  394ltag_(my).
  395ltag_(na).
  396ltag_(nah).
  397ltag_(nap).
  398ltag_(nds).
  399ltag_(nds_nl).
  400ltag_(ne).
  401ltag_(new).
  402ltag_(nl).
  403ltag_(nn).
  404ltag_(no).
  405ltag_(nrm).
  406ltag_(nv).
  407ltag_(oc).
  408ltag_(or).
  409ltag_(pa).
  410ltag_(pam).
  411ltag_(pcd).
  412ltag_(pms).
  413ltag_(pnb).
  414ltag_(pl).
  415ltag_(pt).
  416ltag_(qu).
  417ltag_(ro).
  418ltag_('roa-rup').
  419ltag_(ru).
  420ltag_(rw).
  421ltag_(sa).
  422ltag_(sah).
  423ltag_(scn).
  424ltag_(sco).
  425ltag_(se).
  426ltag_(sh).
  427ltag_(si).
  428ltag_(simple).
  429ltag_(sk).
  430ltag_(sl).
  431ltag_(sm).
  432ltag_(sn).
  433ltag_(so).
  434ltag_(sq).
  435ltag_(sr).
  436ltag_(srn).
  437ltag_(su).
  438ltag_(sv).
  439ltag_(sw).
  440ltag_(szl).
  441ltag_(ta).
  442ltag_(te).
  443ltag_(tg).
  444ltag_(th).
  445ltag_(tl).
  446ltag_(to).
  447ltag_(tpi).
  448ltag_(tr).
  449ltag_(tt).
  450ltag_(tum).
  451ltag_(udm).
  452ltag_(ug).
  453ltag_(uk).
  454ltag_(ur).
  455ltag_(uz).
  456ltag_(vec).
  457ltag_(vi).
  458ltag_(vo).
  459ltag_(vls).
  460ltag_(wa).
  461ltag_(war).
  462ltag_(wo).
  463ltag_(wuu).
  464ltag_(xal).
  465ltag_(yi).
  466ltag_(yo).
  467ltag_(yoh).
  468ltag_(zh).
  469ltag_('zh-min-nan').
  470ltag_(zh_min_nan).
  471ltag_('zh-yue').
  472ltag_(zh_yue).
  473
  474
  475
  476
  477
  478% COMMON AND/OR STANDARDIZED RDF PREFIXES %
  479
  480prefix_(Alias, Prefix) :-
  481  rdf_db:ns(Alias, Prefix).
  482prefix_(aat, 'http://vocab.getty.edu/aat/').
  483prefix_(bag, 'https://bag2.basisregistraties.overheid.nl/bag/def/').
  484prefix_(bgt, 'https://bgt.basisregistraties.overheid.nl/bgt/def/').
  485prefix_(bibframe, 'http://id.loc.gov/ontologies/bibframe/').
  486prefix_(bibo, 'http://purl.org/ontology/bibo/').
  487prefix_(bnode, 'https://lodlaundromat.org/.well-known/genid/').
  488prefix_(cms, 'http://SemanticCMS.cc/vocab/').
  489prefix_(crs, 'http://www.opengis.net/def/crs/OGC/1.3/').
  490prefix_(csvw, 'http://www.w3.org/ns/csvw#').
  491prefix_(cyc, 'http://sw.opencyc.org/concept/').
  492prefix_(dawgt, 'http://www.w3.org/2001/sw/DataAccess/tests/test-dawg#').
  493prefix_(dbc, 'http://dbpedia.org/resource/Category:').
  494prefix_(dbd, 'http://dbpedia.org/datatype/').
  495prefix_(dbo, 'http://dbpedia.org/ontology/').
  496prefix_(dbp, 'http://dbpedia.org/property/').
  497prefix_(dbr, 'http://dbpedia.org/resource/').
  498prefix_(dby, 'http://dbpedia.org/class/yago/').
  499prefix_(dcat, 'http://www.w3.org/ns/dcat#').
  500prefix_(dce, 'http://purl.org/dc/elements/1.1/').
  501prefix_(dcm, 'http://purl.org/dc/dcmitype/').
  502prefix_(dct, 'http://purl.org/dc/terms/').
  503prefix_(dolce, 'http://www.ontologydesignpatterns.org/ont/dul/DUL.owl#').
  504prefix_(dqv, 'http://www.w3.org/ns/dqv#').
  505prefix_(earl, 'http://www.w3.org/ns/earl#').
  506prefix_(ex, 'https://example.org/').
  507prefix_(fabio, 'http://purl.org/spar/fabio/').
  508prefix_(fb, 'http://ogp.me/ns/fb#').
  509%       foaf
  510prefix_(freebase, 'http://rdf.freebase.com/ns/').
  511prefix_(fn, 'http://www.w3.org/2005/xpath-functions#').
  512prefix_(formats, 'http://www.w3.org/ns/formats/').
  513prefix_(geo, 'http://www.opengis.net/ont/geosparql#').
  514prefix_(geof, 'http://www.opengis.net/def/function/geosparql/').
  515prefix_(geonames, 'http://sws.geonames.org/').
  516prefix_(geor, 'http://www.opengis.net/def/rule/geosparql/').
  517prefix_(gg, 'http://www.gemeentegeschiedenis.nl/gg-schema#').
  518prefix_(gml, 'http://www.opengis.net/ont/gml#').
  519prefix_(gr, 'http://purl.org/goodrelations/v1#').
  520prefix_(grddl, 'http://www.w3.org/2003/g/data-view#').
  521prefix_(gvp, 'http://vocab.getty.edu/ontology#').
  522prefix_(http, 'http://www.w3.org/2011/http#').
  523prefix_(hydra, 'http://www.w3.org/ns/hydra/core#').
  524prefix_(ical, 'http://www.w3.org/2002/12/cal/icaltzd#').
  525prefix_(iolite, 'http://www.ontologydesignpatterns.org/ont/dul/IOLite.owl#').
  526prefix_(ldm, 'https://ldm.cc/').
  527prefix_(lexvo, 'http://lexvo.org/ontology#').
  528prefix_(ll, 'https://lodlaundromat.org/def/').
  529prefix_(lmm1, 'http://www.ontologydesignpatterns.org/ont/lmm/LMM_L1.owl#').
  530prefix_(ma, 'http://www.w3.org/ns/ma-ont#').
  531prefix_(mf, 'http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#').
  532prefix_(nen3610, 'http://definities.geostandaarden.nl/def/nen3610#').
  533prefix_(nyt, 'http://data.nytimes.com/').
  534prefix_(ontopic, 'http://www.ontologydesignpatterns.org/ont/dul/ontopic.owl#').
  535prefix_(openlinks, 'http://www.openlinksw.com/schemas/virtrdf#').
  536prefix_(orcid, 'http://orcid.org/').
  537prefix_(org, 'http://www.w3.org/ns/org#').
  538%       owl
  539prefix_(own16, 'http://www.ontologydesignpatterns.org.it/ont/own/own16.owl#').
  540prefix_(pnv, 'https://w3id.org/pnv#').
  541prefix_(prov, 'http://www.w3.org/ns/prov#').
  542prefix_(qb, 'http://purl.org/linked-data/cube#').
  543prefix_(qsim, 'https://krr.triply.cc/webqr/qsim/def/').
  544prefix_(qt, 'http://www.w3.org/2001/sw/DataAccess/tests/test-query#').
  545%       rdf
  546prefix_(rdfa, 'http://www.w3.org/ns/rdfa#').
  547%       rdfs
  548prefix_(rdft, 'http://www.w3.org/ns/rdftest#').
  549%prefix_(relationship, 'http://purl.org/vocab/relationship/').
  550%prefix_(relationship, 'http://www.perceive.net/schemas/relationship/').
  551prefix_(rel, 'http://id.loc.gov/vocabulary/relators/').
  552prefix_(rif, 'http://www.w3.org/2007/rif#').
  553prefix_(role, 'http://www.w3.org/1999/xhtml/vocab#role').
  554prefix_(rr, 'http://www.w3.org/ns/r2rml#').
  555prefix_(sd, 'http://www.w3.org/ns/sparql-service-description#').
  556prefix_(sdo, 'https://schema.org/').
  557prefix_(sf, 'http://www.opengis.net/ont/sf#').
  558prefix_(sfn, ' http://www.w3.org/ns/sparql#').
  559prefix_(sh, 'http://www.w3.org/ns/shacl#').
  560prefix_(sioc, 'http://rdfs.org/sioc/ns#').
  561%       skos
  562prefix_(spitfire, 'http://spitfire-project.eu/ontology/ns/').
  563prefix_(skosxl, 'http://www.w3.org/2008/05/skos-xl#').
  564prefix_(time, 'http://www.w3.org/2006/time#').
  565prefix_(umbel, 'http://umbel.org/umbel#').
  566prefix_(uom, 'http://www.opengis.net/def/uom/OGC/1.0/').
  567prefix_(vann, 'http://purl.org/vocab/vann/').
  568prefix_(vcard, 'http://www.w3.org/2006/vcard/ns#').
  569prefix_(vo, 'http://open.vocab.org/terms/').
  570%       void
  571prefix_(wde, 'http://www.wikidata.org/entity/').
  572prefix_(wdp, 'http://www.wikidata.org/prop/direct/').
  573prefix_(wdr, 'http://www.w3.org/2007/05/powder#').
  574prefix_(wdrs, 'http://www.w3.org/2007/05/powder-s#').
  575prefix_(wgs84, 'http://www.w3.org/2003/01/geo/wgs84_pos#').
  576prefix_(wv, 'http://vocab.org/waiver/terms/norms').
  577prefix_(xhv, 'http://www.w3.org/1999/xhtml/vocab#').
  578prefix_(xml, 'http://www.w3.org/XML/1998/namespace').
  579%       xsd
  580prefix_(yago, 'http://yago-knowledge.org/resource/').
  581
  582
  583
  584
  585
  586% INITIALIZATION %
 init_rdf_prefix is det
Remove outdated RDF prefix declarations introduced in `library(semweb/rdf_prefixes)'.
  593init_rdf_prefix :-
  594  maplist(
  595    [Alias0]>>ignore(retract(rdf_db:ns(Alias0,_))),
  596    [dc,dcterms,eor,serql]
  597  )