From eb5c0113672d125d9256ba9326b4d04c5d8e0dfa Mon Sep 17 00:00:00 2001 From: Alan Orth Date: Fri, 4 Jan 2019 20:38:11 +0200 Subject: [PATCH] Add notes for 2019-01-04 --- content/posts/2019-01.md | 226 +++++++++++++++++++++++++++++++++++ docs/2019-01/index.html | 247 ++++++++++++++++++++++++++++++++++++++- docs/robots.txt | 2 +- docs/sitemap.xml | 20 ++-- 4 files changed, 481 insertions(+), 14 deletions(-) diff --git a/content/posts/2019-01.md b/content/posts/2019-01.md index 032531db8..1102e017e 100644 --- a/content/posts/2019-01.md +++ b/content/posts/2019-01.md @@ -68,4 +68,230 @@ $ sudo docker rm dspacedb $ sudo docker run --name dspacedb -v /home/aorth/.local/lib/containers/volumes/dspacedb_data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres:9.6-alpine ``` +- Testing DSpace 5.9 with Tomcat 8.5.37 on my local machine and I see that Atmire's Listings and Reports still doesn't work + - After logging in via XMLUI and clicking the Listings and Reports link from the sidebar it redirects me to a JSPUI login page + - If I log in again there the Listings and Reports work... hmm. +- The JSPUI application—which Listings and Reports depends upon—also does not load, though the error is perhaps unrelated: + +``` +2019-01-03 14:45:21,727 INFO org.dspace.browse.BrowseEngine @ anonymous:session_id=9471D72242DAA05BCC87734FE3C66EA6:ip_addr=127.0.0.1:browse_mini: +2019-01-03 14:45:21,971 INFO org.dspace.app.webui.discovery.DiscoverUtility @ facets for scope, null: 23 +2019-01-03 14:45:22,115 WARN org.dspace.app.webui.servlet.InternalErrorServlet @ :session_id=9471D72242DAA05BCC87734FE3C66EA6:internal_error:-- URL Was: http://localhost:8080/jspui/internal-error +-- Method: GET +-- Parameters were: + +org.apache.jasper.JasperException: /home.jsp (line: [214], column: [1]) /discovery/static-tagcloud-facet.jsp (line: [57], column: [8]) No tag [tagcloud] defined in tag library imported with prefix [dspace] + at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41) + at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:291) + at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:97) + at org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:347) + at org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:380) + at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:481) + at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1445) + at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1683) + at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1016) + at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1291) + at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1470) + at org.apache.jasper.compiler.Parser.parse(Parser.java:144) + at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244) + at org.apache.jasper.compiler.ParserController.parse(ParserController.java:105) + at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:202) + at org.apache.jasper.compiler.Compiler.compile(Compiler.java:373) + at org.apache.jasper.compiler.Compiler.compile(Compiler.java:350) + at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334) + at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:595) + at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399) + at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) + at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) + at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728) + at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:470) + at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395) + at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316) + at org.dspace.app.webui.util.JSPManager.showJSP(JSPManager.java:60) + at org.apache.jsp.index_jsp._jspService(index_jsp.java:191) + at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) + at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476) + at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386) + at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330) + at javax.servlet.http.HttpServlet.service(HttpServlet.java:742) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) + at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) + at org.dspace.utils.servlet.DSpaceWebappServletFilter.doFilter(DSpaceWebappServletFilter.java:78) + at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) + at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) + at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198) + at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) + at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493) + at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) + at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81) + at org.apache.catalina.valves.CrawlerSessionManagerValve.invoke(CrawlerSessionManagerValve.java:234) + at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650) + at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) + at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342) + at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800) + at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) + at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806) + at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498) + at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) + at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) + at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) + at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) + at java.lang.Thread.run(Thread.java:748) +``` + +- I notice that I get different JSESSIONID cookies for `/` (XMLUI) and `/jspui` (JSPUI) on Tomcat 8.5.37, I wonder if it's the same on Tomcat 7.0.92... yes I do. +- Hmm, on Tomcat 7.0.92 I see that I get a `dspace.current.user.id` session cookie after logging into XMLUI, and then when I browse to JSPUI I am still logged in... + - I didn't see that cookie being set on Tomcat 8.5.37 +- I sent a message to the dspace-tech mailing list to ask + +## 2019-01-04 + +- Linode sent a message last night that CGSpace (linode18) had high CPU usage, but I don't see anything around that time in the web server logs: + +``` +# zcat --force /var/log/nginx/*.log /var/log/nginx/*.log.1 | grep -E "03/Jan/2019:1(7|8|9)" | awk '{print $1}' | sort | uniq -c | sort -n | tail -n 10 + 189 207.46.13.192 + 217 31.6.77.23 + 340 66.249.70.29 + 349 40.77.167.86 + 417 34.218.226.147 + 630 207.46.13.173 + 710 35.237.175.180 + 790 40.77.167.87 + 1776 66.249.70.27 + 2099 54.70.40.11 +``` + +- I'm thinking about trying to validate our `dc.subject` terms against [AGROVOC webservices](http://aims.fao.org/agrovoc/webservices) +- There seem to be a few APIs and the documentation is kinda confusing, but I found this REST endpoint that does work well, for example searching for `SOIL`: + +``` +$ http http://agrovoc.uniroma2.it/agrovoc/rest/v1/search?query=SOIL&lang=en +HTTP/1.1 200 OK +Access-Control-Allow-Origin: * +Connection: Keep-Alive +Content-Length: 493 +Content-Type: application/json; charset=utf-8 +Date: Fri, 04 Jan 2019 13:44:27 GMT +Keep-Alive: timeout=5, max=100 +Server: Apache +Strict-Transport-Security: max-age=63072000; includeSubdomains +Vary: Accept +X-Content-Type-Options: nosniff +X-Frame-Options: ALLOW-FROM http://aims.fao.org + +{ + "@context": { + "@language": "en", + "altLabel": "skos:altLabel", + "hiddenLabel": "skos:hiddenLabel", + "isothes": "http://purl.org/iso25964/skos-thes#", + "onki": "http://schema.onki.fi/onki#", + "prefLabel": "skos:prefLabel", + "results": { + "@container": "@list", + "@id": "onki:results" + }, + "skos": "http://www.w3.org/2004/02/skos/core#", + "type": "@type", + "uri": "@id" + }, + "results": [ + { + "lang": "en", + "prefLabel": "soil", + "type": [ + "skos:Concept" + ], + "uri": "http://aims.fao.org/aos/agrovoc/c_7156", + "vocab": "agrovoc" + } + ], + "uri": "" +} +``` + +- The API does not appear to be case sensitive (searches for `SOIL` and `soil` return the same thing) +- I'm a bit confused that there's no obvious return code or status when a term is not found, for example `SOILS`: + +``` +HTTP/1.1 200 OK +Access-Control-Allow-Origin: * +Connection: Keep-Alive +Content-Length: 367 +Content-Type: application/json; charset=utf-8 +Date: Fri, 04 Jan 2019 13:48:31 GMT +Keep-Alive: timeout=5, max=100 +Server: Apache +Strict-Transport-Security: max-age=63072000; includeSubdomains +Vary: Accept +X-Content-Type-Options: nosniff +X-Frame-Options: ALLOW-FROM http://aims.fao.org + +{ + "@context": { + "@language": "en", + "altLabel": "skos:altLabel", + "hiddenLabel": "skos:hiddenLabel", + "isothes": "http://purl.org/iso25964/skos-thes#", + "onki": "http://schema.onki.fi/onki#", + "prefLabel": "skos:prefLabel", + "results": { + "@container": "@list", + "@id": "onki:results" + }, + "skos": "http://www.w3.org/2004/02/skos/core#", + "type": "@type", + "uri": "@id" + }, + "results": [], + "uri": "" +} +``` + +- I guess the `results` object will just be empty... +- Another way would be to try with SPARQL, perhaps using the Python 2.7 [sparql-client](https://pypi.org/project/sparql-client/): + +``` +$ python2.7 -m virtualenv /tmp/sparql +$ . /tmp/sparql/bin/activate +$ pip install sparql-client ipython +$ ipython +In [10]: import sparql +In [11]: s = sparql.Service("http://agrovoc.uniroma2.it:3030/agrovoc/sparql", "utf-8", "GET") +In [12]: statement=('PREFIX skos: ' + ...: 'SELECT ' + ...: '?label ' + ...: 'WHERE { ' + ...: '{ ?concept skos:altLabel ?label . } UNION { ?concept skos:prefLabel ?label . } ' + ...: 'FILTER regex(str(?label), "^fish", "i") . ' + ...: '} LIMIT 10') +In [13]: result = s.query(statement) +In [14]: for row in result.fetchone(): + ...: print(row) + ...: +(,) +(,) +(,) +(,) +(,) +(,) +(,) +(,) +(,) +(,) +``` + +- The SPARQL query comes from my notes in [2017-08]({{< relref "2017-08.md" >}}) + diff --git a/docs/2019-01/index.html b/docs/2019-01/index.html index 7e4326c6b..22f1565b1 100644 --- a/docs/2019-01/index.html +++ b/docs/2019-01/index.html @@ -27,7 +27,7 @@ I don’t see anything interesting in the web server logs around that time t " /> - + @@ -60,9 +60,9 @@ I don’t see anything interesting in the web server logs around that time t "@type": "BlogPosting", "headline": "January, 2019", "url": "https://alanorth.github.io/cgspace-notes/2019-01/", - "wordCount": "312", + "wordCount": "1098", "datePublished": "2019-01-02T09:48:30+02:00", - "dateModified": "2019-01-02T20:52:39+02:00", + "dateModified": "2019-01-03T11:52:26+02:00", "author": { "@type": "Person", "name": "Alan Orth" @@ -197,6 +197,247 @@ $ sudo docker rm dspacedb $ sudo docker run --name dspacedb -v /home/aorth/.local/lib/containers/volumes/dspacedb_data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=postgres -p 5432:5432 -d postgres:9.6-alpine +
    +
  • Testing DSpace 5.9 with Tomcat 8.5.37 on my local machine and I see that Atmire’s Listings and Reports still doesn’t work + +
      +
    • After logging in via XMLUI and clicking the Listings and Reports link from the sidebar it redirects me to a JSPUI login page
    • +
    • If I log in again there the Listings and Reports work… hmm.
    • +
  • +
  • The JSPUI application—which Listings and Reports depends upon—also does not load, though the error is perhaps unrelated:
  • +
