kibi-swipl-linux-x64-gnu 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (550) hide show
  1. package/README.md +29 -0
  2. package/bin/swipl +0 -0
  3. package/bin/swipl-win +0 -0
  4. package/build-manifest.json +70 -0
  5. package/lib/cmake/swipl/SWIPLConfig.cmake +21 -0
  6. package/lib/cmake/swipl/SWIPLConfigVersion.cmake +65 -0
  7. package/lib/cmake/swipl/SWIPLTargets-release.cmake +28 -0
  8. package/lib/cmake/swipl/SWIPLTargets.cmake +109 -0
  9. package/lib/swipl/ABI +1 -0
  10. package/lib/swipl/LICENSE +41 -0
  11. package/lib/swipl/README.md +116 -0
  12. package/lib/swipl/app/README.md +25 -0
  13. package/lib/swipl/app/app.pl +87 -0
  14. package/lib/swipl/app/pack.pl +350 -0
  15. package/lib/swipl/app/qlf.pl +521 -0
  16. package/lib/swipl/app/splfr.pl +177 -0
  17. package/lib/swipl/app/sys.pl +310 -0
  18. package/lib/swipl/bin/swipl.home +1 -0
  19. package/lib/swipl/boot/apply.pl +73 -0
  20. package/lib/swipl/boot/attvar.pl +344 -0
  21. package/lib/swipl/boot/autoload.pl +1226 -0
  22. package/lib/swipl/boot/bags.pl +283 -0
  23. package/lib/swipl/boot/dcg.pl +388 -0
  24. package/lib/swipl/boot/dicts.pl +193 -0
  25. package/lib/swipl/boot/dwim.pl +485 -0
  26. package/lib/swipl/boot/engines.pl +152 -0
  27. package/lib/swipl/boot/expand.pl +1628 -0
  28. package/lib/swipl/boot/gc.pl +65 -0
  29. package/lib/swipl/boot/history.pl +304 -0
  30. package/lib/swipl/boot/init.pl +4682 -0
  31. package/lib/swipl/boot/iri.pl +64 -0
  32. package/lib/swipl/boot/license.pl +390 -0
  33. package/lib/swipl/boot/load.pl +81 -0
  34. package/lib/swipl/boot/messages.pl +2521 -0
  35. package/lib/swipl/boot/packs.pl +306 -0
  36. package/lib/swipl/boot/predopts.pl +154 -0
  37. package/lib/swipl/boot/qlf.pl +141 -0
  38. package/lib/swipl/boot/rc.pl +263 -0
  39. package/lib/swipl/boot/syspred.pl +1634 -0
  40. package/lib/swipl/boot/tabling.pl +2321 -0
  41. package/lib/swipl/boot/threads.pl +42 -0
  42. package/lib/swipl/boot/toplevel.pl +2248 -0
  43. package/lib/swipl/boot/topvars.pl +261 -0
  44. package/lib/swipl/boot.prc +0 -0
  45. package/lib/swipl/cmake/swipl.cmake +131 -0
  46. package/lib/swipl/customize/README.md +23 -0
  47. package/lib/swipl/customize/edit +101 -0
  48. package/lib/swipl/customize/init.pl +164 -0
  49. package/lib/swipl/demo/README.md +33 -0
  50. package/lib/swipl/demo/likes.pl +44 -0
  51. package/lib/swipl/doc/packages/examples/chr/bool.chr +281 -0
  52. package/lib/swipl/doc/packages/examples/chr/chrdif.chr +87 -0
  53. package/lib/swipl/doc/packages/examples/chr/chrfreeze.chr +6 -0
  54. package/lib/swipl/doc/packages/examples/chr/family.chr +116 -0
  55. package/lib/swipl/doc/packages/examples/chr/fib.chr +24 -0
  56. package/lib/swipl/doc/packages/examples/chr/fibonacci.chr +31 -0
  57. package/lib/swipl/doc/packages/examples/chr/gcd.chr +28 -0
  58. package/lib/swipl/doc/packages/examples/chr/leq.chr +34 -0
  59. package/lib/swipl/doc/packages/examples/chr/listdom.chr +138 -0
  60. package/lib/swipl/doc/packages/examples/chr/primes.chr +29 -0
  61. package/lib/swipl/doc/packages/examples/http/README.md +98 -0
  62. package/lib/swipl/doc/packages/examples/http/calc.pl +92 -0
  63. package/lib/swipl/doc/packages/examples/http/demo_body.pl +232 -0
  64. package/lib/swipl/doc/packages/examples/http/demo_client.pl +165 -0
  65. package/lib/swipl/doc/packages/examples/http/demo_daemon.pl +38 -0
  66. package/lib/swipl/doc/packages/examples/http/demo_files.pl +50 -0
  67. package/lib/swipl/doc/packages/examples/http/demo_hello.pl +15 -0
  68. package/lib/swipl/doc/packages/examples/http/demo_login.pl +280 -0
  69. package/lib/swipl/doc/packages/examples/http/demo_openid.pl +177 -0
  70. package/lib/swipl/doc/packages/examples/http/demo_pwp.pl +20 -0
  71. package/lib/swipl/doc/packages/examples/http/demo_rest.pl +56 -0
  72. package/lib/swipl/doc/packages/examples/http/demo_threads.pl +52 -0
  73. package/lib/swipl/doc/packages/examples/http/linux-init-script +126 -0
  74. package/lib/swipl/doc/packages/examples/http/pwp/context.pwp +23 -0
  75. package/lib/swipl/doc/packages/examples/http/pwp/index.pwp +25 -0
  76. package/lib/swipl/doc/packages/examples/http/pwp/pwp1.pwp +12 -0
  77. package/lib/swipl/doc/packages/examples/http/pwp/pwp2.pwp +10 -0
  78. package/lib/swipl/doc/packages/examples/http/pwp/pwp3.pwp +25 -0
  79. package/lib/swipl/doc/packages/examples/http/pwp/pwp4.pwp +23 -0
  80. package/lib/swipl/doc/packages/examples/http/pwp/pwp5.pwp +11 -0
  81. package/lib/swipl/doc/packages/examples/http/pwp/pwp6.pwp +3 -0
  82. package/lib/swipl/doc/packages/examples/http/pwp/pwp7.pwp +3 -0
  83. package/lib/swipl/doc/packages/examples/http/pwp/pwp8.pwp +3 -0
  84. package/lib/swipl/doc/packages/examples/http/pwp/pwpdb.pl +12 -0
  85. package/lib/swipl/doc/packages/examples/http/systemd-script.service +18 -0
  86. package/lib/swipl/doc/packages/examples/http/upstart-script.conf +20 -0
  87. package/lib/swipl/doc/packages/examples/plunit/read.pl +17 -0
  88. package/lib/swipl/doc/packages/examples/plunit/simple.pl +33 -0
  89. package/lib/swipl/doc/packages/examples/ssl/client.pl +83 -0
  90. package/lib/swipl/doc/packages/examples/ssl/etc/README +52 -0
  91. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.p12 +0 -0
  92. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-cert.pem +85 -0
  93. package/lib/swipl/doc/packages/examples/ssl/etc/client/client-key.pem +30 -0
  94. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/cacert.pem +82 -0
  95. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/careq.pem +18 -0
  96. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/crlnumber +1 -0
  97. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt +3 -0
  98. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/index.txt.attr +1 -0
  99. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7C.pem +85 -0
  100. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/newcerts/9DC08797A0F63F7D.pem +85 -0
  101. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/private/cakey.pem +30 -0
  102. package/lib/swipl/doc/packages/examples/ssl/etc/demoCA/serial +1 -0
  103. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-cert.pem +85 -0
  104. package/lib/swipl/doc/packages/examples/ssl/etc/server/server-key.pem +30 -0
  105. package/lib/swipl/doc/packages/examples/ssl/https.pl +267 -0
  106. package/lib/swipl/doc/packages/examples/ssl/server.pl +106 -0
  107. package/lib/swipl/include/SWI-Prolog.h +1544 -0
  108. package/lib/swipl/include/SWI-Stream.h +537 -0
  109. package/lib/swipl/include/Yap/YapInterface.h +283 -0
  110. package/lib/swipl/include/sicstus/sicstus.h +452 -0
  111. package/lib/swipl/lib/x86_64-linux/cgi.so +0 -0
  112. package/lib/swipl/lib/x86_64-linux/crypt.so +0 -0
  113. package/lib/swipl/lib/x86_64-linux/crypto4pl.so +0 -0
  114. package/lib/swipl/lib/x86_64-linux/double_metaphone.so +0 -0
  115. package/lib/swipl/lib/x86_64-linux/files.so +0 -0
  116. package/lib/swipl/lib/x86_64-linux/hashstream.so +0 -0
  117. package/lib/swipl/lib/x86_64-linux/http_stream.so +0 -0
  118. package/lib/swipl/lib/x86_64-linux/isub.so +0 -0
  119. package/lib/swipl/lib/x86_64-linux/json.so +0 -0
  120. package/lib/swipl/lib/x86_64-linux/libswipl.so.10 +0 -0
  121. package/lib/swipl/lib/x86_64-linux/mallocinfo.so +0 -0
  122. package/lib/swipl/lib/x86_64-linux/md54pl.so +0 -0
  123. package/lib/swipl/lib/x86_64-linux/memfile.so +0 -0
  124. package/lib/swipl/lib/x86_64-linux/ntriples.so +0 -0
  125. package/lib/swipl/lib/x86_64-linux/pcre4pl.so +0 -0
  126. package/lib/swipl/lib/x86_64-linux/porter_stem.so +0 -0
  127. package/lib/swipl/lib/x86_64-linux/process.so +0 -0
  128. package/lib/swipl/lib/x86_64-linux/prolog_stream.so +0 -0
  129. package/lib/swipl/lib/x86_64-linux/rdf_db.so +0 -0
  130. package/lib/swipl/lib/x86_64-linux/readutil.so +0 -0
  131. package/lib/swipl/lib/x86_64-linux/rlimit.so +0 -0
  132. package/lib/swipl/lib/x86_64-linux/sched.so +0 -0
  133. package/lib/swipl/lib/x86_64-linux/sgml2pl.so +0 -0
  134. package/lib/swipl/lib/x86_64-linux/sha4pl.so +0 -0
  135. package/lib/swipl/lib/x86_64-linux/snowball.so +0 -0
  136. package/lib/swipl/lib/x86_64-linux/socket.so +0 -0
  137. package/lib/swipl/lib/x86_64-linux/ssl4pl.so +0 -0
  138. package/lib/swipl/lib/x86_64-linux/streaminfo.so +0 -0
  139. package/lib/swipl/lib/x86_64-linux/syslog.so +0 -0
  140. package/lib/swipl/lib/x86_64-linux/time.so +0 -0
  141. package/lib/swipl/lib/x86_64-linux/turtle.so +0 -0
  142. package/lib/swipl/lib/x86_64-linux/uid.so +0 -0
  143. package/lib/swipl/lib/x86_64-linux/unix.so +0 -0
  144. package/lib/swipl/lib/x86_64-linux/uri.so +0 -0
  145. package/lib/swipl/lib/x86_64-linux/websocket.so +0 -0
  146. package/lib/swipl/lib/x86_64-linux/zlib4pl.so +0 -0
  147. package/lib/swipl/library/INDEX.pl +1020 -0
  148. package/lib/swipl/library/aggregate.pl +755 -0
  149. package/lib/swipl/library/ansi_term.pl +653 -0
  150. package/lib/swipl/library/apply.pl +426 -0
  151. package/lib/swipl/library/apply_macros.pl +497 -0
  152. package/lib/swipl/library/arithmetic.pl +320 -0
  153. package/lib/swipl/library/assoc.pl +522 -0
  154. package/lib/swipl/library/atom.pl +169 -0
  155. package/lib/swipl/library/backcomp.pl +688 -0
  156. package/lib/swipl/library/base32.pl +291 -0
  157. package/lib/swipl/library/base64.pl +441 -0
  158. package/lib/swipl/library/broadcast.pl +161 -0
  159. package/lib/swipl/library/build/cmake.pl +137 -0
  160. package/lib/swipl/library/build/conan.pl +232 -0
  161. package/lib/swipl/library/build/make.pl +168 -0
  162. package/lib/swipl/library/build/tools.pl +825 -0
  163. package/lib/swipl/library/charsio.pl +195 -0
  164. package/lib/swipl/library/check.pl +1097 -0
  165. package/lib/swipl/library/check_installation.pl +912 -0
  166. package/lib/swipl/library/clp/INDEX.pl +157 -0
  167. package/lib/swipl/library/clp/bounds.pl +2036 -0
  168. package/lib/swipl/library/clp/clp_distinct.pl +263 -0
  169. package/lib/swipl/library/clp/clp_events.pl +92 -0
  170. package/lib/swipl/library/clp/clpb.pl +1896 -0
  171. package/lib/swipl/library/clp/clpfd.pl +7906 -0
  172. package/lib/swipl/library/clp/simplex.pl +1580 -0
  173. package/lib/swipl/library/codesio.pl +182 -0
  174. package/lib/swipl/library/coinduction.pl +183 -0
  175. package/lib/swipl/library/console_input.pl +289 -0
  176. package/lib/swipl/library/csv.pl +611 -0
  177. package/lib/swipl/library/ctypes.pl +161 -0
  178. package/lib/swipl/library/date.pl +370 -0
  179. package/lib/swipl/library/dcg/INDEX.pl +35 -0
  180. package/lib/swipl/library/dcg/basics.pl +514 -0
  181. package/lib/swipl/library/dcg/high_order.pl +227 -0
  182. package/lib/swipl/library/debug.pl +499 -0
  183. package/lib/swipl/library/dialect/bim.pl +186 -0
  184. package/lib/swipl/library/dialect/commons.pl +77 -0
  185. package/lib/swipl/library/dialect/eclipse/test_util_iso.pl +355 -0
  186. package/lib/swipl/library/dialect/hprolog/format.pl +44 -0
  187. package/lib/swipl/library/dialect/hprolog.pl +314 -0
  188. package/lib/swipl/library/dialect/ifprolog.pl +1317 -0
  189. package/lib/swipl/library/dialect/iso/iso_predicates.pl +277 -0
  190. package/lib/swipl/library/dialect/sicstus/README.TXT +1 -0
  191. package/lib/swipl/library/dialect/sicstus/arrays.pl +121 -0
  192. package/lib/swipl/library/dialect/sicstus/block.pl +278 -0
  193. package/lib/swipl/library/dialect/sicstus/lists.pl +167 -0
  194. package/lib/swipl/library/dialect/sicstus/ordsets.pl +52 -0
  195. package/lib/swipl/library/dialect/sicstus/sockets.pl +174 -0
  196. package/lib/swipl/library/dialect/sicstus/system.pl +262 -0
  197. package/lib/swipl/library/dialect/sicstus/terms.pl +57 -0
  198. package/lib/swipl/library/dialect/sicstus/timeout.pl +92 -0
  199. package/lib/swipl/library/dialect/sicstus.pl +582 -0
  200. package/lib/swipl/library/dialect/sicstus4/aggregate.pl +60 -0
  201. package/lib/swipl/library/dialect/sicstus4/between.pl +62 -0
  202. package/lib/swipl/library/dialect/sicstus4/clpfd.pl +75 -0
  203. package/lib/swipl/library/dialect/sicstus4/file_systems.pl +413 -0
  204. package/lib/swipl/library/dialect/sicstus4/lists.pl +274 -0
  205. package/lib/swipl/library/dialect/sicstus4/ordsets.pl +54 -0
  206. package/lib/swipl/library/dialect/sicstus4/samsort.pl +86 -0
  207. package/lib/swipl/library/dialect/sicstus4/sets.pl +124 -0
  208. package/lib/swipl/library/dialect/sicstus4/sockets.pl +164 -0
  209. package/lib/swipl/library/dialect/sicstus4/system.pl +80 -0
  210. package/lib/swipl/library/dialect/sicstus4/terms.pl +89 -0
  211. package/lib/swipl/library/dialect/sicstus4/timeout.pl +43 -0
  212. package/lib/swipl/library/dialect/sicstus4/types.pl +103 -0
  213. package/lib/swipl/library/dialect/sicstus4.pl +200 -0
  214. package/lib/swipl/library/dialect/swi/syspred_options.pl +250 -0
  215. package/lib/swipl/library/dialect/xsb/README.md +20 -0
  216. package/lib/swipl/library/dialect/xsb/basics.pl +318 -0
  217. package/lib/swipl/library/dialect/xsb/consult.pl +87 -0
  218. package/lib/swipl/library/dialect/xsb/curr_sym.pl +57 -0
  219. package/lib/swipl/library/dialect/xsb/error_handler.pl +111 -0
  220. package/lib/swipl/library/dialect/xsb/gensym.pl +53 -0
  221. package/lib/swipl/library/dialect/xsb/gpp.pl +138 -0
  222. package/lib/swipl/library/dialect/xsb/intern.pl +48 -0
  223. package/lib/swipl/library/dialect/xsb/lists.pl +47 -0
  224. package/lib/swipl/library/dialect/xsb/machine.pl +295 -0
  225. package/lib/swipl/library/dialect/xsb/ordsets.pl +53 -0
  226. package/lib/swipl/library/dialect/xsb/setof.pl +54 -0
  227. package/lib/swipl/library/dialect/xsb/source.pl +308 -0
  228. package/lib/swipl/library/dialect/xsb/standard.pl +169 -0
  229. package/lib/swipl/library/dialect/xsb/storage.pl +70 -0
  230. package/lib/swipl/library/dialect/xsb/string.pl +76 -0
  231. package/lib/swipl/library/dialect/xsb/thread.pl +62 -0
  232. package/lib/swipl/library/dialect/xsb/timed_call.pl +158 -0
  233. package/lib/swipl/library/dialect/xsb.pl +688 -0
  234. package/lib/swipl/library/dialect/yap/README.TXT +8 -0
  235. package/lib/swipl/library/dialect/yap.pl +283 -0
  236. package/lib/swipl/library/dialect.pl +123 -0
  237. package/lib/swipl/library/dicts.pl +399 -0
  238. package/lib/swipl/library/dif.pl +426 -0
  239. package/lib/swipl/library/edinburgh.pl +138 -0
  240. package/lib/swipl/library/edit.pl +783 -0
  241. package/lib/swipl/library/error.pl +495 -0
  242. package/lib/swipl/library/exceptions.pl +231 -0
  243. package/lib/swipl/library/explain.pl +543 -0
  244. package/lib/swipl/library/ext/RDF/INDEX.pl +25 -0
  245. package/lib/swipl/library/ext/RDF/rdf.pl +450 -0
  246. package/lib/swipl/library/ext/RDF/rdf_parser.pl +649 -0
  247. package/lib/swipl/library/ext/RDF/rdf_triple.pl +448 -0
  248. package/lib/swipl/library/ext/RDF/rdf_write.pl +701 -0
  249. package/lib/swipl/library/ext/RDF/rewrite_term.pl +177 -0
  250. package/lib/swipl/library/ext/chr/chr/a_star.pl +80 -0
  251. package/lib/swipl/library/ext/chr/chr/binomialheap.pl +142 -0
  252. package/lib/swipl/library/ext/chr/chr/builtins.pl +629 -0
  253. package/lib/swipl/library/ext/chr/chr/chr_compiler_errors.pl +179 -0
  254. package/lib/swipl/library/ext/chr/chr/chr_compiler_options.pl +382 -0
  255. package/lib/swipl/library/ext/chr/chr/chr_compiler_utility.pl +338 -0
  256. package/lib/swipl/library/ext/chr/chr/chr_debug.pl +59 -0
  257. package/lib/swipl/library/ext/chr/chr/chr_hashtable_store.pl +425 -0
  258. package/lib/swipl/library/ext/chr/chr/chr_integertable_store.pl +139 -0
  259. package/lib/swipl/library/ext/chr/chr/chr_messages.pl +176 -0
  260. package/lib/swipl/library/ext/chr/chr/chr_op.pl +53 -0
  261. package/lib/swipl/library/ext/chr/chr/chr_runtime.pl +1016 -0
  262. package/lib/swipl/library/ext/chr/chr/chr_translate.pl +25424 -0
  263. package/lib/swipl/library/ext/chr/chr/clean_code.pl +252 -0
  264. package/lib/swipl/library/ext/chr/chr/find.pl +78 -0
  265. package/lib/swipl/library/ext/chr/chr/guard_entailment.pl +19432 -0
  266. package/lib/swipl/library/ext/chr/chr/listmap.pl +108 -0
  267. package/lib/swipl/library/ext/chr/chr/pairlist.pl +78 -0
  268. package/lib/swipl/library/ext/chr/chr.pl +686 -0
  269. package/lib/swipl/library/ext/clib/INDEX.pl +158 -0
  270. package/lib/swipl/library/ext/clib/cgi.pl +86 -0
  271. package/lib/swipl/library/ext/clib/crypt.pl +44 -0
  272. package/lib/swipl/library/ext/clib/filesex.pl +644 -0
  273. package/lib/swipl/library/ext/clib/hash_stream.pl +119 -0
  274. package/lib/swipl/library/ext/clib/mallocinfo.pl +138 -0
  275. package/lib/swipl/library/ext/clib/md5.pl +68 -0
  276. package/lib/swipl/library/ext/clib/memfile.pl +61 -0
  277. package/lib/swipl/library/ext/clib/process.pl +573 -0
  278. package/lib/swipl/library/ext/clib/prolog_server.pl +157 -0
  279. package/lib/swipl/library/ext/clib/prolog_stream.pl +80 -0
  280. package/lib/swipl/library/ext/clib/rlimit.pl +54 -0
  281. package/lib/swipl/library/ext/clib/sched.pl +85 -0
  282. package/lib/swipl/library/ext/clib/sha.pl +162 -0
  283. package/lib/swipl/library/ext/clib/socket.pl +1102 -0
  284. package/lib/swipl/library/ext/clib/streaminfo.pl +103 -0
  285. package/lib/swipl/library/ext/clib/streampool.pl +136 -0
  286. package/lib/swipl/library/ext/clib/syslog.pl +180 -0
  287. package/lib/swipl/library/ext/clib/time.pl +194 -0
  288. package/lib/swipl/library/ext/clib/udp_broadcast.pl +975 -0
  289. package/lib/swipl/library/ext/clib/uid.pl +220 -0
  290. package/lib/swipl/library/ext/clib/unix.pl +317 -0
  291. package/lib/swipl/library/ext/clib/uri.pl +530 -0
  292. package/lib/swipl/library/ext/clib/uuid.pl +207 -0
  293. package/lib/swipl/library/ext/http/http/INDEX.pl +266 -0
  294. package/lib/swipl/library/ext/http/http/README.md +34 -0
  295. package/lib/swipl/library/ext/http/http/ax.pl +189 -0
  296. package/lib/swipl/library/ext/http/http/dcg_basics.pl +49 -0
  297. package/lib/swipl/library/ext/http/http/graphql.pl +1367 -0
  298. package/lib/swipl/library/ext/http/http/html_decl.pl +416 -0
  299. package/lib/swipl/library/ext/http/http/html_head.pl +654 -0
  300. package/lib/swipl/library/ext/http/http/html_quasiquotations.pl +120 -0
  301. package/lib/swipl/library/ext/http/http/html_write.pl +1425 -0
  302. package/lib/swipl/library/ext/http/http/htmx.pl +139 -0
  303. package/lib/swipl/library/ext/http/http/http_authenticate.pl +364 -0
  304. package/lib/swipl/library/ext/http/http/http_client.pl +412 -0
  305. package/lib/swipl/library/ext/http/http/http_cookie.pl +245 -0
  306. package/lib/swipl/library/ext/http/http/http_cors.pl +176 -0
  307. package/lib/swipl/library/ext/http/http/http_digest.pl +820 -0
  308. package/lib/swipl/library/ext/http/http/http_dirindex.pl +296 -0
  309. package/lib/swipl/library/ext/http/http/http_dispatch.pl +1552 -0
  310. package/lib/swipl/library/ext/http/http/http_dyn_workers.pl +214 -0
  311. package/lib/swipl/library/ext/http/http/http_error.pl +126 -0
  312. package/lib/swipl/library/ext/http/http/http_exception.pl +225 -0
  313. package/lib/swipl/library/ext/http/http/http_files.pl +163 -0
  314. package/lib/swipl/library/ext/http/http/http_header.pl +2820 -0
  315. package/lib/swipl/library/ext/http/http/http_hook.pl +106 -0
  316. package/lib/swipl/library/ext/http/http/http_host.pl +204 -0
  317. package/lib/swipl/library/ext/http/http/http_load.pl +113 -0
  318. package/lib/swipl/library/ext/http/http/http_log.pl +738 -0
  319. package/lib/swipl/library/ext/http/http/http_multipart_plugin.pl +232 -0
  320. package/lib/swipl/library/ext/http/http/http_open.pl +1821 -0
  321. package/lib/swipl/library/ext/http/http/http_openid.pl +1561 -0
  322. package/lib/swipl/library/ext/http/http/http_parameters.pl +504 -0
  323. package/lib/swipl/library/ext/http/http/http_path.pl +380 -0
  324. package/lib/swipl/library/ext/http/http/http_proxy.pl +80 -0
  325. package/lib/swipl/library/ext/http/http/http_pwp.pl +351 -0
  326. package/lib/swipl/library/ext/http/http/http_redis_plugin.pl +332 -0
  327. package/lib/swipl/library/ext/http/http/http_server.pl +105 -0
  328. package/lib/swipl/library/ext/http/http/http_server_files.pl +126 -0
  329. package/lib/swipl/library/ext/http/http/http_server_health.pl +186 -0
  330. package/lib/swipl/library/ext/http/http/http_session.pl +1040 -0
  331. package/lib/swipl/library/ext/http/http/http_sgml_plugin.pl +137 -0
  332. package/lib/swipl/library/ext/http/http/http_stream.pl +376 -0
  333. package/lib/swipl/library/ext/http/http/http_unix_daemon.pl +989 -0
  334. package/lib/swipl/library/ext/http/http/http_wrapper.pl +559 -0
  335. package/lib/swipl/library/ext/http/http/hub.pl +600 -0
  336. package/lib/swipl/library/ext/http/http/js_write.pl +461 -0
  337. package/lib/swipl/library/ext/http/http/mimepack.pl +224 -0
  338. package/lib/swipl/library/ext/http/http/mimetype.pl +276 -0
  339. package/lib/swipl/library/ext/http/http/term_html.pl +797 -0
  340. package/lib/swipl/library/ext/http/http/thread_httpd.pl +1181 -0
  341. package/lib/swipl/library/ext/http/http/web/css/dirindex.css +24 -0
  342. package/lib/swipl/library/ext/http/http/web/css/openid.css +57 -0
  343. package/lib/swipl/library/ext/http/http/web/icons/back.png +0 -0
  344. package/lib/swipl/library/ext/http/http/web/icons/c.png +0 -0
  345. package/lib/swipl/library/ext/http/http/web/icons/compressed.png +0 -0
  346. package/lib/swipl/library/ext/http/http/web/icons/folder.png +0 -0
  347. package/lib/swipl/library/ext/http/http/web/icons/generic.png +0 -0
  348. package/lib/swipl/library/ext/http/http/web/icons/layout.png +0 -0
  349. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-square.png +0 -0
  350. package/lib/swipl/library/ext/http/http/web/icons/openid-logo-tiny.png +0 -0
  351. package/lib/swipl/library/ext/http/http/websocket.pl +729 -0
  352. package/lib/swipl/library/ext/http/http/yadis.pl +205 -0
  353. package/lib/swipl/library/ext/json/INDEX.pl +36 -0
  354. package/lib/swipl/library/ext/json/http/INDEX.pl +16 -0
  355. package/lib/swipl/library/ext/json/http/http_json.pl +490 -0
  356. package/lib/swipl/library/ext/json/http/js_grammar.pl +53 -0
  357. package/lib/swipl/library/ext/json/http/json.pl +48 -0
  358. package/lib/swipl/library/ext/json/http/json_convert.pl +48 -0
  359. package/lib/swipl/library/ext/json/json.pl +1215 -0
  360. package/lib/swipl/library/ext/json/json_convert.pl +681 -0
  361. package/lib/swipl/library/ext/json/json_grammar.pl +349 -0
  362. package/lib/swipl/library/ext/json/json_rpc_client.pl +423 -0
  363. package/lib/swipl/library/ext/json/json_rpc_common.pl +104 -0
  364. package/lib/swipl/library/ext/json/json_rpc_server.pl +489 -0
  365. package/lib/swipl/library/ext/json/json_schema.pl +2111 -0
  366. package/lib/swipl/library/ext/nlp/INDEX.pl +15 -0
  367. package/lib/swipl/library/ext/nlp/double_metaphone.pl +86 -0
  368. package/lib/swipl/library/ext/nlp/isub.pl +162 -0
  369. package/lib/swipl/library/ext/nlp/porter_stem.pl +50 -0
  370. package/lib/swipl/library/ext/nlp/snowball.pl +97 -0
  371. package/lib/swipl/library/ext/pcre/INDEX.pl +17 -0
  372. package/lib/swipl/library/ext/pcre/pcre.pl +974 -0
  373. package/lib/swipl/library/ext/plunit/INDEX.pl +20 -0
  374. package/lib/swipl/library/ext/plunit/plunit.pl +2631 -0
  375. package/lib/swipl/library/ext/plunit/test_wizard.pl +249 -0
  376. package/lib/swipl/library/ext/semweb/semweb/INDEX.pl +288 -0
  377. package/lib/swipl/library/ext/semweb/semweb/rdf11.pl +2106 -0
  378. package/lib/swipl/library/ext/semweb/semweb/rdf11_containers.pl +299 -0
  379. package/lib/swipl/library/ext/semweb/semweb/rdf_cache.pl +278 -0
  380. package/lib/swipl/library/ext/semweb/semweb/rdf_compare.pl +132 -0
  381. package/lib/swipl/library/ext/semweb/semweb/rdf_db.pl +3468 -0
  382. package/lib/swipl/library/ext/semweb/semweb/rdf_edit.pl +1145 -0
  383. package/lib/swipl/library/ext/semweb/semweb/rdf_http_plugin.pl +274 -0
  384. package/lib/swipl/library/ext/semweb/semweb/rdf_library.pl +1021 -0
  385. package/lib/swipl/library/ext/semweb/semweb/rdf_litindex.pl +1035 -0
  386. package/lib/swipl/library/ext/semweb/semweb/rdf_ntriples.pl +422 -0
  387. package/lib/swipl/library/ext/semweb/semweb/rdf_persistency.pl +1576 -0
  388. package/lib/swipl/library/ext/semweb/semweb/rdf_portray.pl +182 -0
  389. package/lib/swipl/library/ext/semweb/semweb/rdf_prefixes.pl +681 -0
  390. package/lib/swipl/library/ext/semweb/semweb/rdf_sandbox.pl +153 -0
  391. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle.pl +54 -0
  392. package/lib/swipl/library/ext/semweb/semweb/rdf_turtle_write.pl +1587 -0
  393. package/lib/swipl/library/ext/semweb/semweb/rdf_zlib_plugin.pl +52 -0
  394. package/lib/swipl/library/ext/semweb/semweb/rdfa.pl +1510 -0
  395. package/lib/swipl/library/ext/semweb/semweb/rdfs.pl +475 -0
  396. package/lib/swipl/library/ext/semweb/semweb/sparql_client.pl +643 -0
  397. package/lib/swipl/library/ext/semweb/semweb/turtle.pl +455 -0
  398. package/lib/swipl/library/ext/sgml/DTD/HTML4.dcl +88 -0
  399. package/lib/swipl/library/ext/sgml/DTD/HTML4.dtd +1092 -0
  400. package/lib/swipl/library/ext/sgml/DTD/HTML4.soc +6 -0
  401. package/lib/swipl/library/ext/sgml/DTD/HTML5.dtd +906 -0
  402. package/lib/swipl/library/ext/sgml/DTD/HTMLlat1.ent +195 -0
  403. package/lib/swipl/library/ext/sgml/DTD/HTMLspec.ent +77 -0
  404. package/lib/swipl/library/ext/sgml/DTD/HTMLsym.ent +241 -0
  405. package/lib/swipl/library/ext/sgml/INDEX.pl +64 -0
  406. package/lib/swipl/library/ext/sgml/c14n2.pl +203 -0
  407. package/lib/swipl/library/ext/sgml/iso_639.pl +631 -0
  408. package/lib/swipl/library/ext/sgml/pwp.pl +705 -0
  409. package/lib/swipl/library/ext/sgml/sgml.pl +815 -0
  410. package/lib/swipl/library/ext/sgml/sgml_write.pl +1003 -0
  411. package/lib/swipl/library/ext/sgml/xpath.pl +620 -0
  412. package/lib/swipl/library/ext/sgml/xsdp_types.pl +232 -0
  413. package/lib/swipl/library/ext/ssl/INDEX.pl +60 -0
  414. package/lib/swipl/library/ext/ssl/crypto.pl +1015 -0
  415. package/lib/swipl/library/ext/ssl/http/INDEX.pl +5 -0
  416. package/lib/swipl/library/ext/ssl/http/http_ssl_plugin.pl +296 -0
  417. package/lib/swipl/library/ext/ssl/saml.pl +609 -0
  418. package/lib/swipl/library/ext/ssl/ssl.pl +647 -0
  419. package/lib/swipl/library/ext/ssl/xmldsig.pl +391 -0
  420. package/lib/swipl/library/ext/ssl/xmlenc.pl +354 -0
  421. package/lib/swipl/library/ext/zlib/INDEX.pl +8 -0
  422. package/lib/swipl/library/ext/zlib/zlib.pl +112 -0
  423. package/lib/swipl/library/fastrw.pl +105 -0
  424. package/lib/swipl/library/files.pl +80 -0
  425. package/lib/swipl/library/gensym.pl +111 -0
  426. package/lib/swipl/library/git.pl +1027 -0
  427. package/lib/swipl/library/hashtable.pl +365 -0
  428. package/lib/swipl/library/heaps.pl +252 -0
  429. package/lib/swipl/library/hotfix.pl +239 -0
  430. package/lib/swipl/library/http/jquery.pl +103 -0
  431. package/lib/swipl/library/http/web/js/jquery-3.6.0.min.js +2 -0
  432. package/lib/swipl/library/increval.pl +217 -0
  433. package/lib/swipl/library/intercept.pl +263 -0
  434. package/lib/swipl/library/iostream.pl +237 -0
  435. package/lib/swipl/library/iri_scheme/file.pl +70 -0
  436. package/lib/swipl/library/lazy_lists.pl +481 -0
  437. package/lib/swipl/library/listing.pl +1362 -0
  438. package/lib/swipl/library/lists.pl +860 -0
  439. package/lib/swipl/library/lynx/INDEX.pl +14 -0
  440. package/lib/swipl/library/lynx/format.pl +380 -0
  441. package/lib/swipl/library/lynx/html_style.pl +129 -0
  442. package/lib/swipl/library/lynx/html_text.pl +865 -0
  443. package/lib/swipl/library/lynx/pldoc_style.pl +87 -0
  444. package/lib/swipl/library/macros.pl +451 -0
  445. package/lib/swipl/library/main.pl +1200 -0
  446. package/lib/swipl/library/make.pl +197 -0
  447. package/lib/swipl/library/modules.pl +129 -0
  448. package/lib/swipl/library/nb_rbtrees.pl +267 -0
  449. package/lib/swipl/library/nb_set.pl +203 -0
  450. package/lib/swipl/library/obfuscate.pl +115 -0
  451. package/lib/swipl/library/occurs.pl +241 -0
  452. package/lib/swipl/library/operators.pl +182 -0
  453. package/lib/swipl/library/option.pl +388 -0
  454. package/lib/swipl/library/optparse.pl +966 -0
  455. package/lib/swipl/library/ordsets.pl +518 -0
  456. package/lib/swipl/library/oset.pl +160 -0
  457. package/lib/swipl/library/pairs.pl +187 -0
  458. package/lib/swipl/library/persistency.pl +713 -0
  459. package/lib/swipl/library/pio.pl +47 -0
  460. package/lib/swipl/library/portray_text.pl +277 -0
  461. package/lib/swipl/library/pprint.pl +940 -0
  462. package/lib/swipl/library/predicate_options.pl +975 -0
  463. package/lib/swipl/library/prolog_autoload.pl +233 -0
  464. package/lib/swipl/library/prolog_breakpoints.pl +396 -0
  465. package/lib/swipl/library/prolog_clause.pl +1104 -0
  466. package/lib/swipl/library/prolog_code.pl +416 -0
  467. package/lib/swipl/library/prolog_codewalk.pl +1248 -0
  468. package/lib/swipl/library/prolog_colour.pl +3301 -0
  469. package/lib/swipl/library/prolog_colour.qlf +0 -0
  470. package/lib/swipl/library/prolog_config.pl +154 -0
  471. package/lib/swipl/library/prolog_coverage.pl +1333 -0
  472. package/lib/swipl/library/prolog_debug.pl +404 -0
  473. package/lib/swipl/library/prolog_deps.pl +675 -0
  474. package/lib/swipl/library/prolog_evaluable.pl +234 -0
  475. package/lib/swipl/library/prolog_format.pl +219 -0
  476. package/lib/swipl/library/prolog_history.pl +161 -0
  477. package/lib/swipl/library/prolog_jiti.pl +333 -0
  478. package/lib/swipl/library/prolog_locale.pl +61 -0
  479. package/lib/swipl/library/prolog_metainference.pl +307 -0
  480. package/lib/swipl/library/prolog_pack.pl +3906 -0
  481. package/lib/swipl/library/prolog_profile.pl +346 -0
  482. package/lib/swipl/library/prolog_qlfmake.pl +533 -0
  483. package/lib/swipl/library/prolog_source.pl +1188 -0
  484. package/lib/swipl/library/prolog_stack.pl +794 -0
  485. package/lib/swipl/library/prolog_trace.pl +365 -0
  486. package/lib/swipl/library/prolog_versions.pl +347 -0
  487. package/lib/swipl/library/prolog_wrap.pl +164 -0
  488. package/lib/swipl/library/prolog_xref.pl +3090 -0
  489. package/lib/swipl/library/prolog_xref.qlf +0 -0
  490. package/lib/swipl/library/pure_input.pl +266 -0
  491. package/lib/swipl/library/qpforeign.pl +695 -0
  492. package/lib/swipl/library/qsave.pl +1516 -0
  493. package/lib/swipl/library/quasi_quotations.pl +300 -0
  494. package/lib/swipl/library/quintus.pl +437 -0
  495. package/lib/swipl/library/random.pl +459 -0
  496. package/lib/swipl/library/rbtrees.pl +1153 -0
  497. package/lib/swipl/library/readln.pl +256 -0
  498. package/lib/swipl/library/readutil.pl +304 -0
  499. package/lib/swipl/library/record.pl +544 -0
  500. package/lib/swipl/library/rwlocks.pl +172 -0
  501. package/lib/swipl/library/sandbox.pl +1384 -0
  502. package/lib/swipl/library/semweb/dc.rdfs +198 -0
  503. package/lib/swipl/library/semweb/eor.rdfs +95 -0
  504. package/lib/swipl/library/semweb/owl.owl +287 -0
  505. package/lib/swipl/library/semweb/rdf_library.ttl +90 -0
  506. package/lib/swipl/library/semweb/rdfs.rdfs +251 -0
  507. package/lib/swipl/library/settings.pl +755 -0
  508. package/lib/swipl/library/shell.pl +462 -0
  509. package/lib/swipl/library/shlib.pl +670 -0
  510. package/lib/swipl/library/solution_sequences.pl +439 -0
  511. package/lib/swipl/library/sort.pl +119 -0
  512. package/lib/swipl/library/statistics.pl +541 -0
  513. package/lib/swipl/library/streams.pl +118 -0
  514. package/lib/swipl/library/strings.pl +469 -0
  515. package/lib/swipl/library/system.pl +95 -0
  516. package/lib/swipl/library/tables.pl +381 -0
  517. package/lib/swipl/library/tableutil.pl +771 -0
  518. package/lib/swipl/library/tabling.pl +42 -0
  519. package/lib/swipl/library/terms.pl +457 -0
  520. package/lib/swipl/library/theme/auto.pl +61 -0
  521. package/lib/swipl/library/theme/dark.pl +455 -0
  522. package/lib/swipl/library/theme/light.pl +45 -0
  523. package/lib/swipl/library/thread.pl +810 -0
  524. package/lib/swipl/library/thread_pool.pl +508 -0
  525. package/lib/swipl/library/threadutil.pl +574 -0
  526. package/lib/swipl/library/tty.pl +316 -0
  527. package/lib/swipl/library/ugraphs.pl +644 -0
  528. package/lib/swipl/library/unicode/INDEX.pl +6 -0
  529. package/lib/swipl/library/unicode/blocks.pl +414 -0
  530. package/lib/swipl/library/url.pl +1129 -0
  531. package/lib/swipl/library/utf8.pl +145 -0
  532. package/lib/swipl/library/varnumbers.pl +221 -0
  533. package/lib/swipl/library/vm.pl +251 -0
  534. package/lib/swipl/library/wfs.pl +205 -0
  535. package/lib/swipl/library/when.pl +263 -0
  536. package/lib/swipl/library/writef.pl +278 -0
  537. package/lib/swipl/library/www_browser.pl +251 -0
  538. package/lib/swipl/library/yall.pl +574 -0
  539. package/lib/swipl/library/zip.pl +211 -0
  540. package/lib/swipl/swipl.home +1 -0
  541. package/lib/vendor/libcrypto.so.3 +0 -0
  542. package/lib/vendor/libpcre2-8.so.0 +0 -0
  543. package/lib/vendor/libssl.so.3 +0 -0
  544. package/lib/vendor/libz.so.1 +0 -0
  545. package/licenses/OpenSSL-LICENSE.txt +177 -0
  546. package/licenses/PCRE2-COPYING +5 -0
  547. package/licenses/README.md +12 -0
  548. package/licenses/SWI-Prolog-LICENSE +41 -0
  549. package/licenses/zlib-LICENSE +22 -0
  550. package/package.json +27 -0
