SlideShare ist ein Scribd-Unternehmen logo
1 von 23
Downloaden Sie, um offline zu lesen
A Content Repository for TYPO3 5.0
TYPO3 Developer Days 25.-29.04.2007, Dietikon / Switzerland
Special guest: David Nuescheler
  Responsible for the technology strategy and ongoing product
  development at Day. He joined Day in 1994

  Specification lead on JSR 170 and JSR 283.

  Also a committer on the Apache Jackrabbit Project and a
  member of the Apache Software Foundation

  He will now tell us more about JCR




                                          Inspiring people to
                                          share
Why a CR for TYPO3?
  Flexible and extensible data structure

  Object based storage and retrieval

  Combines advantages of navigational and relational databases

  Security can be enforced on a higher level

  Cleaner and easier to use for the developer




                                           Inspiring people to
                                           share
More reasons for a CR
  Data source abstraction instead of database abstraction

  Data can be stored in different ways, a database is only one of
  them

  Due to the higher level of abstraction, database specific
  functions and specialties like transactions, stored procedures,
  partitioning ... can be used on the CR implementation level

  Depending on the CR implementation the speed gain for read
  access to the content tree can be immense


                                            Inspiring people to
                                           share
The Jackrabbit “shortcut”
  As there exists no PHP-based CR implementation, we looked for
  alternatives

  Jackrabbit is the JSR 170 reference implementation, providing
  all required and optional features of the specification

  Using it from PHP is possible with the PHP-Java-Bridge

  Provides a way to write and test PHP-based unit tests that are
  needed for implementing a pure PHP-based CR

    are we crazy?


                                          Inspiring people to
                                          share
A native PHP Content Repository
  TYPO3 5.0 will still run completely without Java - by accessing
  the PHP-based TYPO3 CR, based on the APIs defined in JSR 170
  and JSR 283

  The goal: A flexible and powerful content repository for TYPO3
  written in PHP

  We are not crazy

    It is not impossible

    Maybe not all of the standard will be implemented – but don’t
    tell anyone...
                                           Inspiring people to
                                           share
Current status
  phpCR: The JSR-170 API exists as PHP interfaces, thanks to
  Travis Swicegood

  The Jackrabbit bridge has proven to be a working setup,
  although it does not handle the full API yet - maybe it never
  will

  We have a large set of unit tests available for the
  phpCRJackrabbit package

  A first batch of those tests has been generalized to be usable
  for any implementation of the phpCR interfaces

                                            Inspiring people to
                                            share
Missing things
  A domain model for the CMS part of the project

  A way for defining node types based on that model




                                          Inspiring people to
                                          share
Defining the CMS domain model
  We need to focus on the pure domain of the CMS

  A first step is to find the common set of objects that form the
  domain of content management

  So, let’s see...




                                           Inspiring people to
                                          share
Defining the CMS domain model
  Page                                  Plugin
                  Sitemap                                  Content
                                                           Element

Page
 Tree         System                Category
              Folder                                   Backend
                                                        Module
   Template
    Record                                     Content
                        orks pace              Element
                       W

                                                 Inspiring people to
                                                 share
A possible hierarchy of things
  Assignment: try to come up with a hierarchy of objects that
  represent the content we currently have - and trim where
  possible

  You have 10 minutes...




                                          Inspiring people to
                                          share
Node types
  To make good use of a CR, one needs to provide useful node
  types

  A node type specifies

    allowed and/or required sub nodes to a node

    allowed and/or required properties of a node

    supertypes of a node, i.e. inheritance




                                             Inspiring people to
                                             share
The node types of magnolia
         <nt:hierarchyNode>                           <nt:hierarchyNode>
          mgnl:contentNode                               mgnl:content




                                                               <nt:hierarchyNode>
                                                                  mgnl:reserve
         <nt:hierarchyNode>
                                        <nt:base>
         <mix:versionable>
                                            *
           mgnl:metaData




    <nt:resource>      <mgnl:content>       <mgnl:content>        <mgnl:content>
    mgnl:resource         mgnl:user            mgnl:role            mgnl:group




                                                                All nodes can
                                                               have arbitrary
                                                                properties...




                                                             Inspiring people to
                                                             share