+ +
2019-01-03 14:45:21,727 INFO  org.dspace.browse.BrowseEngine @ anonymous:session_id=9471D72242DAA05BCC87734FE3C66EA6:ip_addr=127.0.0.1:browse_mini:
+2019-01-03 14:45:21,971 INFO  org.dspace.app.webui.discovery.DiscoverUtility @ facets for scope, null: 23
+2019-01-03 14:45:22,115 WARN  org.dspace.app.webui.servlet.InternalErrorServlet @ :session_id=9471D72242DAA05BCC87734FE3C66EA6:internal_error:-- URL Was: http://localhost:8080/jspui/internal-error
+-- Method: GET
+-- Parameters were:
+
+org.apache.jasper.JasperException: /home.jsp (line: [214], column: [1]) /discovery/static-tagcloud-facet.jsp (line: [57], column: [8]) No tag [tagcloud] defined in tag library imported with prefix [dspace]
+    at org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41)
+    at org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:291)
+    at org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:97)
+    at org.apache.jasper.compiler.Parser.processIncludeDirective(Parser.java:347)
+    at org.apache.jasper.compiler.Parser.parseIncludeDirective(Parser.java:380)
+    at org.apache.jasper.compiler.Parser.parseDirective(Parser.java:481)
+    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1445)
+    at org.apache.jasper.compiler.Parser.parseBody(Parser.java:1683)
+    at org.apache.jasper.compiler.Parser.parseOptionalBody(Parser.java:1016)
+    at org.apache.jasper.compiler.Parser.parseCustomTag(Parser.java:1291)
+    at org.apache.jasper.compiler.Parser.parseElements(Parser.java:1470)
+    at org.apache.jasper.compiler.Parser.parse(Parser.java:144)
+    at org.apache.jasper.compiler.ParserController.doParse(ParserController.java:244)
+    at org.apache.jasper.compiler.ParserController.parse(ParserController.java:105)
+    at org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:202)
+    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
+    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:350)
+    at org.apache.jasper.compiler.Compiler.compile(Compiler.java:334)
+    at org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:595)
+    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:399)
+    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
+    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
+    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
+    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
+    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
+    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:728)
+    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:470)
+    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:395)
+    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:316)
+    at org.dspace.app.webui.util.JSPManager.showJSP(JSPManager.java:60)
+    at org.apache.jsp.index_jsp._jspService(index_jsp.java:191)
+    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
+    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
+    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
+    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
+    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
+    at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
+    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
+    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
+    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+    at org.dspace.utils.servlet.DSpaceWebappServletFilter.doFilter(DSpaceWebappServletFilter.java:78)
+    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
+    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
+    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
+    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
+    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
+    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
+    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
+    at org.apache.catalina.valves.CrawlerSessionManagerValve.invoke(CrawlerSessionManagerValve.java:234)
+    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
+    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
+    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
+    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
+    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
+    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
+    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
+    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
+    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
+    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
+    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
+    at java.lang.Thread.run(Thread.java:748)
+
+ +
    +
  • I notice that I get different JSESSIONID cookies for / (XMLUI) and /jspui (JSPUI) on Tomcat 8.5.37, I wonder if it’s the same on Tomcat 7.0.92… yes I do.
  • +
  • Hmm, on Tomcat 7.0.92 I see that I get a dspace.current.user.id session cookie after logging into XMLUI, and then when I browse to JSPUI I am still logged in… + +
      +
    • I didn’t see that cookie being set on Tomcat 8.5.37
    • +
  • +
  • I sent a message to the dspace-tech mailing list to ask
  • +
