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,701 @@
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
+ CWI, 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_write,
37
+ [ rdf_write_xml/2 % +Stream, +Triples
38
+ ]).
39
+ :- autoload(library(assoc),
40
+ [empty_assoc/1,put_assoc/4,assoc_to_keys/2,get_assoc/3]).
41
+ :- use_module(library(debug),[assertion/1]).
42
+ :- autoload(library(lists),[member/2,append/3,select/3]).
43
+ :- autoload(library(sgml),
44
+ [xml_quote_attribute/3, xml_name/1, xml_quote_cdata/3, xml_is_dom/1]).
45
+ :- autoload(library(sgml_write),[xml_write/3]).
46
+ :- use_module(library(semweb/rdf_prefixes),
47
+ [rdf_global_id/2, rdf_register_ns/2, op(_,_,_)]).
48
+ :- if(exists_source(library(semweb/rdf_db))).
49
+ :- autoload(library(semweb/rdf_db),
50
+ [rdf_is_bnode/1, rdf_equal/2]).
51
+ :- else.
52
+ :- rdf_meta
53
+ rdf_equal(o,o).
54
+
55
+ rdf_equal(X,X).
56
+ rdf_is_bnode(Node) :-
57
+ atom(Node),
58
+ sub_atom(Node, 0, _, _, '_:').
59
+
60
+ lang_equal(X, Y) :-
61
+ downcase_atom(X, L),
62
+ downcase_atom(Y, L).
63
+
64
+
65
+ :- endif.
66
+
67
+
68
+ /** <module> Write RDF/XML from a list of triples
69
+
70
+ This module writes an RDF/XML document from a list of triples of the
71
+ format rdf(Subject, Predicate, Object). It is primarily intended for
72
+ communicating computed RDF model fragments to external programs using
73
+ RDF/XML.
74
+
75
+ When used from the HTTP library, use the following code:
76
+
77
+ ==
78
+ reply_graph(RDF) :-
79
+ format('Content-type: application/rdf+xml; charset=UTF-8~n~n'),
80
+ rdf_write_xml(current_output, RDF).
81
+ ==
82
+
83
+ @author Jan Wielemaker
84
+ @see library(semweb/rdf_db) offers saving a named graph directly from
85
+ the RDF database.
86
+ */
87
+
88
+
89
+ /*******************************
90
+ * WRITE RDFXML *
91
+ *******************************/
92
+
93
+ %! rdf_write_xml(+Out:stream, +Triples:list(rdf(S,P,O))) is det.
94
+ %
95
+ % Write an RDF/XML serialization of Triples to Out.
96
+
97
+ rdf_write_xml(Out, Triples) :-
98
+ sort(Triples, Unique),
99
+ rdf_write_header(Out, Unique),
100
+ node_id_map(Unique, AnonIDs),
101
+ rdf_write_triples(Unique, AnonIDs, Out),
102
+ rdf_write_footer(Out).
103
+
104
+
105
+ /*******************************
106
+ * HEADER/FOOTER *
107
+ *******************************/
108
+
109
+ %! rdf_write_header(+Out, +Triples)
110
+ %
111
+ % Save XML document header, doctype and open the RDF environment.
112
+ % This predicate also sets up the namespace notation.
113
+
114
+ rdf_write_header(Out, Triples) :-
115
+ xml_encoding(Out, Enc, Encoding),
116
+ format(Out, '<?xml version=\'1.0\' encoding=\'~w\'?>~n', [Encoding]),
117
+ format(Out, '<!DOCTYPE rdf:RDF [', []),
118
+ used_namespaces(Triples, NSList),
119
+ ( member(Id, NSList),
120
+ ns(Id, NS),
121
+ xml_quote_attribute(NS, NSText0, Enc),
122
+ xml_escape_parameter_entity(NSText0, NSText),
123
+ format(Out, '~N <!ENTITY ~w \'~w\'>', [Id, NSText]),
124
+ fail
125
+ ; true
126
+ ),
127
+ format(Out, '~N]>~n~n', []),
128
+ format(Out, '<rdf:RDF', []),
129
+ ( member(Id, NSList),
130
+ format(Out, '~N xmlns:~w="&~w;"~n', [Id, Id]),
131
+ fail
132
+ ; true
133
+ ),
134
+ format(Out, '>~n', []).
135
+
136
+
137
+ xml_encoding(Out, Enc, Encoding) :-
138
+ stream_property(Out, encoding(Enc)),
139
+ ( xml_encoding_name(Enc, Encoding)
140
+ -> true
141
+ ; throw(error(domain_error(rdf_encoding, Enc), _))
142
+ ).
143
+
144
+ xml_encoding_name(ascii, 'US-ASCII').
145
+ xml_encoding_name(iso_latin_1, 'ISO-8859-1').
146
+ xml_encoding_name(utf8, 'UTF-8').
147
+
148
+ %! xml_escape_parameter_entity(+In, -Out) is det.
149
+ %
150
+ % Escape % as &#37; for entity declarations.
151
+
152
+ xml_escape_parameter_entity(In, Out) :-
153
+ sub_atom(In, _, _, _, '%'),
154
+ !,
155
+ atom_codes(In, Codes),
156
+ phrase(escape_parent(Codes), OutCodes),
157
+ atom_codes(Out, OutCodes).
158
+ xml_escape_parameter_entity(In, In).
159
+
160
+ escape_parent([]) --> [].
161
+ escape_parent([H|T]) -->
162
+ ( { H == 37 }
163
+ -> "&#37;"
164
+ ; [H]
165
+ ),
166
+ escape_parent(T).
167
+
168
+ %! used_namespaces(+Triples:list(rdf(S,P,O)), -List:atom) is det.
169
+ %
170
+ % Return the list of namespace abbreviations used in a set of
171
+ % triples.
172
+
173
+ used_namespaces(Triples, NSList) :-
174
+ decl_used_predicate_ns(Triples),
175
+ resources(Triples, Resources),
176
+ empty_assoc(A0),
177
+ put_assoc(rdf, A0, *, A1), % needed for rdf:RDF
178
+ res_used_namespaces(Resources, _NoNS, A1, A),
179
+ assoc_to_keys(A, NSList).
180
+
181
+
182
+ res_used_namespaces([], [], A, A).
183
+ res_used_namespaces([Resource|T], NoNS, A0, A) :-
184
+ ns(NS, Full),
185
+ Full \== '',
186
+ atom_concat(Full, Local, Resource),
187
+ xml_name(Local),
188
+ !,
189
+ put_assoc(NS, A0, *, A1),
190
+ res_used_namespaces(T, NoNS, A1, A).
191
+ res_used_namespaces([R|T0], [R|T], A0, A) :-
192
+ res_used_namespaces(T0, T, A0, A).
193
+
194
+ %! resources(+Triples:list(rdf(S,P,O)), -Resources:list(atom)) is det.
195
+ %
196
+ % Resources is the set of resources referenced in Triples.
197
+
198
+ resources(Triples, Resources) :-
199
+ phrase(resources(Triples), Raw),
200
+ sort(Raw, Resources).
201
+
202
+ resources([]) -->
203
+ [].
204
+ resources([rdf(S,P,O)|T]) -->
205
+ [S,P],
206
+ object_resources(O),
207
+ resources(T).
208
+
209
+ object_resources(Atom) -->
210
+ { atom(Atom) },
211
+ !,
212
+ [ Atom ].
213
+ object_resources(literal(type(Type, _))) -->
214
+ !,
215
+ [ Type ].
216
+ object_resources(_) -->
217
+ [].
218
+
219
+ %! decl_used_predicate_ns(+Triples:list(rdf(S,P,O)))
220
+ %
221
+ % For every URL used as a predicate we *MUST* define a namespace
222
+ % as we cannot use names holding /, :, etc. as XML identifiers.
223
+
224
+ :- thread_local
225
+ predicate_ns/2.
226
+
227
+ decl_used_predicate_ns(Triples) :-
228
+ retractall(predicate_ns(_,_)),
229
+ ( member(rdf(_,P,_), Triples),
230
+ decl_predicate_ns(P),
231
+ fail
232
+ ; true
233
+ ).
234
+
235
+ decl_predicate_ns(Pred) :-
236
+ predicate_ns(Pred, _),
237
+ !.
238
+ decl_predicate_ns(Pred) :-
239
+ rdf_global_id(NS:Local, Pred),
240
+ xml_name(Local),
241
+ !,
242
+ assert(predicate_ns(Pred, NS)).
243
+ decl_predicate_ns(Pred) :-
244
+ is_bag_li_predicate(Pred),
245
+ !.
246
+ decl_predicate_ns(Pred) :-
247
+ atom_codes(Pred, Codes),
248
+ append(NSCodes, LocalCodes, Codes),
249
+ xml_codes(LocalCodes),
250
+ !,
251
+ ( NSCodes \== []
252
+ -> atom_codes(NS, NSCodes),
253
+ ( ns(Id, NS)
254
+ -> assert(predicate_ns(Pred, Id))
255
+ ; between(1, infinite, N),
256
+ atom_concat(ns, N, Id),
257
+ \+ ns(Id, _)
258
+ -> rdf_register_ns(Id, NS),
259
+ print_message(informational,
260
+ rdf(using_namespace(Id, NS)))
261
+ ),
262
+ assert(predicate_ns(Pred, Id))
263
+ ; assert(predicate_ns(Pred, -)) % no namespace used
264
+ ).
265
+
266
+ xml_codes([]).
267
+ xml_codes([H|T]) :-
268
+ xml_code(H),
269
+ xml_codes(T).
270
+
271
+ xml_code(X) :-
272
+ code_type(X, csym),
273
+ !.
274
+ xml_code(0'-). % '
275
+
276
+
277
+ rdf_write_footer(Out) :-
278
+ format(Out, '</rdf:RDF>~n', []).
279
+
280
+
281
+ /*******************************
282
+ * ANONYMOUS IDS *
283
+ *******************************/
284
+
285
+ %! node_id_map(+Triples, -IdMap) is det.
286
+ %
287
+ % Create an assoc Resource -> NodeID for those anonymous resources
288
+ % in Triples that need a NodeID. This implies all anonymous
289
+ % resources that are used multiple times as object value.
290
+
291
+ node_id_map(Triples, IdMap) :-
292
+ anonymous_objects(Triples, Objs),
293
+ msort(Objs, Sorted),
294
+ empty_assoc(IdMap0),
295
+ nodeid_map(Sorted, 0, IdMap0, IdMap).
296
+
297
+ anonymous_objects([], []).
298
+ anonymous_objects([rdf(_,_,O)|T0], Anon) :-
299
+ rdf_is_bnode(O),
300
+ !,
301
+ Anon = [O|T],
302
+ anonymous_objects(T0, T).
303
+ anonymous_objects([_|T0], T) :-
304
+ anonymous_objects(T0, T).
305
+
306
+ nodeid_map([], _, Map, Map).
307
+ nodeid_map([H,H|T0], Id, Map0, Map) :-
308
+ !,
309
+ remove_leading(H, T0, T),
310
+ atom_concat(bn, Id, NodeId),
311
+ put_assoc(H, Map0, NodeId, Map1),
312
+ Id2 is Id + 1,
313
+ nodeid_map(T, Id2, Map1, Map).
314
+ nodeid_map([_|T], Id, Map0, Map) :-
315
+ nodeid_map(T, Id, Map0, Map).
316
+
317
+ remove_leading(H, [H|T0], T) :-
318
+ !,
319
+ remove_leading(H, T0, T).
320
+ remove_leading(_, T, T).
321
+
322
+
323
+ /*******************************
324
+ * TRIPLES *
325
+ *******************************/
326
+
327
+ rdf_write_triples(Triples, NodeIDs, Out) :-
328
+ rdf_write_triples(Triples, NodeIDs, Out, [], Anon),
329
+ rdf_write_anon(Anon, NodeIDs, Out, Anon).
330
+
331
+ rdf_write_triples([], _, _, Anon, Anon).
332
+ rdf_write_triples([H|T0], NodeIDs, Out, Anon0, Anon) :-
333
+ arg(1, H, S),
334
+ subject_triples(S, [H|T0], T, OnSubject),
335
+ ( rdf_is_bnode(S)
336
+ -> rdf_write_triples(T, NodeIDs, Out, [anon(S,_,OnSubject)|Anon0], Anon)
337
+ ; rdf_write_subject(OnSubject, S, NodeIDs, Out, Anon0),
338
+ rdf_write_triples(T, NodeIDs, Out, Anon0, Anon)
339
+ ).
340
+
341
+ subject_triples(S, [H|T0], T, [H|M]) :-
342
+ arg(1, H, S),
343
+ !,
344
+ subject_triples(S, T0, T, M).
345
+ subject_triples(_, T, T, []).
346
+
347
+
348
+ rdf_write_anon([], _, _, _).
349
+ rdf_write_anon([anon(Subject, Done, Triples)|T], NodeIDs, Out, Anon) :-
350
+ Done \== true,
351
+ !,
352
+ Done = true,
353
+ rdf_write_subject(Triples, Subject, NodeIDs, Out, Anon),
354
+ rdf_write_anon(T, NodeIDs, Out, Anon).
355
+ rdf_write_anon([_|T], NodeIDs, Out, Anon) :-
356
+ rdf_write_anon(T, NodeIDs, Out, Anon).
357
+
358
+ rdf_write_subject(Triples, Subject, NodeIDs, Out, Anon) :-
359
+ rdf_write_subject(Triples, Out, Subject, NodeIDs, -, 0, Anon),
360
+ !,
361
+ format(Out, '~n', []).
362
+ rdf_write_subject(_, Subject, _, _, _) :-
363
+ throw(error(rdf_save_failed(Subject), 'Internal error')).
364
+
365
+ rdf_write_subject(Triples, Out, Subject, NodeIDs, DefNS, Indent, Anon) :-
366
+ rdf_equal(rdf:type, RdfType),
367
+ select(rdf(_, RdfType,Type), Triples, Triples1),
368
+ \+ rdf_is_bnode(Type),
369
+ rdf_id(Type, DefNS, TypeId),
370
+ xml_is_name(TypeId),
371
+ !,
372
+ format(Out, '~*|<', [Indent]),
373
+ rdf_write_id(Out, TypeId),
374
+ save_about(Out, Subject, NodeIDs),
375
+ save_attributes(Triples1, DefNS, Out, NodeIDs, TypeId, Indent, Anon).
376
+ rdf_write_subject(Triples, Out, Subject, NodeIDs, _DefNS, Indent, Anon) :-
377
+ format(Out, '~*|<rdf:Description', [Indent]),
378
+ save_about(Out, Subject, NodeIDs),
379
+ save_attributes(Triples, rdf, Out, NodeIDs, rdf:'Description', Indent, Anon).
380
+
381
+ xml_is_name(_NS:Atom) :-
382
+ !,
383
+ xml_name(Atom).
384
+ xml_is_name(Atom) :-
385
+ xml_name(Atom).
386
+
387
+ save_about(Out, Subject, NodeIDs) :-
388
+ rdf_is_bnode(Subject),
389
+ !,
390
+ ( get_assoc(Subject, NodeIDs, NodeID)
391
+ -> format(Out,' rdf:nodeID="~w"', [NodeID])
392
+ ; true
393
+ ).
394
+ save_about(Out, Subject, _) :-
395
+ stream_property(Out, encoding(Encoding)),
396
+ rdf_value(Subject, QSubject, Encoding),
397
+ format(Out, ' rdf:about="~w"', [QSubject]),
398
+ !.
399
+ save_about(_, _, _) :-
400
+ assertion(fail).
401
+
402
+ %! save_attributes(+List, +DefNS, +Out, +NodeIDs, Element, +Indent, +Anon)
403
+ %
404
+ % Save the attributes. Short literal attributes are saved in the
405
+ % tag. Others as the content of the description element. The
406
+ % begin tag has already been filled.
407
+
408
+ save_attributes(Triples, DefNS, Out, NodeIDs, Element, Indent, Anon) :-
409
+ split_attributes(Triples, InTag, InBody),
410
+ SubIndent is Indent + 2,
411
+ save_attributes2(InTag, DefNS, tag, Out, NodeIDs, SubIndent, Anon),
412
+ ( InBody == []
413
+ -> format(Out, '/>~n', [])
414
+ ; format(Out, '>~n', []),
415
+ save_attributes2(InBody, _, body, Out, NodeIDs, SubIndent, Anon),
416
+ format(Out, '~N~*|</~w>~n', [Indent, Element])
417
+ ).
418
+
419
+ % split_attributes(+Triples, -HeadAttrs, -BodyAttr)
420
+ %
421
+ % Split attribute (Name=Value) list into attributes for the head
422
+ % and body. Attributes can only be in the head if they are literal
423
+ % and appear only one time in the attribute list.
424
+
425
+ split_attributes(Triples, HeadAttr, BodyAttr) :-
426
+ duplicate_attributes(Triples, Dupls, Singles),
427
+ simple_literal_attributes(Singles, HeadAttr, Rest),
428
+ append(Dupls, Rest, BodyAttr).
429
+
430
+ % duplicate_attributes(+Attrs, -Duplicates, -Singles)
431
+ %
432
+ % Extract attributes that appear more than onces as we cannot
433
+ % dublicate an attribute in the head according to the XML rules.
434
+
435
+ duplicate_attributes([], [], []).
436
+ duplicate_attributes([H|T], Dupls, Singles) :-
437
+ arg(2, H, Name),
438
+ named_attributes(Name, T, D, R),
439
+ D \== [],
440
+ append([H|D], Dupls2, Dupls),
441
+ !,
442
+ duplicate_attributes(R, Dupls2, Singles).
443
+ duplicate_attributes([H|T], Dupls2, [H|Singles]) :-
444
+ duplicate_attributes(T, Dupls2, Singles).
445
+
446
+ named_attributes(_, [], [], []) :- !.
447
+ named_attributes(Name, [H|T], D, R) :-
448
+ ( arg(2, H, Name)
449
+ -> D = [H|DT],
450
+ named_attributes(Name, T, DT, R)
451
+ ; R = [H|RT],
452
+ named_attributes(Name, T, D, RT)
453
+ ).
454
+
455
+ % simple_literal_attributes(+Attributes, -Inline, -Body)
456
+ %
457
+ % Split attributes for (literal) attributes to be used in the
458
+ % begin-tag and ones that have to go into the body of the description.
459
+
460
+ simple_literal_attributes([], [], []).
461
+ simple_literal_attributes([H|TA], [H|TI], B) :-
462
+ in_tag_attribute(H),
463
+ !,
464
+ simple_literal_attributes(TA, TI, B).
465
+ simple_literal_attributes([H|TA], I, [H|TB]) :-
466
+ simple_literal_attributes(TA, I, TB).
467
+
468
+ in_tag_attribute(rdf(_,P,literal(Text))) :-
469
+ atom(Text), % may not have lang qualifier
470
+ atom_length(Text, Len),
471
+ Len < 60,
472
+ \+ is_bag_li_predicate(P).
473
+
474
+
475
+ % save_attributes(+List, +DefNS, +TagOrBody, +Out, +NodeIDs, +Indent, +Anon)
476
+ %
477
+ % Save a list of attributes.
478
+
479
+ save_attributes2([], _, _, _, _, _, _).
480
+ save_attributes2([H|T], DefNS, Where, Out, NodeIDs, Indent, Anon) :-
481
+ save_attribute(Where, H, DefNS, Out, NodeIDs, Indent, Anon),
482
+ save_attributes2(T, DefNS, Where, Out, NodeIDs, Indent, Anon).
483
+
484
+ %! save_attribute(+Where, +Triple, +DefNS, +Out, +NodeIDs, +Indent, +Anon)
485
+
486
+ save_attribute(tag, rdf(_, Name, literal(Value)), DefNS, Out, _, Indent, _Anon) :-
487
+ AttIndent is Indent + 2,
488
+ rdf_att_id(Name, DefNS, NameText),
489
+ stream_property(Out, encoding(Encoding)),
490
+ xml_quote_attribute(Value, QVal, Encoding),
491
+ format(Out, '~N~*|', [AttIndent]),
492
+ rdf_write_id(Out, NameText),
493
+ format(Out, '="~w"', [QVal]).
494
+ save_attribute(body, rdf(_,Name,literal(Literal)), DefNS, Out, _, Indent, _) :-
495
+ !,
496
+ rdf_p_id(Name, DefNS, NameText),
497
+ format(Out, '~N~*|<', [Indent]),
498
+ rdf_write_id(Out, NameText),
499
+ ( Literal = lang(Lang, Value)
500
+ -> rdf_id(Lang, DefNS, LangText),
501
+ format(Out, ' xml:lang="~w">', [LangText])
502
+ ; Literal = type(Type, Value)
503
+ -> ( rdf_equal(Type, rdf:'XMLLiteral')
504
+ -> write(Out, ' rdf:parseType="Literal">'),
505
+ Value = Literal
506
+ ; stream_property(Out, encoding(Encoding)),
507
+ rdf_value(Type, QVal, Encoding),
508
+ format(Out, ' rdf:datatype="~w">', [QVal])
509
+ )
510
+ ; atomic(Literal)
511
+ -> write(Out, '>'),
512
+ Value = Literal
513
+ ; write(Out, ' rdf:parseType="Literal">'),
514
+ Value = Literal
515
+ ),
516
+ save_attribute_value(Value, Out, Indent),
517
+ write(Out, '</'), rdf_write_id(Out, NameText), write(Out, '>').
518
+ save_attribute(body, rdf(_, Name, Value), DefNS, Out, NodeIDs, Indent, Anon) :-
519
+ rdf_is_bnode(Value),
520
+ !,
521
+ ( memberchk(anon(Value, Done, ValueTriples), Anon)
522
+ -> true
523
+ ; ValueTriples = []
524
+ ),
525
+ rdf_p_id(Name, DefNS, NameText),
526
+ format(Out, '~N~*|<', [Indent]),
527
+ rdf_write_id(Out, NameText),
528
+ ( var(Done)
529
+ -> Done = true,
530
+ SubIndent is Indent + 2,
531
+ ( rdf_equal(RdfType, rdf:type),
532
+ rdf_equal(ListClass, rdf:'List'),
533
+ memberchk(rdf(_, RdfType, ListClass), ValueTriples)
534
+ -> format(Out, ' rdf:parseType="Collection">~n', []),
535
+ rdf_save_list(ValueTriples, Out, Value, NodeIDs, DefNS, SubIndent, Anon)
536
+ ; format(Out, '>~n', []),
537
+ rdf_write_subject(ValueTriples, Out, Value, NodeIDs, DefNS, SubIndent, Anon)
538
+ ),
539
+ format(Out, '~N~*|</', [Indent]),
540
+ rdf_write_id(Out, NameText),
541
+ format(Out, '>~n', [])
542
+ ; get_assoc(Value, NodeIDs, NodeID)
543
+ -> format(Out, ' rdf:nodeID="~w"/>', [NodeID])
544
+ ; assertion(fail)
545
+ ).
546
+ save_attribute(body, rdf(_, Name, Value), DefNS, Out, _, Indent, _Anon) :-
547
+ stream_property(Out, encoding(Encoding)),
548
+ rdf_value(Value, QVal, Encoding),
549
+ rdf_p_id(Name, DefNS, NameText),
550
+ format(Out, '~N~*|<', [Indent]),
551
+ rdf_write_id(Out, NameText),
552
+ format(Out, ' rdf:resource="~w"/>', [QVal]).
553
+
554
+ save_attribute_value(Value, Out, _) :- % strings
555
+ atom(Value),
556
+ !,
557
+ stream_property(Out, encoding(Encoding)),
558
+ xml_quote_cdata(Value, QVal, Encoding),
559
+ write(Out, QVal).
560
+ save_attribute_value(Value, Out, _) :- % numbers
561
+ number(Value),
562
+ !,
563
+ writeq(Out, Value). % quoted: preserve floats
564
+ save_attribute_value(Value, Out, Indent) :-
565
+ xml_is_dom(Value),
566
+ !,
567
+ XMLIndent is Indent+2,
568
+ xml_write(Out, Value,
569
+ [ header(false),
570
+ indent(XMLIndent)
571
+ ]).
572
+ save_attribute_value(Value, _Out, _) :-
573
+ throw(error(save_attribute_value(Value), _)).
574
+
575
+ rdf_save_list(_, _, List, _, _, _, _) :-
576
+ rdf_equal(List, rdf:nil),
577
+ !.
578
+ rdf_save_list(ListTriples, Out, List, NodeIDs, DefNS, Indent, Anon) :-
579
+ rdf_equal(RdfFirst, rdf:first),
580
+ memberchk(rdf(List, RdfFirst, First), ListTriples),
581
+ ( rdf_is_bnode(First),
582
+ memberchk(anon(First, true, FirstTriples), Anon)
583
+ -> nl(Out),
584
+ rdf_write_subject(FirstTriples, Out, First, NodeIDs, DefNS, Indent, Anon)
585
+ ; stream_property(Out, encoding(Encoding)),
586
+ rdf_value(First, QVal, Encoding),
587
+ format(Out, '~N~*|<rdf:Description about="~w"/>',
588
+ [Indent, QVal])
589
+ ),
590
+ ( rdf_equal(RdfRest, rdf:rest),
591
+ memberchk(rdf(List, RdfRest, List2), ListTriples),
592
+ \+ rdf_equal(List2, rdf:nil),
593
+ memberchk(anon(List2, true, List2Triples), Anon)
594
+ -> rdf_save_list(List2Triples, Out, List2, NodeIDs, DefNS, Indent, Anon)
595
+ ; true
596
+ ).
597
+
598
+ %! rdf_p_id(+Resource, +DefNS, -NSLocal)
599
+ %
600
+ % As rdf_id/3 for predicate names. Maps _:<N> to rdf:li.
601
+ %
602
+ % @tbd Ensure we are talking about an rdf:Bag
603
+
604
+ rdf_p_id(LI, _, 'rdf:li') :-
605
+ is_bag_li_predicate(LI),
606
+ !.
607
+ rdf_p_id(Resource, DefNS, NSLocal) :-
608
+ rdf_id(Resource, DefNS, NSLocal).
609
+
610
+ %! is_bag_li_predicate(+Pred) is semidet.
611
+ %
612
+ % True if Pred is _:N, as used for members of an rdf:Bag, rdf:Seq
613
+ % or rdf:Alt.
614
+
615
+ is_bag_li_predicate(Pred) :-
616
+ atom_concat('_:', AN, Pred),
617
+ catch(atom_number(AN, N), _, true), integer(N), N >= 0,
618
+ !.
619
+
620
+
621
+ %! rdf_id(+Resource, +DefNS, -NSLocal)
622
+ %
623
+ % Generate a NS:Local name for Resource given the indicated
624
+ % default namespace. This call is used for elements.
625
+
626
+ rdf_id(Id, NS, NS:Local) :-
627
+ ns(NS, Full),
628
+ Full \== '',
629
+ atom_concat(Full, Local, Id),
630
+ xml_name(Local),
631
+ !.
632
+ rdf_id(Id, _, NS:Local) :-
633
+ ns(NS, Full),
634
+ Full \== '',
635
+ atom_concat(Full, Local, Id),
636
+ xml_name(Local),
637
+ !.
638
+ rdf_id(Id, _, Id).
639
+
640
+
641
+ %! rdf_write_id(+Out, +NSLocal) is det.
642
+ %
643
+ % Write an identifier. We cannot use native write on it as both NS
644
+ % and Local can be operators.
645
+
646
+ rdf_write_id(Out, NS:Local) :-
647
+ !,
648
+ format(Out, '~w:~w', [NS, Local]).
649
+ rdf_write_id(Out, Atom) :-
650
+ write(Out, Atom).
651
+
652
+
653
+ %! rdf_att_id(+URI, +DefNS, -ID)
654
+
655
+ rdf_att_id(Id, _, NS:Local) :-
656
+ ns(NS, Full),
657
+ Full \== '',
658
+ atom_concat(Full, Local, Id),
659
+ xml_name(Local),
660
+ !.
661
+ rdf_att_id(Id, _, Id).
662
+
663
+
664
+ %! rdf_value(+Resource, -Text, +Encoding)
665
+ %
666
+ % According to "6.4 RDF URI References" of the RDF Syntax
667
+ % specification, a URI reference is UNICODE string not containing
668
+ % control sequences, represented as UTF-8 and then as escaped
669
+ % US-ASCII.
670
+ %
671
+ % NOTE: the to_be_described/1 trick ensures entity rewrite in
672
+ % resources that start with 'http://t-d-b.org?'. This is a of a
673
+ % hack to save the artchive data in the MultimediaN project. We
674
+ % should use a more general mechanism.
675
+
676
+ rdf_value(V, Text, Encoding) :-
677
+ to_be_described(Prefix),
678
+ atom_concat(Prefix, V1, V),
679
+ ns(NS, Full),
680
+ atom_concat(Full, Local, V1),
681
+ !,
682
+ xml_quote_attribute(Local, QLocal, Encoding),
683
+ atomic_list_concat([Prefix, '&', NS, (';'), QLocal], Text).
684
+ rdf_value(V, Text, Encoding) :-
685
+ ns(NS, Full),
686
+ atom_concat(Full, Local, V),
687
+ !,
688
+ xml_quote_attribute(Local, QLocal, Encoding),
689
+ atomic_list_concat(['&', NS, (';'), QLocal], Text).
690
+ rdf_value(V, Q, Encoding) :-
691
+ xml_quote_attribute(V, Q, Encoding).
692
+
693
+ to_be_described('http://t-d-b.org?').
694
+
695
+
696
+ /*******************************
697
+ * UTIL *
698
+ *******************************/
699
+
700
+ ns(Id, Full) :-
701
+ rdf_db:ns(Id, Full).