Our node types?
  The node types should (partly) reflect the domain model

  Specifically the parts of the domain model, that need to be
  persisted

  Coming up with a reasonable system of node types is not trivial

  We need to further work on the domain model, before steps
  make sense...




                                          Inspiring people to
                                          share
CR configuration from code
  Currently MySQL tables are created when installing an extension

  The definition is a plain SQL file

  Further data comes from $TCA as defined in ext_tables.php and/
  or tca.php

  Automation needs to stay around, of course

  We need to create node types instead of tables and fields




                                          Inspiring people to
                                          share
CR configuration from code
  Goals

    Get rid of multiple places for defining things

    Make it as transparent as possible

  Create node types based on PHP objects

    Use reflection to gather information about the objects

    Create node type definition accordingly

    What objects need a corresponding node type?

                                           Inspiring people to
                                           share
Changes to existing node types
  Changing and removing a node type is possible

  But what about nodes type being in use?

  Jackrabbit currently rejects nontrivial changes

  We will probably only change node types on explicit request

  Changing a node type may fail if the result would be
  inconsistent repository content

  Existing data needs to be removed before a node type can be
  removed

                                            Inspiring people to
                                            share
CR configuration from code
  JSR 170 had no defined API for registering node types

  JSR 283 will have it, and we will use that by

    adding it to the phpCR interfaces

    adding some wrapper for Jackrabbit

  An intermediate step is the generation of a file containg the
  node type definition in Compact Namespace and Node Type
  Definition (CND) notation



                                            Inspiring people to
                                            share
Storing actual content
  One way is to store e.g. the text of a text content element as we
  do today, i.e. as a string

  What about links in the text?

    To be aware of links, we’d need to parse it and maintain a
    reference index

    A possible syntax:
    <a href=quot;${link:{uuid:{522c0cac-7d67-4324-869f-
    7553426f95b0},repository:{website},workspace:{default},path:{/
    help/user-mailing-list}}}quot;>some link</a>

                                           Inspiring people to
                                           share
Storing actual content
  An alternative could be to break up the content in smaller nodes

  A working example is the DOM tree of a HTML document

  Advantages

    No need to have a seperate reference index

    Queries for links always easily possible

  Disadvantages

    Adds quite some complexity

                                           Inspiring people to
                                           share
Open tasks & next steps



  An awful lot of them...




                            Inspiring people to
                            share
Thanks for listening
    Karsten Dambekalns <karsten@typo3.org>




                                             Inspiring people to
                                             share
A Content Repository for TYPO3 5.0

Weitere ähnliche Inhalte

Andere mochten auch

090313seminar Talk About Salesforce For Google Apps
090313seminar Talk About Salesforce For Google Apps090313seminar Talk About Salesforce For Google Apps
090313seminar Talk About Salesforce For Google AppsKohei Nishikawa
 
01 Le Concept de la Stratégie de Spécialisation Intelligente
01   Le Concept de la Stratégie de Spécialisation Intelligente01   Le Concept de la Stratégie de Spécialisation Intelligente
01 Le Concept de la Stratégie de Spécialisation IntelligenteMohamed Larbi BEN YOUNES
 
Kcic boot camp oct 2011 idea to implementation 2011
Kcic boot camp oct 2011 idea to implementation 2011Kcic boot camp oct 2011 idea to implementation 2011
Kcic boot camp oct 2011 idea to implementation 2011Hack the Hood
 
Cross-border learning with eTwinning
Cross-border learning with   eTwinningCross-border learning with   eTwinning
Cross-border learning with eTwinningRositsa Dimova
 
Polska Mieszkaniowka Okiem Koali
Polska Mieszkaniowka Okiem KoaliPolska Mieszkaniowka Okiem Koali
Polska Mieszkaniowka Okiem Koalilukasz k
 
Dynamic Fractionation in Radiotherapy
Dynamic Fractionation in RadiotherapyDynamic Fractionation in Radiotherapy
Dynamic Fractionation in Radiotherapyajjitchandran
 
April 19 social marketing & yr business
April 19 social marketing & yr businessApril 19 social marketing & yr business
April 19 social marketing & yr businessHack the Hood
 
