Portable Site Information
Version 0.3

Copyright 1999 by L. C. Rees.

Table of Contents

1. Purpose
2. Vocabulary
2.1.1 Element: psi
2.2.1 Element: group
2.3.1 Element: global
2.4.1 Element: meme
2.5.1 Element: name
2.6.1 Element: contact
2.7.1 Element: note
2.8.1 Element: keyword
2.9.1 Element: acl
2.10.1 Element: right
2.11.1 Element: user
2.12.1 Element: version
2.13.1 Element: task
2.14.1 Element: resolve
2.15.1 Element: filter
2.16.1 Element: if
2.17.1 Element: then
2.18.1 Element: set
2.19.1 Element: time
2.20.1 Element: space
2.21.1 Element: text
2.22.1 Element: content
2.23.1 Element: insert
2.24.1 Element: local
3. The PSI DTD

1. Purpose

Portable Site Information (PSI) is an XML-based language that enables entire websites to be exchanged between content management tools without feature loss. Its basic structure is:

        <group> 
         <local>  
           <set> 
            <content>content</content> 
           </set> 
         </local> 
        </group>        

Group represents containers like databases or directories, local, unique elements like pages, set, groupings inside a unique element like paragraphs or tables, and content, actual data. A more complex example is:

        <group>
         
         <global>
          <set id="index">
           <content>Index</content>
          </set> 
          <insert public="main"/>
         </global>
         
          <local>
           <set insert="main">
            <content>Main Content</content>
           </set>
           <insert direct="index"/>
          </local>

        </group>    

Global contains features common to the group, including shared sets. Insert facilitates set sharing, either many to one or one to one. Many to one inserts are a single public insert many sets can reuse like <insert public="main"/> above. One to one inserts directly reference a set's id for a single unique insertion like <insert direct="index"/>.

PSI supports security based on access control lists and inherited rights. User management for a site is also centralized under the same mechanism. Here is a acl granting public read access with no authentication:

        <acl auth="no"> 
         <right role="grant" unit="read"/>
          <user id="public">
           <note>Public Viewers</note>
          </user>
        </acl>

Version and task planning and tracking are also supported. Each task and version are tied together. A task results in a change of version and a version requires a task to change, be created, or posted. Rules for resolving conflicts can also be set. Here's a freshly changed version that resolves conflicts by reference to a parent:

        <version id="new" parent="old" role="current">
         <task user="bob" role="change" sched="10am" start="10:01am" due="10:15am" end="10:13am"/>
         <resolve role="version" unit="parent" action="archive" value="old"/>
        </version>    

Metadata can also be listed. This is useful for distributing site content.

        <meme copyright="bob" at="1999">
         <name>All about Bob</name>
         <contact>bob@bob.au</contact> 
         <note>All about Bob.</note>
         <keyword>Bob</keyword>
        </meme>   

Filters can be constructed for application specific processing. Locals can be made to use certain attributes when viewed. A group can be mapped onto a feature when imported into a content management tool. The following filter maps the PSI element set to the HTML element "p" if Netscape 4 is detected as the user-agent:

        <filter role="export">
          <if role="agent" value="Mozilla 4.0"/>
          <then classid="set" role="map" value="p"/>
        </filter>    

These features are dealt with in greater detail below.

2. Vocabulary

2.1.1 Element: psi
Root element enclosing all PSI markup.

2.1.2 psi attribute: version
The PSI version used.

2.1.3 version value: 0.3
The exact PSI version (0.3 is the most current).

2.1.4 psi attribute: xmlns
The reference PSI DTD's location.

2.1.5 xmlns value: http://www.whatisxml.com/psi
The reference PSI DTD's exact URI.

2.1.6 Example: psi

<psi version="0.3" xmlns="http://www.whatisxml.com/psi"></psi>

2.2.1 Element: group
Represents any web container.

2.2.2 group child of: psi, group

2.2.3 group attribute: class
Groups out of hierarchial order.

2.2.4 group attribute: order
Sets precedence within the same hierarchial level.

2.2.5 order value: none
This has no order.

