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>