02 - La Stratégie de Spécialisation Intelligente : Vecteur de Croissance des ...
02 - La Stratégie de Spécialisation Intelligente : Vecteur de Croissance des ...02 - La Stratégie de Spécialisation Intelligente : Vecteur de Croissance des ...
02 - La Stratégie de Spécialisation Intelligente : Vecteur de Croissance des ...Mohamed Larbi BEN YOUNES
 
03 - Le Chemin de l’Union Européenne vers la Spécialisation Intelligente
03 - Le Chemin de l’Union Européenne vers la Spécialisation Intelligente03 - Le Chemin de l’Union Européenne vers la Spécialisation Intelligente
03 - Le Chemin de l’Union Européenne vers la Spécialisation IntelligenteMohamed Larbi BEN YOUNES
 
Eat Forward (Not Backward): Podcast Production Process
Eat Forward (Not Backward): Podcast Production ProcessEat Forward (Not Backward): Podcast Production Process
Eat Forward (Not Backward): Podcast Production ProcessAntia G. Ben
 
Endangered species in spain map
Endangered species in spain mapEndangered species in spain map
Endangered species in spain mapRositsa Dimova
 
Manga Madness!!! Graphic Fiction For Teens
Manga Madness!!! Graphic Fiction For TeensManga Madness!!! Graphic Fiction For Teens
Manga Madness!!! Graphic Fiction For Teenslibspryte
 
Demystifying share point site definitions SharePoint 2007
Demystifying share point site definitions SharePoint 2007Demystifying share point site definitions SharePoint 2007
Demystifying share point site definitions SharePoint 2007Marwan Tarek
 
ABCs Of Roomparenting 2
ABCs Of Roomparenting 2ABCs Of Roomparenting 2
ABCs Of Roomparenting 2Qlubb Info
 

Andere mochten auch (20)

090313seminar Talk About Salesforce For Google Apps
090313seminar Talk About Salesforce For Google Apps090313seminar Talk About Salesforce For Google Apps
090313seminar Talk About Salesforce For Google Apps
 
01 Le Concept de la Stratégie de Spécialisation Intelligente
01   Le Concept de la Stratégie de Spécialisation Intelligente01   Le Concept de la Stratégie de Spécialisation Intelligente
01 Le Concept de la Stratégie de Spécialisation Intelligente
 
Aaa
AaaAaa
Aaa
 
أنشطة مصلحة النظافة
أنشطة مصلحة النظافةأنشطة مصلحة النظافة
أنشطة مصلحة النظافة
 
Kcic boot camp oct 2011 idea to implementation 2011
Kcic boot camp oct 2011 idea to implementation 2011Kcic boot camp oct 2011 idea to implementation 2011
Kcic boot camp oct 2011 idea to implementation 2011
 
Cross-border learning with eTwinning
Cross-border learning with   eTwinningCross-border learning with   eTwinning
Cross-border learning with eTwinning
 
Polska Mieszkaniowka Okiem Koali
Polska Mieszkaniowka Okiem KoaliPolska Mieszkaniowka Okiem Koali
Polska Mieszkaniowka Okiem Koali
 
Brown beer en
Brown beer enBrown beer en
Brown beer en
 
Dynamic Fractionation in Radiotherapy
Dynamic Fractionation in RadiotherapyDynamic Fractionation in Radiotherapy
Dynamic Fractionation in Radiotherapy
 
April 19 social marketing & yr business
April 19 social marketing & yr businessApril 19 social marketing & yr business
April 19 social marketing & yr business
 
Madagascar
MadagascarMadagascar
Madagascar
 
Inergy
InergyInergy
Inergy
 
02 - La Stratégie de Spécialisation Intelligente : Vecteur de Croissance des ...
02 - La Stratégie de Spécialisation Intelligente : Vecteur de Croissance des ...02 - La Stratégie de Spécialisation Intelligente : Vecteur de Croissance des ...
02 - La Stratégie de Spécialisation Intelligente : Vecteur de Croissance des ...
 
03 - Le Chemin de l’Union Européenne vers la Spécialisation Intelligente
03 - Le Chemin de l’Union Européenne vers la Spécialisation Intelligente03 - Le Chemin de l’Union Européenne vers la Spécialisation Intelligente
03 - Le Chemin de l’Union Européenne vers la Spécialisation Intelligente
 
