FrOSCamp Zurich: Content Management Standards

Preview:

DESCRIPTION

Open Standards in CMS prepared for the Hackfest at FrOSCamp in Zurich

Citation preview

Upcoming Content Standards

David Nuescheler

Spec-Lead JCR (JSR-170 & JSR-283)Member of the CMIS TCOfficial JCR/CMIS Liaison

Agenda

CM & StandardsA brief look at History

JCR v2.0. Evolution.What’s new.

OutlookWhat’s next.

JCR vs. CMISA comparison

CMISAn Introduction.

1

CM & StandardsHistory, Adoption, Usage.

3

What’s nextwhere are we headed...

2

JCR & CMISHistory and comparison.

SCMDAMDM

SOCIAL

WCMPIM

COLLAB

RM

Introducing the CM Cloud

Many different usecases.Little agreement.

There is light.The Content Repository.

All disciplines of CMagree on the existence and the featuresetof a content repository

A Content Repository!?

RDBMSFEATURES OF AN

FILESYSTEMFEATURES OF A

YOU ALWAYS WANTED

GOOD STUFFALL THE OTHER+

Transactions, Query, Structure, Integrity Binaries, Hierarchy, Locking, Access Control

Unstructured, Versioning, Full-text, Multi-Value, Sort-Order, Observation

CONTENT REPOSITORY

A history of standards.

DMA & ODMADocument Management oriented Specification. Little Adoption.No active specification development.

WebDAV (& friends)Filesystem (Resource) oriented Protocol Specification IETF.Widely adopted. Every Desktop has WebDAV support. Every CM Vendor Supports WebDAV. No active specification development.

JCRJava Language API specification. Functionally Broad. Wide adoption by Java Applications. Active development.

CMISDocument Management oriented Protocol Specification. Work in progress. Active development of the Specification. ACTIVESPECIFICATION

1

CM & StandardsHistory, Adoption, Usage.

3

What’s nextwhere are we headed...

2

JCR & CMISHistory and comparison.

What is CMIS?

PROPOSED TO

OASISSEPT

2008

V0.5

What is CMIS?

CMIS

DOMAIN MODEL

LEAST COMMON DENOMINATOR DM INTEROP

DOCUMENTS & FOLDERS(+RELATIONSHIPS)

ATOMPUB(extension)

SOAP(bindings)

BINDINGS

HTTP PROTOCOLS

What is CMIS?

DMIS? WS-DM?

Day’s involvement in CMIS

Improve Specification via TC activityOfficial JCR / CMIS LiaisonEnable “Web” Support

Apache Chemistry (incubating)

CMIS Implementation & CatalystSponsor, Mentor andSupport podling

What is JCR?

JCR

DOMAIN MODEL

CONTENT REPOSITORYINFRASTRUCTURE

NODES & PROPERTIES(GENERAL PURPOSE)

JAVA LANGUAGE(BINDING)

BINDINGS

API PROGRAMMING LANGUAGES

JCR vs. CMISGoals & Bodies

JCR CMISVS.

Java Language API BindingsLarge Expert Groupv2.0 finishing touches

SOAP & AtomPub Protocol BindingsLarge Technical Committeev0.61 Draft

RELATION

COMPLEMENTARY

JCR vs. CMISScope comparison

JCR CMISVS.

RELATION

COMPATIBLE SUBSET

SCM

DAMDMSOCIAL

WCMPIM

COLLAB

RM SCM

DAMDMSOCIAL

WCMPIM

COLLAB

RM

General PurposeContent Repository Model

FocusedDocument Management Model

JCR vs. CMISCompatibility

JCR CMISVS.

RELATION

COMPATIBLE

Apache Chemistry makes every JCR compliant repository CMIS compliant. Automatically. No work involved.

JCR vs. CMISWhat, when?

JCR CMISVS.

Content Repository Infrastructure.Standardized Content Repository Applications (CEVA) and Consolidation

DM InteroperabilityBrowse (multiple) Document Management Systems

RELATION

COMPLEMENTARY

1

CM & StandardsHistory, Adoption, Usage.

3

What’s nextwhere are we headed...

2

JCR & CMISHistory and comparison.

CMIS 1.0 Release

Released 2010

Baseline Release

CMIS 1.1 Submission

Web/Browser BindingsFunctional Extensions

JCR 2.0 Release

Released Sept

2009

TCK, RI & Specification

JCR 2.1/ JSR-333

JSR-333joiner

welcome.

