Publicação de Dados Governamentais
no Padrão Linked Data
5.1 – Ferra m enta s pa ra
public a ç ã o de da do s
Karin Breitman
José Viterbo
Edgard Marx
Percy Salas
1
LA C
L a bo ra to ry fo r A dva nc e d
C o lla bo ra tio n
T riplify
2
R equerim ento s S o ftw a re
• L ic enç a
– GNU Lesser General Public License.
• R equis ito s
• W eb S erver
– Apache (recomendado)
– IIS
• P H P (ready) , Ruby/Python (dev)
• B a nc o de D a do s
– M yS Q L, S Q Lite, O racle, D B2, M S S Q L
P ostgreS QL
3
T riplify
• O bjetivo
“E xpor a semântica disponível em R D B M S de uma
forma simples”.
• O que é
Um “plugin” para aplicações Web P HP ,
R uby/P ython (dev).
• O que fa z
D is ponibiliza os dados de B D ’s relacionais em
triplas.
• O que g era
Arquivos R D F, JS O N e Linked D ata
4
T riplify : C o nfig ura ç ã o
• Consultas SQL selecionando a
informação, que gostariam que seja
disponível publicamente (Open Data)
S E LE C T id, name AS ‘foaf:name’ FR O M
users
5
T riplify : E s trutura S Q L
Q uery
•
Primeira coluna dever conter
identificadores para serem utilizados para
gerar URI’s das Instâncias
Select id, name AS ‘foaf:name’ FROM
users
•
6
Nome das colunas utilizados para gerar
as propriedades renomeando as colunas
da tabela
Select id, name AS ‘foaf:name’ FROM
users
T riplify : E s trutura S Q L
Q uery
• Cons ultas dev em retornar v alores
literais ou referencias para outras
ins tancias
7
T riplify : E x em plo
LOC A DOR A
$triplify['objectProperties']=array
('customer'=>
"select
customer_id as id,
concat(concat(first_name,' '),last_name) as 'foaf:name’,
first_name as 'foaf:firstName’,
last_name as 'foaf:surname’,
store_id as 'customerOf’,
SHA(email) as 'foaf:mbox_sha1sum’,
address_id as 'liveAt’,
create_date as 'dcterms:created’
from customer”, … )
8
$triplify['objectProperties']=array
(
'sioc:address'=>'address’,
'customerOf'=>'store’,
'liveAt'=>'address’
…
);
$triplify['classMap']=array(
'customer'=>'foaf:Person’,
'store'=>'gr:LocationOfSales’,
'address'=>'vcard:Address'
);
T riplify : I nteg ra ç ã o em
A pps . W eb
• Acrescentar o diretório do Triplify a
raiz da aplicação.
• Definir consultas SQL e ajustar o
arquivo de configuração.
• Possibilitar o acesso direto ao banco
de dados relacional através:
–
–
–
9
Objeto PDO.
Driver de conexão Mysql.
Utilizar um outro framework para
abstração de base de dados (ODBC).
D 2R Q e D 2R S erver
10
R equerim ento s S o ftw a re
• Licença
– GNU General Public License
• Requerimentos
• J a va 1.4 ou pos terio r
• B a nc o de D a dos
– M yS QL, O racle, M S S Q L
P ostgreS Q L e O D BC (não automática).
11
D 2R Q e D 2R S erver :
I ntro duç ã o
• Objetivo
“Permitir que aplicações consigam ter uma RDF-view em
um banco de dados non-RDF”.
• O que é
Plataforma desenvolvida em Java para publicação de
dados de BD em grafo RDF (on-the-fly)
• O que gera
RDF/XML (default), RDF/XML-ABBREV, N3, N-TRIPLE.
• Quais BD’s Suporta
Oracle, MySQL, PostgresSQL, Microsoft SQL Server,
fontes de dados ODBC (sem geração automática).
12
D 2R Q e D 2R S erver :
I ntro duç ã o
• O que P erm ite
– Mapeamento do BD para grafo virtual
RDF
– Consultas: linguagem SPARQL
– RDF dumps
– Acessar a informação do BD como
Linked Data sobre a Web.
13
D 2R Q
• D 2R Q M a pping L a ng ua g e
Linguagem declarativa que descreve o
mapeamento.
• D 2R S erver
servidor HTTP que fornece uma visão Linked
Data e permite consultas SPARQL.
– Tool que usa o D2RQ mapping para mapear o
conteúdo do BD
• D 2R Q E ng ine
plug-in para Jena e Sesame Semantic Web
toolkits.
14
A rquitetura da pla ta fo rm a
D 2R Q
15
D 2R Q : T ipo s de
M a pea m ento [1]
• A uto m á tic o
Cria um arquiv o de m apeam ento
default analis ando o es quem a do B D .
• Tabela = Classes;
• Colunas = Propriedades;
generate-mapping [-u username] [-p password] [-d driverclass]
[-o outfile.n3] [-b base uri] jdbcURL
generate-mapping -o m a pping .n3 -d driver.class.name
-u db-user -p db-password jdbc:url:...
16
E x em plo
D 2R Q : T ipo s de
M a pea m ento [2]
• C us to m iza do
M odificar o arquiv o g erado pelo
”g erenate-m apping ”
Utilizar v ocabulários conhecidos
– foaf, sioc, dc, goodrelations, etc.
17
D 2R Q : M a pea m ento
C us to m iza do
M odificando o arquiv o m a pping .n3
2. D efinir c o nex ã o a o B D
map:M yD atabase a d2rq:D atabase;
d2rq:jdbcD S N "jdbc:mysql://localhost/mydb";
d2rq:jdbcD river "com.mysql.jdbc.D river";
d2rq:username "us er";
d2rq:password "pas sword".
3. D efinir a s entida des
map:P eople a d2rq:C lassM ap;
d2rq:uriP attern “http://.../people/@ @ User.ID @ @ ”.
d2rq:condition “User.deleted=0”.
18
D 2R Q : M a pea m ento
C us to m iza do
1. Adicionar propriedades para as
entidades
map:P eople a d2rq:C lassM ap;
d2rq:uriP attern “http://.../people/@ @ User.ID @ @ ”;
d2rq:condition “User.deleted=0”;
d2rq:class foaf:P erson .
S
(C lassM ap)
map:P eople a d2rq:C lassM ap .
map:name a d2rq:P ropertyB ridge;
d2rq:belongsToC lassM ap map:P eople;
d2rq:property foaf:nick;
d2rq:column “User.name”.
19
P
O
(D ata Properties )
D 2R Q : M a pea m ento
C us to m iza do
1. Adicionar propriedades para as
entidades
map:P eople a d2rq:C lassM ap;
d2rq:uriP attern “http://.../people/@ @ User.ID @ @ ”;
d2rq:condition “User.deleted=0”;
d2rq:class foaf:P erson .
S
(C lassM ap)
map:mbox_sha1 a d2rq:P ropertyB ridge;
d2rq:belongsToC lassM ap map:P eople;
d2rq:property foaf:mbox_sha1sum;
d2rq:sqlE xpression
“S HA1(C O NC AT(‘mailto:’, User.email))”.
20
P
O
(D ata Properties )
D 2R Q : M a pea m ento
C us to m iza do
1. Link as entidades
map:P hotos a d2rq:C lassM ap;
d2rq:uriP attern “http://.../photo/@ @ P hoto.ID @ @ ”;
d2rq:class foaf:Image .
map:photo a d2rq:P ropertyB ridge;
d2rq:belongsToC lassM ap map:P eople;
d2rq:property foaf:made;
d2rq:uriP attern “http://.../photo/@ @ P hoto.UserID @ @ ”.
(P hoto.UserID is a foreign key to User.ID )
21
map:photo a d2rq:P ropertyB ridge;
d2rq:belongsToC lassM ap map:P eople;
d2rq:property foaf:made;
d2rq:join “Us er.ID = P hoto.UserID ”;
d2rq:refersToC lassM ap map:P hotos .
(Object Properties)
D 2R S erver : S ta rt the
s erver
• Uma vez que temos o arquivo de
mapeamento m a pping .n3 executamos
o seguinte comando
d2r-server mapping.n3
• Agora podemos navegar sobre o grafo
RDF, atraves do servidor D2R- Server
22
http://localhost:2020/
23
O penL ink V irtuo s o R D F
V iew s
General Public License e
Proprietario
24
V irtuo s o R D F V iew s :
I ntro duç ã o
• O bjetivo
“C onverter dinamicamente dados relacionais em R D F e
expô-lo no Virtuoso-hosted S P AR Q L endpoint.”.
• O que é
Virtuoso R D F Views mapea dados relacionais em R D F
e permite que a representação do R D F possa ser
personalizada.
• O que g era
R D F/XM L. (Q uad S torage)
• Q ua is B D ’s S upo rta
O racle, M S S erver, D B2, Informix, P rogress, M yS Q L,
Ingres, Firebird, P ostgreS Q L e O D B C ou JD B C
accesiveis R D BM S .
25
V irtuo s o R D F V iew s :
M a pea m ento [1]
• Definição de cada tabela em classes
RDFS
IRI
@prefix peo: <http://localhost:8890/rdfv_demo/schemas/peoplet#> .
peo:People a rdfs:Class ;
C lassM ap
rdfs:label ”People" ;
rdfs:comment "An OpenLink People" .
P roperties
fo a f:na m e
26
a rdf:Property ;
fo a f:m a de
a rdf:Property ;
rdfs:domain peo:People ;
rdfs:domain peo:People ;
rdfs:range xsd:string;
rdfs:range ; photo:Photo
rdfs:label ”people name" .
rdfs:label ”photo id" .
D ata P roperties
O bject P roperties
V irtuo s o R D F V iew s :
M a pea m ento [2]
• Construir Subject IRI’s para cada
classe utilizando as chaves primarias
de
cada
peo:us
er_iri a tabela
rdf:Property ;
rdfs:domain peo:People ;
rdfs:range xsd:string;
rdfs:label ”people id" .
sparql
prefix peo: <http://localhost:8890/rdfv_demo/schemas/people#>
create iri class peo :us er_iri
"http://localhost:8890/rdfv_demo/testdata/people#%s"
(in user_id varchar not null) .
27
V irtuo s o R D F V iew s :
M a pea m ento [3]
• Construir Predicados IRI’s para cada
classe utilizando o resto de colunas
sparql
de
cada
tabela
prefix qs: <http://localhost:8890/rdfv_demo/quad_storage/>
prefix peo: <http://localhost:8890/rdfv_demo/schemas/people#>
prefix pho: <http://localhost:8890/rdfv_demo/schemas/photos#>
28
c rea te qua d s tora g e qs:default
from OPLWEB.DBA.PEOPLE as people_tbl
from OPLWEB.DBA.PHOTOS as photos_tbl
{
create qs:people as
graph <http://localhost:8890/rdfv_demo/testdata/people#>
{
peo:user_iri(peo ple_tbl.U S E R _I D ) a peo:People
as qs:people_People ;
foaf:name people_tbl.N A M E
as qs:people_peopleName ;
}.
T riplify
D 2R S erver
V irtuo s o R D F
V iew s
PH P
Jav a
M iddleware
S olution
-
S im
S im
L ing ua g em de
M a pea m ento
SQL
R D F bas ed
R D F bas ed
G era ç ã o de
m a pea m ento
M anual
S em iautom ático
M anual
M edia – Alta
(N ão S PAR Q L)
M edia
Alta
T ec no lo g ia
S PAR QL
E ndpo int
E s c a la bilida de
Link:
http://esw.w3.org/Rdb2RdfXG/StateOfTheArt
29
P rinc ipa is R eferênc ia s
• D2RQ, site
http://www4.wiwiss.fu-berlin.de/bizer/d2r-server/#develo
, Consultado 20/05/10
• W3C Group, site
http://esw.w3.org/Rdb2RdfXG/StateOfTheArt,
Consultado 21/05/10
• Triplify, site http://triplify.org/Documentation,
Consultado 21/05/10
• Mapping Relational Data to RDF with Virtuoso's RDF
Views, site
http://virtuoso.openlinksw.com/Whitepapers/html/rdf_vie
, Consultado 19/05/10
30
Download

5.1. Ferramentas para publicação de dados