Legenda:
⚗️ : means an experimental feature
This is the multi-page printable view of this section. Click here to print.
Legenda:
⚗️ : means an experimental feature
SDaaS Enterprise edition is fully compliant with the language profile in the latest KEES implementation proposal.
SDaaS Enterprise Edition extends the support to the KEES Language profile by managing additional metadata on named graph:
-prov:startedAtTime
and prov:endedAtTime
properties are recognized in prov:Activity metadata. Activities with a start date but without an end date should considered not yet terminated or crashed. prov:endedAtTime
coincides with the value of one of dct:modified
attributes in graph metadata. Activities without bot star and end data should be considered as planned activities still do be done.
prov:wasAttributedTo
property refers to the SDaaS agent URI (i.e. $AGENT_ID
)prov:used
property is recognized in prov:Activity metadata. It refers the URI of a generic LDP-RS resource providing facts input to the activity, or a void:Dataset, or a sdaas:Plan and coincides with the value of one of dct:source
attributes in the graph metadataFor example:
<http://kb:8080/sdaas/sparql?query=DESCRIBE%3Fg%7B%3Fg%3Chttp%3A%2F%2Fwww.w3.org%2Fns%2Fsparql-service-description%23name%3E%3Curn%3Auuid%3A98dccee27a081f9cd75d15b8af59a3d6%3E%7D> a sd:NamedGraph;
sd:name <urn:uuid:98dccee27a081f9cd75d15b8af59a3d6> ;
dct:modified "2023-12-10T01:01:02Z"^^xsd:dateTime ;
dct:source <http:/example.org/resource.ttl> ;
prov:wasAttributedTo <urn:uuid:0dead0cf-943b-46c0-98e9-db0da3172f5e> ;
dqv:hasQualityMeasurement [ dqv:value 0.8 ; dqv:isMeasurementOf kees:trustLevel ] ;
prov:wasGeneratedBy [ a kees:Ingestion ;
prov:startedAtTime "2023-12-10T00:00:02Z"^^xsd:dateTime ;
prov:endedAtTime "2023-12-10T01:00:02Z"^^xsd:dateTime ;
prov:used <http:/example.org/resource.ttl>
]
.
Multiple activities can concur to the generation of a named graph, for example:
<http://kb:8080/sdaas/sparql?query=DESCRIBE%3Fg%7B%3Fg%3Chttp%3A%2F%2Fwww.w3.org%2Fns%2Fsparql-service-description%23name%3E%3Curn%3Auuid%3A98dccee27a081f9cd75d15b8af59a3d6%3E%7D> a sd:NamedGraph;
sd:name <urn:uuid:98dccee27a081f9cd75d15b8af59a3d6> ;
dct:modified "2023-12-10T01:01:02Z"^^xsd:dateTime ;
dct:modified "2023-12-10T01:02:02Z"^^xsd:dateTime ;
dct:source
<http:/example.org/resource1.ttl> ,
<http:/example.org/resource2.ttl> ;
prov:wasAttributedTo <urn:uuid:0dead0cf-943b-46c0-98e9-db0da3172f5e> ;
dqv:hasQualityMeasurement
[ dqv:value 0.7 ; dqv:isMeasurementOf kees:trustLevel ] ,
[ dqv:value 0.8 ; dqv:isMeasurementOf kees:trustLevel ] ;
prov:wasGeneratedBy
[ a kees:Ingestion ;
prov:startedAtTime "2023-12-10T00:00:02Z"^^xsd:dateTime ;
prov:endedAtTime "2023-12-10T01:00:02Z"^^xsd:dateTime ;
prov:used <http:/example.org/resource1.ttl>
] ,
[ a kees:Ingestion ;
prov:startedAtTime "2023-12-10T0100:02Z"^^xsd:dateTime ;
prov:endedAtTime "2023-12-10T02:00:02Z"^^xsd:dateTime ;
prov:used <http:/example.org/resource2.ttl>
]
.
Note that multiple quality measurements MAY exist to reflect the possible quality differences in data sources or different points ov view.
In the real implementation SDaaS does not use blank nodes but unique ids generated with the sd uuid
core command
The SDaaS Language Profile reuses some terms from existing vocabularies:
Besides to all terms defined in the KEES Language profile, the SDaaS Language profile uses some special term minted from the http://linkeddata.center/sdaas/reference/v4#
name space ( prefix sdaas:
)
Description :a class that references a some commands command
prov:Plan
Example:
[] a sdaas:Plan ; sdaas:script “echo ‘ASK {}’ | sd sparql test”
sd_learn_datalake -D [METADATA] [-D “graph=GRAPHNAME”] DATA_ROOT
Discovers and loads datasets description file according with VoID specifications and then learn all found datasets. This command is essentially the same as the combination of the following pseudo code:
if sd learn resource -a PUT *SOURCE*/well-known/void; then
for dataset in $(echo "SELECT DISTINCT ?dataset { GRAPH <*SOURCE> {?dataset <http://rdfs.org/ns/void#dataDump> [] }}" | sd_sparql_list); do
sd learn dataset "$dataset"
done
fi
STORE
by default)Variable Name | Default | Description |
---|---|---|
sid | STORE | A sid name |
trust | 1 | Trust level as a xds:decimal ranging 0..1 |
activity | Activity | a KEES activity type (without namespace) OR xsd:anyURI |
graph | same of source | XSD:anyURI Named graph name |
activity_id | uuid | XSD:anyURI Identifier for a prov:Activity |
started_at | activity start date |
Exits with 0 on success, and > 0 if a curl or http error occurs.
Since SDaaS 4
sd learn data http://data.example.org/
sd_learn_dataset [-s SID] [-D METADATA] DATASET
Loads all dataset dumps file according with VoID specifications.This command is essentially the same as the combination of the following pseudo code:
for dd in $(echo "SELECT DISTINCT ?dd { <$graph}> void:dataDump ?dd }" | sd sparql list); do
sd learn resource
done
STORE
by default)Variable Name | Default | Description |
---|---|---|
sid | STORE | same as -s |
trust | 1 | Trust level as a xds:decimal ranging 0..1 |
activity | Activity | a KEES activity type (without namespace) OR xsd:anyURI |
graph | same of source | XSD:anyURI Named graph name |
activity_id | uuid | XSD:anyURI Identifier for a prov:Activity |
started_at | activity start date | |
accrual_policy | POST | graph accrual policy: POST or PUT |
Exits with 0 on success, and > 0 if error occurs.
Since SDaaS 4
sd learn resource -D “graph=https://dbpedia.org/” https://dbpedia.org/resource/Milan
Equivalent to:
previous_size=-1; actual_size=$(sd driver size STORE)
while [[ $previous_size -ne $actual_size ]]; do
previous_size=$actual_size
sd plan run -D "activity_type=Abduction trust=0.9" urn:myapp:reasoning_plan
actual_size=$(sd driver size STORE)
done
sd_plan_loop [-s SID] [-D METADATA] PLAN_URI
This command executed execute a plan until nothing changes. It is equivalent to the following pseudocode:
previous_size=-1; actual_size=$(sd driver size *SID*)
while [[ $previous_size -ne $actual_size ]]; do
previous_size=$actual_size
sd plan loop run *PLAN_URI*
actual_size=$(sd driver size *SID*)
done
STORE
by default)Exits with 0 on success, and > 0 if error occurs.
Since SDaaS 4
sd plan run urn:my:plan
sd_plan_run [-s SID] [-D METADATA] PLAN_URI
This command executed a script exposed by PLAN_URI in the sdaas:script
property
STORE
by default)Exits with 0 on success, and > 0 if error occurs.
Since SDaaS 4
sd plan run urn:my:plan
sd [-h] [-A] MODULE FUNCTION [FUNCTION ARGS]
Execute a SDaaS platform FUNCTION by automatically including MODULE and running the command sd_<MODULE>_<FUNCTION>
followed by FUNCTION ARGS
Note that negative values does not trigger an exit because negative return status are considered by SDaaS platform as boolean false result.
If not -A specified return the command status
Since SDaaS 4
sd sparql query "SELECT * { ?s ?p ?o } LIMIT 1"
STORE
instance.sd -A sparql query "SELECT * { ?s ?p ?o } LIMIT 1"
sd -h sparql query
sd_abort [MESSAGE]
logs a MESSAGE for critical error and exit from the caller
Exits 0 on success, and 2 if an error occurs.
Since SDaaS 4
sd_abort "command failed"
<command> || sd_abort "command failed"
sd_cat cat arguments
its an alias for: cat "$@" 2> /dev/null
Exits with 0 on success
Since SDaaS 4
sd_curl CURL ARGUMENTS
its an alias for: curl -L -A "$SDAAS_SIGNATURE" --retry 3 --retry-delay 3 --retry-max-time 30 --retry-connrefused --compressed
Exits with 0 on success, and not 0 if a curl or http error occurs.
Since SDaaS 4
sd_curl_rdf ARGUMENTS
It is an alias for sd_curl -s -f -H "Accept: application/rdf+xml, text/turtle;q=0.9, application/n-triples;q=0.8, */*;q=0.5"
Exits with 0 on success, and not 0 if a curl or http error occurs.
Since SDaaS 4
sd_curl_sparql ARGUMENTS
It is an alias for sd_curl -s -f -H "Accept: application/sparql-query, application/sparql-update;q=0.9, */*;q=0.5" "$@"
Exits with 0 on success, and not 0 if a curl or http error occurs.
Since SDaaS 4
sd_error MESSAGE [ERROR_CODE]
logs a MESSAGE with ERROR priority
ERROR_CODE (1 by default)
Since SDaaS 4
<command> || return sd_error "command failed" 3
sd_include [-f] MODULE
include MODULE only if it is not already loaded, used by sd command.
This command tries to load MODULE form $HOME/modules/ directory and, if file not exist, tries to load it from $SDAAS_INSTALL_DIR .
Exits 0 on success, and >0 if an error occurs.
Since SDaaS 4
sd_include core || sd_abort
core
just the first time. Abort scripts on failsd_include -f core
core
ignoring its cache statussd_kees_boot [-D “sid=SID ] [-s SID]
The command erases all data in a graph store using a driver-optimized routine. Additionally, this command adds metadata to the default graph according with the KEES specifications, as shown in this snippet:
[] a kees:KnowledgeGraph ;
sd:endpoint <$STORE> ;
sd:feature kees:Status, kees:Locking ;
dct:created "2023-12-10T01:00:01Z"^^xsd:dateTime .
sd_kees_boot preserves locks (if any)
STORE
by default)The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
Exits 0 on success, and > 0 if an error occurs.
Since SDaaS 4 - Enterprise Edition
sd_kees_boot
DROP ALL
on the Graph Store named STORE
(equivalent to sd_sparql_update"DROP ALL"
)sd_kees_boot -s STORE2
STORE2
sd_kees_date [-D “sid=SID ] [-s SID] STATUS
Prints the date of one STATUS, prints the empty string if the status is not available.
STORE
by default)The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
Exits 0 on success, and > 0 if an error occurs.
Since SDaaS 4 - Enterprise Edition
sd kees date published
sd_kees_describe [-D “sid=SID ] [-s SID]
Describe the knowledge base as a set of nTriples
ACTIVITY_URI An URI of a prov:Activity. In missing a uuid is generated.
STORE
by default)The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
Exits 0 on success, and > 0 if an error occurs.
Since SDaaS 4 - Enterprise Edition
sd_kees_invalidate [-D “sid=SID ] [-s SID] [ACTIVITY_URI]
Invalidate the knowledge graph with the ACTIVITY_URI.
ACTIVITY_URI An URI of a prov:Activity. In missing a uuid is generated.
STORE
by default)The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
Exits 0 on success, and > 0 if an error occurs.
Since SDaaS 4 - Enterprise Edition
sd kees sd_kees_invalidate
prov:wasInvalidatedBy
to to a uuid of thoe prov:Activitysd_kees_is [-D “sid=SID ] [-s SID] STATUS
Returns 0 if the knowledge graph has is a date associated to STATUS
STORE
by default)The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
Exits 0 on success, and > 0 if an error occurs.
Since SDaaS 4 - Enterprise Edition
sd_kees_lock [-D “sid=SID ] [-s SID] [-a AGENT_URI ] [ACTIVITY_URI]
Locks the knowledge graph with the ACTIVITY_URI. The lock is removed on EXIT signal.
If a knowledge graph is locked, you can manually unlock it with the SPARQL update:
PREFIX kees: <http://linkeddata.center/kees/v1#>
DELETE { ?x kees:isLockedBy ?y }
WHERE { ?x kees:isLockedBy ?y }
ACTIVITY_URI An URI of a prov:Activity. If missing, the value of the ACTIVITY_URI is used.
STORE
by default)The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
Exits 0 on success, and > 0 if an error occurs.
Since SDaaS 4 - Enterprise Edition
sd kees lock
sd_kees_matadata [-D METADATA ] GRAPH NAME
print the metadata about a named graph with name GRAPH NAME serialized in in nTriples. This command is mainly intended for internal use only.
Variable Name | Default | Description |
---|---|---|
trust | 1 | Trust level as a xds:decimal ranging 0..1 |
activity_type | Learning | a KEES activity type (without namespace) OR xsd:anyURI |
graph | uuid | XSD:anyURI Named graph name |
graph_type | FirstPartyData | a KEES named_graph type (without namespace) OR xsd:anyURI |
source | XSD:anyURI The data source | |
activity_id | uuid | XSD:anyURI Identifier for a prov:Activity |
started_at | activity start date |
The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
Exits 0 on success, and >0 if an error occurs.
Since SDaaS 4
sd_kees_unlock [-D “sid=SID ] [-s SID]
Locks the knowledge graph with the ACTIVITY_URI.
STORE
by default)The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
Exits 0 on success, and > 0 if an error occurs.
Since SDaaS 4 - Enterprise Edition
sd kees unlock
sd_learn_file [-s SID] [-a PUT|POST] [-D METADATA] FILE
Loads a file into the graph store. This command is essentially the same as the combination of the following piped commands:
sd_rapper | sd kees meta | sd sparql graph
STORE
by default)Variable Name | Default | Description |
---|---|---|
sid | STORE | same as -s |
trust | 1 | Trust level as a xds:decimal ranging 0..1 |
activity_type | Learning | a KEES activity type (without namespace) OR xsd:anyURI |
graph | same of source | XSD:anyURI Named graph name |
graph_type | FirstPartyData | a KEES named_graph type (without namespace) OR xsd:anyURI |
source | file://localhost/<absolute FILE path> | XSD:anyURI in file: schema |
activity_id | uuid | XSD:anyURI Identifier for a prov:Activity |
started_at | activity start date | |
accrual_policy | POST | same as -a |
Exits with 0 on success, and > 0 if error occurs.
Since SDaaS 4
sd learn file -D “graph=urn:app:config” /etc/config.ttl
sd_learn_resource [-s SID] [-a PUT|POST] [-D METADATA] SOURCE
This command is essentially the same as the combination of the following piped commands:
sd_curl_rdf | sd_rapper | sd_kees_metadata -D "source=*SOURCE* | sd sparql graph
STORE
by default)Variable Name | Default | Description |
---|---|---|
sid | STORE | same as -s |
trust | 1 | Trust level as a xds:decimal ranging 0..1 |
activity | Activity | a KEES activity type (without namespace) OR xsd:anyURI |
graph | SOURCE | XSD:anyURI Named graph name |
activity_id | uuid | XSD:anyURI Identifier for a prov:Activity |
started_at | activity start date | |
accrual_policy | POST | same as -a |
Exits with 0 on success, and > 0 if error occurs.
Since SDaaS 4
sd learn resource -D “graph=urn:dataset:dbpedia” https://dbpedia.org/resource/Milan
sd_learn_rule [-s SID] [-a PUT|POST] [-D METADATA]
This command is essentially the same as the combination of the following piped commands:
sd sparql rule | sd kees metadata | sd sparql graph
STORE
by default)Variable Name | Default | Description |
---|---|---|
sid | STORE | same as -s |
trust | 1 | Trust level as a xds:decimal ranging 0..1 |
activity | Reasoning | a KEES activity type (without namespace) OR xsd:anyURI |
graph | urn:sdaas:abox | XSD:anyURI Named graph name |
activity_id | uuid | XSD:anyURI Identifier for a prov:Activity |
started_at | activity start date | |
accrual_policy | POST | same as -a |
Exits with 0 on success, and > 0 if error occurs.
Since SDaaS 4
sd_log [-f FILE] [-p PRIORITY] [-S SIZE] MESSAGE
log MESSAGE on stderr
NOTICE
. Logs is printed only if its priority is less then the value in SD_LOG_PRIORITY
(default 6)Priority levels :
level | mnemonic | explanation |
---|---|---|
2 | CRITICAL | Should be corrected immediately, but indicates failure in a primary system - fix CRITICAL problems before ALERT - an example is loss of primary ISP connection. |
3 | ERROR | Non-urgent failures - these should be relayed to developers or admins; each item must be resolved within a given time. |
4 | WARNING | Warning messages - not an error, but indicated that an error will occur if action is not taken, e.g. file system 85% full - each item must be resolved within a given time. |
5 | NOTICE | Events that are unusual but not error conditions - might be summarized in an email to developers or admins to spot potential problems - no immediate action required. |
6 | INFORMATIONAL | Normal operational messages - may be harvested for reporting, measuring throughput, etc. - no action required. |
7 | DEBUG | Info is useful to developers for debugging the app, not useful during operations. |
Exits 0 on success, and >0 if an error occurs.
The following configuration variables shall affect the execution of sd_log
:
Since SDaaS 4
sd_log "test message"
sd_log -p DEBUG "test message"
sd_log ERROR "test message"
sd_rapper ARGUMENTS
It is an interface to the raptor library that converts a RDF into the various serialization. It accepts the same options of the rapper utility having the following options as default:
-wq
-f 'xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"'
-f 'xmlns:owl="http://www.w3.org/2002/07/owl#"'
-f 'xmlns:foaf="http://xmlns.com/foaf/0.1/"'
-f 'xmlns:dc="http://purl.org/dc/elements/1.1/"'
-f 'xmlns:dct="http://purl.org/dc/terms/"'
-f 'xmlns:dqv="http://www.w3.org/ns/dqv#"'
-f 'xmlns:prov="http://www.w3.org/ns/prov#"'
-f 'xmlns:sd="http://www.w3.org/ns/sparql-service-description#"'
-f 'xmlns:void="http://rdfs.org/ns/void#"'
-f 'xmlns:xsd="http://www.w3.org/2001/XMLSchema#"'
-f 'xmlns:kees="http://linkeddata.center/kees/v1#"'
-f 'xmlns:sdaas="http://linkeddata.center/sdaas/v4#"'
Exits with 0 on success, and > 0 if a curl or http error occurs. In case of http error, all the curl output is logged.
Since SDaaS 4
sd_rapper -g https://schema.org/version/latest/schemaorg-current-http.rdf
sd_rapper -i turle https://schema.org/version/latest/schemaorg-current-http.ttl
sd_return_first_non_zero PIPESTATUS
Used in combiantion with PIPESTATUS bash variable
Returns firs non zero value in the arguments
Since SDaaS 4
cmd1 | cmd3 | cmd3
sd_return_first_non_zero "${PIPESTATUS[@]}"
sd_sparql_graph [-s SID] [ -a ACCRUAL METHOD ] [GRAPH_URI]
Load a stream of nTriples into the GRAPH_URI. No action is performed if an empty data stream is detected.
$(sd_uuid)
as the graph name: note that this implies that a new named graph is generated every call even if POST
is used as ACCRUAL METHOD.PUT
, the graph will be cleared before loading the data, when POST
(default) the data is appended the graph, creating it if it doesn’t exist.STORE
by default)The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
Exits 0 on success.
Since SDaaS 4
sd_curl https://schema.org/version/latest/schemaorg-current-http.nt | sd sparql graph "urn:graph:1"
urn:graph:1
sd_curl https://schema.org/version/latest/schemaorg-current-http.nt | sd sparql graph
This is an alias for sd sparql query -o “csv-h”
Since SDaaS 4
sd_sparql_query [-D LOCAL CONTEXT] [-s SID] [-o OUT_FORMAT]
execute execute a SPARQL query construct from a SPARQL query string passed in stdin.
It returns the results in stdout according the format specified in OUT_FORMAT (default xml
). If the specified format is incompatible with the QUERY_COMMAND the selected format fallback to xml
All input and outputs must be in UTF8 charset.
STORE
by default)Type | Query Type | Description |
---|---|---|
csv | SELECT | |
csv-h | SELECT | Same as csv but without header |
csv-1 | SELECT | Same as csv-h, but only the first row is printed |
csv-f1 | SELECT | Same as csv-1, but only the first field is printed |
boolean | ASK | output “true” or “false” |
tsl | SELECT | |
json | SELECT | |
ntriples | CONSTRUCT, DESCRIBE | |
xml | CONSTRUCT, DESCRIBE | |
turtle | CONSTRUCT, DESCRIBE | |
rdfxml (default) | CONSTRUCT, DESCRIBE | |
test | ASK, SELECT | returns 0 if ASK returns true or SELECT results is empty |
The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
Exits 0 on success, -1 of test fail and > 0 if an error occurs.
Since SDaaS 4
cat 'SELECT DISTINCT ?class WHERE { ?s a ?class} LIMIT 10' | sd sparql query -o csv
cat 'SELECT DISTINCT ?class WHERE { ?s a ?class} LIMIT 10' | sd sparql query -D "out_format=csv"
cat 'ASK ?s WHERE {?s ?p ?o}' | sd sparql query -o boolean
cat'SELECT ?s WHERE { ?s a <urn:type> }' | sd sparql query -o test
This is an alias for sd sparql query -o ntriples
Since SDaaS 4
This is an alias for sd sparql query -o test
Since SDaaS 4
sd_sparql_update [-s SID] [-D LOCAL CONTEXT]
execute the SPARQL update string passed stdin
STORE
by default)The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
0 on success
Since SDaaS 4
These equivalent commands execute DROP ALL
on the Graph Store named STORE
:
echo "DROP ALL" | sd sparql update
echo "DROP ALL" | sd sparql update -s STORE
echo "DROP ALL" | sd sparql update -D "sid=STORE"
# same of above but aborting on failure
DROP ALL" | sd -A sparql update
sd_store_erase [-s SID] [-D LOCAL CONTEXT]
remove all data in the knowledge graph it is functionally equivalent to echo "DROP ALL" | sd sparql update
STORE
by default)The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
0 on success
Since SDaaS 4
sd_store_size [-s SID] [-D LOCAL CONTEXT]
return the number of triple un a graph store. Please note tha in some store engine, for performance reasons, this feature returns an estimated number
STORE
by default)The default context is loaded from the SD_DEFAULT_CONTEXT
configuration variable
0 on success
Since SDaaS 4
url encode a string substituting unsafe chars
sd_urlencode STRING
url encodes STRING
Since SDaaS 4
sd_urlencode "http://w3.org/?test#name>"
sd_uuid [NAMESPACE]
write an uuid URI minted from NAMESPACE (urn:uuid: by default)
Since SDaaS 4
sd_uuid
sd_uuid ""
sd_validate VARIABLE_NAME REGULAR_EXPRESSION*
validate a variable content against a regular expression
Exits 0 on success, and > 0 if an error occurs.
sd_validate STORE "^http"
STORE
begins with http
Since SDaaS 4
sd_view_agent [-o FORMAT ]
print the SDaaS agent in the RDF FORMAT
Exits 0 on success, and >0 if an error occurs.
Since SDaaS 4
The sd view config displays all defined configuration and driver variables
sd view config
Displays all available commands exported by a module with their cache status
sd view commands MODULE (core
by default)
Examples:
sd view module core
Displays all available modules
sd view modules
Examples:
sd view modules
sd_view_ontology [-o FORMAT ]
print the SDaaS language Profile including KESS support in the RDF FORMAT
for a definition of all SDaaS Language Profile see the SDaaS Ontology guide to see SDaaS in action
Exits 0 on success, and >0 if an error occurs.
Since SDaaS 4
sd_view_version
print the version of SDaaS interface
Exits 0 on success, and >0 if an error occurs.
Since SDaaS 4