Upload
david-nuescheler
View
1.900
Download
3
Embed Size (px)
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.