Eat Forward (Not Backward): Podcast Production Process
Eat Forward (Not Backward): Podcast Production ProcessEat Forward (Not Backward): Podcast Production Process
Eat Forward (Not Backward): Podcast Production Process
 
Endangered species in spain map
Endangered species in spain mapEndangered species in spain map
Endangered species in spain map
 
Manga Madness!!! Graphic Fiction For Teens
Manga Madness!!! Graphic Fiction For TeensManga Madness!!! Graphic Fiction For Teens
Manga Madness!!! Graphic Fiction For Teens
 
Natural attractions
Natural attractionsNatural attractions
Natural attractions
 
Demystifying share point site definitions SharePoint 2007
Demystifying share point site definitions SharePoint 2007Demystifying share point site definitions SharePoint 2007
Demystifying share point site definitions SharePoint 2007
 
ABCs Of Roomparenting 2
ABCs Of Roomparenting 2ABCs Of Roomparenting 2
ABCs Of Roomparenting 2
 

Ähnlich wie A Content Repository for TYPO3 5.0

Implementing a JSR-283 Content Repository in PHP
Implementing a JSR-283 Content Repository in PHPImplementing a JSR-283 Content Repository in PHP
Implementing a JSR-283 Content Repository in PHPKarsten Dambekalns
 
Implementing a JSR-283 Content Repository in PHP
Implementing a JSR-283 Content Repository in PHPImplementing a JSR-283 Content Repository in PHP
Implementing a JSR-283 Content Repository in PHPKarsten Dambekalns
 
Introduction to the Semantic Web
Introduction to the Semantic WebIntroduction to the Semantic Web
Introduction to the Semantic WebNuxeo
 
Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Henry S
 
Serialization in .NET
Serialization in .NETSerialization in .NET
Serialization in .NETAbhi Arya
 
Decoupling Content Management with Create.js and PHPCR
Decoupling Content Management with Create.js and PHPCRDecoupling Content Management with Create.js and PHPCR
Decoupling Content Management with Create.js and PHPCRHenri Bergius
 
Orchestrating the Intelligent Web with Apache Mahout
Orchestrating the Intelligent Web with Apache MahoutOrchestrating the Intelligent Web with Apache Mahout
Orchestrating the Intelligent Web with Apache Mahoutaneeshabakharia
 
Construction Techniques For Domain Specific Languages
Construction Techniques For Domain Specific LanguagesConstruction Techniques For Domain Specific Languages
Construction Techniques For Domain Specific LanguagesThoughtWorks
 
Content Management That Won't Rot Your Brain
Content Management That Won't Rot Your BrainContent Management That Won't Rot Your Brain
Content Management That Won't Rot Your BrainSean Cribbs
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentationOleksii Usyk
 
The current architecture of TYPO3 5.0
The current architecture of TYPO3 5.0The current architecture of TYPO3 5.0
The current architecture of TYPO3 5.0Robert Lemke
 
10 Reasons why you should be using features for your Drupal project
10 Reasons why you should be using features for your Drupal project10 Reasons why you should be using features for your Drupal project
10 Reasons why you should be using features for your Drupal projectWunderkraut
 
Document Based Data Modeling Technique
Document Based Data Modeling TechniqueDocument Based Data Modeling Technique
Document Based Data Modeling TechniqueCarmen Sanborn
 
Drupal for Webmasters by Brett Baker
Drupal for Webmasters by Brett BakerDrupal for Webmasters by Brett Baker
Drupal for Webmasters by Brett Bakerwebfinearts
 

Ähnlich wie A Content Repository for TYPO3 5.0 (20)

Implementing a JSR-283 Content Repository in PHP
Implementing a JSR-283 Content Repository in PHPImplementing a JSR-283 Content Repository in PHP
Implementing a JSR-283 Content Repository in PHP
 
Implementing a JSR-283 Content Repository in PHP
Implementing a JSR-283 Content Repository in PHPImplementing a JSR-283 Content Repository in PHP
Implementing a JSR-283 Content Repository in PHP
 
Introduction to the Semantic Web
Introduction to the Semantic WebIntroduction to the Semantic Web
Introduction to the Semantic Web
 
