• Non ci sono risultati.

A.1SintassiSPARQL AppendiceA

N/A
N/A
Protected

Academic year: 2021

Condividi "A.1SintassiSPARQL AppendiceA"

Copied!
16
0
0

Testo completo

(1)

Appendice A

A.1

Sintassi SPARQL

Query ::= SelectQuery | ConstructQuery | AskQuery SelectQuery ::= SelectClause DatasetClause WhereClause SelectClause ::= select (Var+ | ’*’)

ConstructQuery ::= ConstructClause DatasetClause WhereClause ConstructClause ::= construct ConstructTemplate

ConstructTemplate ::= Triple+

AskQuery ::= ask DatasetClause WhereClause DatasetClause ::= DatasetClause from

(DefGraphClause | NamGraphClause ) | DefGraphClause ::= IriRef

NamGraphClause ::= named IriRef WhereClause ::= where GP

GP ::= Triple | GP filter ValueC | GP and GP | GP union GP | GP optional GP

| VarOrIri graph GP | { }

Triple ::= VarOrGTerm VarOrIri VarOrGTerm .

(2)

APPENDICE A. SINTASSI E SEMANTICA DI SPARQL 68 ValueC ::= Var Op VarOrGTerm | isIRI(Var) | isLiteral(Var)

| isBlank(Var) | langMatches(Var, Var) | bound(Var) | sameTerm(Var,Var) | ¬ValueC | ValueC ∧ ValueC | ValueC ∨ ValueC

Op ::= > | < | ≥ | ≤

GraphTerm ::= IriRef | RDFLiteral | BNode Var ::= ’?’Varname | ’$’Varname VarOrGTerm ::= Var | GraphTerm

VarOrIri ::= Var | IriRef

A.2

Semantica SPARQL

Env : IriRefSet → Graph

Record : VarOrBNode → GraphTerm Rel= Set(Record) t[g]=        g1 se t= [. . . , g = g1, . . .] g altrimenti

dove t è un record e g un termine del grafo.

~_Tr : Triple → (Env → Rel)

~TripleTre = ~T1 T2 T3Tre

~T1 T2 T3Tre = πvar(T1,T2,T3)(~T1T1e Z ~T2T2e Z ~T3T3e )

~VarT1e = {[Var = g1; 1= g1; 2= g2; 3 = g3] | (g1, g2, g3) ∈ e(Default)}

~GraphTermT1e = {[1 = g1; 2= g2; 3= g3] | (g1, g2, g3) ∈ e(Default) ∧

g1 = GraphTerm}

~VarT2e = {[Var = g2; 1= g1; 2= g2; 3 = g3] | (g1, g2, g3) ∈ e(Default)}