2.2.6 order value: root
This comes first.

2.2.7 order value: seq
This has an order after what's in front of it.

2.2.8 order value: par
This has an order equal to what's in front of it.

2.2.9 order value: alt
This is an alternative to what's in front of it.

2.2.9 group attribute: id
Assigns a unique identity.

2.2.10 group attribute: filter
Identifies the filter used.

2.2.11 group attribute: role
The type of web container.

2.2.12 role value: none
No specific website container.

2.2.13 role value: site
A website.

2.2.14 role value: dir
A directory in a filesystem.

2.2.15 role value: database
A database.

2.2.16 role value: table
A table in a database.

2.2.17 role value: column
A column in a database.

2.2.18 role value: object.
An object.

2.2.19 Example: group

<group id="images" role="dir"></group>

2.3.1 Element: global
Sets a group's universal features.

2.3.2 global child of: group

2.3.3 global attribute: class
See 2.2.3.

2.3.4 Example: global

<global class="netscape"></global>

2.4.1 Element: meme
Information about site content.

2.4.2 meme child of: global, set, local

2.4.3 name attribute: class
See 2.2.3.

2.4.4 meme attribute: filter

See 2.2.10

2.4.5 meme attribute: copyright
The copyright holder.

2.4.6 meme attribute: at
The year a copyright was granted.

2.4.7 Example: meme

<meme copyright="Bob Johnson" at="1999"></meme>

2.5.1 Element: name
The chief name displayed.

2.5.2 name child of: acl, user, meme

2.5.3 name attribute: class
See 2.2.3

2.5.4 name attribute: order
See 2.2.4

2.5.5 Example: name

<name>Director of Personnel</name>

2.6.1 Element: contact
A place where a user can be reached.

2.6.2 contact child of: 2.24.1 acl, user, meme

2.6.3 contact attribute: class
See 2.2.3.

2.6.4 contact attribute: user
The user to be contacted.

2.6.5 Example: contact

<contact user="bob">bob@site.com</contact>

2.7.1 Element: note
A text body.

2.7.2 note child of: meme, acl, user, version, filter

2.7.3 note attribute: class
See 2.2.3.

2.7.4 note attribute: user
The user who made the note.

2.7.6 note attribute: at
The time the note was made.

2.7.7 Example: note

<note user="bob" at="5:30 AM 10/27/99">Note.</note>

2.8.1 Element: keyword
A word related to site content that helps index it.

2.8.2 keyword attribute: class
See 2.2.3.

2.8.3 Example: keyword

<keyword class="admin">site</keyword>

2.9.1 Element: acl
Controls access to a site based on inheritable rights.

2.9.2 acl child of: global, acl, set, local

2.9.3 acl attribute: class
See 2.2.3.

2.9.4 acl attribute: order
See 2.2.4.

2.9.5 acl attribute: id
See 2.2.9.

2.9.6 acl attribute: auth
Sets if authentication is required.

2.9.7 auth value: yes
Authentication is required.

2.9.8 auth value: no
Authentication is not required.

2.9.9 acl attribute: noright
Sets if a right can be granted if not explicitly listed.

2.9.10 noright value: yes
Unlisted rights are granted.

2.9.11 noright value: no
Unlisted rights are not granted.

2.9.12 Example: acl

<acl auth="yes" noright="no"></acl> 

2.10.1 Element: right
Lists a right and if it's granted or denied.

2.10.2 right child of: acl, user

2.10.3 right attribute: class
See 2.2.3.

2.10.4 right attribute: role
Sets if a right is granted or denied.

2.10.5 right value: grant
A right is granted.

2.10.6 role value: deny
A right is denied.

2.10.7 right attribute: unit
Sets the type of right.

2.10.8 right value: all
All possible rights.

2.10.9 role value: read
Right to view content.

2.10.10 right value: write
Right to change content.

2.10.11 right value: make
Right to create content.

2.10.12 right value: erase
Right to delete content.

2.10.13 right value: acl
Right to view and change content's acl.

2.10.14 right value: none
No rights at all.

