Package Exports
- sparqlxml-parse
- sparqlxml-parse/index.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (sparqlxml-parse) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
SPARQL-Results+XML Parse
A utility package that allows you to parse SPARQL XML results in a convenient RDF/JS-based datastructure.
For example, the following SPARQL XML result can be converted as follows:
In:
<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="book"/>
</head>
<results>
<result>
<binding name="book">
<uri>http://example.org/book/book1</uri>
</binding>
</result>
<result>
<binding name="book">
<uri>http://example.org/book/book2</uri>
</binding>
</result>
<result>
<binding name="book">
<uri>http://example.org/book/book3</uri>
</binding>
</result>
<result>
<binding name="book">
<uri>http://example.org/book/book4</uri>
</binding>
</result>
<result>
<binding name="book">
<uri>http://example.org/book/book5</uri>
</binding>
</result>
<result>
<binding name="book">
<triple>
<subject>
<uri>http://example.org/bob</uri>
</subject>
<predicate>
<uri>http://example.org/name</uri>
</predicate>
<object>
<literal datatype='http://example.org/Type'>Bob</literal>
</object>
</triple>
</binding>
</result>
</results>
</sparql>
Out:
[
{ '?book': namedNode('http://example.org/book/book1') },
{ '?book': namedNode('http://example.org/book/book2') },
{ '?book': namedNode('http://example.org/book/book3') },
{ '?book': namedNode('http://example.org/book/book4') },
{ '?book': namedNode('http://example.org/book/book5') },
{ '?book': quad(namedNode('http://example.org/bob'), namedNode('http://example.org/name'), literal('Bob', namedNode('http://example.org/Type'))) },
]
Where namedNode
is an RDF/JS named node, quad
is an RDF/JS quad/triple, and literal
is an RDF/JS literal.
This library automatically converts all SPARQL XML result values to their respective RDFJS type.
Usage
Create a new parser
import {SparqlXmlParser} from "sparqlxml-parse";
const sparqlXmlParser = new SparqlXmlParser();
Optionally, you can provide a settings object to the constructor with optional parameters:
const sparqlXmlParser = new SparqlXmlParser({
dataFactory: dataFactory, // A custom RDFJS datafactory
prefixVariableQuestionMark: true, // If variable names in the output should be prefixed with '?', default is false.
});
Convert a SPARQL XML response stream
If you have many query results, then a streaming-based approach
as provided by sparqlXmlParser.parseXmlResultsStream
is ideal.
const sparqlJsonResponseStream = streamifyString(`<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<head>
<variable name="book"/>
</head>
<results>
<result>
<binding name="book">
<uri>http://example.org/book/book1</uri>
</binding>
</result>
</results>
</sparql>`);
sparqlXmlParser.parseXmlResultsStream(sparqlJsonResponseStream)
.on('data', (bindings: IBindings) => console.log(bindings));
// This will output [ { '?book': namedNode('http://example.org/book/book1') } ]
Optionally, you can also retrieve the variables inside the head
and the version
as follows by listening to the 'variables'
and 'version'
events:
sparqlXmlParser.parseXmlResultsStream(sparqlJsonResponseStream)
.on('variables', (variables: RDF.Variable[]) => console.log(variables))
.on('version', (version: string) => console.log(version))
.on('data', (bindings: IBindings) => { return; });
// This will output [ variable('book') ]
Convert a SPARQL XML boolean response stream
const sparqlJsonResponseStream = streamifyString(`<?xml version="1.0"?>
<sparql xmlns="http://www.w3.org/2005/sparql-results#">
<boolean>true</boolean>
</sparql>`);
sparqlXmlParser.parseXmlBooleanStream(sparqlJsonResponseStream)
.then((result: boolean) => console.log(result));
// This will output true
License
This software is written by Ruben Taelman.
This code is released under the MIT license.