1:- module(
    2  uriparser,
    3  [
    4    check_iri/1,   % +Iri
    5    check_uri/1,   % +Uri
    6    is_http_uri/1, % @Term
    7    is_iri/1,      % @Term
    8    is_uri/1,      % @Term
    9    resolve_uri/3, % +Base, +Relative, ?Absolute
   10    uri_scheme/1   % ?Scheme
   11  ]
   12).   13:- reexport(library(uri)).

Prolog uriparser binding

*/

   19:- use_foreign_library(foreign(uriparser)).
 check_iri(+Iri:atom) is semidet
Succeeds iff `Iri' is an absolute IRI.

TODO: Only checking for URI compliance ATM.

   31check_iri(Iri) :-
   32  uri_iri(Uri, Iri),
   33  check_uri(Uri).
 check_uri(+Uri:atom) is semidet
Succeeds iff `Uri' is an absolute URI.
throws
- existence_error(uri_scheme,Scheme:atom)
   43check_uri(Uri) :-
   44  uri_components(Uri, uri_components(Scheme,Auth,Path,_,_)),
   45  check_scheme_(Scheme, Uri),
   46  scheme_specific_checks(Uri, Scheme, Auth, Path),
   47  is_uri_(Uri).
   48
   49check_scheme_(Scheme, _) :-
   50  uri_scheme(Scheme), !.
   51check_scheme_(Schema, Uri) :-
   52  throw(error(existence_error(uri_scheme,Schema),Uri)).
   53
   54scheme_specific_checks(_, Scheme, Auth, Path) :-
   55  (   % URI schemes that require a ground authority component.
   56      memberchk(Scheme, [http,https])
   57  ->  ground(Auth)
   58  ;   % URI schemes that require a ground path component.
   59      memberchk(Scheme, [file,mailto,urn])
   60  ->  ground(Path)
   61  ;   true
   62  ), !.
   63scheme_specific_checks(Uri, _, _, _) :-
   64  syntax_error(grammar(uri,Uri)).
 is_http_uri(@Term) is semidet
Succeeds iff Term is an atom that conforms to the URI grammar.
   72is_http_uri(Uri) :-
   73  is_uri(Uri),
   74  uri_components(Uri, Comps),
   75  uri_data(scheme, Comps, Scheme),
   76  memberchk(Scheme, [http,https]).
 is_iri(@Term) is semidet
   82is_iri(Term) :-
   83  catch(check_iri(Term), E, print_message(warning, E)),
   84  var(E).
 is_uri(@Term) is semidet
   90is_uri(Term) :-
   91  catch(check_uri(Term), E, print_message(warning, E)),
   92  var(E).
 resolve_uri(+Base:atom, +Relative:atom, +Absolute:atom) is semidet
resolve_uri(+Base:atom, +Relative:atom, -Absolute:atom) is det
   99resolve_uri(Base, Relative, Absolute) :-
  100  resolve_uri_(Base, Relative, Absolute).
 uri_scheme(+Schema:atom) is semidet
