Skip to content

In-memory retrieval and execution of SHACL functions (SPARQL, JS/SJS and XQuery) in MarkLogic XQuery

License

Notifications You must be signed in to change notification settings

rouzbe/shacl-xqy

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

shacl-xqy

In-memory retrieval and execution of SHACL functions (SPARQL, JS/SJS and XQuery) in MarkLogic XQuery.

Summary

It allows executing SPARQL, XQuery and JavaScript functions within SPARQL queries according to SHACL specifications. For example, you can do something like this:

SELECT (ex:JSMultiply(ex:SPARQLMultiply(3, 5), ex:XQueryMultiply(7, 11)) AS ?result) WHERE { }

where ex:SPARQLMultiply, ex:XQueryMultiply and ex:JSMultiply are reusable functions defined in SPARQL, XQuery and JavaScript, respectively.

Examples

After setting up the database and application server, you should be able to navigate to http://localhost:8016 to see the examples.

Create and Setup the Database and App Server

Run the following codes in MarkLogic Query Console. Make sure you replace ~PATH~ with the right path to the shacl-xqy folder:

import module namespace admin = "http://marklogic.com/xdmp/admin"
         at "/MarkLogic/admin.xqy";

(: Get the configuration :)
let $config := admin:get-configuration()

(: Add new database to the configuration :)
let $config := admin:database-create(
    $config,
    "SHACL-XQuery-Test-DB",
    xdmp:database("Security"),
    xdmp:database("Schemas"))

(: Obtain the database ID of 'SHACL-XQuery-Test-DB' :)
let $SHACL-XQuery-Test-DB := admin:database-get-id(
    $config,
    "SHACL-XQuery-Test-DB")

(: Add a new forest :)
let $config := admin:forest-create(
    $config,
    "SHACL-XQuery-Test-DB-Forest",
    xdmp:host(), ())

let $save := admin:save-configuration($config)

(: Attach the "SHACL-XQuery-Test-DB-Forest" forest to 'SHACL-XQuery-Test-DB' :)
let $config := admin:database-attach-forest(
    $config,
    $SHACL-XQuery-Test-DB,
    xdmp:forest("SHACL-XQuery-Test-DB-Forest"))

(: Add a triple index to 'SHACL-XQuery-Test-DB' :)
let $config := admin:database-set-triple-index(
    $config,
    $SHACL-XQuery-Test-DB,
    fn:true())

(: Create an App Server :)
let $config := admin:http-server-create(
    $config,
    admin:group-get-id($config, "Default"),
    "SHACL-XQuery-Test-Server",
    "~PATH~/shacl-xqy/",
    8016,
    "file-system",
    $SHACL-XQuery-Test-DB)

return
    admin:save-configuration($config)

Load SHACL Resources and Example Data

Download MLCP and run the following commands. Make sure you replace ~PATH~ with the right path to the shacl-xqy folder and ~USER~ and ~PASS~ with your MarkLogic admin credentials:

sh mlcp.sh import \
  -host localhost -port 8000 \
  -username ~USER~ -password ~PASS~ \
  -database shacl-xqy-test-db \
  -input_file_path "~PATH~/resources/*.ttl","~PATH~/examples/examples.ttl" -input_file_type RDF \
  -mode local

Cleanup the Database

In case you want to modify and reload the data, you first need to delete the existing triples. Run this in Query Console in the SPARQL Update mode:

CLEAR GRAPH <http://marklogic.com/semantics#default-graph>

Delete the Database, Forest and App Server

import module namespace admin = "http://marklogic.com/xdmp/admin"
		  at "/MarkLogic/admin.xqy";

let $config := admin:get-configuration()

let $config := admin:appserver-delete(
    $config,
    admin:appserver-get-id(
      $config,
      admin:group-get-id($config, "Default"),
      "SHACL-XQuery-Test-Server"))

let $save := admin:save-configuration($config)

let $config := admin:database-delete(
    $config,
    admin:database-get-id(
      $config,
      "SHACL-XQuery-Test-DB"))

let $save := admin:save-configuration($config)

let $config := admin:forest-delete(
    $config,
    admin:forest-get-id(
      $config,
      "SHACL-XQuery-Test-DB-Forest"),
    true())

return
    admin:save-configuration($config);

About

In-memory retrieval and execution of SHACL functions (SPARQL, JS/SJS and XQuery) in MarkLogic XQuery

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages