PHPCR - Standard Content Repository for PHP

  • 2,803 views
Uploaded on

Content repositories session from the PHP track at FrOSCon 2011.

Content repositories session from the PHP track at FrOSCon 2011.

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,803
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
14
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. PHPCRStandard Interface for Content Repositories
  • 2. http://bergie.iki.fihenri.bergius@iki.fi @bergie
  • 3. github.com/bergie/noflogithub.com/bergie/phpflo
  • 4. Same API, multiple repositories● Jackalope ● Midgard ● Apache Jackrabbit: ● GObject-oriented Java-based repository repository library server, accessible accessible through through WebDAV PHP extension ● Doctrine: pure-PHP ● Python, JavaScript, repository library Java, ...● github.com/jackalope/jackalope ● github.com/bergie/phpcr-midgard2
  • 5. Why use Midgard?
  • 6. Developers write against a single APIImplementations can be chosen based on deployment needs
  • 7. “Products in MySQL, blog entries in CouchDB”
  • 8. Standard: JSR-283Day Management AG, Switzerland 10-August-2009Release noteProduct: Specification for Content Repository for Java(tm) Technology API 2.0Version: 2.0Type: Full Release----------------------------------------------------------------------This package consists of the following components:1) Specification documents: spec/2) Applicable Licenses: license/3) API Source code: src/4) pre-built API .jar-file: lib/5) generated javadoc: docs/For questions or comments feel free to use jsr-283-comments@jcp.orgFurther information about JSR 283 can be found athttp://www.jcp.org/en/jsr/detail?id=283
  • 9. Content Management Interoperability Services● JCR-like API using HTTP and Atom (or SOAP)● Quite complicated, but language-agnostic● OASIS spec since 2010● Good implementations in enterprise document management systems● Proponents include Microsoft, Nuxeo and Alfresco
  • 10. The next version of JCR will also include PHP scripting bindings, i.e. PHPCR
  • 11. PHPCR is a collection of interfaces
  • 12. ...and API testsbergie@AirDrone:~/Projects/phpcr-midgard2/api-test$ phpunitPHPUnit 3.5.5 by Sebastian Bergmann.I.IIISSSSSSSSS..S.............E..ESSSSSSSSSSSSSSSSSSSSSSSSEE 60 / 552.........FFSSSSSSSSSSSSS.....E...........................I.. 120 / 552EEI...EEEE......F..........F..........F..........F.......... 180 / 552F..........F..........F......................F..........F... 240 / 552.......F..........F..........F........ES.............S...... 300 / 552....F.EE..I...E..II......F..............................I... 360 / 552..........E.I..I.........I............................E.E... 420 / 552...EE.............................E......................... 480 / 552........I....................E.EFEF...I.I.IEI..FEE.FF.FFF..F 540 / 552S.....SSSSSSTime: 03:53, Memory: 148.50MbThere were 27 errors:1) PHPCRTestsQueryQueryManagerTest::testGetQueryPHPCRQueryInvalidQueryException: Unsupported xpath language/home/bergie/Projects/phpcr-midgard2/src/Midgard2CR/Query/QueryManager.php:24/home/bergie/Projects/phpcr-midgard2/src/Midgard2CR/Query/QueryManager.php:62/home/bergie/Projects/phpcr-midgard2/api-test/suite/tests/06_Query/QueryManagerTest.php:37...FAILURES!Tests: 536, Assertions: 2331, Failures: 25, Errors: 27, Incomplete: 18, Skipped: 56.
  • 13. Repository capabilities● Tree access ● XML import and● Access by UUID export● Workspaces ● Permissions● Versioning ● Capability discovery● Multi-value properties ● Observation● Queries: SQL2, QOM ● Locking & Transactions
  • 14. “Simple stuff should be easy, but complex stuff  should still be possible”
  • 15. In PHPCR, all content is stored in a tree of nodes Nodes have a name, a type, and a set of properties Nodes can also have child nodes
  • 16. Including PHPCR in your application● PHP 5.3 namespaced code● Use PSR-0 standard autoloader
  • 17. Connecting to a repository: Midgard
  • 18. Connecting to a repository: Jackrabbit● Start Jackrabbit: $ java -jar jackrabbit-standalone-2.2.5.jar● Connect to repository:
  • 19. This is the only repository-specific part
  • 20. Working with the tree
  • 21. About Node types● Node types determine what properties and what kind of child nodes a node can have● Some built-in types: nt:file, nt:folder, nt:resource, nt:unstructured● Node types can be amended with “mixin” types, like mix:lastModified, mix:language● Most repositories allow you to define your own types● Recommendation: Start with nt:unstructured, add more strict definitions when you know your data model
  • 22. Queries: SQL2
  • 23. Queries: Query Object Model
  • 24. Versioning: enable
  • 25. Versioning: commit
  • 26. Versioning: restore
  • 27. Export and import
  • 28. Export and import
  • 29. Some projects looking at PHPCR
  • 30. Some projects looking at PHPCR
  • 31. Questions?henri.bergius@iki.fi @bergie