~IriRefT2e = {[1 = g1; 2= g2; 3= g3] | (g1, g2, g3) ∈ e(Default) ∧

(3)

APPENDICE A. SINTASSI E SEMANTICA DI SPARQL 69

~VarT3e = {[Var = g3; 1= g1; 2= g2; 3 = g3] | (g1, g2, g3) ∈ e(Default)}

~GraphTermT3e = {[1 = g1; 2= g2; 3= g3] | (g1, g2, g3) ∈ e(Default) ∧

g3 = GraphTerm}

~_Vgt : VarOrGTerm → (Record → GraphTerm)

~gVgtt = t[g]

~_Vc : ValueC → (Record → Bool)

~σ1OPσ2Vct = ~σ1 Vgt t OP ~σ2 Vgt t ~isIRI(σ)Vct = datatype(~σ Vgt t )= IriRef ~isLiteral(σ)Vct = datatype(~σ Vgt t )= RDFLiteral ~langMatches(σ1, σ2)Vct = langMatches(~σ1Vgtt , ~σ2 Vgt t ) ~bound(σ)Vct = ~σ Vgt t , NULL ~sameTerm(σ1, σ2)Vct = ~σ1Vgtt = ~σ2 Vgt t ~isBlank(σ)Vct = datatype(~σ Vgt t )= BNode

datatype : Var → GraphTerm

langMatches : (GraphTerm × GraphTerm) → Bool

~_Gp: GP → (Env → Rel) ~TripleGpe = ~TripleTre ~GP filter VCGpe = {t | t ∈ (~GP Gp e ∧ ~VCVct )} ~GP1and GP2Gpe = ~GP1Gpe Z ~GP2Gpe ~GP1unionGP2Gpe = ~GP1Gpe ∪ ~GP2Gpe ~GP1optionalGP2Gpe = ~GP1Gpe X ~GP2Gpe ~IriRef graph GPGpe = ~GP Gp e[De f ault=e(IriRe f )] ~Var graph GPGpe =

(4)

APPENDICE A. SINTASSI E SEMANTICA DI SPARQL 70

~{}Gpe = {}

R1 X R2 = (R1 Z R2) ∪ [(R1\πa1,...,an(R1 Z R2))×

{[b1 = NULL, . . . , bm = NULL]}]

dove a1, . . . , an è lo schema della tabella R1 e b1, . . . , bm sono i campi di R2

che non fanno parte della giunzione.

~_Wc := WhereClause → (Env → Rel) ~where GPWce = ~GP

Gp e

~_Dce : DatasetClause → (Env → Env)

~Dce = []

~DatasetClause from IriRefDce = ~DatasetClauseDce +

[Default= ((~DatasetClauseDc

e (Default)) ∪ e(IriRef))]

~DatasetClause from named IriRefDce = ~DatasetClauseDce +

[IriRef= e(IriRef)]

~_Sc : SelectClause → (Rel → Rel)

~select Var1, . . . , VarnScr = {[t[Var1], . . . , t[Varn]] | t ∈ r}

~select ∗Scr = r

~_Sq : SelectQuery → (Env → Rel)

~SelectClause DatasetClause WhereClauseSqe =

let e1= ~DatasetClauseDc e

let r= BlankRename (~WhereClauseWc e1 )

return ~SelectClauseSc r

(5)

APPENDICE A. SINTASSI E SEMANTICA DI SPARQL 71

BlankRename : Rel → Rel

È la funzione biettiva che data una relazione r’ crea una nuova relazione r avente le stesse righe di r’ ma con dei blank nodes cosidetti “freschi”. Cioè per ogni blank node b ’ in r’ si genera un nuovo blank node b in r che viene sostituito ad ogni occorrenza di b ’ nelle righe di r. Applicata quindi alla tabella resa dalla WhereClause si elimina l’associazione tra i blank nodes che appaiono nel risultato e quelli presenti nel grafo.

~_Ct : Triple → (Record → (GraphTerm × GraphTerm × GraphTerm) )

~g1 g2 g3Ctt = ~g1Vgtt ~g2Vgtt ~g3Vgtt

~_Cc : ConstructClause → (Rel → Graph)

~construct Triple+Ccr = ( S t∈r S tp∈Triple+ ~tpCtt+[b 1= f1(t),...,bn= fn(t)] !)

f : (Int × Record) → BNode

La funzione iniettiva f dato un indice e un record genera dei blank nodes diversi per ogni coppia< indice, record >.

~_Cq : ConstructQuery → (Env → Graph)

~ConstructClause DatasetClause WhereClauseCqe =

let e1= ~DatasetClauseDc e

let r= BlankRename (~WhereClauseWc e1 )

return ~ConstructClauseCc r

(6)

APPENDICE A. SINTASSI E SEMANTICA DI SPARQL 72

~_Aq : AskQuery → (Env → Bool)

~ask DatasetClause WhereClauseAqe = let e1 = ~DatasetClauseDce

let r = ~WhereClauseWc e1

(7)

Appendice B

B.1

Definizione dei tipi

TypeTN ::= T_IRI | T_RDFLiteral | T_BNode | T_NULL | {IriRef} | {lit}

| nameOf(TG) | TN ∪ TN | TN ∩ TN

TypeTG ::= TN T_IRI TN | TN IriRef TN |  | TG ∪ TG Type TR ::= [Var : TN] | TR ∪ TR | TR and TR | TR opt TR | [] TypeNG ::=  | NG, IriRef : TG

B.2

Semantica dei tipi

~_tn: TN → (Env → P{GraphTerm}) ~T_IRItne = IRIREF

~T_RDFLiteraltne = RDFLiteral

~T_BNodetne = BNode

(8)

APPENDICE B. IL SISTEMA DI TIPI 74

~T_NULLtne = {null}

~{lit}tbe = {lit}

~{IriRef}tbe = {IriRef}

~nameOf(TG)tne = {IriRef | e(IriRef) ∈ ~TG tg e } ~TN1∪ TN2tne = ~TN1tne ∪ ~TN2tne ~TN1∩ TN2tne = ~TN1tne ∩ ~TN2tne ~_tg: TG → (Env → P{Graph}) ~tge = ∅ ~TN1T_IRI TN2tge = P(G | G ⊆ ~TN1tne × IRIREF × ~TN2tne ) ~TN1IriRef TN2tge = P(G | G ⊆ ~TN1tne × {IriRef} × ~TN2tne ) ~TG1∪ TG2tge = ~TG1tge ∪ ~TG2tge ~_tr: TR → (Env → P{Rel})

~[Var : TN]tre = P([Var = nodo] | nodo ∈ ~TNtne )

~TR1∪ TR2tre = ~TR1tre ∪+~TR2tre ~TR1 andTR2tr e = ~TR1tre Z ~TR2tre ~TR1 optTR2tr e = ~TR1tre X ~TR2tre ~[]tre = {[]}

Date due relazioni r1e r2, definiamo:

• r1 Z r2come la classica giunzione tra tabelle

• r1 X r2il join esterno definito come: (r1 Z r2)∪(r1×{c1, . . . , cn} → null)

dove {c1, . . . , cn} sono i campi di r2 non presenti in r1

• r1∪+r2come l’unione tra due relazioni con schema diverso ottenuta

aggiungendo colonne di valori nulli nelle tabelle al fine di rendere omogenei gli schemi e quindi poter eseguire l’unione relazionale Dati due insiemi di relazioni R1e R2, definiamo:

(9)

APPENDICE B. IL SISTEMA DI TIPI 75 • R1 Z R2 = {r1 Z r2| r1 ∈ R1, r2 ∈ R2} • R1 X R2 = {r1 X r2| r1 ∈ R1, r2 ∈ R2} • R1∪+R2 = {r1∪+r2| r1 ∈ R1, r2 ∈ R2} ~_ng : NG → (Env → P{Env}) ~nge = {∅}

~IriRef : nameOf(TG), NGnge = {[IriRef = G | G ∈ ~TG tg e } × ~NG ng e ~NG,TGngtge = ~NG ng e × {[Default= G] | G ∈ ~TG tg e }

Dove ∪+ è l’unione esterna in cui si fa l’unione di due relazioni con stesso schema oppure con schema differente (si rendono gli schemi uguali aggiungendo colonne con valori nulli nelle tabelle).

B.3

Giudizi

NG,TG `Sq SelectQuery : TR NG,TG `CqConstructQuery : TG NG,TG `Aq AskQuery : Bool NG,TG `Dc DatasetClause : NG’,TG’ NG,TG `Wc WhereClause : TR NG,TG `Gp GP : TR TR `Sc SelectClause : TR 1 TR `Ct ConstructTemplate : TG’ TR `Vgt VarOrGTerm : TN TR `Vc ValueC : Bool

(10)

APPENDICE B. IL SISTEMA DI TIPI 76

B.4

Regole

(TypeSelectQuery) NG,TG `Dc DatasetClause : NG’,TG’ NG’,TG’ `WcWhereClause : TR TR `ScSelectClause : TR’

NG,TG `Sq SelectClause DatasetClause WhereClause : TR’

(TypeSelectClause)

TR ` Var1 : TN1, . . . , Varn : TNn

TR `ScselectVar

1, . . . , Varn: [Var1: TN1, . . . , Varn : TNn]

(TypeSelectClauseAll) TR `Scselect* : TR (TypeConstructQuery) NG,TG `Dc DatasetClause : NG’,TG’ NG’,TG’ `WcWhereClause : TR TR `Ct ConstructTemplate : TG’

NG,TG `Cq ConstructTemplate DatasetClause WhereClause : TG’

(TypeConstructTemplate) TR `CtTriple : TG 1 TR `Ct Triple+ : TG2 TR `Ct Triple. Triple+ : TG 1∪ TG2 (TypeConstructTemplateBase) TR `Vgt g1 : TN1 TR `Vgt g2: TN2

TR `VgtVarOrIri : {IriRef1} ∪. . . ∪ {IriRefn}

TR `Ct g

(11)

APPENDICE B. IL SISTEMA DI TIPI 77 (TypeAskQuery)

NG,TG `Dc DatasetClause : NG’,TG’ NG’,TG’ `Wc WhereClause : TR

NG,TG `Aq askDatasetClause WhereClause : Bool

(TypeFrom)

NG,TG ∪ TG1`Dc DatasetClause : NG’,TG’

NG,TG `Dc DatasetClause from (IriRef : nameOf(TG

1)) : NG’,TG’

(TypeFromNamed)

(NG,IriRef:nameOf(TG1)),TG `Dc DatasetClause : NG’,TG’

NG,TG `Dc DatasetClause from named (IriRef : nameOf(TG

1)) : NG’,TG’ (TypeFromEmpty) NG,TG `Dc  : NG,TG (TypeWhere) NG,TG `Gp GP : TR NG,TG `Dc whereGP : TR (TypeTriple1) S= {TN1 | (TN1p TN2) ∈ TG ∧ (TN ∩∗TN2)} S , ∅ o : TN NG,TG `Tr Var p o : [Var : ∪ {TN1S}TN1] (TypeTriple2) W= {TN2 | (TN1p TN2) ∈ TG ∧ (TN ∩ ∗ TN1)} W , ∅ s : TN NG,TG `Tr s p Var : [Var : ∪ {TN2W}TN2]

(12)

APPENDICE B. IL SISTEMA DI TIPI 78 (TypeGpAnd) NG,TG `Gp GP1 : TR1 NG,TG `GpGP2 : TR2 NG,TG `GpGP 1and GP2 : TR1 and TR2 (TypeGpOpt) NG,TG `Gp GP 1 : TR1 NG,TG `GpGP2 : TR2 NG,TG `Gp GP 1optGP2: TR1opt TR2 (TypeGpUnion) NG,TG `Gp GP 1 : TR1 NG,TG `GpGP2 : TR2 NG,TG `Gp GP1unionGP2 : TR1∪ TR2 (TypeGpFilter) NG,TG `Gp GP : TR TR `Gp VC : Bool NG,TG `GpGP filter VC : TR (TypeGpGraph)

NG, ∪{IriRe f ∈Dom(NG)} NG[IriRef] ` GP : TR

NG,TG `Gp Var graphGP : [Var : Dom(NG)] and TR

(TypeGpIriGraph ) IriRef : nameOf(TG1) ∈ NG NG, TG1`GpGP : TR NG,TG `GpIriRef graph GP : TR (TypeGpEmpty) NG,TG `Gp {} : {} (TypeVC) TR `VgtVar : TN 1 TR `VgtVarOrGTerm : TN2

(13)

APPENDICE B. IL SISTEMA DI TIPI 79 (TypeVCisIri) TR `VgtVar : TN TR `VcisIRI(Var) : Bool (TypeVCisLiteral) TR `VgtVar : TN TR `VcisLiteral(Var) : Bool (TypeVCisBlank) TR `VgtVar : TN TR `VcisBlank(Var) : Bool (TypeVClangMatches) TR `VgtVar 1 : TN TR `VgtVar2 : TN

TR `VclangMatches(Var1,Var2) : Bool

(TypeVCbound) TR `VgtVar : TN TR `Vcbound(Var) : Bool (TypeVCsameTerm) TR `VgtVar 1 : TN TR `VgtVar2: TN TR `Vc sameTerm(Var 1,Var)2 : Bool (TypeNotVC) TR `VcVC : Bool TR `Vc¬VC : Bool (TypeVCand) TR `VcVC 1 : Bool TR `Vc VC2: Bool TR `VcVC 1∧ VC2: Bool

(14)

APPENDICE B. IL SISTEMA DI TIPI 80 (TypeVCor) TR `VcVC1 : Bool TR `Vc VC2: Bool TR `VcVC 1∨ VC2: Bool (VarOrGTermVar) TR `Tr Var : TN TR `VgtVar : TN (VarOrGTermIri) TR `VgtIriRef : {IriRef} (VarOrGTermBnode) TR `Vgtbn : T_BNode (VarOrGTermLiteral) TR `Vgtlit : T_RDFLiteral[lit] (TypeAnd) TR1` Var : TN1 TR2` Var : TN2 TR1and TR2 ` Var : TN1∩ TN2 (TypeAnd1)

TR1` Var : TN1 Var < VarSet(TN2)

TR1and TR2 ` Var : TN1

(TypeAnd2)

TR2` Var : TN2 Var < VarSet(TN1)

(15)

APPENDICE B. IL SISTEMA DI TIPI 81 (TypeOpt)

TR1` Var : TN1 TR2` Var : TN2

TR1 opt TR2 ` Var : TN1

(TypeOpt1)

TR1` Var : TN1 Var < VarSet(TR2)

TR1opt TR2` Var : TN1

(TypeOpt2)

TR2` Var : TN2 Var < VarSet(TR1)

TR1opt TR2 ` Var : TN2∪ T_NULL

(TypeUnion)

TR1` Var : TN1 TR2` Var : TN2

TR1∪ TR2` Var : TN1∪ TN2

(TypeUnion1)

TR1` Var : TN1 Var < VarSet(TR2)

TR1∪ TR2 ` Var : TN1∪ T_NULL

(TypeUnion2)

TR2` Var : TN2 Var < VarSet(TR1)

TR1∪ TR2 ` Var : TN2∪ T_NULL

B.5

Proprietà

NG,TG `Sq SelectQuery : TR ⇒ ∀e ∀e1 ∈ ~NG,TGngtg e . ~SelectQuery Sq e1 ∈ ~TR tr e1 TR `Sq SelectClause : TR1 ⇒ ∀e ∀r ∈ ~TRtr e . ~SelectClauseScr ∈ ~TR1tre

(16)

APPENDICE B. IL SISTEMA DI TIPI 82 NG,TG `CqConstructQuery : TG ⇒e ∀e1 ∈ ~NG,TGngtg e . ~ConstructQuery Cq e1 ∈ ~TG tg e1 TR `Ct ConstructTemplate : TG ⇒e ∀t ∈ ~TRtr e . ~ConstructTemplateCtt ∈ ~TG tg e TR `VgtVarOrGTerm : TN ⇒e ∀t ∈ ~TRtr e . ~VarOrGTerm Vgt t ∈ ~TNtne NG,TG `Aq AskQuery : Bool ⇒e ∀e1 ∈ ~NG,TGngtg e . ~AskQuery Aq e1 ∈ ~Boole NG,TG `Dc DatasetClause : NG’,TG’ ⇒e ∀e1 ∈ ~NG,TGngtg e . ~DatasetClauseDce1 ∈ ~NG’,TG’ ngtg e1 NG,TG `WcWhereClause : TR ⇒e ∀e1 ∈ ~NG,TGngtg e . ~WhereClauseWce1 ∈ ~TRtre1 NG,TG `GpGP : TR ⇒e ∀e1 ∈ ~NG,TGngtg e . ~GP Gp e1 ∈ ~TR tr e1 TR `Vc ValueC : Bool ⇒e ∀t ∈ ~TRtr e . ~ValueCVct ∈ ~Boole

Riferimenti

Documenti correlati

Matematica I, Esercizi

Sia D 30 l’insieme dei divisori di 30 con la relazione di ordine parziale data dalla divisibilit` a:.. aRb se a

Supponiamo che il numero m delle equazioni sia molto superiore al numero delle incognite, e che il sistema non abbia alcuna soluzione (questa e’ una situazione molto comune in

[r]

Teoremi di Hˆ opital, Lagrange e Taylor 13 Dicembre 2013.

[r]

Politecnico di Milano – Ingegneria Industriale.

(a) La condizione di parallelismo tra piani si pu` o tradurre nel fatto che le equa- zioni cartesiane dei due piani devono avere gli stessi coefficienti a, b e c, mentre il