Introduction to Kubernetes
Introduction to KubernetesIntroduction to Kubernetes
Introduction to Kubernetes
 
Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1Code for Startup MVP (Ruby on Rails) Session 1
Code for Startup MVP (Ruby on Rails) Session 1
 
Serialization in .NET
Serialization in .NETSerialization in .NET
Serialization in .NET
 
Decoupling Content Management with Create.js and PHPCR
Decoupling Content Management with Create.js and PHPCRDecoupling Content Management with Create.js and PHPCR
Decoupling Content Management with Create.js and PHPCR
 
Ruby on Rail Training in Bangalore by myTectra
Ruby on Rail Training in Bangalore by myTectraRuby on Rail Training in Bangalore by myTectra
Ruby on Rail Training in Bangalore by myTectra
 
Ruby on Rail Training in Bangalore by myTectra
Ruby on Rail Training in Bangalore by myTectraRuby on Rail Training in Bangalore by myTectra
Ruby on Rail Training in Bangalore by myTectra
 
Orchestrating the Intelligent Web with Apache Mahout
Orchestrating the Intelligent Web with Apache MahoutOrchestrating the Intelligent Web with Apache Mahout
Orchestrating the Intelligent Web with Apache Mahout
 
Open source Technology
Open source TechnologyOpen source Technology
Open source Technology
 
Construction Techniques For Domain Specific Languages
Construction Techniques For Domain Specific LanguagesConstruction Techniques For Domain Specific Languages
Construction Techniques For Domain Specific Languages
 
Content Management That Won't Rot Your Brain
Content Management That Won't Rot Your BrainContent Management That Won't Rot Your Brain
Content Management That Won't Rot Your Brain
 
Spring data presentation
Spring data presentationSpring data presentation
Spring data presentation
 
The current architecture of TYPO3 5.0
The current architecture of TYPO3 5.0The current architecture of TYPO3 5.0
The current architecture of TYPO3 5.0
 
10 Reasons why you should be using features for your Drupal project
10 Reasons why you should be using features for your Drupal project10 Reasons why you should be using features for your Drupal project
10 Reasons why you should be using features for your Drupal project
 
Document Based Data Modeling Technique
Document Based Data Modeling TechniqueDocument Based Data Modeling Technique
Document Based Data Modeling Technique
 
Objective-C
Objective-CObjective-C
Objective-C
 
Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)Apache Drill (ver. 0.2)
Apache Drill (ver. 0.2)
 
Drupal for Webmasters by Brett Baker
Drupal for Webmasters by Brett BakerDrupal for Webmasters by Brett Baker
Drupal for Webmasters by Brett Baker
 

Mehr von Karsten Dambekalns

The Perfect Neos Project Setup
The Perfect Neos Project SetupThe Perfect Neos Project Setup
The Perfect Neos Project SetupKarsten Dambekalns
 
Sawubona! Content Dimensions with Neos
Sawubona! Content Dimensions with NeosSawubona! Content Dimensions with Neos
Sawubona! Content Dimensions with NeosKarsten Dambekalns
 
Deploying TYPO3 Neos websites using Surf
Deploying TYPO3 Neos websites using SurfDeploying TYPO3 Neos websites using Surf
Deploying TYPO3 Neos websites using SurfKarsten Dambekalns
 
Profiling TYPO3 Flow Applications
Profiling TYPO3 Flow ApplicationsProfiling TYPO3 Flow Applications
Profiling TYPO3 Flow ApplicationsKarsten Dambekalns
 
Using Document Databases with TYPO3 Flow
Using Document Databases with TYPO3 FlowUsing Document Databases with TYPO3 Flow
Using Document Databases with TYPO3 FlowKarsten Dambekalns
 
How Git and Gerrit make you more productive
How Git and Gerrit make you more productiveHow Git and Gerrit make you more productive
How Git and Gerrit make you more productiveKarsten Dambekalns
 
The agile future of a ponderous project
The agile future of a ponderous projectThe agile future of a ponderous project
The agile future of a ponderous projectKarsten Dambekalns
 
