5.4. Content Type Reference Pages

5.4.1. Content Type Definition Schema

<?xml version="1.0" encoding='utf-8'?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns="http://rhea.redhat.com/schemas/cms/content-types" 
  elementFormDefault="qualified" 
  targetNamespace="http://rhea.redhat.com/schemas/cms/content-types">
  <xs:element name="content-types">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="content-type" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="authoring-kit">                
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="authoring-step" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:attribute name="label" type="label"/>
                        <xs:attribute name="description" type="description"/>
                        <xs:attribute name="component" type="javaClass"/>
                        <xs:attribute name="ordering" type="xs:integer"/>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="createComponent" type="javaClass"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="label" type="label"/>
            <xs:attribute name="description" type="description"/>
            <xs:attribute name="objectType" type="objectType"/>
            <xs:attribute name="classname" type="javaClass"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="javaClass">
    <xs:restriction base="xs:string">
      <xs:maxLength value="200"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="objectType">
    <xs:restriction base="xs:string">
      <xs:maxLength value="100"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="label">
    <xs:restriction base="xs:string">
      <xs:maxLength value="1000"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="description">
    <xs:restriction base="xs:string">
      <xs:maxLength value="4000"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

5.4.2. Content Type Definition Example

The following example XML file defines the Article content type that ships with CMS.

<?xml version="1.0" encoding='utf-8'?>

<ctd:content-types xmlns:ctd="http://rhea.redhat.com/schemas/cms/\
content-types"
                   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://rhea.redhat.com/schemas/cms/\
content-types content-types.xsd">

  <ctd:content-type label="Article"
              description="An article type with image"
               objectType="com.arsdigita.cms.contenttypes.Article"
                classname="com.arsdigita.cms.contenttypes.Article">
   
    <ctd:authoring-kit createComponent="com.arsdigita.cms.ui.authoring.\
PageCreate">
      
      <ctd:authoring-step label="Article Properties"
                    description="Edit the basic article properties"
                      component="com.arsdigita.cms.contenttypes.ui.\
ArticlePropertiesStep" 
                       ordering="1"/>
                          
      <ctd:authoring-step label="Body text"
                    description="Edit the body text"
                      component="com.arsdigita.cms.ui.authoring.TextPageBody"
                       ordering="2" />
                          
      <ctd:authoring-step label="Image"
                    description="Image"
                      component="com.arsdigita.cms.ui.authoring.ArticleImage"
                       ordering="3" />

      <ctd:authoring-step label="Assign categories"
                    description="Assign categories"
                      component="com.arsdigita.cms.ui.authoring.ItemCategories" 
                       ordering="4"/>

      <ctd:authoring-step label="Attach Files"
                    description="Attach Files"
                      component="com.arsdigita.cms.contenttypes.ui.\
FileAttachmentsStep" 
                      ordering="5"/>
    </ctd:authoring-kit>
  </ctd:content-type>
</ctd:content-types>

5.4.3. XML Renderer Rule Definition Schema

<?xml version="1.0" encoding='utf-8'?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" 
              xmlns="http://rhea.redhat.com/schemas/cms/content-types" 
 elementFormDefault="qualified" 
    targetNamespace="http://rhea.redhat.com/schemas/cms/content-types">

  <xs:element name="adapters">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="adapter" minOccurs="0" maxOccurs="unbounded">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="attributes">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="property" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:attribute name="name" type="path"/>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="rule" type="rule"/>
                </xs:complexType>
              </xs:element>
              <xs:element name="associations">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="property" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:attribute name="name" type="path"/>
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                  <xs:attribute name="rule" type="rule"/>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
            <xs:attribute name="objectType" type="objectType"/>
            <xs:attribute name="context" type="javaClass"/>
          </xs:complexType>
        </xs:element>
      </xs:sequence>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="javaClass">
    <xs:restriction base="xs:string">
      <xs:maxLength value="200"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="objectType">
    <xs:restriction base="xs:string">
      <xs:maxLength value="100"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="path">
    <xs:restriction base="xs:string">
      <xs:pattern value="(/\w+)+"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="rule">
    <xs:restriction base="xs:string">
      <xs:enumeration value="include"/>
      <xs:enumeration value="exclude"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

