• Non ci sono risultati.

Output di una query SPARQL

5.2 SPARQL

5.2.2 Output di una query SPARQL

?titolo cd:autore ?autore. }

5.2.2

Output di una query SPARQL

Il risultato di una query SPARQL `e uno SPARQL Results Document, che altro non `e che un documento XML che incapsula i risultati della query SPARQL rispettando la struttura ora riportata.

Lo SPARQL Results Document inizia con uno sparql document element nel namespace http://www.w3.org/2005/sparql-results#, scritto come segue:

<?xml version="1.0"?>

<sparql xmlns="http://www.w3.org/2005/sparql-results#"> ...

</sparql>

Dentro l’elemento sparql vi sono due sott-elementi, head e un elemento results (che pu`o essere results o boolean) e che deve apparire in quell’ordine. L’elemento head `e il primo elemento figlio dell’elemento sparq. Perch`e il risultato della query sparql vincoli le variabili, head deve contenere una sequenza di elementi che descrivono il set di Query Variable Names nella Solution Sequence (qui definita come “risultati della query”).

L’ordine in cui compaiono le variabili nella sequenza `e l’ordine in cui i nomi delle variabili sono passati come argomento allo statement SELECT nella query SPARQL. Se viene usato SELECT ∗, l’ordine delle variabili non `e definito.

All’interno dell’elemento head, la sequenza ordinata delle variabili scelte sono usate per creare elementi figli come riportato nell’esempio:

<?xml version="1.0"?>

<sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head>

<variable name="x"/> <variable name="hpage"/> <variable name="name"/> <variable name="mbox"/>

<variable name="blurb"/> </head>

... </sparql>

In caso di un risultato boolean, non c’`e bisogno di alcun elemento all’in- terno dell’elemento head e quindi variable non deve essere presente.

In alcuni casi, head pu`o contenere degli elementi con attributo href con- tenenti un URI che fornisce un link a qualche metadata aggiuntivo per i risultati della query:

<?xml version="1.0"?>

<sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head>

...

<link href="metadata.rdf"/> </head>

... </sparql>

Il secondo elemento figlio dell’elemento sparql deve apparire dopo head e pu`o essere sia l’elemento results che boolean. Tale elemento viene scritto anche se il risultato della query `e vuoto.

Per ogni Query Solution all’interno dei query results, viene creato un elemento figlio di results che si chiama result ed `e aggiunto al documento in questo modo: <?xml version="1.0"?> <sparql xmlns="http://www.w3.org/2005/sparql-results#"> ... head ... <results> <result>... </result> <result>... </result> ... </results> </sparql>

Ogni elemento result corrisponde ad una Query Solution e contiene an- ch’esso degli elementi figli (in ordine sparso) per ogni Query Variable che ap- pare nella soluzione. Esso viene usato per registrare in che modo le variabili della query si legano ai termini RDF.

5.5.2.2 Output di una query SPARQL 85

Ogni binding all’interno di una soluzione `e figlio di result e ha come variabile il valore dell’attributo name. Nel caso di due variabili ed una hpage il documento risultante sar`a:

<?xml version="1.0"?>

<sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head>

<variable name="x"/> <variable name="hpage"/> </head>

<results> <result>

<binding name="x"> ... </binding> <binding name="hpage"> ... </binding> </result>

<result>

<binding name="x"> ... </binding> <binding name="hpage"> ... </binding> </result>

... </results> </sparql>

Il valore di un binding di una variabile, che `e un RDF Term, `e incluso come contenuto del binding come segue:

• RDF URI Reference U: < binding >< uri > U < /uri >< /binding > • RDF Literal S: < binding >< literal > S < /literal >< /binding > • RDF Literal S with language L: < binding >< literalxml : lang =00

L00 > S < /literal >< /binding >

• RDF Typed Literal S with datatype URI D: < binding >< literaldatatype =00

D00 > S < /literal >< /binding >

• Blank Node label I: < binding >< bnode > I < /bnode >< /binding > In caso una variabile risulti unbound, cio`e non vi fossero risultati ad essa associabili, nessun elemento binding `e incluso nell’elemento result.

Un esempio di una Query Solution nel formato appena spiegato `e la seguente:

<?xml version="1.0"?>

<sparql xmlns="http://www.w3.org/2005/sparql-results#"> <head>

<variable name="x"/> <variable name="hpage"/> <variable name="name"/> <variable name="age"/> <variable name="mbox"/> <variable name="friend"/> </head> <results> <result> <binding name="x"> <bnode>r2</bnode> </binding>

<binding name="hpage">

<uri>http://work.example.org/bob/</uri>

</binding>

<binding name="name">

<literal xml:lang="en">Bob</literal> </binding>

<binding name="age">

<literal datatype="http://www.w3.org/2001/XMLSchema#integer">30</literal> </binding>

<binding name="mbox">

<uri>mailto:bob@work.example.org</uri> </binding> </result> ... </results> </sparql>

Un risultato di tipo boolean compare come contenuto di un elemento boolean figlio dell’elemento sparql direttamente dopo l’elemento head, e pu`o contenere sia il valore “vero” che “falso” come segue:

<?xml version="1.0"?>

<sparql xmlns="http://www.w3.org/2005/sparql-results#"> ... head ...

<boolean>true</boolean>

</sparql>

Ulteriori informazioni sul documento SPARQL Results Document sono disponibili all’indirizzo http://www.w3.org/TR/rdf-sparql-XMLres/