How Domain-Driven Design helps you to migrate into the future
How Domain-Driven Design helps you to migrate into the futureHow Domain-Driven Design helps you to migrate into the future
How Domain-Driven Design helps you to migrate into the futureKarsten Dambekalns
 
Content Repository, Versioning and Workspaces in TYPO3 Phoenix
Content Repository, Versioning and Workspaces in TYPO3 PhoenixContent Repository, Versioning and Workspaces in TYPO3 Phoenix
Content Repository, Versioning and Workspaces in TYPO3 PhoenixKarsten Dambekalns
 
Transparent Object Persistence (within FLOW3)
Transparent Object Persistence (within FLOW3)Transparent Object Persistence (within FLOW3)
Transparent Object Persistence (within FLOW3)Karsten Dambekalns
 
Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Karsten Dambekalns
 
Knowledge Management in der TYPO3 Community
Knowledge Management in der TYPO3 CommunityKnowledge Management in der TYPO3 Community
Knowledge Management in der TYPO3 CommunityKarsten Dambekalns
 
Introduction to Source Code Management
Introduction to Source Code ManagementIntroduction to Source Code Management
Introduction to Source Code ManagementKarsten Dambekalns
 
It Works! Presenting DBAL use in real life
It Works! Presenting DBAL use in real lifeIt Works! Presenting DBAL use in real life
It Works! Presenting DBAL use in real lifeKarsten Dambekalns
 

Mehr von Karsten Dambekalns (20)

The Perfect Neos Project Setup
The Perfect Neos Project SetupThe Perfect Neos Project Setup
The Perfect Neos Project Setup
 
Sawubona! Content Dimensions with Neos
Sawubona! Content Dimensions with NeosSawubona! Content Dimensions with Neos
Sawubona! Content Dimensions with Neos
 
Deploying TYPO3 Neos websites using Surf
Deploying TYPO3 Neos websites using SurfDeploying TYPO3 Neos websites using Surf
Deploying TYPO3 Neos websites using Surf
 
Profiling TYPO3 Flow Applications
Profiling TYPO3 Flow ApplicationsProfiling TYPO3 Flow Applications
Profiling TYPO3 Flow Applications
 
Using Document Databases with TYPO3 Flow
Using Document Databases with TYPO3 FlowUsing Document Databases with TYPO3 Flow
Using Document Databases with TYPO3 Flow
 
i18n and L10n in TYPO3 Flow
i18n and L10n in TYPO3 Flowi18n and L10n in TYPO3 Flow
i18n and L10n in TYPO3 Flow
 
FLOW3-Workshop F3X12
FLOW3-Workshop F3X12FLOW3-Workshop F3X12
FLOW3-Workshop F3X12
 
Doctrine in FLOW3
Doctrine in FLOW3Doctrine in FLOW3
Doctrine in FLOW3
 
How Git and Gerrit make you more productive
How Git and Gerrit make you more productiveHow Git and Gerrit make you more productive
How Git and Gerrit make you more productive
 
The agile future of a ponderous project
The agile future of a ponderous projectThe agile future of a ponderous project
The agile future of a ponderous project
 
How Domain-Driven Design helps you to migrate into the future
How Domain-Driven Design helps you to migrate into the futureHow Domain-Driven Design helps you to migrate into the future
How Domain-Driven Design helps you to migrate into the future
 
Content Repository, Versioning and Workspaces in TYPO3 Phoenix
Content Repository, Versioning and Workspaces in TYPO3 PhoenixContent Repository, Versioning and Workspaces in TYPO3 Phoenix
Content Repository, Versioning and Workspaces in TYPO3 Phoenix
 
Transparent Object Persistence (within FLOW3)
Transparent Object Persistence (within FLOW3)Transparent Object Persistence (within FLOW3)
Transparent Object Persistence (within FLOW3)
 
JavaScript for PHP Developers
JavaScript for PHP DevelopersJavaScript for PHP Developers
JavaScript for PHP Developers
 
Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3Transparent Object Persistence with FLOW3
Transparent Object Persistence with FLOW3
 
TDD (with FLOW3)
TDD (with FLOW3)TDD (with FLOW3)
TDD (with FLOW3)
 
Knowledge Management in der TYPO3 Community
Knowledge Management in der TYPO3 CommunityKnowledge Management in der TYPO3 Community
Knowledge Management in der TYPO3 Community
 