5.4.4. XML Renderer Rule Definition Example

The following example XML file defines the Article content type that ships with CMS.

<?xml version="1.0" encoding="utf-8"?>

<xrd:adapters xmlns:xrd="http://rhea.redhat.com/schemas/waf/\
xml-renderer-rules"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xsi:schemaLocation="http://rhea.redhat.com/schemas/waf/\
xml-renderer-rules xml-renderer-rules.xsd">

  <xrd:adapter objectType="com.arsdigita.cms.Article"
              context="com.arsdigita.cms.dispatcher.SimpleXMLGenerator">

    <xrd:attributes rule="exclude">
      <xrd:property name="/object/id"/>
      <xrd:property name="/object/defaultDomainClass"/>
      <xrd:property name="/object/objectType"/>
      <xrd:property name="/object/displayName"/>
      <xrd:property name="/object/isDeleted"/>
      <xrd:property name="/object/ancestors"/>
      <xrd:property name="/object/version"/>

      <xrd:property name="/object/type/id"/>
      <xrd:property name="/object/type/defaultDomainClass"/>
      <xrd:property name="/object/type/objectType"/>
      <xrd:property name="/object/type/displayName"/>
      <xrd:property name="/object/type/associatedObjectType"/>
      <xrd:property name="/object/type/className"/>
      <xrd:property name="/object/type/isInternal"/>
      <xrd:property name="/object/type/itemFormID"/>

      <xrd:property name="/object/textAsset/id"/>
      <xrd:property name="/object/textAsset/\
defaultDomainClass"/>
      <xrd:property name="/object/textAsset/objectType"/>
      <xrd:property name="/object/textAsset/displayName"/>
      <xrd:property name="/object/textAsset/isDeleted"/>
      <xrd:property name="/object/textAsset/ancestors"/>
      <xrd:property name="/object/textAsset/version"/>
      <xrd:property name="/object/textAsset/name"/>
      <xrd:property name="/object/textAsset/language"/>

      <xrd:property name="/object/imageCaptions/id"/>
      <xrd:property name="/object/imageCaptions/\
defaultDomainClass"/>
      <xrd:property name="/object/imageCaptions/objectType"/>
      <xrd:property name="/object/imageCaptions/displayName"/>
      <xrd:property name="/object/imageCaptions/isDeleted"/>
      <xrd:property name="/object/imageCaptions/ancestors"/>
      <xrd:property name="/object/imageCaptions/version"/>
      <xrd:property name="/object/imageCaptions/name"/>
      <xrd:property name="/object/imageCaptions/language"/>
      <xrd:property name="/object/imageCaptions/imageId"/>
      <xrd:property name="/object/imageCaptions/articleId"/>

      <xrd:property name="/object/imageCaptions/imageAsset/id"/>
      <xrd:property name="/object/imageCaptions/imageAsset/defaultDomainClass"/>
      <xrd:property name="/object/imageCaptions/imageAsset/objectType"/>
      <xrd:property name="/object/imageCaptions/imageAsset/displayName"/>
      <xrd:property name="/object/imageCaptions/imageAsset/isDeleted"/>
      <xrd:property name="/object/imageCaptions/imageAsset/ancestors"/>
      <xrd:property name="/object/imageCaptions/imageAsset/version"/>
      <xrd:property name="/object/imageCaptions/imageAsset/name"/>
      <xrd:property name="/object/imageCaptions/imageAsset/language"/>
      <xrd:property name="/object/imageCaptions/imageAsset/content"/>

      <xrd:property name="/object/imageCaptions/imageAsset/mimeType/\
javaClass"/>
      <xrd:property name="/object/imageCaptions/imageAsset/mimeType/\
objectType"/>

      <xrd:property name="/object/links/id"/>
      <xrd:property name="/object/links/defaultDomainClass"/>
      <xrd:property name="/object/links/objectType"/>
      <xrd:property name="/object/links/displayName"/>
      <xrd:property name="/object/links/isDeleted"/>
      <xrd:property name="/object/links/ancestors"/>
      <xrd:property name="/object/links/version"/>
      <xrd:property name="/object/links/name"/>
      <xrd:property name="/object/links/language"/>

      <xrd:property name="/object/links/targetItem/id"/>
      <xrd:property name="/object/links/targetItem/defaultDomainClass"/>
      <xrd:property name="/object/links/targetItem/objectType"/>
      <xrd:property name="/object/links/targetItem/displayName"/>
      <xrd:property name="/object/links/targetItem/isDeleted"/>
      <xrd:property name="/object/links/targetItem/ancestors"/>
      <xrd:property name="/object/links/targetItem/version"/>

      <xrd:property name="/object/fileAttachments/id"/>
      <xrd:property name="/object/fileAttachments/defaultDomainClass"/>
      <xrd:property name="/object/fileAttachments/objectType"/>
      <xrd:property name="/object/fileAttachments/displayName"/>
      <xrd:property name="/object/fileAttachments/isDeleted"/>
      <xrd:property name="/object/fileAttachments/ancestors"/>
      <xrd:property name="/object/fileAttachments/version"/>
      <xrd:property name="/object/fileAttachments/language"/>
      <xrd:property name="/object/fileAttachments/content"/>

      <xrd:property name="/object/dublinCore/id"/>
      <xrd:property name="/object/dublinCore/defaultDomainClass"/>
      <xrd:property name="/object/dublinCore/objectType"/>
      <xrd:property name="/object/dublinCore/displayName"/>
      <xrd:property name="/object/dublinCore/isDeleted"/>
      <xrd:property name="/object/dublinCore/ancestors"/>
      <xrd:property name="/object/dublinCore/version"/>
      <xrd:property name="/object/dublinCore/name"/>
      <xrd:property name="/object/dublinCore/language"/>
    </xrd:attributes>

    <xrd:associations rule="include">
      <xrd:property name="/object/imageCaptions"/>
      <xrd:property name="/object/imageCaptions/imageAsset"/>
      <xrd:property name="/object/imageCaptions/imageAsset/mimeType"/>
      <xrd:property name="/object/textAsset"/>
      <xrd:property name="/object/locale"/>
      <xrd:property name="/object/type"/>
      <xrd:property name="/object/links"/>
      <xrd:property name="/object/links/targetItem"/>
      <xrd:property name="/object/fileAttachments"/>
      <xrd:property name="/object/dublinCore"/>
    </xrd:associations>

  </xrd:adapter>