@@ -0,0 +1,1021 @@
1
+ /* Part of SWI-Prolog
2
+
3
+ Author: Jan Wielemaker
4
+ E-mail: J.Wielemaker@vu.nl
5
+ WWW: http://www.swi-prolog.org
6
+ Copyright (c) 2010-2020, University of Amsterdam
7
+ VU University Amsterdam
8
+ All rights reserved.
9
+
10
+ Redistribution and use in source and binary forms, with or without
11
+ modification, are permitted provided that the following conditions
12
+ are met:
13
+
14
+ 1. Redistributions of source code must retain the above copyright
15
+ notice, this list of conditions and the following disclaimer.
16
+
17
+ 2. Redistributions in binary form must reproduce the above copyright
18
+ notice, this list of conditions and the following disclaimer in
19
+ the documentation and/or other materials provided with the
20
+ distribution.
21
+
22
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23
+ "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25
+ FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26
+ COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
27
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28
+ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
30
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
32
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
33
+ POSSIBILITY OF SUCH DAMAGE.
34
+ */
35
+
36
+ :- module(rdf_library,
37
+ [ rdf_attach_library/1, % +Dir
38
+ rdf_load_library/1, % +Ontology
39
+ rdf_load_library/2, % +Ontology, +Options
40
+ rdf_list_library/0,
41
+ rdf_list_library/1, % +Ontology
42
+ rdf_list_library/2, % +Ontology, +Options
43
+ rdf_library_source/2, % +Ontology, -SourceURL
44
+ rdf_library_index/2, % ?Id, ?Facet
45
+ rdf_current_manifest/1 % -Manifest
46
+ ]).
47
+ :- use_module(library(semweb/rdf_prefixes),
48
+ [ (rdf_meta)/1, op(_,_,rdf_meta)
49
+ ]).
50
+ :- use_module(library(semweb/rdf_db),
51
+ [ rdf_register_ns/2, rdf_equal/2, rdf_register_ns/3, rdf_load/2
52
+ ]).
53
+
54
+ :- autoload(library(apply),[exclude/3,maplist/2]).
55
+ :- autoload(library(date),[parse_time/2]).
56
+ :- use_module(library(debug),[debug/3]).
57
+ :- autoload(library(dif),[dif/2]).
58
+ :- autoload(library(error),[must_be/2,existence_error/2]).
59
+ :- autoload(library(lists),[member/2,list_to_set/2]).
60
+ :- autoload(library(option),[option/2,option/3]).
61
+ :- autoload(library(pairs),
62
+ [pairs_values/2,map_list_to_pairs/3,group_pairs_by_key/2]).
63
+ :- autoload(library(rdf),[load_rdf/2]).
64
+ :- autoload(library(solution_sequences),[distinct/2]).
65
+ :- autoload(library(thread),[concurrent/3]).
66
+ :- autoload(library(uri),
67
+ [ uri_file_name/2,
68
+ uri_components/2,
69
+ uri_data/3,
70
+ uri_is_global/1,
71
+ uri_normalized/2
72
+ ]).
73
+ :- autoload(library(http/http_open),[http_open/3]).
74
+ :- autoload(library(semweb/turtle),[rdf_load_turtle/3]).
75
+
76
+ :- predicate_options(rdf_list_library/2, 2,
77
+ [ indent(atom),
78
+ show_graph(boolean),
79
+ show_source(boolean),
80
+ show_virtual(boolean)
81
+ ]).
82
+ :- predicate_options(rdf_load_library/2, 2,
83
+ [ concurrent(positive_integer),
84
+ import(boolean),
85
+ load(boolean),
86
+ base_uri(atom),
87
+ claimed_source(atom),
88
+ not_found(oneof([error,warning,silent]))
89
+ ]).
90
+
91
+ /** <module> RDF Library Manager
92
+
93
+ This module manages an ontology library. Such a library consists of a
94
+ directory with manifest files named =|Manifest.rdf|= or =|Manifest.ttl|=
95
+ (Turtle). The manifest files define ontologies appearing in the library
96
+ as well as namespace mnemonics and dependencies.
97
+
98
+ The typical usage scenario is
99
+
100
+ ==
101
+ ?- rdf_attach_library('/some/directory').
102
+ ?- rdf_load_library(my_ontology).
103
+ ==
104
+
105
+ @tbd Add caching info
106
+ @tbd Allow using Manifests on HTTP servers
107
+ @author Jan Wielemaker
108
+ */
109
+
110
+ :- rdf_register_ns(lib, 'http://www.swi-prolog.org/rdf/library/').
111
+ :- rdf_register_ns(void, 'http://rdfs.org/ns/void#').
112
+ :- rdf_register_ns(vann, 'http://purl.org/vocab/vann/').
113
+
114
+ :- dynamic
115
+ manifest/2, % Path, Time
116
+ library_db/3. % Name, URL, Facets
117
+
118
+ % Force compile-time namespace expansion
119
+
120
+ :- rdf_meta
121
+ edge(+, r,r,o).
122
+
123
+ /*******************************
124
+ * LOADING *
125
+ *******************************/
126
+
127
+ %! rdf_load_library(+Id) is det.
128
+ %! rdf_load_library(+Id, +Options) is det.
129
+ %
130
+ % Load ontologies from the library. A library must first be
131
+ % attached using rdf_attach_library/1. Defined Options are:
132
+ %
133
+ % * import(Bool)
134
+ % If =true= (default), also load ontologies that are
135
+ % explicitly imported.
136
+ %
137
+ % * base_uri(URI)
138
+ % BaseURI used for loading RDF. Local definitions in
139
+ % ontologies overrule this option.
140
+ %
141
+ % * claimed_source(URL)
142
+ % URL from which we claim to have loaded the data.
143
+ %
144
+ % * not_found(+Level)
145
+ % The system does a pre-check for the existence of
146
+ % all references RDF databases. If Level is =error=
147
+ % it reports missing databases as an error and fails.
148
+ % If =warning= it prints them, but continues. If
149
+ % =silent=, no checks are preformed. Default is =error=.
150
+ %
151
+ % * concurrent(Threads)
152
+ % Perform the load concurrently using N threads. If not
153
+ % specified, the number is determined by
154
+ % guess_concurrency/2.
155
+ %
156
+ % * load(+Bool)
157
+ % If =false=, to all the preparation, but do not execute
158
+ % the actual loading. See also rdf_list_library/2.
159
+
160
+ rdf_load_library(Id) :-
161
+ rdf_load_library(Id, []).
162
+
163
+ rdf_load_library(Id, Options) :-
164
+ cleaned_load_commands(Id, Cmds, Options),
165
+ ( option(concurrent(Threads), Options)
166
+ -> true
167
+ ; guess_concurrency(Cmds, Threads)
168
+ ),
169
+ length(Cmds, NSources),
170
+ print_message(informational, rdf(loading(NSources, Threads))),
171
+ ( option(load(true), Options, true)
172
+ -> concurrent(Threads, Cmds, [])
173
+ ; true
174
+ ).
175
+
176
+ %! rdf_library_source(+Id, -Source) is nondet.
177
+ %
178
+ % True of Source is the URL that is part of the given library Id.
179
+ % This predicate finds all indirect dependencies. It does _not_
180
+ % check whether the source exists or is valid.
181
+ %
182
+ % @see uri_file_name/2 for converting file:// URLs to a filename.
183
+
184
+ rdf_library_source(Id, Source) :-
185
+ cleaned_load_commands(Id, Cmds,
186
+ [ import(true),
187
+ not_found(silent)
188
+ ]),
189
+ member(rdf_load(Source, _), Cmds).
190
+
191
+
192
+ cleaned_load_commands(Id, Cmds, Options) :-
193
+ load_commands(Id, Options, Pairs),
194
+ pairs_values(Pairs, Commands),
195
+ list_to_set(Commands, Cmds2),
196
+ delete_virtual(Cmds2, Cmds3),
197
+ find_conflicts(Cmds3),
198
+ check_existence(Cmds3, Cmds, Options).
199
+
200
+ delete_virtual([], []).
201
+ delete_virtual([virtual(_)|T0], T) :-
202
+ !,
203
+ delete_virtual(T0, T).
204
+ delete_virtual([H|T0], [H|T]) :-
205
+ delete_virtual(T0, T).
206
+
207
+
208
+ %! find_conflicts(+LoadCommands) is semidet.
209
+ %
210
+ % Find possibly conflicting options for loading the same source
211
+
212
+ find_conflicts(Commands) :-
213
+ no_source_with_different_options(Commands),
214
+ no_sources_in_same_graph(Commands).
215
+
216
+ %! no_source_with_different_options(+Commands) is semidet.
217
+ %
218
+ % True if there are not multiple calls to load the same graph, but
219
+ % with different load-options. Prints a warning and fails
220
+ % otherwise.
221
+
222
+ no_source_with_different_options(Commands) :-
223
+ sort(Commands, Cmds),
224
+ conflicts(Cmds, Conflicts),
225
+ report_conflicts(Conflicts),
226
+ Conflicts == [].
227
+
228
+ conflicts([], []).
229
+ conflicts([C1, C2|T0], [C1-C2|T]) :-
230
+ conflict(C1, C2),
231
+ !,
232
+ conflicts([C2|T0], T).
233
+ conflicts([_|T0], T) :-
234
+ conflicts(T0, T).
235
+
236
+ conflict(rdf_load(Src, Options1), rdf_load(Src, Options2)) :-
237
+ sort(Options1, S1),
238
+ sort(Options2, S2),
239
+ S1 \== S2.
240
+
241
+ report_conflicts([]).
242
+ report_conflicts([C1-C2|T]) :-
243
+ print_message(warning, rdf(load_conflict(C1,C2))),
244
+ report_conflicts(T).
245
+
246
+ %! no_sources_in_same_graph(+Commands) is semidet.
247
+ %
248
+ % True if there are not two load commands referring to the same
249
+ % graph.
250
+
251
+ no_sources_in_same_graph(Commands) :-
252
+ map_list_to_pairs(command_graph, Commands, Keyed),
253
+ keysort(Keyed, KeySorted),
254
+ group_pairs_by_key(KeySorted, SourcesByGraph),
255
+ ( member(Graph-Sources, SourcesByGraph),
256
+ Sources = [_,_|_]
257
+ -> forall(( member(Graph-Sources, SourcesByGraph),
258
+ Sources = [_,_|_]
259
+ ),
260
+ print_message(error,
261
+ rdf(multiple_source_for_graph(Graph, Sources)))),
262
+ fail
263
+ ; true
264
+ ).
265
+
266
+ command_graph(rdf_load(_, Options), Graph) :-
267
+ option(graph(Graph), Options),
268
+ !.
269
+ command_graph(rdf_load(URL, _), URL) :- !.
270
+ command_graph(_, _). % Other command. Each variable it its own key
271
+
272
+
273
+ %! check_existence(+CommandsIn, -Commands, +Options) is det.
274
+ %
275
+ % Report existence errors. Fail if at least one source does not
276
+ % exist. and the not_found level is not =silent=.
277
+ %
278
+ % @error existence_error(urls, ListOfUrls)
279
+
280
+ check_existence(CommandsIn, Commands, Options) :-
281
+ option(not_found(Level), Options, error),
282
+ must_be(oneof([error,warning,silent]), Level),
283
+ ( Level == silent
284
+ -> Commands = CommandsIn
285
+ ; missing_urls(CommandsIn, Commands, Missing),
286
+ ( Missing == []
287
+ -> true
288
+ ; Level == warning
289
+ -> report_missing(Missing, Level)
290
+ ; existence_error(urls, Missing)
291
+ )
292
+ ).
293
+
294
+
295
+ missing_urls([], [], []).
296
+ missing_urls([H|T0], Cmds, Missing) :-
297
+ H = rdf_load(URL, _),
298
+ ( catch(exists_url(URL, _Ext), error(existence_error(_,_), _), fail)
299
+ -> Cmds = [H|T],
300
+ missing_urls(T0, T, Missing)
301
+ ; Missing = [URL|T],
302
+ missing_urls(T0, Cmds, T)
303
+ ).
304
+
305
+ report_missing([], _).
306
+ report_missing([H|T], Level) :-
307
+ print_message(Level, error(existence_error(url, H), _)),
308
+ report_missing(T, Level).
309
+
310
+ %! guess_concurrency(+Commands, -Threads) is det.
311
+ %
312
+ % How much concurrency to use? Set to the number of CPUs if all
313
+ % input comes from files or 5 if network based loading is
314
+ % demanded.
315
+
316
+ guess_concurrency(Commands, Threads) :-
317
+ count_uris(Commands, FileURLs, OtherURLs),
318
+ ( FileURLs > 0
319
+ -> ( current_prolog_flag(cpu_count, CPUs)
320
+ -> true
321
+ ; CPUs = 1
322
+ ),
323
+ FileThreads is min(FileURLs, CPUs)
324
+ ; FileThreads = 0
325
+ ),
326
+ ( OtherURLs > 0
327
+ -> OtherThreads is min(5, OtherURLs)
328
+ ; OtherThreads = 0
329
+ ),
330
+ Threads is FileThreads + OtherThreads.
331
+
332
+ count_uris([], 0, 0).
333
+ count_uris([rdf_load(URL, _)|T], F, NF) :-
334
+ count_uris(T, F0, NF0),
335
+ ( web_url(URL)
336
+ -> NF is NF0 + 1,
337
+ F = F0
338
+ ; F is F0 + 1,
339
+ NF = NF0
340
+ ).
341
+
342
+
343
+ %! load_commands(+Id, +Options, -Pairs:list(Level-Command)) is det.
344
+ %
345
+ % Commands are the RDF commands to execute for rdf_load_library/2.
346
+ % Splitting in command collection and execution allows for
347
+ % concurrent execution as well as forward checking of possible
348
+ % problems.
349
+ %
350
+ % @tbd Fix poor style; avoid assert/retract.
351
+
352
+ :- thread_local
353
+ command/2.
354
+
355
+ load_commands(Id, Options, Commands) :-
356
+ retractall(command(_,_)),
357
+ rdf_update_library_index,
358
+ dry_load(Id, 1, Options),
359
+ findall(Level-Cmd, retract(command(Level, Cmd)), Commands).
360
+
361
+ dry_load(Id, Level, Options) :-
362
+ ( library(Id, File, Facets)
363
+ -> merge_base_uri(Facets, Options, Options1),
364
+ merge_source(Facets, Options1, Options2),
365
+ merge_blanks(Facets, Options2, Options3),
366
+ merge_format(Facets, Options3, Options4),
367
+ ( \+ memberchk(virtual, Facets)
368
+ -> load_options(Options4, File, RdfOptions),
369
+ assert(command(Level, rdf_load(File, RdfOptions)))
370
+ ; assert(command(Level, virtual(File)))
371
+ ),
372
+ ( option(import(true), Options, true)
373
+ -> Level1 is Level + 1,
374
+ forall(member(imports(Type, Import), Facets),
375
+ import(Import, Level1, [type(Type)|Options4]))
376
+ ; true
377
+ )
378
+ ; existence_error(ontology, Id)
379
+ ).
380
+
381
+ merge_base_uri(Facets, Options0, Options) :-
382
+ ( option(base_uri(Base), Facets)
383
+ -> exclude(name_option(base_uri), Options0, Options1),
384
+ Options = [base_uri(Base)|Options1]
385
+ ; Options = Options0
386
+ ).
387
+
388
+ merge_source(Facets, Options0, Options) :-
389
+ ( option(claimed_source(Base), Facets)
390
+ -> exclude(name_option(claimed_source), Options0, Options1),
391
+ Options = [claimed_source(Base)|Options1]
392
+ ; Options = Options0
393
+ ).
394
+
395
+ merge_blanks(Facets, Options0, Options) :-
396
+ ( option(blank_nodes(Share), Facets)
397
+ -> exclude(name_option(blank_nodes), Options0, Options1),
398
+ Options = [blank_nodes(Share)|Options1]
399
+ ; Options = Options0
400
+ ).
401
+
402
+ merge_format(Facets, Options0, Options) :-
403
+ ( option(format(Format), Facets)
404
+ -> exclude(name_option(format), Options0, Options1),
405
+ Options = [format(Format)|Options1]
406
+ ; Options = Options0
407
+ ).
408
+
409
+ name_option(Name, Term) :-
410
+ functor(Term, Name, 1).
411
+
412
+ load_options(Options, File, RDFOptions) :-
413
+ findall(O, load_option(Options, File, O), RDFOptions).
414
+
415
+ load_option(Options, File, graph(Source)) :-
416
+ option(claimed_source(Source0), Options),
417
+ ( sub_atom(Source0, _, _, 0, /)
418
+ -> file_base_name(File, Base),
419
+ atom_concat(Source0, Base, Source)
420
+ ; atom_concat(Source, #, Source0)
421
+ -> true
422
+ ).
423
+ load_option(Options, File, base_uri(BaseURI)) :-
424
+ option(base_uri(Base0), Options),
425
+ sub_atom(/, _, _, 0, Base0),
426
+ atom_concat(Base0, File, BaseURI).
427
+ load_option(Options, _File, blank_nodes(Share)) :-
428
+ option(blank_nodes(Share), Options).
429
+ load_option(Options, _File, format(Format)) :-
430
+ option(format(Format), Options).
431
+
432
+ %! import(+URL, +Level, +Options) is det.
433
+
434
+ import(Path, Level, Options) :-
435
+ option(type(data_dump), Options),
436
+ !,
437
+ load_options(Options, Path, RdfOptions),
438
+ assert(command(Level, rdf_load(Path, RdfOptions))).
439
+ import(Path, Level, Options) :-
440
+ ( ( library(Id, Path, _)
441
+ -> true
442
+ ; manifest_for_path(Path, Manifest),
443
+ catch(exists_url(Manifest, _Ext), _, fail)
444
+ -> process_manifest(Manifest),
445
+ library(Id, Path, _)
446
+ )
447
+ -> dry_load(Id, Level, Options)
448
+ ; load_options(Options, Path, RdfOptions),
449
+ assert(command(Level, rdf_load(Path, RdfOptions)))
450
+ ).
451
+
452
+ manifest_for_path(URL, Manifest) :-
453
+ file_directory_name(URL, Parent),
454
+ manifest_file(Base),
455
+ rdf_extension(Ext),
456
+ atomic_list_concat([Parent, /, Base, '.', Ext], Manifest).
457
+
458
+ %! rdf_list_library(+Id) is det.
459
+ %! rdf_list_library(+Id, +Options) is det.
460
+ %
461
+ % Print library dependency tree to the terminal. Options include
462
+ % options for rdf_load_library/2 and
463
+ %
464
+ % * show_source(+Boolean)
465
+ % If =true= (default), show location we are loading
466
+ %
467
+ % * show_graph(+Boolean)
468
+ % If =true= (default =false=), show name of graph
469
+ %
470
+ % * show_virtual(+Boolean)
471
+ % If =false= (default =true=), do not show virtual
472
+ % repositories.
473
+ %
474
+ % * indent(Atom)
475
+ % Atom repeated for indentation levels
476
+
477
+ rdf_list_library(Id) :-
478
+ rdf_list_library(Id, []).
479
+ rdf_list_library(Id, Options) :-
480
+ load_commands(Id, Options, Commands),
481
+ maplist(print_load(Options), Commands).
482
+
483
+ print_load(Options, _Level-virtual(_)) :-
484
+ option(show_virtual(false), Options),
485
+ !.
486
+ print_load(Options, Level-Command) :-
487
+ option(indent(Indent), Options, '. '),
488
+ forall(between(2, Level, _), format(Indent)),
489
+ print_command(Command, Options),
490
+ format('~N').
491
+
492
+ print_command(virtual(URL), _Options) :-
493
+ format('<~w>', [URL]).
494
+ print_command(rdf_load(URL), Options) :-
495
+ print_command(rdf_load(URL, []), Options).
496
+ print_command(rdf_load(URL, RDFOptions), Options) :-
497
+ ( option(show_source(true), Options, true)
498
+ -> format('~w', [URL]),
499
+ ( option(blank_nodes(noshare), RDFOptions)
500
+ -> format(' <not shared>')
501
+ ; true
502
+ ),
503
+ ( exists_url(URL, Ext)
504
+ -> ( Ext == ''
505
+ -> true
506
+ ; format('[.~w]', [Ext])
507
+ )
508
+ ; format(' [NOT FOUND]')
509
+ )
510
+ ; true
511
+ ),
512
+ ( option(show_graph(true), Options, false),
513
+ option(graph(Base), RDFOptions)
514
+ -> format('~N\tSource: ~w', [Base])
515
+ ; true
516
+ ).
517
+
518
+ exists_url(URL, Ext) :-
519
+ uri_file_name(URL, Path),
520
+ !,
521
+ add_storage_extension(Path, Ext, PathEx),
522
+ access_file(PathEx, read),
523
+ !.
524
+ exists_url(URL, Ext) :-
525
+ uri_components(URL, Components),
526
+ uri_data(scheme, Components, Scheme),
527
+ atom(Scheme),
528
+ url_scheme(Scheme),
529
+ add_storage_extension(URL, Ext, URLEx),
530
+ catch(http_open(URLEx, Stream, [ method(head) ]), _, fail),
531
+ !,
532
+ close(Stream).
533
+
534
+ :- multifile
535
+ rdf_db:rdf_storage_encoding/2.
536
+
537
+ add_storage_extension(File, '', File).
538
+ add_storage_extension(File, Ext, FileEx) :-
539
+ rdf_db:rdf_storage_encoding(Ext, _Format),
540
+ \+ file_name_extension(_, Ext, File),
541
+ file_name_extension(File, Ext, FileEx).
542
+
543
+ url_scheme(http).
544
+ url_scheme(https).
545
+
546
+
547
+ %! rdf_list_library
548
+ %
549
+ % Prints known RDF library identifiers to current output.
550
+
551
+ rdf_list_library :-
552
+ rdf_update_library_index,
553
+ ( rdf_library_index(Id, title(TitleLiteral)),
554
+ plain_string(TitleLiteral, Title),
555
+ format('~w ~t~20|~w', [Id, Title]),
556
+ ( rdf_library_index(Id, version(Version))
557
+ -> format(' (version ~w)', [Version])
558
+ ; true
559
+ ),
560
+ nl,
561
+ fail
562
+ ; true
563
+ ).
564
+
565
+ plain_string(String, String) :-
566
+ atomic(String),
567
+ !.
568
+ plain_string(lang(en, String), String) :- !.
569
+ plain_string(lang(_, String), String) :- !.
570
+ plain_string(type(_, String), String) :- !.
571
+
572
+ %! rdf_library_index(?Id, ?Facet) is nondet.
573
+ %
574
+ % Query the content of the library. Defined facets are:
575
+ %
576
+ % * source(URL)
577
+ % Location from which to load the ontology
578
+ %
579
+ % * title(Atom)
580
+ % Title used for the ontology
581
+ %
582
+ % * comment(Atom)
583
+ % Additional comments for the ontology
584
+ %
585
+ % * version(Atom)
586
+ % Version information on the ontology
587
+ %
588
+ % * imports(Type, URL)
589
+ % URLs needed by this ontology. May succeed multiple
590
+ % times. Type is one of =ontology=, =schema= or =instances=.
591
+ %
592
+ % * base_uri(BaseURI)
593
+ % Base URI to use when loading documents. If BaseURI
594
+ % ends in =|/|=, the actual filename is attached.
595
+ %
596
+ % * claimed_source(Source)
597
+ % URL from which we claim to have loaded the RDF. If
598
+ % Source ends in =|/|=, the actual filename is
599
+ % attached.
600
+ %
601
+ % * blank_nodes(Share)
602
+ % Defines how equivalent blank nodes are handled, where
603
+ % Share is one of =share= or =noshare=. Default is to
604
+ % share.
605
+ %
606
+ % * format(Format)
607
+ % Format of the resource. Can be used to overrule
608
+ % if the format as derived from the HTTP content type
609
+ % is wrong.
610
+ %
611
+ % * provides_ns(URL)
612
+ % Ontology provides definitions in the namespace URL.
613
+ % The formal definition of this is troublesome, but in
614
+ % practice it means the ontology has triples whose
615
+ % subjects are in the given namespace.
616
+ %
617
+ % * uses_ns(URL)
618
+ % The ontology depends on the given namespace. Normally
619
+ % means it contains triples that have predicates or
620
+ % objects in the given namespace.
621
+ %
622
+ % * manifest(URL)
623
+ % URL of the manifest in which this ontology is defined.
624
+ %
625
+ % * virtual
626
+ % Entry is virtual (cannot be loaded)
627
+
628
+ rdf_library_index(Id, Facet) :-
629
+ library(Id, Path, Facets),
630
+ ( Facet = source(Path)
631
+ ; member(Facet, Facets)
632
+ ).
633
+
634
+
635
+ /*******************************
636
+ * MANIFEST PROCESSING *
637
+ *******************************/
638
+
639
+ %! rdf_attach_library(+Source)
640
+ %
641
+ % Attach manifest from Source. Source is one of
642
+ %
643
+ % * URL
644
+ % Load single manifest from this URL
645
+ % * File
646
+ % Load single manifest from this file
647
+ % * Directory
648
+ % Scan all subdirectories and load all =|Manifest.ttl|= or
649
+ % =|Manifest.rdf|= found. If Directory is a path-alias
650
+ % (e.g., ontology(.)), _all_ referenced directories are
651
+ % scanned for manifest files.
652
+ %
653
+ % Encountered namespaces are registered using rdf_register_ns/2.
654
+ % Encountered ontologies are added to the index. If a manifest was
655
+ % already loaded it will be reloaded if the modification time has
656
+ % changed.
657
+
658
+ rdf_attach_library(URL) :-
659
+ atom(URL),
660
+ uri_is_global(URL),
661
+ \+ is_absolute_file_name(URL), % avoid interpreting C: as a schema
662
+ !,
663
+ process_manifest(URL).
664
+ rdf_attach_library(File) :-
665
+ absolute_file_name(File, Path,
666
+ [ extensions([rdf,ttl]),
667
+ access(read),
668
+ file_errors(fail)
669
+ ]),
670
+ !,
671
+ process_manifest(Path).
672
+ rdf_attach_library(Dir) :-
673
+ forall(absolute_file_name(Dir, Path,
674
+ [ file_type(directory),
675
+ access(read),
676
+ solutions(all)
677
+ ]),
678
+ attach_dir(Path, [])).
679
+
680
+
681
+ %! rdf_update_library_index
682
+ %
683
+ % Reload all Manifest files.
684
+
685
+ rdf_update_library_index :-
686
+ forall(manifest(Location, _Time),
687
+ process_manifest(Location)).
688
+
689
+ attach_dir(Path, Visited) :-
690
+ memberchk(Path, Visited),
691
+ !.
692
+ attach_dir(Path, Visited) :-
693
+ atom_concat(Path, '/*', Pattern),
694
+ expand_file_name(Pattern, Members),
695
+ ( manifest_file(MBase),
696
+ rdf_extension(Ext),
697
+ atomic_list_concat([Path, /, MBase, '.', Ext], Manifest),
698
+ exists_file(Manifest)
699
+ -> process_manifest(Manifest)
700
+ ; print_message(silent, rdf(no_manifest(Path)))
701
+ ),
702
+ ( member(Dir, Members),
703
+ exists_directory(Dir),
704
+ file_base_name(Dir, Base),
705
+ \+ hidden_base(Base),
706
+ attach_dir(Dir, [Path|Visited]),
707
+ fail ; true
708
+ ).
709
+
710
+ hidden_base('CVS').
711
+ hidden_base('cvs'). % Windows
712
+
713
+ %! process_manifest(+Location) is det.
714
+ %
715
+ % Process a manifest file, registering encountered namespaces and
716
+ % creating clauses for library/3. No op if manifest was loaded and
717
+ % not changed. Removes old data if the manifest was changed.
718
+ %
719
+ % @param Location is either a path name or a URL.
720
+
721
+ process_manifest(Source) :-
722
+ ( web_url(Source)
723
+ -> uri_normalized(Source, Manifest)
724
+ ; uri_file_name(Source, Manifest0)
725
+ -> absolute_file_name(Manifest0, ManifestFile),
726
+ uri_file_name(Manifest, ManifestFile)
727
+ ; absolute_file_name(Source, ManifestFile),
728
+ uri_file_name(Manifest, ManifestFile)
729
+ ), % Manifest is a canonical URI
730
+ source_time(Manifest, MT),
731
+ ( manifest(Manifest, Time),
732
+ ( MT =< Time
733
+ -> !
734
+ ; retractall(manifest(Manifest, Time)),
735
+ library_db(Id, URL, Facets),
736
+ memberchk(manifest(Manifest), Facets),
737
+ retractall(library_db(Id, URL, Facets)),
738
+ fail
739
+ )
740
+ ; read_triples(Manifest, Triples),
741
+ process_triples(Manifest, Triples),
742
+ print_message(informational, rdf(manifest(loaded, Manifest))),
743
+ assert(manifest(Manifest, MT))
744
+ ).
745
+
746
+ process_triples(Manifest, Triples) :-
747
+ findall(ns(Mnemonic, NameSpace),
748
+ extract_namespace(Triples, Mnemonic, NameSpace),
749
+ NameSpaces),
750
+ findall(Ontology,
751
+ extract_ontology(Triples, Ontology),
752
+ Ontologies),
753
+ maplist(define_namespace, NameSpaces),
754
+ maplist(assert_ontology(Manifest), Ontologies).
755
+
756
+ %! extract_namespace(+Triples, -Mnemonic, -NameSpace)
757
+ %
758
+ % True if Mnemonic is an abbreviation of NameSpace.
759
+
760
+ extract_namespace(Triples, Mnemonic, Namespace) :-
761
+ edge(Triples, Decl, lib:mnemonic, literal(Mnemonic)),
762
+ edge(Triples, Decl, lib:namespace, Namespace).
763
+ extract_namespace(Triples, Mnemonic, Namespace) :-
764
+ edge(Triples, Decl, vann:preferredNamespacePrefix, literal(Mnemonic)),
765
+ edge(Triples, Decl, vann:preferredNamespaceUri, literal(Namespace)).
766
+
767
+ %! extract_ontology(+Triples, -Ontology) is nondet.
768
+ %
769
+ % Extract definition of an ontology
770
+
771
+ extract_ontology(Triples, library(Name, URL, Options)) :-
772
+ distinct(URL, ontology(Triples, URL)),
773
+ file_base_name(URL, BaseName),
774
+ file_name_extension(Name, _, BaseName),
775
+ findall(Facet, facet(Triples, URL, Facet), Options0),
776
+ sort(Options0, Options1),
777
+ keep_specialized_facets(Options1, Options).
778
+
779
+ ontology(Triples, URL) :-
780
+ edge(Triples, URL, rdf:type, Type),
781
+ ontology_type(Type).
782
+
783
+ keep_specialized_facets(All, Special) :-
784
+ exclude(more_general(All), All, Special).
785
+
786
+ more_general(All, Facet) :-
787
+ generalized(Facet, Special),
788
+ memberchk(Special, All).
789
+
790
+ generalized(imports(ontology, Path), imports(Other, Path)) :-
791
+ dif(Other, ontology).
792
+
793
+ ontology_type(X) :-
794
+ ( rdf_equal(X, lib:'Ontology')
795
+ ; rdf_equal(X, lib:'Schema')
796
+ ; rdf_equal(X, lib:'Instances')
797
+ ; rdf_equal(X, void:'Dataset')
798
+ ; rdf_equal(X, void:'Linkset')
799
+ ).
800
+
801
+ %! facet(+Triples, +File, -Facet) is nondet.
802
+ %
803
+ % Enumerate facets about File from Triples. Facets are described
804
+ % with rdf_library_index/2.
805
+
806
+ facet(Triples, File, title(Title)) :-
807
+ edge(Triples, File, dcterms:title, literal(Title)).
808
+ facet(Triples, File, version(Version)) :-
809
+ edge(Triples, File, owl:versionInfo, literal(Version)).
810
+ facet(Triples, File, comment(Comment)) :-
811
+ edge(Triples, File, rdfs:comment, literal(Comment)).
812
+ facet(Triples, File, base_uri(BaseURI)) :-
813
+ edge(Triples, File, lib:baseURI, BaseURI).
814
+ facet(Triples, File, claimed_source(Source)) :-
815
+ edge(Triples, File, lib:source, Source).
816
+ facet(Triples, File, format(Format)) :-
817
+ edge(Triples, File, lib:format, literal(Format)).
818
+ facet(Triples, File, blank_nodes(Mode)) :-
819
+ edge(Triples, File, lib:blankNodes, literal(Mode)),
820
+ must_be(oneof([share,noshare]), Mode).
821
+ facet(Triples, File, imports(ontology, Path)) :-
822
+ edge(Triples, File, owl:imports, Path).
823
+ facet(Triples, File, imports(schema, Path)) :-
824
+ edge(Triples, File, lib:schema, Path).
825
+ facet(Triples, File, imports(instances, Path)) :-
826
+ edge(Triples, File, lib:instances, Path).
827
+ facet(Triples, File, imports(subset, Path)) :-
828
+ edge(Triples, File, void:subset, Path).
829
+ facet(Triples, File, imports(data_dump, Path)) :-
830
+ edge(Triples, File, void:dataDump, Path).
831
+ facet(Triples, File, provides_ns(NS)) :-
832
+ edge(Triples, File, lib:providesNamespace, NSDecl),
833
+ edge(Triples, NSDecl, lib:namespace, NS).
834
+ facet(Triples, File, uses_ns(NS)) :-
835
+ edge(Triples, File, lib:usesNamespace, NSDecl),
836
+ edge(Triples, NSDecl, lib:namespace, NS).
837
+ facet(Triples, File, virtual) :-
838
+ ( edge(Triples, File, rdf:type, lib:'Virtual')
839
+ ; edge(Triples, File, rdf:type, void:'Dataset')
840
+ ; edge(Triples, File, rdf:type, void:'Linkset')
841
+ ) -> true.
842
+
843
+ %! edge(+Triples, ?S, ?P, ?O) is nondet.
844
+ %
845
+ % Like rdf_has/3 over a list of Triples.
846
+
847
+ edge(Triples, S, P, O) :-
848
+ nonvar(P),
849
+ !,
850
+ sub_p(SubP, P),
851
+ member(rdf(S,SubP,O), Triples).
852
+ edge(Triples, S, P, O) :-
853
+ member(rdf(S,SubP,O), Triples),
854
+ sub_p(SubP, P).
855
+
856
+ sub_p(P, P).
857
+ sub_p(Sub, P) :-
858
+ ( nonvar(Sub)
859
+ -> sub_property_of(Sub, Sub1),
860
+ sub_p(Sub1, P)
861
+ ; sub_property_of(Sub1, P),
862
+ sub_p(Sub, Sub1)
863
+ ).
864
+
865
+ :- rdf_meta
866
+ sub_property_of(r,r).
867
+
868
+ sub_property_of(void:subset, owl:imports).
869
+ sub_property_of(dcterms:description, rdfs:comment).
870
+ sub_property_of(void:dataDump, owl:imports).
871
+ sub_property_of(dc:title, dcterms:title).
872
+
873
+ %! source_time(+Source, -Modified) is semidet.
874
+ %
875
+ % Modified is the last modification time of Source.
876
+ %
877
+ % @error existence_error(Type, Source).
878
+
879
+ source_time(URL, Modified) :-
880
+ web_url(URL),
881
+ !,
882
+ http_open(URL, Stream,
883
+ [ header(last_modified, Date),
884
+ method(head)
885
+ ]),
886
+ close(Stream),
887
+ Date \== '',
888
+ parse_time(Date, Modified).
889
+ source_time(URL, Modified) :-
890
+ uri_file_name(URL, File),
891
+ !,
892
+ time_file(File, Modified).
893
+ source_time(File, Modified) :-
894
+ time_file(File, Modified).
895
+
896
+ web_url(URL) :-
897
+ sub_atom(URL, 0, _, _, 'http://').
898
+
899
+
900
+ %! read_triples(+URL, -Triples) is det.
901
+ %
902
+ % Read RDF/XML or Turtle file into a list of triples.
903
+
904
+ read_triples(FileURL, Triples) :-
905
+ uri_file_name(FileURL, File),
906
+ !,
907
+ ( file_name_extension(_, rdf, File)
908
+ -> load_rdf(File, Triples)
909
+ ; rdf_load_turtle(File, Triples, [])
910
+ ).
911
+ read_triples(HTTPURL, Triples) :-
912
+ file_name_extension(_, Ext, HTTPURL),
913
+ setup_call_cleanup(
914
+ http_open(HTTPURL, In, []),
915
+ stream_triples(In, Ext, Triples),
916
+ close(In)).
917
+
918
+ stream_triples(Stream, rdf, Triples) :-
919
+ load_rdf(stream(Stream), Triples).
920
+ stream_triples(Stream, ttl, Triples) :-
921
+ rdf_load_turtle(stream(Stream), Triples, []).
922
+
923
+
924
+ manifest_file('void'). % make order optional?
925
+ manifest_file('Manifest').
926
+ manifest_file('manifest').
927
+
928
+ rdf_extension(ttl).
929
+ rdf_extension(rdf).
930
+
931
+
932
+ %! assert_ontology(+Manifest, +Term:library(Name, File, Facets)) is det.
933
+ %
934
+ % Add ontology to our library.
935
+ %
936
+ % @tbd Proper behaviour of re-definition?
937
+
938
+ assert_ontology(Manifest, Term) :-
939
+ Term = library(Name, URL, Facets),
940
+ ( library(Name, _URL2, Facets2)
941
+ -> memberchk(manifest(Manifest2), Facets2),
942
+ print_message(warning, rdf(redefined(Manifest, Name, Manifest2)))
943
+ ; true
944
+ ),
945
+ assert(library_db(Name, URL,
946
+ [ manifest(Manifest)
947
+ | Facets
948
+ ])).
949
+
950
+
951
+ %! library(?Id, ?URL, ?Facets)
952
+ %
953
+ % Access DB for library information.
954
+
955
+ library(Id, URL, Facets) :-
956
+ nonvar(URL),
957
+ normalize_url(URL, CanonicalURL),
958
+ library_db(Id, CanonicalURL, Facets).
959
+ library(Id, URL, Facets) :-
960
+ library_db(Id, URL, Facets).
961
+
962
+ %! normalize_url(+URL, -Normalized)
963
+ %
964
+ % Like uri_normalized/2, but we also need (platform dependent)
965
+ % filename canonization.
966
+
967
+ normalize_url(URL, CanonicalURL) :-
968
+ uri_file_name(URL, File),
969
+ !,
970
+ absolute_file_name(File, CanFile),
971
+ uri_file_name(CanonicalURL, CanFile).
972
+ normalize_url(URL, CanonicalURL) :-
973
+ uri_normalized(URL, CanonicalURL).
974
+
975
+ %! define_namespace(NS:ns(Mnemonic, Namespace)) is det.
976
+ %
977
+ % Add namespace declaration for Mnemonic.
978
+
979
+ define_namespace(ns(Mnemonic, Namespace)) :-
980
+ debug(rdf_library, 'Adding NS ~w = ~q', [Mnemonic, Namespace]),
981
+ rdf_register_ns(Mnemonic, Namespace,
982
+ [
983
+ ]).
984
+
985
+ %! rdf_current_manifest(-URL) is nondet.
986
+ %
987
+ % True if URL is the URL of a currently loaded manifest file.
988
+
989
+ rdf_current_manifest(URL) :-
990
+ manifest(URL, _Time).
991
+
992
+
993
+
994
+ /*******************************
995
+ * MESSAGES *
996
+ *******************************/
997
+
998
+ :- multifile
999
+ prolog:message/3.
1000
+
1001
+ prolog:message(rdf(no_manifest(Path))) -->
1002
+ [ 'Directory ~w has no Manifest.{ttl,rdf} file'-[Path] ].
1003
+ prolog:message(rdf(redefined(Manifest, Name, Manifest2))) -->
1004
+ [ '~w: Ontology ~w already defined in ~w'-
1005
+ [Manifest, Name, Manifest2]
1006
+ ].
1007
+ prolog:message(rdf(manifest(loaded, Manifest))) -->
1008
+ [ 'Loaded RDF manifest ~w'-[Manifest]
1009
+ ].
1010
+ prolog:message(rdf(load_conflict(C1, C2))) -->
1011
+ [ 'Conflicting loads: ~p <-> ~p'-[C1, C2] ].
1012
+ prolog:message(rdf(multiple_source_for_graph(Graph, Sources))) -->
1013
+ [ 'Multiple sources for graph ~p:'-[Graph] ],
1014
+ sources(Sources).
1015
+ prolog:message(rdf(loading(Files, Threads))) -->
1016
+ [ 'Loading ~D files using ~D threads ...'-[Files, Threads] ].
1017
+
1018
+ sources([]) --> [].
1019
+ sources([rdf_load(From, _Options)|T]) -->
1020
+ [ nl, '\t~p'-[From] ],
1021
+ sources(T).