2.10.15 Example: right

<right role="deny" unit="read"/>

2.11.1 Element: user
Lists user attributes and (optionally) rights.

2.11.2 user child of: acl

2.11.3 user attribute: class
See 2.2.3.

2.11.4 user attribute: order
See 2.2.4.

2.11.5 user attribute: id
See 2.2.9.

2.11.6 user attribute: role
A user's authority over an acl.

2.11.7 role value: none
This user has no authority.

2.11.8 role value: owner
The acl owner.

2.11.9 role value: delegate
Can have owner rights delegated to them.

2.11.10 Example: user

<user id="bob"></user>

2.12.1 Element: version
Tracks past, present, and future change.

2.12.2 version child of: global, set, local

2.12.3 version attribute: class
See 2.2.3.

2.12.4 version attribute: id
See 2.2.9.

2.12.5 version attribute: parent
The version a version was created from.

2.12.6 version attribute: role
Sets the type of version.

2.12.7 role value: planned
A future version.

2.12.8 role value: current
The current version.

2.12.9 role value: archive
A past version.

2.12.10 role value: fork
A separate version.

2.12.11 Example: version

<version id="7-9-99-home" parent="7-10-99-home" role="archive"></version>

2.13.1 Element: task
Work that will generate a version change.

2.13.2 task child of: version

2.13.3 task attribute: class
See 2.2.3.

2.13.4 task attribute: user
The user assigned a task.

2.13.5 task attribute: role
Basic task types.

2.13.6 role value: create
A new version is created.

2.13.7 role value: change
An existing version is modified.

2.13.8 role value: post
A version is published.

2.13.9 task attribute: sched
When a task is scheduled to begin.

2.13.11 task attribute: start
When a task commences.

2.13.12 task attribute: state
The version's state during the task.