</xrd:adapters>

5.4.5. Presentation XML Output Example

  <object oid="[com.arsdigita.cms.contenttypes.Article:{id=58062}]">
    <objectType>com.arsdigita.cms.contenttypes.Article</objectType>
    <name>starting-a-business-in-camden</name>
    <type oid="[com.arsdigita.cms.ContentType:{id=124}]">
      <label>Article</label>
      <description>An article type with image</description>
    </type>
    <launchDate>Thu Jul 03 00:00:00 BST 2003</launchDate>
    <title>Starting a business in Camden</title>
    <lead>Where to find advice if you are thinking of starting a business
          in Camden</lead>
    <textAsset oid="[com.arsdigita.cms.TextAsset:{id=58073}]">
      <content>
        <P><STRONG>Local Business Link - Centa 
                   (Camden Enterprise Agency)</STRONG><BR>
        Business link is a national run service that provides
        straightforward information for all business needs.  It has a
        network of 45 Business Link operators around the UK where
        experienced business advisers provide practical help on day-to-day
        business issues.   The Business Link provider that services Camden
        is CENTA (Camden Enterprise Agency).  Camden Enterprise Agency is
        a local organization in it?s own right, which provides advice, 
        mentoring, training and practical help to small businesses and to 
        people who are planning to start up in business, as well as 24-hour
        online help.  All areas of business are covered, including a set of 
        Business Information Fact sheets. (For more information on the
        National Business Link scheme see our section on National sources
        of advice and support).  </P>
      </content>
    </textAsset>
    <dublinCore 
         oid="[com.arsdigita.london.cms.dublin.DublinCoreItem:{id=58063}]">
      <dcLanguage>en</dcLanguage>
    </dublinCore>
  </object>

