Tópicos Especiais em Banco de Dados I

Texto

(1)

Universidade  Federal  do  Rio  de  Janeiro  (UFRJ)  

Departamento  de  Ciência  da  Computação  (DCC)  

Tópicos  Especiais  em  Banco  de  Dados  I  

Profas.  Maria  Luiza  Campos  e  Giseli  Lopes    

RDB2RDF  

 

Profa.  Giseli  Rabello  Lopes  

2016  /  2  

(2)

Sumário  

•  RDB2RDF  

•  Direct  Mapping  

•  R2RML  

•  D2RQ  

•  Referências  

(3)

Desenvolvimento  Web  clássico    

[Auer  et  al.,  2014]    

•  Acesso  comparXlhado  aos  dados  

•  Expõe  dados  em  páginas  web  para  consumo  

humano  

(4)

Triplificação  por  Materialização  

[Auer  et  al.,  2014]    

•  Acesso  direto  aos  dados,  usuários  podem  criar  suas  próprias   consultas  

•  Linked  Data  permite  que  outras  aplicações  consumam  os   dados  

•  NegaXvo:  precisa  de  outro  servidor  com  índices  /  consumo  de  

memória  

(5)

Triplificação  por  reescrita  SPARQL-­‐to-­‐

SQL   [Auer  et  al.,  2014]    

•  Todos  os  beneccios  anteriores  além  de:  

–  Redução  da  sobrecarga  de  implantação,  baixo   consumo  de  memória  

–  Dados  sempre  atualizados  

(6)

Mapeamento  para  Triplificação  

[Auer  et  al.,  2014]  

•  Funciona  para  ambos:  Materialização  e  

Reescritas  SPARQL-­‐to-­‐SQL  (grafos  virtuais)  

•  A  seguir:  

–  Direct  Mapping  (Mapeamento  Direto)  

–  R2RML  (Linguagem  de  Mapeamento)  

(7)

Mapeamento  Direto  (Direct  Mapping)  

[Arenas  et  al.,  2012]  

•  Define  uma  transformação  simples  

•  Provê  uma  base  para  definição  e  comparação  

de  transformações  mais  complexas  

(8)

Exemplo  -­‐  DB  

CREATE TABLE Addresses (

ID INT, PRIMARY KEY(ID), city CHAR(10),

state CHAR(2) );

CREATE TABLE People (

ID INT, PRIMARY KEY(ID), fname CHAR(10),

addr INT,

FOREIGN KEY(addr) REFERENCES Addresses(ID) );

INSERT INTO Addresses (ID, city, state) VALUES (18, 'Cambridge', 'MA');

INSERT INTO People (ID, fname, addr) VALUES (7, 'Bob', 18);

INSERT INTO People (ID, fname, addr) VALUES (8, 'Sue', NULL);

(9)

Exemplo  -­‐  Direct  Mapping  

@base <http://foo.example/DB/> .

@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

<People/ID=7> rdf:type <People> .

<People/ID=7> <People#ID> 7 .

<People/ID=7> <People#fname> "Bob" .

<People/ID=7> <People#addr> 18 .

<People/ID=7> <People#ref-addr> <Addresses/ID=18> .

<People/ID=8> rdf:type <People> .

<People/ID=8> <People#ID> 8 .

<People/ID=8> <People#fname> "Sue" .

<Addresses/ID=18> rdf:type <Addresses> .

<Addresses/ID=18> <Addresses#ID> 18 .

<Addresses/ID=18> <Addresses#city> "Cambridge" .

<Addresses/ID=18> <Addresses#state> "MA" .

(10)

Exemplo  -­‐  DB2  

CREATE TABLE Addresses ( ID INT,

city CHAR(10), state CHAR(2),

PRIMARY KEY(city,state) );

CREATE TABLE People (

ID INT, PRIMARY KEY(ID), fname CHAR(10),

addrCity CHAR(10), addrState CHAR(2),

FOREIGN KEY(addrCity,addrState) REFERENCES Addresses(city,state) );

INSERT INTO Addresses (ID, city, state) VALUES (18, 'Cambridge', 'MA');

INSERT INTO People (ID, fname, addrCity, addrState) VALUES (7, 'Bob', 'Cambridge', 'MA');

INSERT INTO People (ID, fname, addrCity, addrState) VALUES (8, 'Sue', NULL, NULL);

(11)

Exemplo  -­‐  Chaves  primárias  compostas  

•  Se,  no  exemplo  anterior,  a  chave-­‐primária  para  Adresses   fosse  (city, state)  ao  invés  de  ID,  o  idenXficador  para   cada  linha  na  tabela  deveria  ser  <Adresses/

city=Cambridge;state=MA>.  As  triplas  envolvendo  

<Adresses/ID=18>  deveriam  ser  subsXtuídas  pelas   seguintes  triplas:  

<People/ID=7> <People#ref-addrCity;addrState> <Adresses/

city=Cambridge;state=MA>.

<Adresses/city=Cambridge;state=MA> rdf:type <Addresses> .

<Adresses/city=Cambridge;state=MA> <Addresses#ID> 18 .

<Adresses/city=Cambridge;state=MA> <Addresses#city>

"Cambridge" .

<Adresses/city=Cambridge;state=MA> <Addresses#state> "MA" .

(12)

R2RML   [Auer  et  al.,  2014]  

•  R2RML  é  a  linguagem  de  mapeamento  RDB  to   RDF  mais  proeminente  

–  Mapeamentos  customizados  para  converter  RDB   em  RDF  

–  Recomendação  da  W3C  desde  setembro  de  2012  

–  Serialização  Turtle  

(13)

Uma  visão  geral  de  R2RML  

[Das  et  al.,  2012]  

(14)

Conceitos  básicos  de  R2RML    

[Auer  et  al.,  2014]  

•   Term  Map  cria  termos  RDF  (IRIs,  literais  e  blank  nodes)  

–  De  um  template,  ou   –  De  uma  coluna,  ou  

–  De  uma  expressão  constante  

•  Triples  Map  cria  triplas  

–  Das  linhas  de  uma  tabela  ou  visão,     –  Usando  Term  Maps  

•   Referencing  Object  Map  modela  relações  entre  Triples  

Maps  

(15)

Exemplo  -­‐  BD  Relacional    

[Das  et  al.,  2012]  

(16)

Exemplo  -­‐  DB3  

CREATE TABLE DEPT (

DEPTNO INTEGER PRIMARY KEY, DNAME VARCHAR(30),

LOC VARCHAR(100) );

CREATE TABLE EMP (

EMPNO INTEGER PRIMARY KEY, ENAME VARCHAR(100),

JOB VARCHAR(20),

DEPTNO INTEGER REFERENCES DEPT (DEPTNO) );

INSERT INTO DEPT VALUES (10,'APPSERVER','NEW YORK');

INSERT INTO EMP VALUES (7369,'SMITH','CLERK',10);

(17)

Exemplo  -­‐  Saída  desejada  

[Das  et  al.,  2012]  

<http://data.example.com/employee/7369> rdf:type ex:Employee.

<http://data.example.com/employee/7369> ex:name "SMITH".

<http://data.example.com/employee/7369> ex:department <http://

data.example.com/department/10>.

<http://data.example.com/department/10> rdf:type ex:Department.

<http://data.example.com/department/10> ex:name "APPSERVER".

<http://data.example.com/department/10> ex:location "NEW YORK".

<http://data.example.com/department/10> ex:staff 1.

(18)

Exemplo  -­‐  Mapeamento  R2RML  da   tabela  EMP   [Das  et  al.,  2012]  

@prefix rr: <http://www.w3.org/ns/r2rml#>.

@prefix ex: <http://example.com/ns#>.

<#TriplesMap1>

rr:logicalTable [ rr:tableName "EMP" ];

rr:subjectMap [

rr:template "http://data.example.com/employee/{EMPNO}";

rr:class ex:Employee;

];

rr:predicateObjectMap [ rr:predicate ex:name;

rr:objectMap [ rr:column "ENAME" ];

].

<http://data.example.com/employee/7369> rdf:type ex:Employee.

<http://data.example.com/employee/7369> ex:name "SMITH".

(19)

Exemplo  -­‐  Computando  propriedade   com  uma  visão  R2RML   [Das  et  al.,  2012]  

<#DeptTableView> rr:sqlQuery """

SELECT DEPTNO, DNAME, LOC,

(SELECT COUNT(*) FROM EMP WHERE EMP.DEPTNO=DEPT.DEPTNO) AS STAFF

FROM DEPT;

""".

(20)

Exemplo  -­‐  Mapeando  as  triplas  da   visão   [Das  et  al.,  2012]  

<#TriplesMap2>

rr:logicalTable <#DeptTableView>;

rr:subjectMap [

rr:template "http://data.example.com/department/{DEPTNO}";

rr:class ex:Department;

];

rr:predicateObjectMap [ rr:predicate ex:name;

rr:objectMap [ rr:column "DNAME" ];

];

rr:predicateObjectMap [

rr:predicate ex:location;

rr:objectMap [ rr:column "LOC" ];

];

rr:predicateObjectMap [ rr:predicate ex:staff;

rr:objectMap [ rr:column "STAFF" ];

].

(21)

Exemplo  -­‐  Mapeando  as  triplas  da   visão   [Das  et  al.,  2012]  

<http://data.example.com/department/10> rdf:type ex:Department.

<http://data.example.com/department/10> ex:name "APPSERVER".

<http://data.example.com/department/10> ex:location "NEW YORK".

<http://data.example.com/department/10> ex:staff 1.

(22)

Exemplo  -­‐  Relacionamento  entre  duas   tabelas  (EMP  e  DEPTO)   [Das  et  al.,  2012]  

<#TriplesMap1>

rr:predicateObjectMap [

rr:predicate ex:department;

rr:objectMap [

rr:parentTriplesMap <#TriplesMap2>;

rr:joinCondition [

rr:child "DEPTNO";

rr:parent "DEPTNO";

];

];

].

<http://data.example.com/employee/7369> ex:department

<http://data.example.com/department/10>.

(23)

Exemplo  –  DB3  completo  

@prefix ex: <http://example.com/ns#> .

<http://data.example.com/department/10>

a ex:Department ; ex:location "NEW YORK" ; ex:name "APPSERVER" ;

ex:staff 1 .

<http://data.example.com/employee/7369>

a ex:Employee ;

ex:department <http://data.example.com/

department/10> ;

ex:name "SMITH" .

(24)

Exemplo  -­‐  Relacionamento  Muitos  

para  Muitos   [Das  et  al.,  2012]  

(25)

Exemplo  -­‐  Saída  desejada  

[Das  et  al.,  2012]  

<http://data.example.com/employee=7369/department=10>

ex:employee <http://data.example.com/employee/7369> ; ex:department <http://data.example.com/department/10> .

<http://data.example.com/employee=7369/department=20>

ex:employee <http://data.example.com/employee/7369> ; ex:department <http://data.example.com/department/20> .

<http://data.example.com/employee=7400/department=10>

ex:employee <http://data.example.com/employee/7400> ; ex:department <http://data.example.com/department/10> .

(26)

Exemplo  -­‐  Mapeamento  R2RML  

[Das  et  al.,  2012]  

<#TriplesMap3>

rr:logicalTable [ rr:tableName "EMP2DEPT" ];

rr:subjectMap [ rr:template "http://data.example.com/

employee={EMPNO}/department={DEPTNO}" ];

rr:predicateObjectMap [

rr:predicate ex:employee;

rr:objectMap [ rr:template "http://

data.example.com/employee/{EMPNO}" ];

];

rr:predicateObjectMap [

rr:predicate ex:department;

rr:objectMap [ rr:template "http://

data.example.com/department/{DEPTNO}" ];

].

(27)

Exemplo  -­‐  Outra  saída  desejada  

[Das  et  al.,  2012]  

<http://data.example.com/employee/7369>

ex:department <http://data.example.com/department/10> ; ex:department <http://data.example.com/department/20> .

<http://data.example.com/employee/7400>

ex:department <http://data.example.com/department/10>.

(28)

Exemplo  -­‐  Outro  mapeamento  R2RML  

[Das  et  al.,  2012]  

<#TriplesMap3>

rr:logicalTable [ rr:tableName "EMP2DEPT" ];

rr:subjectMap [

rr:template "http://data.example.com/employee/{EMPNO}";

];

rr:predicateObjectMap [

rr:predicate ex:department;

rr:objectMap [ rr:template "http://data.example.com/

department/{DEPTNO}" ];

].

(29)

Plataforma  D2RQ  

•  Sistema  para  acessar  bancos  de  dados  

relacionais  como  grafos  RDF  apenas-­‐leitura   virtuais  

•  Oferece  acesso  baseado  em  RDF  ao  conteúdo  

de  bancos  de  dados  relacionais  sem  ter  que  

replicá-­‐los  em  um  armazenamento  RDF  

(30)

Plataforma  D2RQ  

•  Usando  D2RQ  pode-­‐se:  

–  Consultar  um  banco  de  dados  não  RDF  usando   SPARQL  

–  Acessar  o  conteúdo  de  bancos  de  dados  como   Linked  Data  na  Web  

–  Criar  dumps  customizados  do  banco  de  dados  em   formatos  RDF  para  carregar  em  um  

armazenamento  RDF  

(31)

D2RQ  

•  Bancos  de  dados  suportados:  

–  Oracle   –  MySQL  

–  PostgreSQL   –  SQL  Server   –  HSQLDB  

–  Interbase/Firebird  

(32)

Plataforma  D2RQ  

•  Principais  componentes:  

–  D2RQ  Mapping  Language,  um  linguagem  de  

mapeamento  declaraXva  para  descrever  a  relação  

entre  uma  ontologia  e  um  modelo  de  dados  relacional   –  D2RQ  Engine,  um  plug-­‐in  para  o  Jena  Seman9c  Web  

toolkit,  que  usa  os  mapeamentos  para  reescrever  

chamadas  da  API  Jena  para  consultas  SQL  no  banco  de   dados  e  passa  os  resultados  da  consulta  até  as  

camadas  superiores  dos  frameworks  

–  D2R  Server,  um  servidor  HTTP  que  provê  uma  visão  

Linked  Data,  uma  visão  HTML  para  debugging  e  um  

SPARQL  endpoint  do  banco  de  dados  

(33)

Plataforma  D2RQ  -­‐  Visão  Geral  

(34)

D2RQ  

•  Disponível  em:  hnp://d2rq.org  

•  Versão  que  permite  usar  R2RML  no   mapeamento  

–  hnp://download.d2rq.org/d2rq-­‐r2rml-­‐preview-­‐

v4.tar.gz  

(35)

D2RQ  –  generate-­‐mapping  

•  generate-mapping --r2rml -o $generated-

mapping$ -d $driver-class-name$ -u $db-user$

-p $db-password$ $jdbc:url-to-database$

–  Parâmetros:    

•  --r2rml


Gera  um  arquivo  de  mapeamento  compapvel  com  o  W3C  R2RML  

•  -o $generated-mapping$


O  nome  do  arquivo  de  mapeamento  a  ser  gerado  

•  -d $driver-class-name$


O  nome  completo  da  classe  Java  do  driver  do  BD  

•  -u $db-user$


O  login  do  usuário  do  BD    

•  -p $db-password$


A  senha  do  usuário  do  BD  

•  $jdbc:url-to-database$


URL  de  conexão  JDBC  para  o  BD    

(36)

D2RQ  –  generate-­‐mapping  

•  ./generate-mapping --r2rml -o DB2_mapping.ttl -d

com.mysql.jdbc.Driver -u root

jdbc:mysql://localhost/DB2

(37)

Exemplo  –   DB_mapping.ttl  

@prefix map: <#>.

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>.

@prefix rr: <http://www.w3.org/ns/r2rml#>.

@prefix vocab: <vocab/>.

@prefix xsd: <http://www.w3.org/2001/XMLSchema#>.

(38)

Exemplo  –   DB_mapping.ttl  

map:People

rr:logicalTable [ rr:tableName "`DB2`.`People`"; ];

rr:subjectMap [ rr:class vocab:People; rr:template "People/{`ID`}"; ];

rr:predicateObjectMap [

rr:predicate vocab:People_ID;

rr:objectMap [ rr:column "`ID`"; ];

];

rr:predicateObjectMap [

rr:predicate rdfs:label;

rr:objectMap [ rr:termType rr:Literal; rr:template "People #{`ID`}"; ];

];

rr:predicateObjectMap [

rr:predicate vocab:People_addrCity_addrState;

rr:objectMap [

rr:parentTriplesMap map:Addresses;

rr:joinCondition [ rr:child "`addrCity`"; rr:parent "`city`"; ];

rr:joinCondition [ rr:child "`addrState`"; rr:parent "`state`"; ];

];

];

rr:predicateObjectMap [

rr:predicate vocab:People_fname;

rr:objectMap [ rr:column "`fname`"; ];

];

.

(39)

Exemplo  –   DB_mapping.ttl  

map:Addresses

rr:logicalTable [ rr:tableName "`DB2`.`Addresses`"; ];

rr:subjectMap [ rr:class vocab:Addresses; rr:template "Addresses/

{`city`}/{`state`}"; ];

rr:predicateObjectMap [

rr:predicate vocab:Addresses_ID;

rr:objectMap [ rr:column "`ID`"; ];

];

rr:predicateObjectMap [

rr:predicate rdfs:label;

rr:objectMap [ rr:termType rr:Literal; rr:template "Addresses

#{`city`}/{`state`}"; ];

];

rr:predicateObjectMap [

rr:predicate vocab:Addresses_state;

rr:objectMap [ rr:column "`state`"; ];

];

rr:predicateObjectMap [

rr:predicate vocab:Addresses_city;

rr:objectMap [ rr:column "`city`"; ];

];

.

(40)

D2RQ  –  dump-­‐rdf  

•   Gera  um  dump  do  conteúdo  da  base  de  dados  em  um   único  arquivo  RDF,  usando  (ou  não)  um  arquivo  de   mapeamento  

dump-rdf -u $db-user$ -p $db-password$ -f

$rdf-format$ -o $generated-rdf-dump$ -j

$jdbc:url-to-database$ $generated-mapping$

–  Parâmetros  similares  aos  anteriores  e  os  seguintes   adicionais:    

•  -f $rdf-format$


O  formato  do  RDF  dump.  Suportados:  TURTLE,  RDF/XML,  RDF/

XML-­‐ABBREV,  N3,  e  N-­‐TRIPLE  (default).    

•  -o $generated-rdf-dump$    

Nome  do  arquivo  RDF  dump  a  ser  gerado    

(41)

D2RQ  –  dump-­‐rdf  

•  ./dump-rdf -u root -f TURTLE -o DB2_dump.ttl -j jdbc:mysql:///

DB2 DB2_mapping.ttl

(42)

Exemplo  –   DB2_dump.ttl  

@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .

@prefix vocab: <file:///Users/giseli/Downloads/d2rq-dev/vocab/> .

@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .

@prefix map: <file:///Users/giseli/Downloads/d2rq-dev/DB2_dump.ttl#> .

<file:///Users/giseli/Downloads/d2rq-dev/DB2_dump.ttl#Addresses/Cambridge/MA>

a vocab:Addresses ;

rdfs:label "Addresses #Cambridge/MA" ; vocab:Addresses_ID 18 ;

vocab:Addresses_city "Cambridge" ; vocab:Addresses_state "MA" .

<file:///Users/giseli/Downloads/d2rq-dev/DB2_dump.ttl#People/8>

a vocab:People ; rdfs:label "People #8" ; vocab:People_ID 8 ;

vocab:People_fname "Sue" .

<file:///Users/giseli/Downloads/d2rq-dev/DB2_dump.ttl#People/7>

a vocab:People ; rdfs:label "People #7" ; vocab:People_ID 7 ;

vocab:People_addrCity_addrState

<file:///Users/giseli/Downloads/d2rq-dev/DB2_dump.ttl#Addresses/Cambridge/MA> ; vocab:People_fname "Bob" .

(43)

Exemplo  –  d2r-­‐server  

•  Usando  mapeamento  personalizado:

–  ./d2r-server DB2_mapping.ttl

•  Usando  mapeamento  direto:  

–  ./d2r-server -u root

jdbc:mysql:///DB2

(44)

Exemplo  –  d2r-­‐server  

•  Após,  em  um  

navegador  (default):    

–  hnp://localhost:2020/

(45)
(46)
(47)
(48)
(49)
(50)

Referências  

•   Auer,  S.  et  al.  SemanXc  Data  Web  lecture  series.  

Acesso  em:  hnp://slidewiki.org/deck/11936_semanXc-­‐

data-­‐web-­‐lecture-­‐series.  2014.  

•   Das,  S.,  Sundara,  S.,  Cyganiak,  R.  R2RML:  RDB  to  RDF   Mapping  Language.  W3C  RecommendaXon  27  

September  2012.  Disponível  em:  

hnps://www.w3.org/TR/r2rml/.    

•  Arenas,  M.,  Bertails,  A.,  Prud’hommeaux,  E.,  Sequeda,   J.  A  Direct  Mapping  of  RelaXonal  Data  to  RDF.  W3C   RecommendaXon  27  September  2012.  Disponível  em:  

hnp://www.w3.org/TR/rdb-­‐direct-­‐mapping/.    

(51)

Universidade  Federal  do  Rio  de  Janeiro  (UFRJ)  

Departamento  de  Ciência  da  Computação  (DCC)  

Tópicos  Especiais  em  Banco  de  Dados  I  

 

   

Dúvidas?  

Profa.  Giseli  Rabello  Lopes    

giseli@dcc.ufrj.br  

CCMN  -­‐  DCC  -­‐  Sala  E-­‐2012  

?  

2016  /  2  

Imagem

Referências

temas relacionados :