2.13.13 state value: none
A version in planning (hasn't been created).

2.13.14 state value: locked
A version in use.

2.13.15 state value: unlocked
A version not in use.

2.13.16 task attribute: due
When a task is scheduled for completion.

2.13.17 task attribute: end
The time a task was actually completed.

2.13.18 Example: task

<task user="bob" role="change" sched="10:30" start="10:26" state="unlocked" due="11:00" end="11:01"/>

2.14.1 Element: resolve
Sets what happens when version's conflict.

2.14.2 resolve child of: version

2.14.3 resolve attribute: class
See 2.2.3.

2.14.4 resolve attribute: order
See 2.2.4.

2.14.5 resolve attribute: role
Sets which element's attributes will control conflict resolution.

2.14.6 role value: version
Attributes from a version will be used.

2.14.7 role value: task
Attributes from a task will be used.

2.14.8 resolve attribute: unit
Sets which attribute's used to arbitrate a conflict.

2.14.9 unit value: class
class is used.

2.14.10 unit value: id
id is used.

2.14.11 unit value: parent
parent is used.

2.14.12 unit value: user
user is used.

2.14.13 unit value: role
role is used.

2.14.14 unit value: start
start is used.

2.14.15 unit value: state
state is used.

2.14.16 unit value: end
end is used.

2.14.17 resolve attribute: action
What action is taken in case of a conflict.

2.14.18 action value: overwrite
This version overwrites a conflicting version.

2.14.19 action value: merge
This version is merged with a conflicting version.

2.14.20 action value: fork
This version becomes a separate version from a conflicting version.

2.14.21 action value: archive
This version is backed up if there's a conflict.

2.14.22 action value: none
No action is taken.

2.14.23 resolve attribute: value
Holds the value used to evaluate the chosen unit.

2.14.24 Example: resolve

<resolve role="task" unit="id" action="overwrite" value="991011"/>

2.15.1 Element: filter
Controls cases where special processing is required.

2.15.2 filter child of: global, set, local

2.15.3 filter attribute: class
See 2.2.3.

2.15.4 filter attribute: order
See 2.2.4.

2.15.5 filter attribute: id
See 2.2.9.

2.15.6 filter attribute: role
Controls the filter direction.

2.15.7 role value: in
This filter handles how an element is brought in.

2.15.8 role value: out
This filter handles how an element is pushed out.

2.15.9 filter attribute: resolve
Controls what happens when a filter is processed.

2.15.10 role value: pass
Filter processing is passed off to the next filter in order.

2.15.11 role value: end
Filter processing ends here.

2.15.12 filter attribute: chain
References a filter to pass to by id or by class.

2.15.13 filter attribute: force
Controls if a filter should be forcibly applied.

2.15.14 force value: yes
The filter should be forcibly applied.

2.15.15 force value: no
The filter should not be forcibly applied.

2.15.16 Example: filter

<filter id="js2" role="in" resolve="pass" force="no"></filter>

2.16.1 Element: if
What criteria are used to determine if a filter is applied.

2.16.2 if child of: filter

2.16.3 if attribute: class
See 2.2.3.

2.16.4 if attribute: role
What predefined test, if any, should be used.

2.16.5 role value: none
No predefined test should be used.

2.16.6 role value: mime
The mime type should be the test.

2.16.7 role value: agent
The user-agent should be the test.

2.16.7 role value: os
The OS should be the test.

2.16.8 role value: memory
The amount of memory should be the test.

2.16.9 role value: cpu
The speed of the CPU should be the test.

2.16.10 role value: bitrate
The bandwidth amount should be the test.

2.16.11 role value: screensize
The size of the screen should be the test.

2.16.12 role value: screendepth
The color depth of the screen should be the test.

2.16.13 role value: lang
The language should be the test.

2.16.14 if attribute: suffix
Suffixes allowed for a mime type.

2.16.15 if attribute: usertest
A user-defined test.

2.16.17 if attribute: value
The value to be satisfied.

2.16.18 Example: if

<if role="mime" suffix="htm html" value="4.0"/>

2.17.1 Element: then

Lists what action is taken if a filter fits a situation.

2.17.2 then child of: filter

2.17.3 then attribute: class
See 2.2.3.

2.17.4 then attribute: id
The name of a feature to be used.

2.17.5 then attribute: parent
An element being mapped or a feature's parent.

2.17.6 then attribute: classid
Identifies a class for global grouping.

2.17.7 then attribute: role
Sets if the role is a map or a use.

2.17.8 role attribute: map
Sets one local or class equal to a value

2.17.9 role attribute: use
Allows use of a feature.

2.17.10 feature attribute: attr
Attributes of the feature.

2.17.11 map attribute: value
The value an element or class is mapped onto.

2.17.12 Example: then

<then parent="html" role="map" value="htm"/>

2.18.1 Element: set
A subset of an local.

2.18.2 set child of: global, set, local

2.18.3 set attribute: class
See 2.2.3.

2.18.4 set attribute: order
See 2.2.4.

2.18.5 set attribute: id
See 2.2.9.

2.18.6 set attribute: filter
See 2.2.10.

2.18.7 set attribute: insert
The shared insert point used by this set.

2.18.8 Example: set

<set id="home" insert="main"></set>

2.19.1 Element: time
Controls a set's place in time.

2.19.2 time child of: set

2.19.3 time attribute: class
See 2.2.3.

2.19.4 time attribute: unit
The unit of time measurement used.

2.19.5 unit value: month
A month.

2.19.6 unit value: week
A week.

2.19.7 unit value: day
A day.

2.19.8 unit value: hour
An hour.

2.19.9 unit value: minute
A minute.

2.19.10 unit value: second
A second.

2.19.11 unit value: millisec
A millisecond.

2.19.12 time attribute: length
The length of time a set runs.

2.19.13 time attribute: start
A set's start time.

2.19.14 time attribute: end
A set's end time.

2.19.15 time attribute: repeat
How many times a set repeats.

2.19.16 time attribute: finish
What happens when time's up.

2.19.17 finish value: loop
The set loops forever.

2.19.18 finish value: remove
The set is removed.

2.19.19 finish value: hold
The set freezes.

2.19.20 time attribute: delay
The amount of time passing between this set and the next set in order.

2.19.21 Example: time

<time unit="second" length="1" repeat="3" finish="remove" delay="6"/>

2.20.1 Element: space
Controls the position of a set in space.

2.20.2 space child of: set

2.20.3 space attribute: class
See 2.2.3.

2.20.4 space attribute: role
What spacing type is used.

2.20.5 role value: root
This spacing applies to everything.

2.20.6 role value: column
This set is a column.

2.20.7 role value: row
This set is a row.

2.20.8 role value: inline
This set is part of a bigger set.

2.20.9 space attribute: unit
The unit of space measurement used.

2.20.10 unit value: pixel
Measurement is in pixels.

2.20.11 unit value: point
Measurement is in points.

2.20.12 unit value: percent
Measurement is in percentage.

2.20.13 space attribute: width
The width of a space.

2.20.14 space attribute: height
The height of a space.

2.20.15 space attribute: position
Coordinates for an absolute postion in space. Order is x, y, then z.

2.20.16 space attribute: margin
Sets values for the margin around a space. Order is global, left, right, top, bottom as more numbers are added.

2.20.17 space attribute: halign
Sets the horizontal alignment.

2.20.18 halign value: left
The horizontal alignment is left.

2.20.19 halign value: center
The horizontal alignment is centered.

2.20.20 halign value: right
The horizontal alignment is right.

2.20.21 space attribute: valign
Sets the vertical alignment.

2.20.22 valign value: top
The vertical alignment is at the top.

2.20.23 valign value: center
The vertical alignment is centered.

2.20.24 valign value: bottom
The vertical alignment is at the bottom.

2.20.25 Example: space

<space role="column" unit="pixel" height="6" width="6" halign="center" valign="center"/>

2.21.1 Element: text
Controls the use of text.

2.21.2 text child of: set

2.21.3 text attribute: class
See 2.2.3.

2.21.4 text attribute: role
The text's style role.

2.21.5 role value: none
The text has no particular style.

2.21.6 role value: bold
The text's weight is bold.

2.21.7 role value: italic
The text is italicized.

2.21.8 role value: underline
The text is underlined.

2.21.9 role value: strikeout
The text is crossed out.

2.21.9 role value: smallcaps
The text is all small.

2.21.10 role value: pre
The text is preformatted.

2.21.11 role value: nowrap
The text will not wrap without a newline.

2.21.12 text attribute: font
The font the text will use.

2.21.13 text attribute: size
The size of the text in points.

2.21.14 text attribute: case
The case the text will use.

2.21.15 case value: normal
The case is normal.

2.21.16 case value: upper
The text is all uppercase.

2.21.17 case value: lower
The text is all lowercase.

2.21.18 case value: capitalize
The text is all capitalized.

2.21.19 text attribute: color
The text's color.

2.21.20 Example: text

<text style="italic" font="arial" size="1" case="lowercase"/>

2.22.1 Element: effect
Sets what effects are used on a set.

2.22.2 element attribute: role
Sets what set is triggered when an event happens within a set's space and time.

2.22.3 role value: none
No effect happens

2.22.4 role value: click
An effect is triggered by a single mouse click.

2.22.5 role value: dblclick
An effect is triggered by a double mouse click.

2.22.6 role value: mousedown
An effect is triggered by a mouse button being down.

2.22.7 role value: mouseup
An effect is triggered by a mouse button rising.

2.22.8 role value: mouseover
An effect is triggered by a cursor over a set.

2.22.9 role value: mousemove
An effect is triggered by a cursor moving in a set.

2.22.10 role value: mouseout
An effect is triggered by a cursor leaving a set.

2.22.11 role value: keypress
An effect is triggered by a key being pressed.

2.23.12 role value: keydown
An effect is triggered by a key being down.

2.22.13 role value: keyup
An effect is triggerd by a key being up.

2.22.14 effect attribute: value
A value an effect role matches, if any.

2.22.15 effect attribute: go
Another element an event goes to after a trigger.

2.22.16 effect attribute: back Sets how content last in sequence in a set is used.

2.22.17 back value: normal Content is treated normally.

2.22.18 back value: tile Content is tiled.

2.22.19 back value: fixed Content is fixed in place.

2.22.20 back value: fill Content is stretched to fill an area.

2.22.21 effect attribute: color
The color of a set.

2.22.23 effect attribute: break
Sets what kind of spacing is put between this set and another.

2.22.24 break value: space
A horizontal space is put between this set and others.

2.22.25 break value: line
A horizontal line is put between this set and others.

2.22.26 break value: border
A border is put between this set and others.

2.22.27 effect attribute: bwidth
Sets the width of a break.

2.22.28 effect attribute: bcolor
Sets the color of a break

2.22.29 effect attribute: list
Sets if a set is a list and what kind.

2.22.30 list value: none
This set is not a list.

2.22.31 list value: ordered
This set is an ordered list.

2.22.32 list value: unordered
This set is an unordered list.

2.22.33 Example: effect

<effect role="mouseover" go="top_main" back="fixed" color="blue" break="space" bwidth="6"/>

2.23.1 Element: content
A site's data.

2.23.2 content child of: set

2.23.3 content attribute: class
See 2.2.3.

2.23.4 content attribute: order
See 2.2.4.

2.23.5 content attribute: role
The type of content.

2.23.6 role value: data
The content is raw data.

2.23.7 role value: logic
The content is programming logic.

2.23.8 role value: style
The content controls appearance.

2.23.9 content attribute: src
If the content is a link, what kind of link.

2.23.10 role value: link
The link is a URL to an external resource.

2.23.11 role value: insert
The resource indicated by the line is inserted into the content.

2.23.12 content attribute: xml:space
Controls the use of whitespace in content.

2.23.13 xml:space value: default
Whitespace is ignored.

2.23.14 xml:space value: preserve
Whitespace is kept.

2.23.15 Example: content

<content role="data" src="link" xml:space="preserve">http://www.whatever.com/home.html</content>

2.24.1 Element: insert
Enables sets to be shared globally or directly.

2.24.2 insert child of: global, local

2.24.3 insert attribute: class
See 2.2.3.

2.24.4 insert attribute: order
See 2.2.4.

2.24.5 insert attribute: filter
See 2.2.10

2.24.6 insert attribute: public
Sets a shared insert point (many to one).

2.24.7 insert attribute: direct
Directly inserts a set (one to one).

2.24.8 insert attribute: child
Controls if a set's child sets are included.

2.24.9 child value: yes
A set's children are included.

2.24.10 children value: no
A set's children are excluded.

2.24.11 Example: insert.

<insert public="top" child="no"/>

2.24.1 Element: local
A website object specific to itself.

2.24.2 local child of: group

2.24.3 local attribute: class
See 2.2.3.

2.26.4 local attribute: order
See 2.2.4.

2.24.5 local attribute: id
See 2.2.9.

2.24.6 Example: local

<local id="home"></local>

3. The PSI DTD.

<?xml version="1.0" encoding="UTF-8"?> 
         
        <!-- 
        Portable Site Information version 0.3 
        Created by L. C. Rees - 8.10.99 - Last modified 12.19.99 
        Copyright (c) 1999 by L. C. Rees. 
         
        Permission to use, copy, modify, and distribute this DTD for any purpose with or
        without fee is hereby granted, provided that the above copyright notice and this
        permission notice appear in all copies. 
         
        THIS DTD IS PROVIDED "AS IS" AND L. C. REES DISCLAIMS ALL WARRANTIES WITH REGARD TO 
        THIS DTD INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT 
        SHALL L. C. REES BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES 
        OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER 
        IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN 
        CONNECTION WITH THE USE OR PERFORMANCE OF THIS DTD. 
        --> 

        <!-- ************************************************************* --> 
        <!-- ************************ ENTITIES *************************** --> 
        <!-- ************************************************************* --> 
         
            <!ENTITY % mavfsi "meme*, acl*, version*, filter*, (set | insert)*)"> 
         
            <!ENTITY % ncn "name*, contact*, note*, "> 
         
            <!ENTITY % class "class  IDREF  #IMPLIED"> 
         
            <!ENTITY % order "order  (none | root | seq | par | alt) "seq""> 
         
            <!ENTITY % id "id ID  #IMPLIED"> 
         
            <!ENTITY % val "value  CDATA  #IMPLIED"> 
         
            <!ENTITY % filter "filter IDREF  #IMPLIED"> 
         
            <!ENTITY % color "color  CDATA  #IMPLIED"> 
         
            <!ENTITY % at "at  CDATA  #IMPLIED"> 
         
            <!ENTITY % cu "%class; 
                   user  IDREF  #IMPLIED"> 
         
            <!ENTITY % cip "%class; %id; 
                   parent  IDREF  #IMPLIED"> 
         
            <!ENTITY % yny "(yes | no) "yes""> 
         
            <!ENTITY % ynn "(yes | no) "no"">
         
            <!ENTITY % coi "%class; %order; %id;"> 
         
            <!ENTITY % coif "%coi; %filter;"> 
         
            <!ENTITY % co "%class; %order;"> 
         
        <!-- ***************************************************************** --> 
        <!-- *************************** ELEMENTS **************************** -->
        <!-- ***************************************************************** --> 

        <!-- ######################## PSi ########################## --> 

            <!ELEMENT psi (group*)> 
         
        <!-- ####################### GROUP ######################### --> 
         
            <!ELEMENT group (global?, group*, local*)> 
         
        <!-- ####################### GLOBAL ######################## --> 
         
            <!ELEMENT global (%mavfsi;)> 
         
        <!-- ######################## MEME ######################### --> 
         
            <!ELEMENT meme (%ncn; keyword*)> 
            
            <!ELEMENT name (#PCDATA)> 
            
            <!ELEMENT contact (#PCDATA)> 
         
            <!ELEMENT note (#PCDATA)> 
         
            <!ELEMENT keyword (#PCDATA)> 
         
        <!-- ######################## ACL ########################## -->
         
            <!ELEMENT acl (%ncn; right+, acl*, user+)>
         
            <!ELEMENT right EMPTY>
         
            <!ELEMENT user (%ncn; right*)> 
         
        <!-- ###################### VERSION ######################## -->
         
            <!ELEMENT version (note*, task, resolve*)>
         
            <!ELEMENT task EMPTY>
         
            <!ELEMENT resolve EMPTY>
         
        <!-- ###################### FILTER ######################### -->
         
            <!ELEMENT filter (note*, if, then)>
         
            <!ELEMENT if EMPTY>
         
            <!ELEMENT then EMPTY>
         
        <!-- ####################### SET ########################### -->
         
            <!ELEMENT set (%mavfsi; time?, space?, text?, content*)>
         
            <!ELEMENT time EMPTY>
         
            <!ELEMENT space EMPTY>
         
            <!ELEMENT text EMPTY>
         
            <!ELEMENT content ANY> 
         
        <!-- ##################### INSERT ########################## -->
         
            <!ELEMENT insert EMPTY>
         
        <!-- ##################### LOCAL ########################### -->
         
            <!ELEMENT local (%mavfsi;)>
         
        <!-- ****************************************************************** -->
        <!-- ************************** ATTRIBUTES **************************** -->
        <!-- ****************************************************************** -->

        <!-- ######################## PSi ########################## -->
         
            <!ATTLIST psi 
                    xmlns CDATA #FIXED "http://www.whatisxml.com/psi"
                    version CDATA #FIXED "0.3">
         
        <!-- ####################### GROUP ######################### -->
         
            <!ATTLIST group %coif;
                    role (none | site | dir | database | table | column | object) "none">
         
        <!-- ####################### GLOBAL ######################## -->
         
            <!ATTLIST global %class;>

        <!-- ####################### MEME ########################## -->
         
            <!ATTLIST meme %class; %filter; 
                    copyright CDATA #IMPLIED
                    %at;>
         
            <!ATTLIST name %co;>
         
            <!ATTLIST contact %cu;>
             
            <!ATTLIST note %cu; %at;>
         
            <!ATTLIST keyword %class;>
         
        <!-- ######################## ACL ########################## -->
         
            <!ATTLIST acl %coi;
                    auth %yny;
                    noright %ynn;>
         
            <!ATTLIST right %class;
                    role (grant | deny) "deny"
                    unit (none | read | write | create | delete | acl | all) "all">
         
            <!ATTLIST user %coi;
                    role (none | owner | delegate) "none">
         
        <!-- ###################### VERSION ######################## -->
         
            <!ATTLIST version %cip;
                    role (planned | current | archive | fork) "current">
         
            <!ATTLIST task %cu;
                    role (create | change | post) "change"
                    sched CDATA #IMPLIED
                    start CDATA #IMPLIED 
                    state (none | lock | unlock) "unlock"
                    due CDATA #IMPLIED
                    end CDATA #IMPLIED>
         
            <!ATTLIST resolve %co;
                    role (version | task) "version"
                    unit (class | id | parent | user | role | start | state | end) "id"
                    action (none | overwrite | merge | fork | archive) "archive"
                    %val;>
         
        <!-- ##################### FILTER ######################### -->
         
            <!ATTLIST filter %coi;
                    role (in | out) "in"
                    resolve (pass | end) "end"
                    chain IDREF #IMPLIED
                    force %ynn;>
         
            <!ATTLIST if %class;
                    role (none | mime | agent | os | memory | cpu | bitrate | screensize | screendepth | lang) "none"
                    suffix NMTOKENS #IMPLIED
                    usertest CDATA #IMPLIED
                    %val;>
         
            <!ATTLIST then %cip;
                    classid ID #IMPLIED
                    role (use | map) "use"
                    attr NMTOKENS #IMPLIED
                    %val;>
         
        <!-- ####################### SET ########################## -->
         
            <!ATTLIST set %coif;
                    insert IDREF #IMPLIED>

            <!ATTLIST time %class;
                    unit (month | week | day | hour | minute | second | millisec) "second"
                    length NMTOKEN #IMPLIED 
                    start CDATA #IMPLIED
                    end CDATA #IMPLIED
                    repeat NMTOKEN #IMPLIED
                    finish (loop | remove | hold) "hold"
                    delay NMTOKEN #IMPLIED>
         
            <!ATTLIST space %class;
                    role (root | column | row) "root"
                    unit (pixel | point | percent) "pixel"
                    width NMTOKEN #IMPLIED
                    height NMTOKEN #IMPLIED
                    position NMTOKENS #IMPLIED
		    margin NMTOKENS #IMPLIED
                    halign (left | center | right) "left"
                    valign (top | center | bottom) "top">
         
           <!ATTLIST text %class;
                    role (none | bold | italic | underline | strikeout | smallcaps | pre | nowrap) "none"
                    font CDATA #IMPLIED
                    size NMTOKEN #IMPLIED
                    case (normal | upper | lower | capitalize) "normal"
                    %color;>
          
           <!ATTLIST effect %class
	            role (none | click | dblclick | mousedown | mouseup | mouseover | mousemove | mouseout | keypress | keydown | keyup) "none"
		    %val;
		    go IDREF #IMPLIED
		    back (normal | tile | fixed | fill) "normal"
		    %color;
		    break (space | line | border) "space"
		    bwidth NMTOKEN #IMPLIED	
		    bcolor CDATA #IMPLIED
		    list (none | ordered | unordered) "none">

            <!ATTLIST content %co;
                    role (data | logic | style) "data"
                    src (link | insert) "link"
                    xml:space (default | preserve) "preserve">
         
        <!-- ##################### INSERT ######################## -->
         
            <!ATTLIST insert %co; %filter;
                    public ID #IMPLIED
                    direct IDREF #IMPLIED
                    child %yny;>
         
        <!-- ##################### LOCAL ######################### -->       
         
            <!ATTLIST local %coif;> 

Copyright 1999 by L. C. Rees.
.
home