This project has retired. For details please refer to its Attic page.
Jetspeed 2 - Guide to PSML DTDs and XML Schema

PSML DTDs and XML Schema

The following PSML DTDs and XML Schema are included to further define the XML documents defined in these guides:

The DTDs and XML Schema included here are organized by PSML document:

Page

Page documents, (*.psml), are described by the following DTD:

<!-- top level page element -->

<!ELEMENT page ( defaults | fragment | menu | metadata | security-constraints | short-title | title )* >
<!ATTLIST page hidden ( false | true ) #IMPLIED >
<!ATTLIST page version NMTOKEN #IMPLIED >

<!-- page child elements -->

<!ELEMENT defaults EMPTY >
<!ATTLIST defaults layout-decorator NMTOKEN #REQUIRED >
<!ATTLIST defaults portlet-decorator NMTOKEN #IMPLIED >
<!ATTLIST defaults skin NMTOKEN #IMPLIED >

<!ELEMENT exclude ( #PCDATA ) >

<!ELEMENT fragment ( fragment | preference | property | security-constraints )* >
<!ATTLIST fragment decorator NMTOKEN #IMPLIED >
<!ATTLIST fragment id NMTOKEN #REQUIRED >
<!ATTLIST fragment name NMTOKEN #REQUIRED >
<!ATTLIST fragment skin NMTOKEN #IMPLIED >
<!ATTLIST fragment state NMTOKEN #IMPLIED >
<!ATTLIST fragment type ( layout | portlet ) #REQUIRED >

<!ELEMENT groups ( #PCDATA ) >

<!ELEMENT include ( #PCDATA ) >
<!ATTLIST include nest ( false | true ) #IMPLIED >

<!ELEMENT menu ( exclude | include | menu | metadata | options | separator | short-title | title )* >
<!ATTLIST menu depth NMTOKEN #IMPLIED >
<!ATTLIST menu name NMTOKEN #IMPLIED >
<!ATTLIST menu options CDATA #IMPLIED >
<!ATTLIST menu order CDATA #IMPLIED >
<!ATTLIST menu paths ( false | true ) #IMPLIED >
<!ATTLIST menu profile NMTOKEN #IMPLIED >
<!ATTLIST menu regexp ( false | true ) #IMPLIED >
<!ATTLIST menu skin NMTOKEN #IMPLIED >

<!ELEMENT metadata ( #PCDATA ) >
<!ATTLIST metadata name ( short-title | text | title ) #REQUIRED >
<!ATTLIST metadata xml:lang NMTOKEN #REQUIRED >

<!ELEMENT options ( #PCDATA ) >
<!ATTLIST options depth NMTOKEN #IMPLIED >
<!ATTLIST options order CDATA #IMPLIED >
<!ATTLIST options paths ( false | true ) #IMPLIED >
<!ATTLIST options profile NMTOKEN #IMPLIED >
<!ATTLIST options regexp ( false | true ) #IMPLIED >
<!ATTLIST options skin NMTOKEN #IMPLIED >

<!ELEMENT owner ( #PCDATA ) >

<!ELEMENT permissions ( #PCDATA ) >

<!ELEMENT preference ( value+ ) >
<!ATTLIST preference name NMTOKEN #REQUIRED >
<!ATTLIST preference readOnly ( false | true ) #IMPLIED >

<!ELEMENT property EMPTY >
<!ATTLIST property layout NMTOKEN #IMPLIED >
<!ATTLIST property name ( column | row | sizes ) #REQUIRED >
<!ATTLIST property value CDATA #REQUIRED >

<!ELEMENT roles ( #PCDATA ) >

<!ELEMENT security-constraint ( groups | permissions | roles | users )* >

<!ELEMENT security-constraints ( owner | security-constraint | security-constraints-ref )* >

<!ELEMENT security-constraints-ref ( #PCDATA ) >

<!ELEMENT separator ( #PCDATA | metadata | text | title )* >
<!ATTLIST separator skin NMTOKEN #IMPLIED >

<!ELEMENT short-title ( #PCDATA ) >

<!ELEMENT text ( #PCDATA ) >

<!ELEMENT title ( #PCDATA ) >

<!ELEMENT users ( #PCDATA ) >

<!ELEMENT value ( #PCDATA ) >

Page documents, (*.psml), are described by the following XML Schema:

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- top level page element -->

  <xs:element name="page">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="defaults" minOccurs="0" />
        <xs:element ref="fragment" />
        <xs:element ref="menu" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="security-constraints" minOccurs="0" />
        <xs:element ref="short-title" minOccurs="0" />
        <xs:element ref="title" minOccurs="0" />
      </xs:choice>
      <xs:attribute name="version" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="hidden" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <!-- page child elements -->

  <xs:element name="defaults">
    <xs:complexType>
      <xs:attribute name="portlet-decorator" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="layout-decorator" type="xs:NMTOKEN" use="optional" />
    </xs:complexType>
  </xs:element>

  <xs:element name="exclude">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="fragment">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="fragment" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="preference" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="property" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="security-constraints" minOccurs="0" />
      </xs:choice>
      <xs:attribute name="decorator" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
      <xs:attribute name="type" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="layout" />
            <xs:enumeration value="portlet" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="state" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="id" type="xs:NMTOKEN" use="required" />
    </xs:complexType>
  </xs:element>

  <xs:element name="groups">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="include">
    <xs:complexType mixed="true">
      <xs:attribute name="nest" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="menu">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="exclude" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="include" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="menu" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="options" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="separator" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="short-title" minOccurs="0" />
        <xs:element ref="title" minOccurs="0" />
      </xs:choice>
      <xs:attribute name="order" type="xs:string" use="optional" />
      <xs:attribute name="options" type="xs:string" use="optional" />
      <xs:attribute name="name" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="profile" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="regexp" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="paths" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="depth" type="xs:NMTOKEN" use="optional" />
    </xs:complexType>
  </xs:element>

  <xs:element name="metadata">
    <xs:complexType mixed="true">
      <xs:attribute name="name" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="short-title" />
            <xs:enumeration value="text" />
            <xs:enumeration value="title" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="options">
    <xs:complexType mixed="true">
      <xs:attribute name="order" type="xs:string" use="optional" />
      <xs:attribute name="profile" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="regexp" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="paths" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="depth" type="xs:NMTOKEN" use="optional" />
    </xs:complexType>
  </xs:element>

  <xs:element name="owner">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="permissions">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="preference">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="value" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
      <xs:attribute name="readOnly" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="property">
    <xs:complexType>
      <xs:attribute name="name" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="column" />
            <xs:enumeration value="row" />
            <xs:enumeration value="sizes" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="layout" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="value" type="xs:string" use="required" />
    </xs:complexType>
  </xs:element>

  <xs:element name="roles">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="security-constraint">
    <xs:complexType>
      <xs:choice maxOccurs="4">
        <xs:element ref="groups" minOccurs="0" />
        <xs:element ref="permissions" minOccurs="0" />
        <xs:element ref="roles" minOccurs="0" />
        <xs:element ref="users" minOccurs="0" />
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:element name="security-constraints">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="owner" minOccurs="0" />
        <xs:element ref="security-constraint" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="security-constraints-ref" minOccurs="0" maxOccurs="unbounded" />
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:element name="security-constraints-ref">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="separator">
    <xs:complexType mixed="true">
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="text" minOccurs="0" />
        <xs:element ref="title" minOccurs="0" />
      </xs:choice>
      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
    </xs:complexType>
  </xs:element>

  <xs:element name="short-title">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="text">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="title">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="users">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="value">
    <xs:complexType mixed="true" />
  </xs:element>

</xs:schema>

Folder

Folder Metadata documents, (folder.metadata), are described by the following DTD:

<!-- top level folder element -->

<!ELEMENT folder ( default-page | defaults | document-order | menu | metadata | security-constraints | short-title | title )* >
<!ATTLIST folder hidden ( false | true ) #IMPLIED >
<!ATTLIST folder version NMTOKEN #IMPLIED >

<!-- folder child elements -->

<!ELEMENT default-page ( #PCDATA ) >

<!ELEMENT defaults EMPTY >
<!ATTLIST defaults layout-decorator NMTOKEN #REQUIRED >
<!ATTLIST defaults portlet-decorator NMTOKEN #IMPLIED >
<!ATTLIST defaults skin NMTOKEN #IMPLIED >

<!ELEMENT document-order ( #PCDATA ) >

<!ELEMENT exclude ( #PCDATA ) >

<!ELEMENT groups ( #PCDATA ) >

<!ELEMENT include ( #PCDATA ) >
<!ATTLIST include nest ( false | true ) #IMPLIED >

<!ELEMENT menu ( exclude | include | menu | metadata | options | separator | short-title | title )* >
<!ATTLIST menu depth NMTOKEN #IMPLIED >
<!ATTLIST menu name NMTOKEN #IMPLIED >
<!ATTLIST menu options CDATA #IMPLIED >
<!ATTLIST menu order CDATA #IMPLIED >
<!ATTLIST menu paths ( false | true ) #IMPLIED >
<!ATTLIST menu profile NMTOKEN #IMPLIED >
<!ATTLIST menu regexp ( false | true ) #IMPLIED >
<!ATTLIST menu skin NMTOKEN #IMPLIED >

<!ELEMENT metadata ( #PCDATA ) >
<!ATTLIST metadata name ( short-title | text | title ) #REQUIRED >
<!ATTLIST metadata xml:lang NMTOKEN #REQUIRED >

<!ELEMENT options ( #PCDATA ) >
<!ATTLIST options depth NMTOKEN #IMPLIED >
<!ATTLIST options order CDATA #IMPLIED >
<!ATTLIST options paths ( false | true ) #IMPLIED >
<!ATTLIST options profile NMTOKEN #IMPLIED >
<!ATTLIST options regexp ( false | true ) #IMPLIED >
<!ATTLIST options skin NMTOKEN #IMPLIED >

<!ELEMENT owner ( #PCDATA ) >

<!ELEMENT permissions ( #PCDATA ) >

<!ELEMENT roles ( #PCDATA ) >

<!ELEMENT security-constraint ( groups | permissions | roles | users )* >

<!ELEMENT security-constraints ( owner | security-constraint | security-constraints-ref )* >

<!ELEMENT security-constraints-ref ( #PCDATA ) >

<!ELEMENT separator ( #PCDATA | metadata | text | title )* >
<!ATTLIST separator skin NMTOKEN #IMPLIED >

<!ELEMENT short-title ( #PCDATA ) >

<!ELEMENT text ( #PCDATA ) >

<!ELEMENT title ( #PCDATA ) >

<!ELEMENT users ( #PCDATA ) >

Folder Metadata documents, (folder.metadata), are described by the following XML Schema:

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- top level folder element -->

  <xs:element name="folder">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="default-page" minOccurs="0" />
        <xs:element ref="defaults" minOccurs="0" />
        <xs:element ref="document-order" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="menu" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="metadata minOccurs="0" maxOccurs="unbounded"" />
        <xs:element ref="security-constraints" minOccurs="0" />
        <xs:element ref="short-title" minOccurs="0" />
        <xs:element ref="title" minOccurs="0" />
      </xs:choice>
      <xs:attribute name="version" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="hidden" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <!-- folder child elements -->

  <xs:element name="default-page">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="defaults">
    <xs:complexType>
      <xs:attribute name="portlet-decorator" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="layout-decorator" type="xs:NMTOKEN" use="optional" />
    </xs:complexType>
  </xs:element>

  <xs:element name="document-order">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="exclude">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="groups">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="include">
    <xs:complexType mixed="true">
      <xs:attribute name="nest" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="menu">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="exclude" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="include" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="menu" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="options" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="separator" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="short-title" minOccurs="0" />
        <xs:element ref="title" minOccurs="0" />
      </xs:choice>
      <xs:attribute name="order" type="xs:string" use="optional" />
      <xs:attribute name="options" type="xs:string" use="optional" />
      <xs:attribute name="name" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="profile" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="regexp" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="paths" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="depth" type="xs:NMTOKEN" use="optional" />
    </xs:complexType>
  </xs:element>

  <xs:element name="metadata">
    <xs:complexType mixed="true">
      <xs:attribute name="name" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="short-title" />
            <xs:enumeration value="text" />
            <xs:enumeration value="title" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="options">
    <xs:complexType mixed="true">
      <xs:attribute name="order" type="xs:string" use="optional" />
      <xs:attribute name="profile" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="regexp" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="paths" use="optional">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="false" />
            <xs:enumeration value="true" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
      <xs:attribute name="depth" type="xs:NMTOKEN" use="optional" />
    </xs:complexType>
  </xs:element>

  <xs:element name="owner">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="permissions">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="roles">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="security-constraint">
    <xs:complexType>
      <xs:choice maxOccurs="4">
        <xs:element ref="groups" minOccurs="0" />
        <xs:element ref="permissions" minOccurs="0" />
        <xs:element ref="roles" minOccurs="0" />
        <xs:element ref="users" minOccurs="0" />
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:element name="security-constraints">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="owner" minOccurs="0" />
        <xs:element ref="security-constraint" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="security-constraints-ref" minOccurs="0" maxOccurs="unbounded" />
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:element name="security-constraints-ref">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="separator">
    <xs:complexType mixed="true">
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="text" minOccurs="0" />
        <xs:element ref="title" minOccurs="0" />
      </xs:choice>
      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
    </xs:complexType>
  </xs:element>

  <xs:element name="short-title">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="text">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="title">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="users">
    <xs:complexType mixed="true" />
  </xs:element>

</xs:schema>

Link

Link documents, (*.link), are described by the following DTD:

<!-- top level link element -->

<!ELEMENT link ( metadata | security-constraints | short-title | title | url )* >
<!ATTLIST link target NMTOKEN #REQUIRED >
<!ATTLIST link version NMTOKEN #IMPLIED >
<!ATTLIST link skin NMTOKEN #IMPLIED >

<!-- link child elements -->

<!ELEMENT groups ( #PCDATA ) >

<!ELEMENT metadata ( #PCDATA ) >
<!ATTLIST metadata name ( short-title | title ) #REQUIRED >
<!ATTLIST metadata xml:lang NMTOKEN #REQUIRED >

<!ELEMENT owner ( #PCDATA ) >

<!ELEMENT permissions ( #PCDATA ) >

<!ELEMENT roles ( #PCDATA ) >

<!ELEMENT security-constraint ( groups | permissions | roles | users )* >

<!ELEMENT security-constraints ( owner | security-constraint | security-constraints-ref )* >

<!ELEMENT security-constraints-ref ( #PCDATA ) >

<!ELEMENT short-title ( #PCDATA ) >

<!ELEMENT title ( #PCDATA ) >

<!ELEMENT url ( #PCDATA ) >

<!ELEMENT users ( #PCDATA ) >

Link documents, (*.link), are described by the following XML Schema:

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- top level link element -->

  <xs:element name="link">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="metadata" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="security-constraints" minOccurs="0" />
        <xs:element ref="short-title" minOccurs="0" />
        <xs:element ref="title" minOccurs="0" />
        <xs:element ref="url" />
      </xs:choice>
      <xs:attribute name="version" type="xs:NMTOKEN" use="optional" />
      <xs:attribute name="target" type="xs:NMTOKEN" use="required" />
      <xs:attribute name="skin" type="xs:NMTOKEN" use="optional" />
    </xs:complexType>
  </xs:element>

  <!-- link child elements -->

  <xs:element name="groups">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="metadata">
    <xs:complexType mixed="true">
      <xs:attribute name="name" use="required">
        <xs:simpleType>
          <xs:restriction base="xs:NMTOKEN">
            <xs:enumeration value="short-title" />
            <xs:enumeration value="title" />
          </xs:restriction>
        </xs:simpleType>
      </xs:attribute>
    </xs:complexType>
  </xs:element>

  <xs:element name="owner">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="permissions">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="roles">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="security-constraint">
    <xs:complexType>
      <xs:choice maxOccurs="4">
        <xs:element ref="groups" minOccurs="0" />
        <xs:element ref="permissions" minOccurs="0" />
        <xs:element ref="roles" minOccurs="0" />
        <xs:element ref="users" minOccurs="0" />
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:element name="security-constraints">
    <xs:complexType>
      <xs:choice maxOccurs="unbounded">
        <xs:element ref="owner" minOccurs="0" />
        <xs:element ref="security-constraint" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="security-constraints-ref" minOccurs="0" maxOccurs="unbounded" />
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:element name="security-constraints-ref">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="short-title">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="title">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="url">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="users">
    <xs:complexType mixed="true" />
  </xs:element>

</xs:schema>

Page Security

Page Security documents, (page.security), are described by the following DTD:

<!-- top level page-security element -->

<!ELEMENT page-security ( global-security-constraints-ref | security-constraints-def )* >
<!ATTLIST page-security version NMTOKEN #IMPLIED >

<!-- page-security child elements -->

<!ELEMENT global-security-constraints-ref ( #PCDATA ) >

<!ELEMENT groups ( #PCDATA ) >

<!ELEMENT permissions ( #PCDATA ) >

<!ELEMENT roles ( #PCDATA ) >

<!ELEMENT security-constraint ( groups | permissions | roles | users )* >

<!ELEMENT security-constraints-def ( security-constraint ) >
<!ATTLIST security-constraints-def name NMTOKEN #REQUIRED >

<!ELEMENT users ( #PCDATA ) >

Page Security documents, (page.security), are described by the following XML Schema:

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

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- top level page-security element -->

  <xs:element name="page-security">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element ref="global-security-constraints-ref" minOccurs="0" maxOccurs="unbounded" />
        <xs:element ref="security-constraints-def" minOccurs="0" maxOccurs="unbounded" />
      </xs:choice>
      <xs:attribute name="version" type="xs:NMTOKEN" use="optional" />
    </xs:complexType>
  </xs:element>

  <!-- page-security child elements -->

  <xs:element name="global-security-constraints-ref">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="groups">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="permissions">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="roles">
    <xs:complexType mixed="true" />
  </xs:element>

  <xs:element name="security-constraint">
    <xs:complexType>
      <xs:choice maxOccurs="4">
        <xs:element ref="groups" minOccurs="0" />
        <xs:element ref="permissions" minOccurs="0" />
        <xs:element ref="roles" minOccurs="0" />
        <xs:element ref="users" minOccurs="0" />
      </xs:choice>
    </xs:complexType>
  </xs:element>

  <xs:element name="security-constraints-def">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="security-constraint" maxOccurs="unbounded" />
      </xs:sequence>
      <xs:attribute name="name" type="xs:NMTOKEN" use="required" />
    </xs:complexType>
  </xs:element>

  <xs:element name="users">
    <xs:complexType mixed="true" />
  </xs:element>

</xs:schema>