+ +

2019-01-04

+ +
    +
  • Linode sent a message last night that CGSpace (linode18) had high CPU usage, but I don’t see anything around that time in the web server logs:
  • +
+ +
# zcat --force /var/log/nginx/*.log /var/log/nginx/*.log.1 | grep -E "03/Jan/2019:1(7|8|9)" | awk '{print $1}' | sort | uniq -c | sort -n | tail -n 10
+    189 207.46.13.192
+    217 31.6.77.23
+    340 66.249.70.29
+    349 40.77.167.86
+    417 34.218.226.147
+    630 207.46.13.173
+    710 35.237.175.180
+    790 40.77.167.87
+   1776 66.249.70.27
+   2099 54.70.40.11
+
+ +
    +
  • I’m thinking about trying to validate our dc.subject terms against AGROVOC webservices
  • +
  • There seem to be a few APIs and the documentation is kinda confusing, but I found this REST endpoint that does work well, for example searching for SOIL:
  • +
+ +
$ http http://agrovoc.uniroma2.it/agrovoc/rest/v1/search?query=SOIL&lang=en
+HTTP/1.1 200 OK
+Access-Control-Allow-Origin: *
+Connection: Keep-Alive
+Content-Length: 493
+Content-Type: application/json; charset=utf-8
+Date: Fri, 04 Jan 2019 13:44:27 GMT
+Keep-Alive: timeout=5, max=100
+Server: Apache
+Strict-Transport-Security: max-age=63072000; includeSubdomains
+Vary: Accept
+X-Content-Type-Options: nosniff
+X-Frame-Options: ALLOW-FROM http://aims.fao.org
+
+{
+    "@context": {
+        "@language": "en",
+        "altLabel": "skos:altLabel",
+        "hiddenLabel": "skos:hiddenLabel",
+        "isothes": "http://purl.org/iso25964/skos-thes#",
+        "onki": "http://schema.onki.fi/onki#",
+        "prefLabel": "skos:prefLabel",
+        "results": {
+            "@container": "@list",
+            "@id": "onki:results"
+        },
+        "skos": "http://www.w3.org/2004/02/skos/core#",
+        "type": "@type",
+        "uri": "@id"
+    },
+    "results": [
+        {
+            "lang": "en",
+            "prefLabel": "soil",
+            "type": [
+                "skos:Concept"
+            ],
+            "uri": "http://aims.fao.org/aos/agrovoc/c_7156",
+            "vocab": "agrovoc"
+        }
+    ],
+    "uri": ""
+}
+
+ +
    +
  • The API does not appear to be case sensitive (searches for SOIL and soil return the same thing)
  • +
  • I’m a bit confused that there’s no obvious return code or status when a term is not found, for example SOILS:
  • +
