470 likes | 571 Vues
XDCL: uma proposta para controle de restrições de integridade de domínio em documentos XML. Universidade Federal de Santa Catarina Programa de Pós-Graduação em Ciência da Computação Alexandre Tagliari Lazzaretti Prof. Dr. Ronaldo Santos Mello Orientador. Roteiro. Objetivos
E N D
XDCL: uma proposta para controle de restrições de integridade de domínio em documentos XML Universidade Federal de Santa CatarinaPrograma de Pós-Graduação em Ciência da ComputaçãoAlexandre Tagliari LazzarettiProf. Dr. Ronaldo Santos MelloOrientador Trabalho Individual – PPGCC/UFSC – 2004
Roteiro • Objetivos • Restrições de Integridade e SQL (Structured Query Language) • XML (eXtensible Markup Language) • Restrições de Integridade vs. XML • Motivação • Proposta • Dificuldades • Cronograma Trabalho Individual – PPGCC/UFSC – 2004
Objetivo geral • Propor um controle de restrições de integridade de domínio em documentos XML, inexistente na especificação de esquemas XML (DTD – Document Type Definition e XSD – XML Schema Definition), através de recursos semelhantes aos existentes na linguagem SQL. Trabalho Individual – PPGCC/UFSC – 2004
Objetivos específicos • Classificar as restrições de integridade do modelo relacional e comparar com os recursos existentes na linguagem SQL para seu tratamento; • Analisar as especificações de esquemas XML com relação à imposição de restrições de integridade; • Concentrar as necessidades levantadas no item anterior, na categoria de restrições de integridade de domínio; • Analisar trabalhos relacionados; • Propor um controle de restrições de integridade de domínio, com base nos recursos da linguagem SQL; • Aplicar o controle num estudo de caso. Trabalho Individual – PPGCC/UFSC – 2004
Restrições de Integridade (conceitos) • “O termo integridade refere-se a precisão ou correção dos dados em um banco de dados.” (Date,2000) • Para garantir a integridade de um banco de dados são necessárias regras que estabelecem a consistência dos dados, essas regras são chamadas “restrições de integridade”; • Os autores estudados, Date, Silberchatz, Elmasri & Navathe e Heuser, classificam as restrições de integridade de várias formas; • Foi estabelecida uma classificação única, com base nos autores, para restrições de integridade. Trabalho Individual – PPGCC/UFSC – 2004
Restrições de Integridade (classificação) • Classificação: • Domínio • Chaves • Integridade Referencial • Momento de Verificação • Baseada em eventos Trabalho Individual – PPGCC/UFSC – 2004
Restrições de Integridade (classificação) • Classificação: • Domínio • Chaves • Integridade Referencial • Momento de Verificação • Baseada em eventos • Especificam quais os valores válidos cada atributo deve ter; • Subdivide-se em: • Restrições de atributo • Restrições de tipo • Restrições de tuplas • Restrições de banco de dados • Restrições de transição de estado Trabalho Individual – PPGCC/UFSC – 2004
Restrições de Integridade(classificação) • Classificação: • Domínio • Chaves • Integridade Referencial • Momento de Verificação • Baseada em eventos • Identificam as tuplas e estabelecem relações entre tuplas de tabelas; • Classifica-se em: • candidatas • primárias ou alternativas • estrangeiras Trabalho Individual – PPGCC/UFSC – 2004
Restrições de Integridade (classificação) • Classificação: • Domínio • Chaves • Integridade Referencial • Momento de Verificação • Baseada em eventos • Visam garantir que o banco de dados não inclua valores inválidos para chaves estrangeiras; • Se B faz relação a A então A tem que existir. Trabalho Individual – PPGCC/UFSC – 2004
Restrições de Integridade (classificação) • Classificação: • Domínio • Chaves • Integridade Referencial • Momento de Verificação • Baseada em eventos • Indica a questão de quando a verificação é feita; • Pode ser de dois tipos: imediata e postergada. Trabalho Individual – PPGCC/UFSC – 2004
Restrições de Integridade (classificação) • Classificação: • Domínio • Chaves • Integridade Referencial • Momento de Verificação • Baseada em eventos • São restrições programadas pelos usuários; • Sua verificação é independente das operações de atualização. Trabalho Individual – PPGCC/UFSC – 2004
SQL (conceitos) • SQL é a linguagem padrão para bancos de dados relacionais; • Objetivo: verificar como SQL trata as restrições de integridade do modelo relacional. Trabalho Individual – PPGCC/UFSC – 2004
* Relacional vs. SQL Trabalho Individual – PPGCC/UFSC – 2004
SQL (recursos) • Assertions: predicados que expressam uma condição que deve ser sempre verdadeira no banco de dados; • Checks: asseguram que os valores dos atributos possam satisfazer determinadas condições; • Gatilhos: é um conjunto de instruções executadas automaticamente em decorrência de algum evento (ação); • Procedimentos: são programas escritos que são executados através de uma chamada de aplicação. Trabalho Individual – PPGCC/UFSC – 2004
XML (conceitos) • XML vem se consolidando um padrão para intercâmbio de dados na Web; • Um conjunto de dados XML é descrito num documento XML; • Características de um documento XML • estrutura hierárquica; • composto por texto e marcação; • um dado XML é chamado elemento; • tags (inicial e final) delimitam o conteúdo de um elemento; • possui um elemento raiz; • atributos são informações adicionais sobre um elemento. Trabalho Individual – PPGCC/UFSC – 2004
XML(documento) Elemento raiz Atributo de um elemento <? xml version = ”1.0” encoding = ”UTF-8” standalone = “yes” > <pessoas> <codigo cpf=”68458371049”> <nome> <primeiro> Maria </primeiro> <meio> Aparecida </meio> <sobrenome> Tavares </sobrenome> </nome> <endereco> <rua> Rua das Flores </rua> <numero> 1789 </numero> <bairro> Centro </bairro> </endereco> <cidade> Rio de Janeiro </cidade> </codigo> </pessoas> Elemento Trabalho Individual – PPGCC/UFSC – 2004
XML (restrições) • Um documento XML, no que se refere a restrições, classifica-se em: bem formado e válido; • Documento XML bem formado deve estar de acordo com a sintaxe XML, ou seja, deve conter: • elementos com tag inicial e tag final; • elementos conter um único pai, com exceção do elemento raiz; • valor dos atributos estar entre aspas. • Um documento XML é dito válido se possui um esquema hierárquico definido e se a sua estrutura está de acordo com esse esquema; • Existem 2 tipos de esquemas: DTD e XSD. Trabalho Individual – PPGCC/UFSC – 2004
XML (esquemas) “esquemas XML expressam vocabulários compartilhados, e fornecem uma maneira de definição de estrutura, conteúdo e semântica de documentos XML.” (W3C) • DTD • descreve o que cada elemento e atributo faz; • os elementos podem ser simples ou complexos; • ao declarar elementos, podem-se definir controles de conteúdo, seqüência e cardinalidade; • ao declarar atributos, podem-se definir controles de tipo do atributo e de ocorrência. Trabalho Individual – PPGCC/UFSC – 2004
XML (DTD) • Exemplo DTD <?xml version =“1.0” encoding =“UTF-8” standalone =”yes”> <!DOCTYPE pessoas [ <! ELEMENT pessoa (codigo+)> <! ELEMENT codigo (nome, endereco, cidade)*> <! ATTLIST codigo cpf CDATA #REQUIRED> <! ELEMENT nome (primeiro, meio?, sobrenome)> <!ELEMENT primeiro (#PCDATA)> <!ELEMENT meio (#PCDATA)> <!ELEMENT sobrenome (#PCDATA)> <!ELEMENT endereco (rua, numero, bairro)> <!ELEMENT tipopessoa (cgc | rg)> <!ELEMENT rua (#PCDATA)> <!ELEMENT numero (#PCDATA)> <!ELEMENT bairro (#PCDATA)> <!ELEMENT cidade (#PCDATA)> <!ELEMENT cgc EMPTY> <!ELEMENT rg EMPTY> ]> Cardinalidade Declaração de atributo Seqüência de sub-elementos Declaração de elemento Conteúdo de um elemento • Controles de integridade da DTD Trabalho Individual – PPGCC/UFSC – 2004
XML (XSD) • Também é utilizado para definir elementos e atributos, semelhante a DTD, porém, com mais recursos; • Principais vantagens do XSD com relação a DTD: • tipos de dados (tanto para elementos quanto para atributos); • permite herança; • sintaxe XML; • oferece mais controles. • Permite definir elementos simples e complexos; Trabalho Individual – PPGCC/UFSC – 2004
XML (XSD) Trabalho Individual – PPGCC/UFSC – 2004
XML (exemplo XSD) tipos de dados Controle de conteúdo <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> <xs:element name="nome"> <xs:complexType> <xs:attribute name="primeiro" type="xs:string"/> </xs:complexType> </xs:element> <xs:element name="endereco"> <xs:complexType mixed="true"> <xs:attribute name="complemento" type="xs:string"/> </xs:complexType> </xs:element> <xs:element name="cidade"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="uf" type="estados" default=”SC”/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> <xs:simpleType name="estados"> <xs:restriction base="xs:string"> <xs:enumeration value="RS"/> <xs:enumeration value="SC"/> </xs:restriction> </xs:simpleType> <xs:element name="pessoas"> <xs:complexType> <xs:sequence> <xs:element ref="nome"/> <xs:element ref="endereco"/> <xs:element ref="cidade"/> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> herança Controle de seqüência Trabalho Individual – PPGCC/UFSC – 2004
Restrições de integridade vs. DTD Trabalho Individual – PPGCC/UFSC – 2004
Restrições de integridade vs. XSD Trabalho Individual – PPGCC/UFSC – 2004
Restrições de integridade vs. XSD Trabalho Individual – PPGCC/UFSC – 2004
Trabalhos Relacionados • Alguns trabalhos buscam adicionar restrições de integridade de domínio em documentos XML; • “para incorporar restrições de integridade são necessários, uma linguagem para definí-las, e um mecanismo para controlá-las”; (Provost, 2002) • Tabela – trabalhos vs relacional Trabalho Individual – PPGCC/UFSC – 2004
Trabalhos Relacionados • Tabela – trabalhos vs SQL Trabalho Individual – PPGCC/UFSC – 2004
Conclusões MOTIVAÇÕES • Apenas um trabalho possui enfoque semelhante a maneira que SQL trata restrições de integridade de domínio, porém serve apenas para inserir e apagar elementos (Bayley et al., 2002); • Necessidade de incorporar elementos predefinidos para controle de restrições de integridade nos esquemas XML (Ogbuji, 2001 e Benedikt et al., 2002); • Geração de códigos extensos para a validação de documentos XML (Provost, 2002); Trabalho Individual – PPGCC/UFSC – 2004
Proposta Como ? • Um mecanismo de controle de restrições de integridade de domínio para documentos XML, em específico, restrições de integridade de tuplas e de banco de dados; • Para isso, usar como referência mecanismos existentes na linguagem SQL como: gatilhos, asserções e a cláusula check; • Através de uma linguagem para especificação de restrições de integridade, que será chamada XDCL (XML Domain Constraints Language); • Através de um parser de validação, chamado parser XDCL. Trabalho Individual – PPGCC/UFSC – 2004
Arquitetura Validação de RIs Trabalho Individual – PPGCC/UFSC – 2004
Arquitetura Em parte Representado bem formado/válido Validação de RIs Trabalho Individual – PPGCC/UFSC – 2004
Linguagem XDCL • Características: • independência do contexto XML; • pode ser referenciado por um banco de dados nativo XML ou por um documento XML; • documento texto, com extensão XDC; • sintaxe XML (pode-se utilizar todos os recursos da tecnologia); • é validado por um parser XML (questões de bem formado e válido) • referência a um esquema XML (portanto, já incorporando seus controles de restrições de integridade). Trabalho Individual – PPGCC/UFSC – 2004
Parser XDCL • Características: • efetua a validação das expressões contidas no documento XDC contra as instâncias XML; • Mostra o resultado da validação; • Validação correta; • Indicação de inconsistências. • Realiza • Checks • Updates • Inserts • Removes • Renames • Appends Trabalho Individual – PPGCC/UFSC – 2004
Estudo de caso • Objetivo da operadora – prestar atendimento à saúde de seus usuários; • Domínio – Operadora de planos de saúde; • Quem presta o atendimento – são os prestadores de serviço (médicos, laboratórios, clínicas, hospitais) • MOTIVAÇÃO – troca constante de dados entre prestadores e operadora através de documentos XML; • Finalidade dos dados – armazenamento num banco de dados ou geração de novas instâncias; Trabalho Individual – PPGCC/UFSC – 2004
Estudo de caso - exemplo <dados> <instituicao> 124 </instituicao> <nome_instituicao> Hosp. Prontoclinicas Ltda </nome_instituicao> <prestadores> <prestador> 1452 </prestador> <nome_prestador> Inst. de Neurologia </nome_prestador> <responsavel> Maria da Silva </responsavel> <data_geracao> 29-04-2004 </data_geracao> <total_pagamentos> 54,00 </total_pagamentos> <consultas> <qtde_consultas> 2 </qtde_consultas> <total_consultas> 54,00 </total_consultas> <consulta> <autorizacao> 813321 </autorizacao> <data_lancamento> 15-04-2004 </data_lancamento> <paciente> 14578 </paciente> <nome_paciente> Adalgisa Severo </nome_paciente> <convenio> 78 </convenio> <nome_convenio> Saude Brasil Individual </nome_convenio> <medico> 65 </medico> <nome_medico> Adao Soares </nome_medico> <data_realizacao> 12-04-2004 </data_realizacao> <quantidade> 1 </quantidade> <valor_consulta> 27,00 </valor_consulta> </consulta> <consulta> <autorizacao> 81341 </autorizacao> <data_lancamento> 12-04-2004 </data_lancamento> <paciente> 1245 </paciente> <nome_paciente> Maria do Carmo </nome_paciente> <convenio> 77 </convenio> <nome_convenio> Saude Brasil Coletivo </nome_convenio> <medico> 65 </medico> <nome_medico> Adao Soares </nome_medico> <data_realizacao> 20-04-2004 </data_realizacao> <quantidade> 1 </quantidade> <valor_consulta> 27,00 </valor_consulta> </consulta> </consultas> </prestadores> </dados> Trabalho Individual – PPGCC/UFSC – 2004
Estudo de caso - exemplo A data de lançamento de uma consulta deve ser menor ou igual a data de realização da mesma consulta <dados> <instituicao> 124 </instituicao> <nome_instituicao> Hosp. Prontoclinicas Ltda </nome_instituicao> <prestadores> <prestador> 1452 </prestador> <nome_prestador> Inst. de Neurologia </nome_prestador> <responsavel> Maria da Silva </responsavel> <data_geracao> 29-04-2004 </data_geracao> <total_pagamentos> 54, 00 </total_pagamentos> <consultas> <qtde_consultas> 2 </qtde_consultas> <total_consultas> 54,00 </total_consultas> <consulta> <autorizacao> 813321 </autorizacao> <data_lancamento> 15-04-2004 </data_lancamento> <paciente> 14578 </paciente> <nome_paciente> Adalgisa Severo </nome_paciente> <convenio> 78 </convenio> <nome_convenio> Saude Brasil Individual </nome_convenio> <medico> 65 </medico> <nome_medico> Adao Soares </nome_medico> <data_realizacao> 12-04-2004 </data_realizacao> <quantidade> 1 </quantidade> <valor_consulta> 27,00 </valor_consulta> </consulta> <consulta> <autorizacao> 81341 </autorizacao> <data_lancamento> 12-04-2004 </data_lancamento> <paciente> 1245 </paciente> <nome_paciente> Maria do Carmo </nome_paciente> <convenio> 77 </convenio> <nome_convenio> Saude Brasil Coletivo </nome_convenio> <medico> 65 </medico> <nome_medico> Adao Soares </nome_medico> <data_realizacao> 20-04-2004 </data_realizacao> <quantidade> 1 </quantidade> <valor_consulta> 27,00 </valor_consulta> </consulta> </consultas> </prestadores> </dados> Trabalho Individual – PPGCC/UFSC – 2004
Estudo de caso - exemplo O valor do elemento total de consultas deve ser igual ao somatório dos elementos valor consulta <dados> <instituicao> 124 </instituicao> <nome_instituicao> Hosp. Prontoclinicas Ltda </nome_instituicao> <prestadores> <prestador> 1452 </prestador> <nome_prestador> Inst. de Neurologia </nome_prestador> <responsavel> Maria da Silva </responsavel> <data_geracao> 29-04-2004 </data_geracao> <total_pagamentos> 54,00 </total_pagamentos> <consultas> <qtde_consultas> 2 </qtde_consultas> <total_consultas> 54,00 </total_consultas> <consulta> <autorizacao> 813321 </autorizacao> <data_lancamento> 15-04-2004 </data_lancamento> <paciente> 14578 </paciente> <nome_paciente> Adalgisa Severo </nome_paciente> <convenio> 78 </convenio> <nome_convenio> Saude Brasil Individual </nome_convenio> <medico> 65 </medico> <nome_medico> Adao Soares </nome_medico> <data_realizacao> 12-04-2004 </data_realizacao> <quantidade> 1 </quantidade> <valor_consulta> 27,00 </valor_consulta> </consulta> <consulta> <autorizacao> 81341 </autorizacao> <data_lancamento> 12-04-2004 </data_lancamento> <paciente> 1245 </paciente> <nome_paciente> Maria do Carmo </nome_paciente> <convenio> 77 </convenio> <nome_convenio> Saude Brasil Coletivo </nome_convenio> <medico> 65 </medico> <nome_medico> Adao Soares </nome_medico> <data_realizacao> 20-04-2004 </data_realizacao> <quantidade> 1 </quantidade> <valor_consulta> 27,00 </valor_consulta> </consulta> </consultas> </prestadores> </dados> Trabalho Individual – PPGCC/UFSC – 2004
Sintaxe XDCL <xdcl_constraintxdcl_name=”nome_constraint”> <xdcl_on> [Expressão XPath] </xdcl_on> <xdcl_statements> <xdcl_operations xdcl_operator=”[=,>=,<=,>,<,<>]”> <xdcl_oper1 [xdcl_function1=”[sum, count, max, min]”]> <xdcl_path1> [expressão XPath] </xdcl_path1> </xdcl_oper1> <xdcl_oper2 [xdcl_function2=”[sum, cont, max, min]”]> <xdcl_path2> [expressão XPath] </xdcl_path2> </xdcl_oper2> </xdcl_operations> <xdcl_return> <xdcl_update> instruções XUpdate</xdcl_update> <xdcl_insert> instruções XUpdate</xdcl_insert> <xdcl_delete> instruções XUpdate</xdcl_delete> <xdcl_message> <xdcl_data_message> mensagem de aviso </xdcl_data_message> </xdcl_message> </xdcl_return> </xdcl_statements> </xdcl_constraint> Trabalho Individual – PPGCC/UFSC – 2004
XSD da linguagem Documento do Word Trabalho Individual – PPGCC/UFSC – 2004
Exemplo de Check <?xml version="1.0" encoding="UTF-8"?> <xdcl_constraint xdcl_name="nome da restricao" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Mestrado\Trabalho Final\Dissertaçao\xdcl.xsd"> <!-- MOSTRA UMA MENSAGEM DE INCONSISTÊNCIA ENTRE OS ELEMENTOS DATA_LANCAMENTO E DATA_REALIZACAO--> <xdcl_on>/dados/prestadores/consultas/consulta</xdcl_on> <xdcl_statements> <xdcl_operations xdcl_operation=">="> <xdcl_oper1> <xdcl_path1>/dados/prestadores/consultas/consulta/data_lançamento</xdcl_path1> </xdcl_oper1> <xdcl_oper2> <xdcl_path2>/dados/prestadores/consultas/consulta/data_realização</xdcl_path2> </xdcl_oper2> </xdcl_operations> <xdcl_return> <xdcl_message> <xdcl_data_return>DATAS INVÁLIDAS, VERIFIQUE !</xdcl_data_return> </xdcl_message> </xdcl_return> </xdcl_statements> </xdcl_constraint> Trabalho Individual – PPGCC/UFSC – 2004
Exemplo de Update <?xml version="1.0" encoding="UTF-8"?> <xdcl_constraint xdcl_name="nome da restricao" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Mestrado\Trabalho Final\Dissertaçao\xdcl.xsd"> <!-- ATUALIZA O VALOR DO ELEMENTO QTDE_CONSULTAS COM O VALOR DE XDCL_OPER1--> <xdcl_on>/dados/prestadores/consultas</xdcl_on> <xdcl_statements> <xdcl_operations xdcl_operation="<>"> <xdcl_oper1 xdcl_function="sum"> <xdcl_path1>/dados/prestadores/consultas/consulta/quantidade</xdcl_path1> </xdcl_oper1> <xdcl_oper2> <xdcl_path2>/dados/prestadores/consultas/qtde_consultas</xdcl_path2> </xdcl_oper2> </xdcl_operations> <xdcl_return> <xdcl_update> <xupdate_modifications version="1.0" xupdate_xmlns="http://www.xmldb.org/xupdate"> <xupdate_update select="/dados/prestadores/consultas/qtde_consultas">xdcl_oper1</xupdate_update> </xupdate_modifications> </xdcl_update> </xdcl_return> </xdcl_statements> </xdcl_constraint> Trabalho Individual – PPGCC/UFSC – 2004
Exemplo de Remove <?xml version="1.0" encoding="UTF-8"?> <xdcl_constraint xdcl_name="nome da restricao" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Mestrado\Trabalho Final\Dissertaçao\xdcl.xsd"> <!-- REMOVE O ELEMENTO 'CONFERIDO' DESDE QUE ELE ESTEJA COM O VALOR 'OK' --> <xdcl_on>/dados/prestadores/consultas</xdcl_on> <xdcl_statements> <xdcl_operations xdcl_operation="="> <xdcl_oper1> <xdcl_path1>/dados/prestadores/consultas/conferido</xdcl_path1> </xdcl_oper1> <xdcl_oper2> <xdcl_path2>OK</xdcl_path2> </xdcl_oper2> </xdcl_operations> <xdcl_return> <xdcl_delete> <xupdate_modifications version="1.0" xupdate_xmlns="http://www.xmldb.org/xupdate"> <xupdate_remove select="conferido"></xupdate_remove> </xupdate_modifications> </xdcl_delete> </xdcl_return> </xdcl_statements> </xdcl_constraint> Trabalho Individual – PPGCC/UFSC – 2004
Exemplo de Insert <?xml version="1.0" encoding="UTF-8"?> <xdcl_constraint xdcl_name="nome da restricao" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="C:\Mestrado\Trabalho Final\Dissertaçao\xdcl.xsd"> <!-- INSERE O ELEMENTO CONFERIDO APÓS O ELEMENTO TOTAL_PAGAMENTOS COM O VALOR 'OK' --> <xdcl_on>/dados/prestadores/consultas</xdcl_on> <xdcl_statements> <xdcl_return> <xdcl_insert> <xupdate_modifications version="1.0" xupdate_xmlns="http://www.xmldb.org/xupdate"> <xupdate_insert-before select="\dados\prestadores\total_pagamentos"> <element name="conferido">ok</element> </xupdate_insert-before> </xupdate_modifications> </xdcl_insert> </xdcl_return> </xdcl_statements> </xdcl_constraint> Trabalho Individual – PPGCC/UFSC – 2004
Dificuldades • Implementar no xsd controles da linguagem xupdate • Momento que o parser de verificação será executado • Bancos XML (eventos?) • Documentos XML (ao alterar o documento) Trabalho Individual – PPGCC/UFSC – 2004
Cronograma de atividades Trabalho Individual – PPGCC/UFSC – 2004
Obrigado ! Trabalho Individual – PPGCC/UFSC – 2004