Unicode & PHP6
Unicode & PHP6Unicode & PHP6
Unicode & PHP6
 
Introduction to Source Code Management
Introduction to Source Code ManagementIntroduction to Source Code Management
Introduction to Source Code Management
 
It Works! Presenting DBAL use in real life
It Works! Presenting DBAL use in real lifeIt Works! Presenting DBAL use in real life
It Works! Presenting DBAL use in real life
 

Kürzlich hochgeladen

Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1DianaGray10
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Brian Pichman
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureEric D. Schabell
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.YounusS2
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8DianaGray10
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Adtran
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemAsko Soukka
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6DianaGray10
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXTarek Kalaji
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfinfogdgmi
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarPrecisely
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationIES VE
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxGDSC PJATK
 

Kürzlich hochgeladen (20)

20150722 - AGV
20150722 - AGV20150722 - AGV
20150722 - AGV
 
Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1Secure your environment with UiPath and CyberArk technologies - Session 1
Secure your environment with UiPath and CyberArk technologies - Session 1
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )Building Your Own AI Instance (TBLC AI )
Building Your Own AI Instance (TBLC AI )
 
OpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability AdventureOpenShift Commons Paris - Choose Your Own Observability Adventure
OpenShift Commons Paris - Choose Your Own Observability Adventure
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.Basic Building Blocks of Internet of Things.
Basic Building Blocks of Internet of Things.
 
201610817 - edge part1
201610817 - edge part1201610817 - edge part1
201610817 - edge part1
 
UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8UiPath Studio Web workshop series - Day 8
UiPath Studio Web workshop series - Day 8
 
Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™Meet the new FSP 3000 M-Flex800™
Meet the new FSP 3000 M-Flex800™
 
Bird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystemBird eye's view on Camunda open source ecosystem
Bird eye's view on Camunda open source ecosystem
 
UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6UiPath Studio Web workshop series - Day 6
UiPath Studio Web workshop series - Day 6
 
VoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBXVoIP Service and Marketing using Odoo and Asterisk PBX
VoIP Service and Marketing using Odoo and Asterisk PBX
 
Videogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdfVideogame localization & technology_ how to enhance the power of translation.pdf
Videogame localization & technology_ how to enhance the power of translation.pdf
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
AI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity WebinarAI You Can Trust - Ensuring Success with Data Integrity Webinar
AI You Can Trust - Ensuring Success with Data Integrity Webinar
 
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve DecarbonizationUsing IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
Using IESVE for Loads, Sizing and Heat Pump Modeling to Achieve Decarbonization
 
Cybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptxCybersecurity Workshop #1.pptx
Cybersecurity Workshop #1.pptx
 