+ +
HTTP/1.1 200 OK
+Access-Control-Allow-Origin: *
+Connection: Keep-Alive
+Content-Length: 367
+Content-Type: application/json; charset=utf-8
+Date: Fri, 04 Jan 2019 13:48:31 GMT
+Keep-Alive: timeout=5, max=100
+Server: Apache
+Strict-Transport-Security: max-age=63072000; includeSubdomains
+Vary: Accept
+X-Content-Type-Options: nosniff
+X-Frame-Options: ALLOW-FROM http://aims.fao.org
+
+{
+    "@context": {
+        "@language": "en",
+        "altLabel": "skos:altLabel",
+        "hiddenLabel": "skos:hiddenLabel",
+        "isothes": "http://purl.org/iso25964/skos-thes#",
+        "onki": "http://schema.onki.fi/onki#",
+        "prefLabel": "skos:prefLabel",
+        "results": {
+            "@container": "@list",
+            "@id": "onki:results"
+        },
+        "skos": "http://www.w3.org/2004/02/skos/core#",
+        "type": "@type",
+        "uri": "@id"
+    },
+    "results": [],
+    "uri": ""
+}
+
+ +
    +
  • I guess the results object will just be empty…
  • +
  • Another way would be to try with SPARQL, perhaps using the Python 2.7 sparql-client:
  • +
