Description
The lack of a convenient way to capture annotations and statements about individual RDF triples has been a long standing issue for RDF. Such annotations are a native feature in other contemporary graph data models (e.g., edge properties in the Property Graph model). In recent years, the RDF* approach has emerged to address this limitation of RDF. After RDF* gained traction among both vendors and users of RDF systems, a community group has formed to produce a specification of the approach, now called RDF-star. In February 2021, the group published a first working draft of this spec, which is accompanied by several test suites. In this presentation we will introduce the approach and the various features that it adds to RDF and SPARQL.
Palestrantes: Pierre-Antoine Champin & Olaf Hartig
Vídeo -> https://youtu.be/ZNfq12mdnsM
Slides -> https://w3c.github.io/rdf-star/presentations/RDF-star_Lotico.pdf
Links -> https://w3c.github.io/rdf-star/
Anotações
Cada tripla representa uma declaração sobre uma fato (não só as triplas que ligam Nós, ou seja, que representam arestas do grafo)
RDF-Star permite adicionar metadados a qualquer tripla: statement-level metadata
Exemplo de aninhamento de metadados:
<< <<#Alice rdf:type :genius >> :source "file.x" >> :creator #Bob
Diferente de
<<#Alice rdf:type :genius >> :source "file.x""file.x" :creator #Bob
Reificação padrão: verbosidade da consulta e a declaração original não consta mais no grafo o que pode prejudicar inferências. Pode introduzir problemas como um statement ter mais de um sujeito ou predicado ou objeto.
Single-Triple Named Graphs: não tem a semântica definida
Singleton properties: criar uma nova propriedade para usar em uma tripla que faz a declaração (indiretamente pq não é a propriedade original) e essa propriedade é do tipo sp:singletonProperty da propriedade original. Em termos de verbosidade é melhor que a reificação padrão mas não traz a declaração original no grafo.Em termos de semântica é mais precisa que Named Graph pois o significado da propriedade é definido. Mas não escala pq esbarra na premissa de que o número de predicados é bem menor que o número de sujeitos e objetos e isso não acontece pq é necessário criar uma propriedade para cada tripla.
Questionamento motivador: Pq não usar a própria tripla para incluir os metadados?
Nested triples: podem ser sujeito ou objeto
Consultas SPARQL-Star ficam mais fáceis de ler e construir por seres humanos
Blazegraph: Reification Done Right
Technical Report - Junho/2014
W3C Workshop sobre Padronização de Dados em Grafo em Março de 2019 motivou a criação do grupo de trabalho
Outras especificações sobre RDF da W3C: RDF Semantics, RDF Abstract Syntax, SPARQL e Turtle estão sendo alteradas para adaptar a RDF-Start e SPARQL-Star
Graph ::= Triple*
Triple ::= Subj Pred Obj
Subj ::= IRI | Bnode | Triple
Pred ::= IRI
Obj ::= IRI | Bnode | Literal | Triple
Dataset ::= Graph (IRI Graph)*
Asserted triple X Embedded triple
Turtle-Star
#Alice rdf:type :genius {|:source "file.x"|}
"file.x" :creator #Bob
#Alice rdf:type :genius é uma tripla asserted então temos 3 triplas no arquivo e isso é diferente de
<<#Alice rdf:type :genius >> :source "file.x""file.x" :creator #Bob
Onde temos somente um tripla aninhada e duas triplas no arquivo. Só se aplicam a triplas no sujeito
Tem também N-triples-star, N-Quads-star e JSON-LD-star
Triplas embutidas, aninhadas, não são automaticamente declarações (statements, asserted)
PG-Mode e SA-mode não existem mais ...
Semantica monotônica, triplas asserted não podem ser canceladas.
#Alice :workingFor #ACME {|:since 2010-12-10; until 2020-12-20;|}
Triplas são únicas, propostas para as ocorrências de triplas se parecem com reificação
SPARQL-Star
SELECT ?allegedGenius ?accordingTo
WHERE {
<<?allegedGenius rdf:type :Genius>> :source ?src1.
<<?allegedGenius rdf:type :Nerd>> :source ?src2.
FILTER ( ?src1 != ?src2 )
?src1 s:creator ?accordingTo .
?src2 s:creator ?accordingTo .
}
SELECT ?allegedGenius
WHERE {
<<?allegedGenius rdf:type :Genius>> :source ?src1 ; :source ?src2 .
FILTER ( ?src1 != ?src2 )
?src1 s:creator ?accordingTo1 .
?src2 s:creator ?accordingTo2 .
FILTER ( ?accordingTo1 != ?accordingTo2 )
}
SELECT ?cartoon ?b
WHERE {
?cartoon :depicts <<?b :dreamingOf <<?a :dreamingOf ?b>> >>
}
SELECT ?cartoon ?y
WHERE {
VALUES ?y { <<:alice :dreamingOf :bob>> <<:alice :dreamingOf :eve>> }
?cartoon :depicts << :bob :dreamingOf ?y >>
}
SELECT ?cartoon ?y ?o
WHERE {
?cartoon :depicts << :bob :dreamingOf ?y >>
FILTER( isTriple(?y) )
BIND( Object(?y) AS ?o )
}
SELECT ?cartoon ?t
WHERE {
?cartoon :depicts << ?x :dreamingOf ?y >>
BIND( TRIPLE(?x,:state,:sleeping) AS ?t )
}
SELECT ?allegedGenius ?type ?src
WHERE {
?allegedGenius rdf:type ?type {| :source ?src |} .
}
Próximos passos SHACL-Star
Star - Kleene star
Quick Reference
An operation on formal languages that gives for any language L the language L*, defined by {Λ} ∪ L ∪ LL ∪ LLL ∪ … where Λ is the empty word. Thus a word w is in L* if and only if it has the form w1w2…wn with each wi in L, i.e. is a concatenation of words in L.
{Λ} ∪ L ∪ LL ∪ LLL ∪ …
w1w2…wn
The Kleene-plus (L+) of L, is defined by
L ∪ LL ∪ LLL ∪ … Thus L+ comprises the nonempty strings of L*.
L ∪ LL ∪ LLL ∪ …
Comentários
Postar um comentário
Sinta-se a vontade para comentar. Críticas construtivas são sempre bem vindas.