A Content Repository for TYPO3 5.0

  • 1. A Content Repository for TYPO3 5.0 TYPO3 Developer Days 25.-29.04.2007, Dietikon / Switzerland
  • 2. Special guest: David Nuescheler Responsible for the technology strategy and ongoing product development at Day. He joined Day in 1994 Specification lead on JSR 170 and JSR 283. Also a committer on the Apache Jackrabbit Project and a member of the Apache Software Foundation He will now tell us more about JCR Inspiring people to share
  • 3. Why a CR for TYPO3? Flexible and extensible data structure Object based storage and retrieval Combines advantages of navigational and relational databases Security can be enforced on a higher level Cleaner and easier to use for the developer Inspiring people to share
  • 4. More reasons for a CR Data source abstraction instead of database abstraction Data can be stored in different ways, a database is only one of them Due to the higher level of abstraction, database specific functions and specialties like transactions, stored procedures, partitioning ... can be used on the CR implementation level Depending on the CR implementation the speed gain for read access to the content tree can be immense Inspiring people to share
  • 5. The Jackrabbit “shortcut” As there exists no PHP-based CR implementation, we looked for alternatives Jackrabbit is the JSR 170 reference implementation, providing all required and optional features of the specification Using it from PHP is possible with the PHP-Java-Bridge Provides a way to write and test PHP-based unit tests that are needed for implementing a pure PHP-based CR are we crazy? Inspiring people to share
  • 6. A native PHP Content Repository TYPO3 5.0 will still run completely without Java - by accessing the PHP-based TYPO3 CR, based on the APIs defined in JSR 170 and JSR 283 The goal: A flexible and powerful content repository for TYPO3 written in PHP We are not crazy It is not impossible Maybe not all of the standard will be implemented – but don’t tell anyone... Inspiring people to share
  • 7. Current status phpCR: The JSR-170 API exists as PHP interfaces, thanks to Travis Swicegood The Jackrabbit bridge has proven to be a working setup, although it does not handle the full API yet - maybe it never will We have a large set of unit tests available for the phpCRJackrabbit package A first batch of those tests has been generalized to be usable for any implementation of the phpCR interfaces Inspiring people to share
  • 8. Missing things A domain model for the CMS part of the project A way for defining node types based on that model Inspiring people to share
  • 9. Defining the CMS domain model We need to focus on the pure domain of the CMS A first step is to find the common set of objects that form the domain of content management So, let’s see... Inspiring people to share
  • 10. Defining the CMS domain model Page Plugin Sitemap Content Element Page Tree System Category Folder Backend Module Template Record Content orks pace Element W Inspiring people to share
  • 11. A possible hierarchy of things Assignment: try to come up with a hierarchy of objects that represent the content we currently have - and trim where possible You have 10 minutes... Inspiring people to share
  • 12. Node types To make good use of a CR, one needs to provide useful node types A node type specifies allowed and/or required sub nodes to a node allowed and/or required properties of a node supertypes of a node, i.e. inheritance Inspiring people to share
  • 13. The node types of magnolia <nt:hierarchyNode> <nt:hierarchyNode> mgnl:contentNode mgnl:content <nt:hierarchyNode> mgnl:reserve <nt:hierarchyNode> <nt:base> <mix:versionable> * mgnl:metaData <nt:resource> <mgnl:content> <mgnl:content> <mgnl:content> mgnl:resource mgnl:user mgnl:role mgnl:group All nodes can have arbitrary properties... Inspiring people to share
  • 14. Our node types? The node types should (partly) reflect the domain model Specifically the parts of the domain model, that need to be persisted Coming up with a reasonable system of node types is not trivial We need to further work on the domain model, before steps make sense... Inspiring people to share
  • 15. CR configuration from code Currently MySQL tables are created when installing an extension The definition is a plain SQL file Further data comes from $TCA as defined in ext_tables.php and/ or tca.php Automation needs to stay around, of course We need to create node types instead of tables and fields Inspiring people to share
  • 16. CR configuration from code Goals Get rid of multiple places for defining things Make it as transparent as possible Create node types based on PHP objects Use reflection to gather information about the objects Create node type definition accordingly What objects need a corresponding node type? Inspiring people to share
  • 17. Changes to existing node types Changing and removing a node type is possible But what about nodes type being in use? Jackrabbit currently rejects nontrivial changes We will probably only change node types on explicit request Changing a node type may fail if the result would be inconsistent repository content Existing data needs to be removed before a node type can be removed Inspiring people to share
  • 18. CR configuration from code JSR 170 had no defined API for registering node types JSR 283 will have it, and we will use that by adding it to the phpCR interfaces adding some wrapper for Jackrabbit An intermediate step is the generation of a file containg the node type definition in Compact Namespace and Node Type Definition (CND) notation Inspiring people to share
  • 19. Storing actual content One way is to store e.g. the text of a text content element as we do today, i.e. as a string What about links in the text? To be aware of links, we’d need to parse it and maintain a reference index A possible syntax: <a href=quot;${link:{uuid:{522c0cac-7d67-4324-869f- 7553426f95b0},repository:{website},workspace:{default},path:{/ help/user-mailing-list}}}quot;>some link</a> Inspiring people to share
  • 20. Storing actual content An alternative could be to break up the content in smaller nodes A working example is the DOM tree of a HTML document Advantages No need to have a seperate reference index Queries for links always easily possible Disadvantages Adds quite some complexity Inspiring people to share
  • 21. Open tasks & next steps An awful lot of them... Inspiring people to share
  • 22. Thanks for listening Karsten Dambekalns <karsten@typo3.org> Inspiring people to share