+ +
$ python2.7 -m virtualenv /tmp/sparql
+$ . /tmp/sparql/bin/activate
+$ pip install sparql-client ipython
+$ ipython
+In [10]: import sparql
+In [11]: s = sparql.Service("http://agrovoc.uniroma2.it:3030/agrovoc/sparql", "utf-8", "GET")
+In [12]: statement=('PREFIX skos: <http://www.w3.org/2004/02/skos/core#> '
+    ...: 'SELECT '
+    ...: '?label '
+    ...: 'WHERE { '
+    ...: '{  ?concept  skos:altLabel ?label . } UNION {  ?concept  skos:prefLabel ?label . } '
+    ...: 'FILTER regex(str(?label), "^fish", "i") . '
+    ...: '} LIMIT 10')
+In [13]: result = s.query(statement)
+In [14]: for row in result.fetchone():
+   ...:     print(row)
+   ...:
+(<Literal "fish catching"@en>,)
+(<Literal "fish harvesting"@en>,)
+(<Literal "fish meat"@en>,)
+(<Literal "fish roe"@en>,)
+(<Literal "fish conversion"@en>,)
+(<Literal "fisheries catches (composition)"@en>,)
+(<Literal "fishtail palm"@en>,)
+(<Literal "fishflies"@en>,)
+(<Literal "fishery biology"@en>,)
+(<Literal "fish production"@en>,)
+
+ +
    +
  • The SPARQL query comes from my notes in 2017-08
  • +
+ diff --git a/docs/robots.txt b/docs/robots.txt index c454234ec..1405dffd5 100644 --- a/docs/robots.txt +++ b/docs/robots.txt @@ -43,7 +43,7 @@ Disallow: /cgspace-notes/2015-12/ Disallow: /cgspace-notes/2015-11/ Disallow: /cgspace-notes/ Disallow: /cgspace-notes/categories/ -Disallow: /cgspace-notes/categories/notes/ Disallow: /cgspace-notes/tags/notes/ +Disallow: /cgspace-notes/categories/notes/ Disallow: /cgspace-notes/posts/ Disallow: /cgspace-notes/tags/ diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 7898c0557..16aafc6cb 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -4,7 +4,7 @@ https://alanorth.github.io/cgspace-notes/2019-01/ - 2019-01-02T20:52:39+02:00 + 2019-01-03T11:52:26+02:00 @@ -204,7 +204,7 @@ https://alanorth.github.io/cgspace-notes/ - 2019-01-02T20:52:39+02:00 + 2019-01-03T11:52:26+02:00 0 @@ -213,27 +213,27 @@ 0 + + https://alanorth.github.io/cgspace-notes/tags/notes/ + 2019-01-03T11:52:26+02:00 + 0 + + https://alanorth.github.io/cgspace-notes/categories/notes/ 2018-03-09T22:10:33+02:00 0 - - https://alanorth.github.io/cgspace-notes/tags/notes/ - 2019-01-02T20:52:39+02:00 - 0 - - https://alanorth.github.io/cgspace-notes/posts/ - 2019-01-02T20:52:39+02:00 + 2019-01-03T11:52:26+02:00 0 https://alanorth.github.io/cgspace-notes/tags/ - 2019-01-02T20:52:39+02:00 + 2019-01-03T11:52:26+02:00 0