18
Modelagem de dados semiestruturados com ISIS-DM Antonio Ribeiro - [email protected] Gustavo Fonseca - [email protected]

Modelagem de Dados Semiestruturados com ISIS-DM

Embed Size (px)

DESCRIPTION

Apresentado no TDC2011, na trilha Python. [http://www.thedevelopersconference.com.br/tdc/2011/saopaulo/trilha-python#programacao]

Citation preview

Page 1: Modelagem de Dados Semiestruturados com ISIS-DM

Modelagem de dados semiestruturados com ISIS-DM

Antonio Ribeiro - [email protected] Fonseca - [email protected]

Page 2: Modelagem de Dados Semiestruturados com ISIS-DM

O modelo semiestruturado

Page 3: Modelagem de Dados Semiestruturados com ISIS-DM

Registro semiestruturado - XML<issue>    <article>        <pid>S0034-89101997000100004</pid>        <author>            <firstname>Sonia</firstname>            <lastname>Buongermino de Souza</lastname>            <role>ND</role>            <affiliation>                <orgname>A01</orgname>            </affiliation>        </author>        <author>            <firstname>Sophia</firstname>            <lastname>Cornbluth Szarfarc</lastname>            <role>ND</role>            <affiliation>                <orgname>A01</orgname>            </affiliation>        </author>        <author>            <firstname>José Maria</firstname>            <lastname>Pacheco de Souza</lastname>            <role>ND</role>            <affiliation>                <orgname>A02</orgname>            </affiliation>        </author>        <title language="pt">Anemia no primeiro ano de vida em relação ao aleitamento materno</title>               

<title language="en">Anemia in the first year of life and its relation to the breast-feeding</title>        <pages>            <first>15</first><last>20</last>        </pages>        <shorttitle>Rev. Saúde Pública</shorttitle>        <volume>31</volume>        <issueno>1</issueno>        <issn>0034-8910</issn>        <affiliation id="A01">            <orgname>Universidade de São Paulo</orgname>            <department>Departamento de Nutrição da Faculdade de Saúde Pública</department>        </affiliation>        <affiliation id="A02">            <orgname>Universidade de São Paulo</orgname>            <department>Departamento de Epidemiologia da Faculdade</department>        </affiliation>        <abstract language="pt">INTRODUÇÃO: Resultados de vários estudos permitem levantar a hipótese de que ...</abstract>        <abstract language="en">INTRODUCTION: Many studies in this field justify the hypothesis that ...</abstract>    </article></issue>

Page 4: Modelagem de Dados Semiestruturados com ISIS-DM

Registro semiestruturado - JSON{   "pid":S0034-89101997000100004,    "authors":[{"firstname":"Sonia",               "lastname":"Buongermino de Souza",               "role":"ND",               "affiliation":[{"orgname":"A01"}]},              {"firstname":"Sophia",               "lastname":"Cornbluth Szarfarc",               "role":"ND",               "affiliation":[{"orgname":"A01"}]},              {"firstname":"José Maria",               "lastname":"Pacheco de Souza",               "role":"ND",               "affiliation":[{"orgname":"A02"}]}],    "titles":[{"title":"Anemia no primeiro ano de vida em relação ao aleitamento materno", "language":"pt"},              {"title":"Anemia in the first year of life and its relation to the breast-feeding", "language":"en"}],    "pages":{"first":15, "last":20},    "shorttitle":"Rev. Saúde Pública",    "volume":31,    "issueno":1,    "issn":"0034-8910",    "affiliations":[{"id":"A01", "orgname":"Universidade de São Paulo", "department": "Departamento de Nutrição da Faculdade de Saúde Pública"},                    {"id":"A02", "orgname":"Universidade de São Paulo", "department": "Departamento de Epidemiologia da Faculdade"}],    "abstracts":[{"abstract": "INTRODUÇÃO: Resultados de vários estudos permitem levantar a hipótese de que ...", "language":"pt"},                 {"abstract": "INTRODUCTION: Many studies in this field justify the hypothesis that ...", "language":"es"}]  }

Page 5: Modelagem de Dados Semiestruturados com ISIS-DM

Registro ISISmfn=     3 10  "^rND^1A01^nSonia^sBuongermino de Souza" 10  "^rND^1A01^nSophia^sCornbluth Szarfarc" 10  "^rND^1A02^nJosé Maria^sPacheco de Souza" 12  "Anemia no primeiro ano de vida em relação ao aleitamento materno^lpt" 12  "Anemia in the first year of life and its relation to the breast-feeding^len" 14  "^f15^l20" 30  "Rev. Saúde Pública" 31  "31" 32  "1" 35  "0034-8910" 70  "Universidade de São Paulo^iA01^dDepartamento de Nutrição da Faculdade de Saúde Pública" 70  "Universidade de São Paulo^iA02^dDepartamento de Epidemiologia da Faculdade" 83  "^lpt^aINTRODUÇÃO: Resultados de vários estudos permitem levantar a hipótese de que ..." 83  "^len^aINTRODUCTION: Many studies in this field justify the hypothesis that ..."709  "article"880  "S0034-89101997000100004"             

Page 6: Modelagem de Dados Semiestruturados com ISIS-DM

ISIS???  Je ne comprends pas!

http://www.eventos.bvsalud.org/agendas/isis3/activity.php?lang=pt&id=13

Page 7: Modelagem de Dados Semiestruturados com ISIS-DM

ISIS-NBP - Network Based Platform• isis2json.py: utilitário de conversão de bases ISIS para

o formato JSON;• ISIS-JSON: proposta de padronização da representação de

registros ISIS em formato JSON;• ISIS Data Model API (ISIS-DM): prova de conceito de

interface de programação (API) para definição de esquemas de dados ISIS independente de mecanismo de persistência;

• schematize.py: utilitário gerador de esquema de dados ISIS-DM a partir da análise de uma massa de dados existente

Retirado do trabalho de conclusão de curso do Luciano Ramalho, disponível em: <http://blog.ramgarlic.com/2010/12/por-que-bibliotecarios-usam-bancos-de.html>

Page 8: Modelagem de Dados Semiestruturados com ISIS-DM

ISIS-DM• Definição formal de esquema de dados;• Definição de tipos de atributos; • Definição de atributos obrigatórios; • Validação dos atributos;• Geração de formulários HTML (pylons.colander, pylons.deform);

• Integração facultativa com SGBDs documentais (Apache CouchDB, MongoDB etc).

Page 9: Modelagem de Dados Semiestruturados com ISIS-DM

Talk is cheap. Show me the code!!! from isis import model

choices = ['article', 'book', 'booklet', 'conference',           'inbook', 'incollection', 'inproceedings',           'manual', 'mastersthesis', 'misc','phdthesis',           'proceedings', 'techreport', 'unpublished', ]

class Bibitex(model.CouchdbDocument):    entry_type = model.TextProperty(choices=        [(entry,entry) for entry in choices],)    reference_name = model.TextProperty(required=True)    title = model.TextProperty(required=True)    authors = model.MultiCompositeTextProperty(required=True,         subkeys=['name', 'lastname'])    publisher = model.TextProperty()    year = model.TextProperty()    address = model.TextProperty()    review = model.TextProperty()

Page 10: Modelagem de Dados Semiestruturados com ISIS-DM

Talk is cheap. Show me the code!!! from isis import model

choices = ['article', 'book', 'booklet', 'conference',           'inbook', 'incollection', 'inproceedings',           'manual', 'mastersthesis', 'misc','phdthesis',           'proceedings', 'techreport', 'unpublished', ]

class Bibitex(model.CouchdbDocument):    entry_type = model.TextProperty(choices=        [(entry,entry) for entry in choices],)    reference_name = model.TextProperty(required=True)    title = model.TextProperty(required=True)    authors = model.MultiCompositeTextProperty(required=True,         subkeys=['name', 'lastname'])    publisher = model.TextProperty()    year = model.TextProperty()    address = model.TextProperty()    review = model.TextProperty()

Page 11: Modelagem de Dados Semiestruturados com ISIS-DM

Tipos de atributos até o momento

• TextProperty• MultiTextProperty• CompositeTextProperty• MultiCompositeTextProperty• BooleanProperty• FileProperty• ReferenceProperty• IsisCompositeTextProperty• MultiIsisCompositeTextProperty evil!

Page 12: Modelagem de Dados Semiestruturados com ISIS-DM

Using Pyramid Framework

def new(request):    bibitex_form = BibitexForm.get_form()

    if 'submit' in request.POST:         controls = request.POST.items()        try:            appstruct = bibitex_form.validate(controls)        except deform.ValidationFailure, e:            return render_to_response('bibitex:form.pt',              {'content': e.render()})

        bibitex = Bibitex.from_python(appstruct)        bibitex.save(db)

        return Response('Saved under id: %s' % bibitex._id)    else:

        if 'id' in request.matchdict: #edit            bibitex = Bibitex.get(db, request.matchdict['id'])                        return render_to_response('bibitex:form.pt',              {'content': bibitex_form.render(bibitex.to_python())})

        return render_to_response('bibitex:form.pt',          {'content': bibitex_form.render()})

Page 13: Modelagem de Dados Semiestruturados com ISIS-DM

Using Pyramid Framework

def new(request):    bibitex_form = BibitexForm.get_form()

    if 'submit' in request.POST:         controls = request.POST.items()        try:            appstruct = bibitex_form.validate(controls)        except deform.ValidationFailure, e:            return render_to_response('bibitex:form.pt',              {'content': e.render()})

        bibitex = Bibitex.from_python(appstruct)        bibitex.save(db)

        return Response('Saved under id: %s' % bibitex._id)    else:

        if 'id' in request.matchdict: #edit            bibitex = Bibitex.get(db, request.matchdict['id'])                        return render_to_response('bibitex:form.pt',              {'content': bibitex_form.render(bibitex.to_python())})

        return render_to_response('bibitex:form.pt',          {'content': bibitex_form.render()})

Page 14: Modelagem de Dados Semiestruturados com ISIS-DM

Using Pyramid Framework

def new(request):    bibitex_form = BibitexForm.get_form()

    if 'submit' in request.POST:         controls = request.POST.items()        try:            appstruct = bibitex_form.validate(controls)        except deform.ValidationFailure, e:            return render_to_response('bibitex:form.pt',              {'content': e.render()})

        bibitex = Bibitex.from_python(appstruct)        bibitex.save(db)

        return Response('Saved under id: %s' % bibitex._id)    else:

        if 'id' in request.matchdict: #edit            bibitex = Bibitex.get(db, request.matchdict['id'])                        return render_to_response('bibitex:form.pt',              {'content': bibitex_form.render(bibitex.to_python())})

        return render_to_response('bibitex:form.pt',          {'content': bibitex_form.render()})

Page 15: Modelagem de Dados Semiestruturados com ISIS-DM

DEMO AO VIVO

Page 16: Modelagem de Dados Semiestruturados com ISIS-DM

Misturando as coisas...

http://github.com/bireme/scielobooks

Page 17: Modelagem de Dados Semiestruturados com ISIS-DM
Page 18: Modelagem de Dados Semiestruturados com ISIS-DM

Fork us

http://github.com/bireme/isisdm http://github.com/gustavofonsecahttp://github.com/alvesjnr

Obrigado!!!