uri_scheme(-Schema:atom) is nondet
Succeeds for all and only atoms that denote an URI schema as registered by IANA.
version
- Last synchronized on 2020-04-13 with the following code:
[library(http/http_open)].
http_open('https://www.iana.org/assignments/uri-schemes/uri-schemes-1.csv', In, []),
csv_read_stream(In, Rows, []),
member(Row, Rows),
Row =.. [row,H|_],
write_canonical(H),
nl,
fail.
See also
- https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml).
  125uri_scheme(aaa).
  126uri_scheme(aaas).
  127uri_scheme(about).
  128uri_scheme(acap).
  129uri_scheme(acct).
  130uri_scheme(acd).
  131uri_scheme(acr).
  132uri_scheme(adiumxtra).
  133uri_scheme(adt).
  134uri_scheme(afp).
  135uri_scheme(afs).
  136uri_scheme(aim).
  137uri_scheme(amss).
  138uri_scheme(android).
  139uri_scheme(appdata).
  140uri_scheme(apt).
  141uri_scheme(ark).
  142uri_scheme(attachment).
  143uri_scheme(aw).
  144uri_scheme(barion).
  145uri_scheme(beshare).
  146uri_scheme(bitcoin).
  147uri_scheme(bitcoincash).
  148uri_scheme(blob).
  149uri_scheme(bolo).
  150uri_scheme(browserext).
  151uri_scheme(calculator).
  152uri_scheme(callto).
  153uri_scheme(cap).
  154uri_scheme(cast).
  155uri_scheme(casts).
  156uri_scheme(chrome).
  157uri_scheme('chrome-extension').
  158uri_scheme(cid).
  159uri_scheme(coap).
  160uri_scheme('coap+tcp').
  161uri_scheme('coap+ws').
  162uri_scheme(coaps).
  163uri_scheme('coaps+tcp').
  164uri_scheme('coaps+ws').
  165uri_scheme('com-eventbrite-attendee').
  166uri_scheme(content).
  167uri_scheme(conti).
  168uri_scheme(crid).
  169uri_scheme(cvs).
  170uri_scheme(dab).
  171uri_scheme(data).
  172uri_scheme(dav).
  173uri_scheme(diaspora).
  174uri_scheme(dict).
  175uri_scheme(did).
  176uri_scheme(dis).
  177uri_scheme('dlna-playcontainer').
  178uri_scheme('dlna-playsingle').
  179uri_scheme(dns).
  180uri_scheme(dntp).
  181uri_scheme(dpp).
  182uri_scheme(drm).
  183uri_scheme(drop).
  184uri_scheme(dtmi).
  185uri_scheme(dtn).
  186uri_scheme(dvb).
  187uri_scheme(ed2k).
  188uri_scheme(elsi).
  189uri_scheme(example).
  190uri_scheme(facetime).
  191uri_scheme(fax).
  192uri_scheme(feed).
  193uri_scheme(feedready).
  194uri_scheme(file).
  195uri_scheme(filesystem).
  196uri_scheme(finger).
  197uri_scheme('first-run-pen-experience').
  198uri_scheme(fish).
  199uri_scheme(fm).
  200uri_scheme(ftp).
  201uri_scheme('fuchsia-pkg').
  202uri_scheme(geo).
  203uri_scheme(gg).
  204uri_scheme(git).
  205uri_scheme(gizmoproject).
  206uri_scheme(go).
  207uri_scheme(gopher).
  208uri_scheme(graph).
  209uri_scheme(gtalk).
  210uri_scheme(h323).
  211uri_scheme(ham).
  212uri_scheme(hcap).
  213uri_scheme(hcp).
  214uri_scheme(http).
  215uri_scheme(https).
  216uri_scheme(hxxp).
  217uri_scheme(hxxps).
  218uri_scheme(hydrazone).
  219uri_scheme(iax).
  220uri_scheme(icap).
  221uri_scheme(icon).
  222uri_scheme(im).
  223uri_scheme(imap).
  224uri_scheme(info).
  225uri_scheme(iotdisco).
  226uri_scheme(ipn).
  227uri_scheme(ipp).
  228uri_scheme(ipps).
  229uri_scheme(irc).
  230uri_scheme(irc6).
  231uri_scheme(ircs).
  232uri_scheme(iris).
  233uri_scheme('iris.beep').
  234uri_scheme('iris.lwz').
  235uri_scheme('iris.xpc').
  236uri_scheme('iris.xpcs').
  237uri_scheme(isostore).
  238uri_scheme(itms).
  239uri_scheme(jabber).
  240uri_scheme(jar).
  241uri_scheme(jms).
  242uri_scheme(keyparc).
  243uri_scheme(lastfm).
  244uri_scheme(ldap).
  245uri_scheme(ldaps).
  246uri_scheme(leaptofrogans).
  247uri_scheme(lorawan).
  248uri_scheme(lvlt).
  249uri_scheme(magnet).
  250uri_scheme(mailserver).
  251uri_scheme(mailto).
  252uri_scheme(maps).
  253uri_scheme(market).
  254uri_scheme(message).
  255uri_scheme('microsoft.windows.camera').
  256uri_scheme('microsoft.windows.camera.multipicker').
  257uri_scheme('microsoft.windows.camera.picker').
  258uri_scheme(mid).
  259uri_scheme(mms).
  260uri_scheme(modem).
  261uri_scheme(mongodb).
  262uri_scheme(moz).
  263uri_scheme('ms-access').
  264uri_scheme('ms-browser-extension').
  265uri_scheme('ms-calculator').
  266uri_scheme('ms-drive-to').
  267uri_scheme('ms-enrollment').
  268uri_scheme('ms-excel').
  269uri_scheme('ms-eyecontrolspeech').
  270uri_scheme('ms-gamebarservices').
  271uri_scheme('ms-gamingoverlay').
  272uri_scheme('ms-getoffice').
  273uri_scheme('ms-help').
  274uri_scheme('ms-infopath').
  275uri_scheme('ms-inputapp').
  276uri_scheme('ms-lockscreencomponent-config').
  277uri_scheme('ms-media-stream-id').
  278uri_scheme('ms-mixedrealitycapture').
  279uri_scheme('ms-mobileplans').
  280uri_scheme('ms-officeapp').
  281uri_scheme('ms-people').
  282uri_scheme('ms-project').
  283uri_scheme('ms-powerpoint').
  284uri_scheme('ms-publisher').
  285uri_scheme('ms-restoretabcompanion').
  286uri_scheme('ms-screenclip').
  287uri_scheme('ms-screensketch').
  288uri_scheme('ms-search').
  289uri_scheme('ms-search-repair').
  290uri_scheme('ms-secondary-screen-controller').
  291uri_scheme('ms-secondary-screen-setup').
  292uri_scheme('ms-settings').
  293uri_scheme('ms-settings-airplanemode').
  294uri_scheme('ms-settings-bluetooth').
  295uri_scheme('ms-settings-camera').
  296uri_scheme('ms-settings-cellular').
  297uri_scheme('ms-settings-cloudstorage').
  298uri_scheme('ms-settings-connectabledevices').
  299uri_scheme('ms-settings-displays-topology').
  300uri_scheme('ms-settings-emailandaccounts').
  301uri_scheme('ms-settings-language').
  302uri_scheme('ms-settings-location').
  303uri_scheme('ms-settings-lock').
  304uri_scheme('ms-settings-nfctransactions').
  305uri_scheme('ms-settings-notifications').
  306uri_scheme('ms-settings-power').
  307uri_scheme('ms-settings-privacy').
  308uri_scheme('ms-settings-proximity').
  309uri_scheme('ms-settings-screenrotation').
  310uri_scheme('ms-settings-wifi').
  311uri_scheme('ms-settings-workplace').
  312uri_scheme('ms-spd').
  313uri_scheme('ms-sttoverlay').
  314uri_scheme('ms-transit-to').
  315uri_scheme('ms-useractivityset').
  316uri_scheme('ms-virtualtouchpad').
  317uri_scheme('ms-visio').
  318uri_scheme('ms-walk-to').
  319uri_scheme('ms-whiteboard').
  320uri_scheme('ms-whiteboard-cmd').
  321uri_scheme('ms-word').
  322uri_scheme(msnim).
  323uri_scheme(msrp).
  324uri_scheme(msrps).
  325uri_scheme(mss).
  326uri_scheme(mtqp).
  327uri_scheme(mumble).
  328uri_scheme(mupdate).
  329uri_scheme(mvn).
  330uri_scheme(news).
  331uri_scheme(nfs).
  332uri_scheme(ni).
  333uri_scheme(nih).
  334uri_scheme(nntp).
  335uri_scheme(notes).
  336uri_scheme(ocf).
  337uri_scheme(oid).
  338uri_scheme(onenote).
  339uri_scheme('onenote-cmd').
  340uri_scheme(opaquelocktoken).
  341uri_scheme(openpgp4fpr).
  342uri_scheme(pack).
  343uri_scheme(palm).
  344uri_scheme(paparazzi).
  345uri_scheme(payment).
  346uri_scheme(payto).
  347uri_scheme(pkcs11).
  348uri_scheme(platform).
  349uri_scheme(pop).
  350uri_scheme(pres).
  351uri_scheme(prospero).
  352uri_scheme(proxy).
  353uri_scheme(pwid).
  354uri_scheme(psyc).
  355uri_scheme(pttp).
  356uri_scheme(qb).
  357uri_scheme(query).
  358uri_scheme('quic-transport').
  359uri_scheme(redis).
  360uri_scheme(rediss).
  361uri_scheme(reload).
  362uri_scheme(res).
  363uri_scheme(resource).
  364uri_scheme(rmi).
  365uri_scheme(rsync).
  366uri_scheme(rtmfp).
  367uri_scheme(rtmp).
  368uri_scheme(rtsp).
  369uri_scheme(rtsps).
  370uri_scheme(rtspu).
  371uri_scheme(secondlife).
  372uri_scheme(service).
  373uri_scheme(session).
  374uri_scheme(sftp).
  375uri_scheme(sgn).
  376uri_scheme(shttp).
  377uri_scheme(sieve).
  378uri_scheme(simpleledger).
  379uri_scheme(sip).
  380uri_scheme(sips).
  381uri_scheme(skype).
  382uri_scheme(smb).
  383uri_scheme(sms).
  384uri_scheme(smtp).
  385uri_scheme(snews).
  386uri_scheme(snmp).
  387uri_scheme('soap.beep').
  388uri_scheme('soap.beeps').
  389uri_scheme(soldat).
  390uri_scheme(spiffe).
  391uri_scheme(spotify).
  392uri_scheme(ssh).
  393uri_scheme(steam).
  394uri_scheme(stun).
  395uri_scheme(stuns).
  396uri_scheme(submit).
  397uri_scheme(svn).
  398uri_scheme(tag).
  399uri_scheme(teamspeak).
  400uri_scheme(tel).
  401uri_scheme(teliaeid).
  402uri_scheme(telnet).
  403uri_scheme(tftp).
  404uri_scheme(things).
  405uri_scheme(thismessage).
  406uri_scheme(tip).
  407uri_scheme(tn3270).
  408uri_scheme(tool).
  409uri_scheme(turn).
  410uri_scheme(turns).
  411uri_scheme(tv).
  412uri_scheme(udp).
  413uri_scheme(unreal).
  414uri_scheme(urn).
  415uri_scheme(ut2004).
  416uri_scheme('v-event').
  417uri_scheme(vemmi).
  418uri_scheme(ventrilo).
  419uri_scheme(videotex).
  420uri_scheme(vnc).
  421uri_scheme('view-source').
  422uri_scheme(wais).
  423uri_scheme(webcal).
  424uri_scheme(wpid).
  425uri_scheme(ws).
  426uri_scheme(wss).
  427uri_scheme(wtai).
  428uri_scheme(wyciwyg).
  429uri_scheme(xcon).
  430uri_scheme('xcon-userid').
  431uri_scheme(xfire).
  432uri_scheme('xmlrpc.beep').
  433uri_scheme('xmlrpc.beeps').
  434uri_scheme(xmpp).
  435uri_scheme(xri).
  436uri_scheme(ymsgr).
  437uri_scheme('z39.50').
  438uri_scheme('z39.50r').
  439uri_scheme('z39.50s')