ISISDM The ISIS Data Model API Uma API independente de banco de dados para manipulação de registros bibliográficos e documentais Luciano Ramalho BIREME/OPAS/OMS Contexto tecnológico • O modelo relacional normalizado (MRN) reinava praticamente incontestável • Em alguns nichos, usuários de bancos de dados NoSQL resistiam (ex. ISIS, Adabas, Mumps...) • Grandes usuários de NoSQL saíram do armário (Google, Amazon, Facebook...) • Vários bancos NoSQL novos sendo lançados Alguns produtos recentes • ZODB • Apache CouchDB • MongoDB • Hadoop Hbase • ThruDB • Redis • Hypertable • Riak • Google Datastore • Amazon SimpleDB • Apstrata Exemplos de NoSQL Uma aplicação: LILACS • LILACS: Literatura Latinoamericana y del Caribe en Ciencias de la Salud • Catalogação cooperativa de artigos científicos nos países de origem • Registros fornecidos por mais de 100 bibliotecas e centros de informação, de praticamente todos os países da região • Promove a pesquisa relevante para os nossos problemas de saúde A metodologia é o elo Dicionário Dicionáriode deDados Dadosda daMetodologia MetodologiaLilacs Lilacs O absurdo [...] seria interessante notar o absurdo do padrão do MRN [Modelo Relacional Normalizado]: se um livro tiver 3 autores e 5 assuntos, será necessário representálo no MRN por meio de uma linha na tabela Livros, mais 3 na Nomes-de-autores (que implementaria o atributo multivalorado correspondente) e mais 5 na de Assuntos, num total de 9 linhas em três tabelas distintas [...]. Mas o que se vê e e pega-se na mão no mundo real é um livro só, e não um picadinho de livro! SETZER, V. Bancos de dados: aprenda o que são, melhore seu conhecimento, construa os seus. 1ª ed. São Paulo: Edgard Blücher, 2005. Registros bibliográficos • MARC: Machine Readable Cataloging – US Library of Congress • ISO 2709 – Information and documentation: Format for information exchange • CDS/ISIS – Unesco, BIREME/OPAS/OMS et al. Modelo de dados apoia a metodologia • Campos repetitivos • Campos opcionais • Subcampos Características Característicascomuns comunsaos aosformatos formatos de deregistros registrosMARC, MARC,ISO-2709 ISO-2709eeISIS ISIS Exemplo de registro ISIS 10 10 10 12 «Lewis Carroll^y1832-1898^rauthor» «John Tenniel^y1820-1914^rillustrator» «Lewis Carroll^y1914-2010^reditor» «The Annotated Alice^sThe Definitive Edition» Exemplo de registro ISIS Campo repetitivo 10 10 10 12 «Lewis Carroll^y1832-1898^rauthor» «John Tenniel^y1820-1914^rillustrator» «Lewis Carroll^y1914-2010^reditor» «The Annotated Alice^sThe Definitive Edition» Exemplo de registro ISIS Marcador de sub-campo 10 10 10 12 Sub-campo «Lewis Carroll^y1832-1898^rauthor» «John Tenniel^y1820-1914^rillustrator» «Lewis Carroll^y1914-2010^reditor» «The Annotated Alice^sThe Definitive Edition» Exemplo de registro ISIS Campo repetitivo 10 10 10 12 «Lewis Carroll^y1832-1898^rauthor» «John Tenniel^y1820-1914^rillustrator» «Lewis Carroll^y1914-2010^reditor» «The Annotated Alice^sThe Definitive Edition» Marcador de sub-campo Sub-campo ISIS Formatting Language • DSL usada para extração de dados e definição de índices Projeto ISISDM: ISIS Data Model • API para definição de esquemas de dados através de classes, como em certos ORMs • API de extração de dados tão ou mais poderosa quanto a ISIS Format. Language • Backends para BDs NF² modernos – MongoDB – Google Datastore – PostgreSQL (hstore, JSON?) – O seu BD favorito Definição de um esquema Instanciação >>> >>> book book == Book(title='The Book(title='The Annotated Annotated Alice^sDefinitive Alice^sDefinitive Edition', Edition', ... pages=352, ... pages=352, ... creators=['Lewis ... creators=['Lewis Carroll^y1832-1898^rAuthor', Carroll^y1832-1898^rAuthor', ... 'John Tenniel^rIllustrator', ... 'John Tenniel^rIllustrator', ... 'Martin ... 'Martin Gardner^y1914-2010^rEditor']) Gardner^y1914-2010^rEditor']) Acesso a campos e subcampos >>> >>> book.title book.title u'The u'The Annotated Annotated Alice^sDefinitive Alice^sDefinitive Edition' Edition' >>> print book.title.s >>> print book.title.s Definitive Definitive Edition Edition >>> >>> print print book.creators[0].y book.creators[0].y 1832-1898 1832-1898 >>> >>> for for creator creator in in book.creators: book.creators: ... print '%-12s: ... print '%-12s: %s' %s' %% (creator.r, (creator.r, creator[0]) creator[0]) Author : Lewis Carroll Author : Lewis Carroll Illustrator Illustrator :: John John Tenniel Tenniel Editor : Martin Editor : Martin Gardner Gardner Projeto ISISDM • FLOSS: Licença LGPL • Iniciando agora: participe das decisões cruciais, envolvase enquanto ainda é fácil • Excelente oportunidade para ganhar experiência com NoSQL, trabalhando com massas de dados e necessidades reais • Alto impacto social: a missão é democratizar o acesso à informação em saúde • Visibilidade internacional O que temos: usuários, dados, casos de uso concretos http://reddes.bvsalud.org http://reddes.bvsalud.org [email protected] [email protected] http://reddes.bvsalud.org http://reddes.bvsalud.org [email protected] [email protected]