5.4.6. Presentation XSLT Example

  <xsl:template match="object[objectType='com.arsdigita.cms.contenttypes\
.Article']" 
                 mode="cms:CT_graphics"
                 name="cms:CT_graphics_com_arsdigita_cms_contenttypes_\
Article" >
    <table width="285" border="0" cellspacing="1" cellpadding="0">
      <tr>
        <td class="contentTitle" align="left" valign="top">
          <xsl:value-of select="./title"/>
        </td>
      </tr>
      <tr>
        <td class="contentSynopsis" align="left" valign="top">
          <xsl:value-of select="./lead"/>
        </td>
      </tr>
      <tr>
        <td class="contentText" align="left" valign="top">
          <br/>
          <xsl:value-of disable-output-escaping="yes" select=\
"./textAsset/content"/>
        </td>
      </tr>
    </table>
  </xsl:templte>

  <xsl:template match="object[objectType='com.arsdigita.cms.contenttypes\
.Article']" 
                 mode="cms:CT_text"
                 name="cms:CT_text_com_arsdigita_cms_contenttypes_Article" >
    <h1 class="mainTitle"><xsl:value-of select="./title"/></h1>
    <span class="synopsis"><xsl:value-of select="./lead" /></span>
    <br/>
    <span class="text"><xsl:value-of disable-output-escaping="yes" \
select="./textAsset/content"/></span>
  </xsl:template>

5.4.7. Complete Directory Structure

$DEV_HOME
 |
 +- src
 |   |
 |   +- bank-note.config
 |   +- bank-note.load
 |   |
 |   +- com
 |   |   |
 |   |   +- example
 |   |       |
 |   |       +- moneymachine
 |   |           |
 |   |           +- cms
 |   |               |
 |   |               +- contenttypes
 |   |                   |
 |   |                   +- BankNote.java
 |   |                   |
 |   |                   +- ui
 |   |                       |
 |   |                       +- BankNoteProperties.java
 |   |                       +- BankNoteForm.java
 |   |                       +- BankNoteStep.java
 |   |
 |   +-  WEB-INF
 |        |
 |        +- content-types
 |        |   |
 |        |   +- com
 |        |       |
 |        |       +- example
 |        |           |
 |        |           +- moneymachine
 |        |               |
 |        |               +- cms
 |        |                   |
 |        |                   +- contenttypes
 |        |                       |
 |        |                       +- BankNote.xml
 |        |
 |        +- traversal-adapters
 |            |
 |            +- com
 |                |
 |                +- example
 |                    |
 |                    +- moneymachine
 |                        |
 |                        +- cms
 |                            |
 |                            +- contenttypes
 |                                |
 |                                +- BankNote.xml
 |
 +- pdl
 |   |
 |   +- com
 |       |
 |       +- example
 |           |
 |           +- moneymachine
 |               |
 |               +- cms
 |                   |
 |                   +- contenttypes
 |                       |
 |                       +- BankNote.pdl
 |
 +- sql
 |   |
 |   +- bank-note
 |       |
 |       +- oracle-se-create.sql
 |       +- postgres-create.sql
 |
 +- web
     |
     +- static
         |
         +- content-types
             |
             +- com
                 |
                 +- example
                     |
                     +- moneymachine
                         |
                         +- cms
                             |
                             +- contenttypes
                                 |
                                 +- BankNote.xsl
                                 +- BankNote.css