Modelo de dados semiestruturado e tipificação em XML Helena Galhardas DEI IST Agenda Resumo da aula passada Modelo de dados semi-estruturado Tipificação em dados semi-estruturados e XML Resumo da aula passada Resumo: o que interessa lembrar Semi-estruturado: casamento entre sistemas documentais e SGBDs XML Árvores ordenadas, etiquetadas e com ligações Semântica e tipos estão nas tags Formato de transferência de dados Resumo: tecnologia SGBDs: Documentos: B-tree, hash table, optimização de interrogações Indíce texto, classificação XML: Autómato de árvores Resumo: problemas antigos ressurgem Optimização de interrogações distribuídas Integração de dados Procura de dados e serviços Gestão de actualizações de dados Exercício Considere uma BD relacional que contém uma relação “ensina” com atributos “disciplina” e “docente”. Esta relação representa uma associação entre as disciplinas ensinadas no Mestrado de Bolonha em Informática e os professores que nele ensinam. Escreva um documento XML que representa uma instância dessa relação contendo dois tuplos (arbitre a disciplina e o nome dos professores) Modelo de dados semi-estruturado e XML Modelo de dados semi-estruturado Dados semi-estruturados são muitas vezes conotados como “sem-esquema” (schemaless) ou “explicáveis por si próprios” (self-describing) Dados são descritos através de uma sintaxe simples: {nome: {primeiro: “Bruno”, ultimo: “Martins”}, tel: 21 4233290, email: “[email protected]”} Representação gráfica nome tel email “[email protected]” 214233290 primeiro “Bruno” ultimo “Martins” Variações na estrutura {pessoa: {nome: {primeiro: “Bruno”, ultimo: “Martins”}, tel: 21 4233290, email: “[email protected]”}, pessoa: {nome: “Pável”, tel: 21 4233267, email: [email protected]}, pessoa: {nome: “Helena”, tel: 21 4233246, altura: 1,60} } Representação de dados relacionais { r1: {linha: {a: a1, b: b1, c: c1}, linha: {a: a2, b: b2, c: c2} }, r2: {linha: {c: c2, d: d2}, linha: {c: c3, d: d3}, linha: {c: c4, d: d4} } } Representação de BDs de objectos { pessoa: &o1 {nome: “Ana”, idade: 35, filho: &o2, filho: &o3 }, pessoa: &o2 {nome: “João”, idade: 7, parentes: {mae: &o1, irma: &o3} }, pessoa: &o3 {nome: “Joana”, país: “Portugal”, mae: &o1 } } Modelo de dados semi-estruturado Bib &o1 complex object paper paper book references &o12 &o24 references author title year &o29 references author http page author title publisher title author author author &o43 &25 &96 1997 last firstname lastname atomic object firstname lastname &243 “Serge” “Abiteboul” “Victor” Object Exchange Model (OEM) first &206 “Vianu” 122 133 Sintaxe para expressões semiestruturadas <ssd-expr> ::= <value> | oid<value> |oid <value> ::= atomicvalue | <complexvalue> <complexvalue> ::= {label: <ssd-expr>,..., label:<ssd-expr>} Um oid o é definido numa ssd-expression s se s tem a forma ov para algum valor v ou s tem a forma {l1:e1, ..., ln:en} e o está definido numa das e1,..., en Qualquer oid é definido no máximo uma vez em s Se um oid o é usado em s, então tem que ter sido definido em s Terminologia de grafos para descrever dados semi-estruturados Grafo (N, E) consiste num conjunto N de nós e um conjunto E de arcos (edges) Associado a cada e E, existe um par ordenado de nós, o nó fonte s(e) e o nó destino t(e). Um caminho (path) é uma sequência e1, e2, ..., ek de arcos tal que: t(ei) = s(ei+1), 1<=i<=k-1, K: tamanho do caminho Um nó r é a raíz do grafo se existir um caminho de r para n, para qualquer n N Um ciclo num grafo é um caminho entre um nó e ele mesmo. Um grafo sem ciclos é aciclico. Terminologia de grafos para descrever dados semi-estruturados (2) Um grafo com raíz é uma árvore se existir um caminho único de r para n, para qualquer nN Um nó é terminal ou folha se não é a fonte de nenhum arco em E. DAG: Directed Acyclic graph Modelo de dados semi-estruturados: grafo com arcos etiquetados (edge-labeled graph) Tb pode incluir etiquetas nos nós XML e dados semi-estruturados <person> <name> Alan </name> <age> 42 </age> <email> ab@com </email> </person> Ssd-expression: {person: {name: “Alan”, age: 43, email: [email protected]}} Função de tradução T: T(valoratomico) = valoratomico T({l1:v1, ..., ln:vn} = <l1> T[v1] </l1> ... <ln> T[vn] </ln> Referências XML XML permite associar identificadores únicos a elementos, como sendo o valor de um determinado atributo. <state id = “s2”> <scode> NE </scode> <sname> Nevada </sname> </state> <city id = “c2”> <ccode> CCN </ccode> <cname> Carson City </cname> <state-of idref =“s2”/> </city> Semelhanças e diferenças <person id=“o123”> <name> Alan </name> <age> 42 </age> <email> ab@com </email> </person> <person father=“o123”> … </person> father person { person: &o123 { name: “Alan”, age: 42, email: “ab@com” } } { person: { father: &o123 …} } person father name age email name Alan age 42 email ab@com Alan 42 ab@com Semelhante em árvores, diferente em grafos Ordem em XML Em XML, existe a noção de ordem, em ssd não. Person:{fn:”John”, ln:”Smith”} igual a Person:{ln:”Smith”, fn:“John”} Mas <person><fn>John</fn> <ln>Smith</ln></person> Diferente de: <person><ln>Smith</ln> <fn>John</fn></person> Atributos em XML não têm noção de ordem Mistura de elementos e texto XML pode misturar texto e elementos <talk> Making Java easier to type and easier to type <speaker> Phil Wadler </speaker> </talk> Além disto, XML tem uma panóplia de outras construções como entidades, instruções de processamento, comentários, etc. Todas estas diferenças fazem com que a gestão de dados XML seja mais complexa Tipificação em XML Tipificação em XML Não é imposta Mas Melhora o armazenamento Facilita a navegação nos dados (data guide) Facilita a interrogação Facilita a descrição e explicação dos dados Ajuda à optimização Permite a interoperabilidade entre programas Permite proteger os dados Melhora o armazenamento Company person Root company works-for managed-by Company nam e … … a d d re ss … … c .e .o . … … name address name Employee c.e.o. o id … … string Employee o id … … nam e … … m a n a g e d -b y … … w o rk s-fo r … … Store rest in overflow graph Ajuda na optimização de interrogações Bib paper year int journal select X.title from Bib._ X where X.*.zip = “12345” book address title string string title author string string last first zip city streetname name string string string string select X.title from Bib.book X where X.address.zip = “12345” Dados relacionais vs dados semiestruturados Esquemas em dados relacionais Definidos antes dos dados Os dados têm que obedecer ao esquema Cada instância de dados obedece exactamente a um esquema Esquemas em dados semi-estruturados Definidos depois dos dados Alguns dados podem não ter esquema associado Uma instância de dados pode ter vários esquemas Quando é que o esquema é criado nos dados semi-estruturados? Criado pelo utilizador Extraído dos dados Antes ou depois dos dados Não tem que ser único Isto não existe em BDs relacionais Extraído das interrogações Como inferência de tipos em linguagens de programação Grafos de esquema (schema graphs) Dado um conjunto de dados semiestruturados, podemos querer extrair o seu esquema O grafo de esquema especifica que arcos são permitidos num grafo de dados Todos os caminhos (paths) que ocorrem no grafo de dados ocorrem no grafo de esquema Exemplo (OEM) Dados: &r1 person person company person manages company works-for employee &p1 &c1 &p2 &c2 c.e.o.&p3 c.e.o. works-for position phone name address namepositionworks-for name name nameaddress &s0 &s1 &s2 &s3 &s4 &s5 &s6 url &s7 &s8 &s9 description “Smith” “Manager” “Widget” “Trenton” “Jones” description “Sales” &s10 eval &a5 1998 &a4 1997 &a7 &a3 task &a6 “below target” “www.gp.fr” &a1 salesrep procurement “Paris” “Dupont” “5552121” “Gadget” &a2 contact “on target” Grafo de esquema person Root company works-for Company managed-by Person c.e.o. | employee name | address | url name | phone | position description string * Any Duas questões Conformance: os dados são conforme o esquema? Classificação: se sim, então que objectos pertencem a que classes? Simulação de grafos Definição Dois grafos edge-labeled G1, G2 Uma simulação é uma relação R entre nós: se (x1, x2) pertencem a R, e (x1,a,y1) está em G1, Então existe (x2,a,y2) em G2 (mesma etiqueta) tal que (y1,y2) está em R x1 G1 R x2 a a y1 R y2 G2 Simulação entre uma instância de dados SS (OEM) e um grafo de esquema 1. Permite-se que um arco x1[l]y1 nos dados seja 2. 3. simulado por algum arco x2[l’]y2 quando l’ é um wild card ou uma alternância contendo l AS raízes têm que estar na simulação rRr’ onde r e r’ são as raízes dos dados e do grafo de esquema, respectvamente. Diz-se que a simulação é “rooted” Sempre que xRy, se y é um tipo atómico então x também tem que ser um nó atómico e ter um valor desse tipo. Diz-se então que a simulação é tipificada. Exemplo &r1 person company person manages employee &c1 &p2 c.e.o. &p1 person company works-for name position works-for name phone name address &s0 “Smith” &s1 “Manager” &s2 &s3 &s4 “Widget” “Trenton” “Jones” &s5 works-for managed-by &s9 description &s6 url &s7 &s8 “Paris” “Dupont” “5552121” “Gadget” “Sales” “www.gp.fr” salesrep &a2 contact &a4 task &a3 eval &a5 1998 1997 &a6 Company &a7 Person c.e.o. | employee name | address | url &s10 &a1 person company position address name name description procurement Root works-for &c2 c.e.o. &p3 name | phone | position description string * Any “below target” “on target” Dados Grafo de esquema Usando Simulação Grafo de dados D, esquema S conformance: encontrar a simulação máxima R de D para S: Notação: D S classificação: verificar se (x,c) estão em R Notação: x c Extracção de esquema (data guides) Data guide é um sumário preciso e conciso do grafo de dados Preciso: todos os caminhos (paths) nos dados ocorrem no data guide e vice-versa Conciso: todos os caminhos no data guide ocorrem exactamente uma vez Data Guide é o grafo de esquema mais específico para um dado grafo de dados, ou seja, existe uma simulação do data guide para qualquer outro grafo de esquema que o grafo de dados satisfaça Um grafo de dados é análogo a um NFA (nondeterministic finite state automaton) Dado um NFA N, o data guide é análogo a um DFA (deterministic finite state automaton) equivalente ao NFA N Exemplo: Grafo de Dados D= &r employee employee employee employee employee manages employee employee manages manages manages manages &p1 &p2 managedby &p3 company worksfor worksfor &p4 &p5 &p6 &p7 managedby managedby managedby worksfor employee managedby worksfor worksfor worksfor worksfor worksfor &c &p8 Exemplo: Data Guide Result Sd = Root &r company managedby employee Employees &p1,&p1,&p3,P4 &p5,&p6,&p7,&p8 manages worksfor Bosses &p1,&p4,&p6 worksfor Company &c manages managedby worksfor Regulars &p2,&p3,&p5,&p7,&p8 Referências Serge Abiteboul, Slides of the course: “Données Semistructurées”, Master Recherche Informatique Paris Sud, http://www-rocq.inria.fr/~abitebou/MasterSSD/index.html Dan Suciu, Slides on “The semistructured data model”, CSE 590ds: Management of XML and Semistructured Data, http://www.cs.washington.edu/education/courses/cs e590ds/01sp/ S. Abiteboul, P. Buneman, D. Suciu, “Data on the Web, From Relations to Semistructured Data and XML”, Morgan Kaufmann, 2000, (caps 2, 3 e 7) Tópicos próximas aulas DTD, XML Schema, XSDL XSLT XPath XQuery