Padrões de Gerenciamento de
Conteúdo



Richard Esplin
Community Technology
O Banco de Dados Relacional Não
Vai Ser Adequado



Richard Esplin
Community Technology
A dor dos documentos . .
            .
O banco de dados não faz tudo
●   Faz bem o texto e os números, mas não faz
    bem os dados binários
●   Faz bem as definições das tabelas estáticas,
    mas não das definições dinâmicas
●   Limitação de tamanho
●   Acesso aleatório (faz streaming)
●   Busca: Algumas fazem indexação dos arquivos
    binários, mas não todos
Vamos construir!




        Pasukaru76 (cc attribution) http://www.flickr.com/photos/pasukaru76/4277763808/
Opções de armazenar os arquivos
●   No disco
●   Amazon S3 ou uma CAS filer no local
●   Repositório de gerenciamento do código
●   Um banco de dados de XML
●   Armazenador dos documentos de NoSQL
Ao salvar os arquivos . . .
●   Segurança
●   Iniciar um workflow       Muito código
●   Versionamento            personalizado!
●   Replicação
●   Transformação de conteúdo
●   Programar um job
●   Acesso através do disco compartilhado
●   Acesso aos APIs
●   Integração com ferramentas
O cenário otimista:




     gobucks2 (cc attribution non-commercial share-alike) http://www.flickr.com/photos/69331170@N00/2854583096
O cenário pessimista:

         Guardanapo que funciona por si mesmo




              http://commons.wikimedia.org/wiki/File:Professor_Lucifer_Butts.gif
Padrões Recomendados: A Plataforma
A plataforma
●   Os problemas comuns já foram resolvidos
●   Plataforma de Conteúdo = Repositório + Serviços
    ●   Busca a plataforma certa
    ●   Personaliza a plataforma com suas regras de empresa
    ●   Personaliza a interface usuária fornecida pela plataforma
    ●   Ou escreva sua própria interface usando qualquer
        linguagem ou framework
●   Garanta que atenda às suas necessidades agora e
    também no futuro
Partes dos sistemas de conteúdo
●   Interface usuário         ●   Transformação /
●   Armazenamento /               Renderização / Miniaturas
    Modelo dos Dados /        ●   Marcação / Categorização
    Metadata                  ●   Integração com
●   Processo de Empresa /         Ferramentas dos Autoria
    Workflow                  ●   API Remoto
●   Serviços de Biblioteca    ●   Transferência /
    (Upload / Download,
                                  Publicação
    Versionamento, Check-in
    / Check-out)              ●   Comentários
●   Segurança                 ●   Notas
Alfresco API
●O API fundamental de Alfresco é de Java
●Também tem a opção de JavaScript no


server
●APIs remotos

    ● Webscripts de HTTP REST - Java ou JavaScript
    ● CMIS - REST Atom ou SOAP


    ● Alfresco Serviços de Web




                                 Source: 96dpi
Arquitetura de Alfresco

Aplicações de Web              Portais de Conhecimento   Serviços de Web

                    Servidor                              CRM      Motor dos
                    de Apps                                        Processos da
                                                                   Empresa




                                 Portal Server




Sistema Virtual                                              Alta Avaliabilidade
dos Arquivos
Corporate Systems
                                                                Desktop



                                                WebDAV
                                                 CMIS
                                                  CIFS
                                   CMIS        SharePoint
                                 JSR-168        Protocol
                                Connectors

Social Media Channels
                                                                          Mobile
                                                        CMIS
                                                       WebDAV
                    Open Web APIs




                                 Open Web     CMIS-based
                 Web Services      APIs      Alfresco Sync   Public Alfresco Cloud
                                   CMIS
e
O que é o CMIS?
●   Content Management Interoperability Services
●   Um API especifico pelo gerenciamento do conteúdo,
    independente da linguagem, independente do fornecedor
●   Denominador comum menor (alguns fornecedores têm
    extensões)
    ●   Funções de CRUD pelas nodas
    ●   Check-in / check-out
    ●   Associações
    ●   Permissões (Listas de controle de acesso)
    ●   Politica
    ●   Consultas
    ●   Atravessar o Repositório
O que é o CMIS? (continuação)
●   Padrão do OASIS
    ●   30+ fornecedores de ECM prometem implementar
●   Duas partes
    ●   Ligações de SOAP e de AtomPub
        –   Ligações de JSON em breve
    ●   Linguagem baseada nas consultas do SQL
●   As extensões especificas ao Alfresco ajudam
    muito
Casos de uso

                                      Repositório
                Cliente                                         Cliente
                                     de Conteúdo



               Repositório            Repositório              Content
                                                                Content
              de Conteúdo            de Conteúdo              Repository
                                                                 Repositório
                                                               Repository
                                                                de Conteúdo