Scripting, Ease of Use.

Scope & Goals

- API Consumers vs. API Implementors

- Ease of API use: Make simple, things simple.

- Lower entry barriers for implementers and application developers.

- Scripting support of the API.

Scope & Goals

- Client-server awareness.

- Protocol and SPI bindings. Binding and liaison to OASIS / CMIS.

Scope & Goals

- Maintenance and feedback container for implementers, users and non-users. Gauge real-world interoperability.

- Node type library.

- Internationalization.

Working Model

- Online Community Tools

- Bi-Weekly Phone Conference

- Face-2-Face Meetings.

Introducing:

JSOP

Pitch & Goal

- Browser enabled, HTTP-based protocol designed to exchange fine-grained information efficiently.

- Easy to consume by todays Web-”Gear” (browsers, flash & friends)

- Probably suitable for an RFC @ IETF

Basics

- Serialization to JSON (optionally YAML/XML)

- GET (batch/hierarchical)

- PUT (batch/hierarchical)

- PATCH (json diff content type)

- Support for binary as multipart

Retro-style

- PUT & PATCH -> multipart POST

- Allows for Simple HTML forms

Extensions

- Sort-Order

- Query

- Typing

- Locking

- Versioning

- Essentially: WebDAV + friends but simple

Sample GET

Request:GET /myfolder.json HTTP/1.1

Response:{"createdBy" : "uncled","name" : "myfolder","id" : "50d9317a-3a95-401a-9638-333a0dbf04bb""type" : "folder"}

Sample GET 2

Request:GET /myfolder.4.json HTTP/1.1

Response:{"createdBy" : "uncled","name" : "myfolder","id" : "50d9317a-3a95-401a-9638-333a0dbf04bb""type" : "folder"

"child1" : { "grandchild11" : { "depth3" : { "depth4 : { ... } } } }}

Sample PUT

PUT /myfolder HTTP/1.1

{"createdBy" : "uncled","name" : "myfolder","id" : "50d9317a-3a95-401a-9638-333a0dbf04bb""type" : "folder"

"child1" : { "grandchild11" : { "depth3" : { "depth4 : { ... } } } }}

Sample PATCH

PATCH /myfolder HTTP/1.1

+newdoc : { "type" : "document", "createdBy" : "me" }-olddoc>movingdoc : /otherfolder/mydocument^lastModifiedBy : "me"

PATCH diff ops

"+":create Node/Property/Resource

"^":update Node/Property/Resource

"-":delete Node/Property/Resource

">":move Node/Property/Resource

PATCH diff

diff ::= membersmembers ::= pair | pairspair ::= key [ " : " value ]pairs ::= pair line-end pair | pair line-end pairsline-end ::= "\r\n" | "\n" | "\r"key ::= opchar idopchar ::= "+" | "^" | "-" | ">"id ::= * identification url (path | id) *value ::= value+ | value- | value^ | value>value+ ::= * a JSON object *value- ::= ""value^ ::= * any JSON value except JSON object *value> ::= id

POST wrap 1

POST /myfolder/my.gif HTTP/1.1Content-Type: multipart/form-data; boundary=---------21447684891610979728262467120Content-Length: 123

---------21447684891610979728262467120Content-Disposition: form-data; name="data"Content-Type: image/gif

GIF89a...................!.......,............s...f.; ---------21447684891610979728262467120Content-Disposition: form-data; name="jsop:diff"Content-Type: text/plain

^lastModifiedBy : "me"+exif { cameraMake : "Apple", cameraModel : "Apple" }---------21447684891610979728262467120--

POST wrap 2

POST /myfolder/my.gif HTTP/1.1Content-Type: multipart/form-data; boundary=---------21447684891610979728262467120Content-Length: 123

---------21447684891610979728262467120Content-Disposition: form-data; name="exif/cameraMake"Content-Type: text/plain

Another Vendor---------21447684891610979728262467120--

POST wrap 3

POST /myfolder/ HTTP/1.1Content-Type: multipart/form-data; boundary=---------21447684891610979728262467120Content-Length: 123

---------21447684891610979728262467120Content-Disposition: form-data; name=""; filename="my.gif"Content-Type: image/gif

GIF89a...................!.......,............s...f.; ---------21447684891610979728262467120Content-Disposition: form-data; name=""; filename="yo.gif"Content-Type: image/gif

GIF89a...................!.......,............s...f.; ---------21447684891610979728262467120 --

JCR modeling tips

thanks.

Recommended