Comportamento do SPARQL DESCRIBE em relação ao grafo padrão
O formato da consulta DESCRIBEDESCRIBE usar.
Na implementação do Neptune, independentemente do modo, DESCRIBE usa apenas dados presentes no grafo padrão do SPARQL. Isso é consistente com a forma como o SPARQL trata os conjuntos de dados (consulte Specifying RDF Datasets
No Neptune, o grafo padrão contém todos os triplos exclusivos na união de todos os grafos nomeados no banco de dados, a menos que grafos nomeados específicos sejam especificados usando cláusulas FROM e/ou FROM NAMED. Todos os dados do RDF no Neptune são armazenados em um grafo nomeado. Se um triplo for inserido sem um contexto de grafo nomeado, o Neptune o armazenará em um grafo nomeado designado http://aws.amazon.com/neptune/vocab/v01/DefaultNamedGraph.
Quando um ou mais grafos nomeados são especificados usando a cláusula FROM, o grafo padrão é a união de todos os triplos exclusivos nesses grafos nomeados. Se não houver nenhuma cláusula FROM e houver uma ou mais cláusulas FROM NAMED, o grafo padrão estará em branco.
Exemplos de DESCRIBE do SPARQL
Pense nos seguintes dados:
PREFIX ex: <https://example.com/> GRAPH ex:g1 { ex:s ex:p1 "a" . ex:s ex:p2 "c" . } GRAPH ex:g2 { ex:s ex:p3 "b" . ex:s ex:p2 "c" . } ex:s ex:p3 "d" .
Para essa consulta:
PREFIX ex: <https://example.com/> DESCRIBE ?s FROM ex:g1 FROM NAMED ex:g2 WHERE { GRAPH ex:g2 { ?s ?p "b" . } }
O Neptune geraria:
ex:s ex:p1 "a" . ex:s ex:p2 "c" .
Aqui, o padrão do grafo GRAPH ex:g2 { ?s ?p "b" } é avaliado primeiro, gerando vinculações para ?s e, depois, a parte DESCRIBE é avaliada sobre o grafo padrão, que agora é apenas ex:g1.
No entanto, para essa consulta:
PREFIX ex: <https://example.com/> DESCRIBE ?s FROM NAMED ex:g1 WHERE { GRAPH ex:g1 { ?s ?p "a" . } }
O Neptune não geraria nada, porque quando uma cláusula FROM NAMED está presente sem nenhuma cláusula FROM, o grafo padrão está em branco.
Na seguinte consulta, DESCRIBE é usado sem as cláusulas FROM ou FROM NAMEDpresentes:
PREFIX ex: <https://example.com/> DESCRIBE ?s WHERE { GRAPH ex:g1 { ?s ?p "a" . } }
Nessa situação, o grafo padrão é composto por todos os triplos exclusivos na união de todos os grafos nomeados no banco de dados (formalmente, a mesclagem do RDF), então o Neptune geraria:
ex:s ex:p1 "a" . ex:s ex:p2 "c" . ex:s ex:p3 "b" . ex:s ex:p3 "d" .