●   Criação colaborativa de conteúdo                ●   Workflow & BPM
●   Portais                                         ●   Arquivamento
    Integração com os aplicativos do cliente
●
                                                    ●   Geração dos documentos
    Mashups
                                                        Digital Asset Management (DAM)
●
                                                    ●
●   Repositório de conteúdo incorporado
                                                    ●   Web Content Mangaement (WCM)
A beleza do CMIS


     Nível de
   Apresentação

                  REST   SOAP




                                ?
     Nível dos
    Serviços de
     Conteúdo




    Nível das
  Aplicações de                     ?
    Empresa
Conheça o CMIS
  Consumador



                  Cliente



                ler    escrever

                 Serviços
                 Modelo de
  Fornecedor




                  domínio                Content
                                         Management
               Mapiagem do               Interoperability
               Fornecedor                Services

                Repositório       Com o CMIS pode ler, buscar, escrever,
                                  actualizar, excluir, dar versão, e gerenciar o
               de Conteúdo        conteúdo e a metadata!
Tipos

  Documentos                        Pasta
  ●
    Conteúdo                        ●
                                      Recipiente
  ●
    Rendições                       ●
                                      Hierarquia
  ●
    História das versões            ●
                                      Arquivamento / Limadura

                           Descrito pelas
                        Definições dos Tipos

  Relação                          ACL
  ●
    Objeto de Origem               ●
                                     Objeto de Destino
  ●
    Objeto de Destino
                                   Política
                                   ●
                                     Objeto de Destino
Definições dos Tipos

             Object                 Property
             ●
               Type Id              ●
                                      Property Id
             ●
               Parent          *    ●
                                      Display Name
             ●
               Display Name         ●
                                      Type
             ●
               Queryable            ●
                                      Required
             ●
               Controllable         ●
                                      Default Value
                                    ●
                                      …



 Document           Folder         Relationship       Policy
 ●
   Versionable                     ●
                                     Source Types
 ●
   Allow Content                   ●
                                     Target Types


                         Custom Type
Apache Chemistry
●   Uma implementação de CMIS de código aberto
●   O projeto que agrupo todos os projetos relacionados ao CMIS
    dentro de ASF
    ●   OpenCMIS (Java, client, e servidor)
    ●   cmislib (Python, client)
    ●   phpclient (PHP, client)
    ●   DotCMIS (.NET, client)
●   Implementação de referencia pelo CMIS que é usado pelo comité
    técnico de CMIS para provar as partes novas de versão 1.1.
Exemplos
Meu ambiente
●   Debian Mint Wheezy
●   OpenJDK 1.6.0_24
●   Python 2.7.2
●   Alfresco Community Edition 4.0.d
●   Open CMIS Workbench 0.7.0
CMIS Workbench
●   Baixar
    ●   http://chemistry.apache.org/java/developing/tools
        /dev-tools-workbench.html
●   Ligar ao Alfresco
    ●   http://localhost:8080/alfresco/cmisatom
●   Uma ferramente boa para aprender sobre o
    CMIS
●   Confira o Groovy Console!
Python
●   No shell:                                ●   Continuação:

virtualenv .                                 props = {}
./bin/easy_install cmislib                   props["cmis:objectTypeId"]="cmis:document"
./bin/python                                 doc =
                                             folder.createDocumentFromString('testdoc.t
from cmislib.model import CmisClient         xt', props, contentString="This is a test
client = CmisClient(                         showing how to create a text document",
"http://192.168.56.1:8080/alfresco/cmisato   contentType='text/plain')
m","admin", "admin")                         doc.isCheckedOut()
repo = client.defaultRepository              props = {}
repo.id                                      props['cmis:name'] = "test-updated.txt"
repo.name                                    doc = doc.updateProperties(props)
for (k,v) in                                 doc.name
repo.getCapabilities().iteritems():          doc.delete()
  print "%s: %s" %(k,v)                      len(folder.getChildren())
                                             result = repo.query("select * from
for (k,v) in                                 cmis:folder where cmis:name like '%alf%'")
repo.getRepositoryInfo().iteritems():        len(result)
  print "%s: %s" %(k,v)                      for i in result:
                                               print i.name
root = repo.getRootFolder()
root.name                                    result = repo.query("select * from
folder = root.createFolder('cmis-demo')      cmis:document where contains('name')")
folder.id                                    for i in result:
folder.name                                    print i.name
for (k,v) in
folder.properties.iteritems():
  print "%s: %s" %(k,v)
Aonde pode aprender mais
●   cmis.alfresco.com é um servido público de CMIS e
    contém links aos recursos CMIS (o cheat sheet é ótimo!)
●   Pode ler o especificação de CMIS
●   O site de Apache Chemistry tem clientes, um servidor
    pequeno, e documentação
●   O tutório “Getting Started with CMIS” demonstra como
    usar "cURL para acessar diretamente as ligações de
    AtomPub"
●   Há presentações do Alfresco DevCon 2011 sobre o CMIS
    no Slideshare aqui e aqui
Perguntas?
Atribuição e licenciamento
●   Copyright 2012, Alfresco Software
●   Imagens usado nesta presentação sob a licença
    de Creative Commons by-attribution non-
    commercial share-alike.
●   O trabalho original nesta presentação é sob a
    licença de Creative Commons by-attribution.
●   Agradeço o Jeff Potts que me deixou usar a sua
    presentação como o fundição deste trabalho.

Meet-ups Brazil: Padrões de Gerenciamento de Conteúdo / Patterns in Content Management

  • 1.
    Padrões de Gerenciamentode Conteúdo Richard Esplin Community Technology
  • 2.
    O Banco deDados Relacional Não Vai Ser Adequado Richard Esplin Community Technology
  • 3.
    A dor dosdocumentos . . .
  • 4.
    O banco dedados não faz tudo ● Faz bem o texto e os números, mas não faz bem os dados binários ● Faz bem as definições das tabelas estáticas, mas não das definições dinâmicas ● Limitação de tamanho ● Acesso aleatório (faz streaming) ● Busca: Algumas fazem indexação dos arquivos binários, mas não todos
  • 5.
    Vamos construir! Pasukaru76 (cc attribution) http://www.flickr.com/photos/pasukaru76/4277763808/
  • 6.
    Opções de armazenaros arquivos ● No disco ● Amazon S3 ou uma CAS filer no local ● Repositório de gerenciamento do código ● Um banco de dados de XML ● Armazenador dos documentos de NoSQL
  • 7.
    Ao salvar osarquivos . . . ● Segurança ● Iniciar um workflow Muito código ● Versionamento personalizado! ● Replicação ● Transformação de conteúdo ● Programar um job ● Acesso através do disco compartilhado ● Acesso aos APIs ● Integração com ferramentas
  • 8.
    O cenário otimista: gobucks2 (cc attribution non-commercial share-alike) http://www.flickr.com/photos/69331170@N00/2854583096
  • 9.
    O cenário pessimista: Guardanapo que funciona por si mesmo http://commons.wikimedia.org/wiki/File:Professor_Lucifer_Butts.gif
  • 10.
  • 11.
    A plataforma ● Os problemas comuns já foram resolvidos ● Plataforma de Conteúdo = Repositório + Serviços ● Busca a plataforma certa ● Personaliza a plataforma com suas regras de empresa ● Personaliza a interface usuária fornecida pela plataforma ● Ou escreva sua própria interface usando qualquer linguagem ou framework ● Garanta que atenda às suas necessidades agora e também no futuro
  • 12.
    Partes dos sistemasde conteúdo ● Interface usuário ● Transformação / ● Armazenamento / Renderização / Miniaturas Modelo dos Dados / ● Marcação / Categorização Metadata ● Integração com ● Processo de Empresa / Ferramentas dos Autoria Workflow ● API Remoto ● Serviços de Biblioteca ● Transferência / (Upload / Download, Publicação Versionamento, Check-in / Check-out) ● Comentários ● Segurança ● Notas
  • 13.
    Alfresco API ●O APIfundamental de Alfresco é de Java ●Também tem a opção de JavaScript no server ●APIs remotos ● Webscripts de HTTP REST - Java ou JavaScript ● CMIS - REST Atom ou SOAP ● Alfresco Serviços de Web Source: 96dpi
  • 14.
    Arquitetura de Alfresco Aplicaçõesde Web Portais de Conhecimento Serviços de Web Servidor CRM Motor dos de Apps Processos da Empresa Portal Server Sistema Virtual Alta Avaliabilidade dos Arquivos
  • 15.
    Corporate Systems Desktop WebDAV CMIS CIFS CMIS SharePoint JSR-168 Protocol Connectors Social Media Channels Mobile CMIS WebDAV Open Web APIs Open Web CMIS-based Web Services APIs Alfresco Sync Public Alfresco Cloud CMIS
  • 16.
  • 17.
    O que éo CMIS? ● Content Management Interoperability Services ● Um API especifico pelo gerenciamento do conteúdo, independente da linguagem, independente do fornecedor ● Denominador comum menor (alguns fornecedores têm extensões) ● Funções de CRUD pelas nodas ● Check-in / check-out ● Associações ● Permissões (Listas de controle de acesso) ● Politica ● Consultas ● Atravessar o Repositório
  • 18.
    O que éo CMIS? (continuação) ● Padrão do OASIS ● 30+ fornecedores de ECM prometem implementar ● Duas partes ● Ligações de SOAP e de AtomPub – Ligações de JSON em breve ● Linguagem baseada nas consultas do SQL ● As extensões especificas ao Alfresco ajudam muito
  • 19.
    Casos de uso Repositório Cliente Cliente de Conteúdo Repositório Repositório Content Content de Conteúdo de Conteúdo Repository Repositório Repository de Conteúdo ● Criação colaborativa de conteúdo ● Workflow & BPM ● Portais ● Arquivamento Integração com os aplicativos do cliente ● ● Geração dos documentos Mashups Digital Asset Management (DAM) ● ● ● Repositório de conteúdo incorporado ● Web Content Mangaement (WCM)
  • 20.
    A beleza doCMIS Nível de Apresentação REST SOAP ? Nível dos Serviços de Conteúdo Nível das Aplicações de ? Empresa
  • 21.
    Conheça o CMIS Consumador Cliente ler escrever Serviços Modelo de Fornecedor domínio Content Management Mapiagem do Interoperability Fornecedor Services Repositório Com o CMIS pode ler, buscar, escrever, actualizar, excluir, dar versão, e gerenciar o de Conteúdo conteúdo e a metadata!
  • 22.
    Tipos Documentos Pasta ● Conteúdo ● Recipiente ● Rendições ● Hierarquia ● História das versões ● Arquivamento / Limadura Descrito pelas Definições dos Tipos Relação ACL ● Objeto de Origem ● Objeto de Destino ● Objeto de Destino Política ● Objeto de Destino
  • 23.
    Definições dos Tipos Object Property ● Type Id ● Property Id ● Parent * ● Display Name ● Display Name ● Type ● Queryable ● Required ● Controllable ● Default Value ● … Document Folder Relationship Policy ● Versionable ● Source Types ● Allow Content ● Target Types Custom Type
  • 24.
    Apache Chemistry ● Uma implementação de CMIS de código aberto ● O projeto que agrupo todos os projetos relacionados ao CMIS dentro de ASF ● OpenCMIS (Java, client, e servidor) ● cmislib (Python, client) ● phpclient (PHP, client) ● DotCMIS (.NET, client) ● Implementação de referencia pelo CMIS que é usado pelo comité técnico de CMIS para provar as partes novas de versão 1.1.
  • 25.
  • 26.
    Meu ambiente ● Debian Mint Wheezy ● OpenJDK 1.6.0_24 ● Python 2.7.2 ● Alfresco Community Edition 4.0.d ● Open CMIS Workbench 0.7.0
  • 27.
    CMIS Workbench ● Baixar ● http://chemistry.apache.org/java/developing/tools /dev-tools-workbench.html ● Ligar ao Alfresco ● http://localhost:8080/alfresco/cmisatom ● Uma ferramente boa para aprender sobre o CMIS ● Confira o Groovy Console!
  • 28.
    Python ● No shell: ● Continuação: virtualenv . props = {} ./bin/easy_install cmislib props["cmis:objectTypeId"]="cmis:document" ./bin/python doc = folder.createDocumentFromString('testdoc.t from cmislib.model import CmisClient xt', props, contentString="This is a test client = CmisClient( showing how to create a text document", "http://192.168.56.1:8080/alfresco/cmisato contentType='text/plain') m","admin", "admin") doc.isCheckedOut() repo = client.defaultRepository props = {} repo.id props['cmis:name'] = "test-updated.txt" repo.name doc = doc.updateProperties(props) for (k,v) in doc.name repo.getCapabilities().iteritems(): doc.delete() print "%s: %s" %(k,v) len(folder.getChildren()) result = repo.query("select * from for (k,v) in cmis:folder where cmis:name like '%alf%'") repo.getRepositoryInfo().iteritems(): len(result) print "%s: %s" %(k,v) for i in result: print i.name root = repo.getRootFolder() root.name result = repo.query("select * from folder = root.createFolder('cmis-demo') cmis:document where contains('name')") folder.id for i in result: folder.name print i.name for (k,v) in folder.properties.iteritems(): print "%s: %s" %(k,v)
  • 29.
    Aonde pode aprendermais ● cmis.alfresco.com é um servido público de CMIS e contém links aos recursos CMIS (o cheat sheet é ótimo!) ● Pode ler o especificação de CMIS ● O site de Apache Chemistry tem clientes, um servidor pequeno, e documentação ● O tutório “Getting Started with CMIS” demonstra como usar "cURL para acessar diretamente as ligações de AtomPub" ● Há presentações do Alfresco DevCon 2011 sobre o CMIS no Slideshare aqui e aqui
  • 30.
  • 31.
    Atribuição e licenciamento ● Copyright 2012, Alfresco Software ● Imagens usado nesta presentação sob a licença de Creative Commons by-attribution non- commercial share-alike. ● O trabalho original nesta presentação é sob a licença de Creative Commons by-attribution. ● Agradeço o Jeff Potts que me deixou usar a sua presentação como o fundição deste trabalho.