Specification: Portable Storage Information Contributors: Patrick W. Hayes, Jr., L. C. Rees, D. E. Evans Version: 0.4.1 Created: 3.22.2002 Modified: 6.27.2002 Copyright 1999 - 2002 L. C. Rees. All rights reserved. See attached COPYRIGHT file for terms of use. This specification documents Portable Site Information (PSI). It contains all the information an implementer needs. 1 Introduction 1.1 Definition PSI is a data model that maps URI-identifiable nodes in a general format. Its elements and attributes each fall under one of five objectives: 1. Mapping node structure. 2. Mapping node relationships. 3. Separating shared and unique data. 4. Metadata hooks. 5. Fine-grained filtering. 1.2 Extending PSI PSI's data model is compact but remains expressive enough that it can be extended through pure grammar; no changes to the PSI DTD/schema are required. It can be used both for creating PSI content and new functionality. The core PSI package includes bundled PSI extensions for common applications. PSI users can extend or modify these extensions or create new ones. Possible PSI extensions might include: 1. Mapping the structure of websites, intranets, and other groupings of networked resources. 2. Mapping function calls for dynamic data. 3. Mapping common packaging formats, especially if they encrypt, compress, sign, or checksum other files, like RPM, ZIP, TAR, and others. 4. Mapping packaging techniques used by different programming languages like JAR. WAR, and others. 5. Handling all MIME types. 6. Database storage and retrieval. 7. Interfacing with all major filesystems. 8. Conversion to/from data formats/packaging used by different web, content management, and application servers. 9. Mapping directory services like LDAP, X.500, or NDS. 1.3 PSI Content Type The content type of a PSI map is text/xml. 2 STRUCTURE 2.1 Overview PSI maps structures by following the URI syntax defined in RFC 2396 (Uniform Resource Identifiers (URI): Generic Syntax). RFC 2396 divides a URI into four components: ://? or # PSI handles path, fragment, or query components. It does not map scheme and authority components since they are protocol, platform, or application dependent. 2.2 The psi element The psi element is the root of a PSI map. The psi element must appear one time. 2.2.1 The xmlns attribute The xmlns attribute defines the namespace used by a PSI map. It is recommended that a namespace prefix be used with PSI elements and attributes since the majority of a PSI map may be non-PSI data. Information about which version of PSI is being used must be learned from a PSI map's namespace. The psi element requires one xmlns attribute. Its value must match the string "http://psilib.sourceforge.net/psi/0.4". 2.2.2 Example ... 2.2.3 Schema Fragment 2.3 The collection element The collection element maps nodes that can contain other nodes in an infinitely deep series of nestable scopes. Normally it maps infinitely nestable containers like directories, classes, or archives. The term collection originated in RFC 2518 (HTTP Extensions for Distributed Authoring -- WEBDAV): In a path component, nestable scopes like bar in http://foo/bar/spam are separated by backslashes. RFC 2518 defines each of these scopes as a collection: The collection element may appear one or more times. It must be a child of the psi element or itself. 2.3.1 The id attribute The id attribute is a globally unique identifier for a node. The use of the id attribute in PSI is similar to how it is used in XML grammars like XML Schema and HTML. A collection element may have one id attribute. Its value must be a string that is globally unique within a PSI map. This definition applies to other uses of the id attribute in this specification. This specification will detail these other uses if their definition differs substantially from this definition. 2.3.2 The xid attribute The xid attribute, short for "extensible identifier", is a node identifier that is only guaranteed to be unique among a node's immediate siblings. It is used primarily for data generated or stored in a fixed pattern, where the same set of identifiers are reused several times in the same PSI map under parent nodes with different, globally unique identifiers. A collection element may have one xid attribute. Its value must be a string. This definition applies to other uses of the xid attribute in this specification. This specification will detail these other uses if their definition differs substantially from this definition. 2.3.3 The class attribute The class attribute is a reference from one node to another node whose characteristics the first node can inherit. The use of the class attribute in PSI is similar to its use in HTML. A collection element may have one class attribute. Its value must be a string that matches another node's id attribute. This definition will apply to other uses of the class attribute in this specification. This specification will detail these other uses if their definition differs substantially from this definition. 2.3.4 The xref attribute The xref attribute, short for "extensible reference", is a reference that can be extended to define a pattern that identifies another node, usually by its xid attribute. This would commonly be a reference like a file path, a regular expression, or an XPath expression. A collection element may have one xref attribute. Its value must be a string. This definition will apply to other uses of the xref attribute in this specification. This specification will detail these other uses if their definition differs substantially from this definition. 2.3.5 Example ... 2.3.6 Complex Example ... ... ... ... 2.3.7 Schema Fragment 2.4 The resource element The resource element maps nodes with one nestable scope that may contain other nodes with one nestable scope. Possible resources might include documents, users, functions, or binaries. A resource is not allowed to contain infinitely nestable scopes. A collection can; it can have itself as a child while a resource cannot. A resource's nestable scopes are always shallow. The term resource originated in RFC 2396 where a resource is defined as "anything that has identity". In a URI, the resource is the scope at the very end of a path component, like spam in http://foo/bar/spam. The resource element can appear zero or more times. It must be a child of the collection element. 2.4.1 The id attribute The resource element may have one id attribute. 2.4.2 The xid attribute The resource element may have one xid attribute. 2.4.3 The class attribute The resource element may have one class attribute. 2.4.4 The xref attribute The resource element may have one xref attribute. 2.4.5 Example Home ... 2.4.6 Complex Example ... ... ... ... ... Home ... ... Home II ... ... 2.4.7 Schema Fragment 2.5 The fragment element The fragment element maps nodes with one nestable scope. It normally maps pieces of a resource like HTML anchors, class methods, or arbitrary points within files. The fragment is the deepest nestable scope in PSI. A fragment, like a resource, is not infinitely nestable. Collections can have other collections as children. A fragment cannot have another fragment as a child. It has one nestable scope. The term fragment originated in RFC 2396. In a URI, a fragment is any component inserted after a # sign, like guido in http://foo/bar/spam#guido. The fragment element may appear zero or more times. It must be a child of the resource element. 2.5.1 The id attribute The fragment element may have one id attribute. 2.5.2 The xid attribute The fragment element may have one xid attribute. 2.5.3 The class attribute The fragment element may have one class attribute. 2.4.4 The xref attribute The fragment element may have one xref attribute. 2.5.6 Example Home ... 2.6 The text element The text element maps nodes that contain character data, particularly if whitespace preservation is significant. The term text originated in the Document Object Model Recommendation. The text element can appear zero or more times. It must be a child of the log, resource, fragment, param, result, or exception elements. Its content is mixed. 2.6.1 The id attribute The text element may have one id attribute. 2.6.2 The xid attribute The text element may have one xid attribute. 2.6.3 The class attribute The text element may have one class attribute. 2.6.4 The xref attribute The text element may have one xref attribute. 2.6.5 The xml:space attribute The xml:space attribute is a standard XML attribute that tells a processor if whitespace must be preserved or not. The xml:space attribute is defined in XML 1.0 (Second Edition). The text element may have one xml:space attribute. The xml:space attribute must have a value matching one of two strings: 2.6.5.1 The default value The default value indicates that whitespace should be ignored. 2.6.5.2 The preserve value The preserve value indicates whitespace should be preserved. 2.6.6 Example: READ THIS. var i=9; var g='add'; ... 2.6.7 Schema Fragment 2.7 The param element The param element maps arbitrary portions of a query component. RFC 2396 defines the query component as "a string of information to be interpreted by the resource". Each parameter is a portion of a query to a resource, like van and rossum in http://foo/bar/spam?van+rossum. The resource does something based on the query and either returns a result or raises an exception if something is wrong. Parameters may be the contents of either a field, include, link, or text element. A param element may appear zero or more times. It must be a child of the resource or fragment elements. 2.7.1 The id attribute The param element may have one id attribute. 2.7.2 The xid attribute The param element may have one xid attribute. 2.7.3 The class attribute The param element may have one class attribute. 2.7.4 The xref attribute The param element may have one xref attribute. 2.7.5 The required attribute The required attribute defines if a parameter must appear for a query to be valid. The param element must have one required attribute. Its value must match one of three strings: 2.7.5.1 The true value The true value indicates that a parameter is required. 2.7.5.2 The false value The false value indicates that a parameter is not required. 2.7.5.3 The optional attribute The optional value indicates that a parameter is optional. 2.7.6 Schema Fragment 2.8 The result element The result element maps responses a resource can return after in answer to a query. Possible results may be the content of either a field, link, include, or text element. The result element may appear one time. It must be a child of the resource or fragment elements. 2.8.1 The id attribute The result element may have one id attribute. 2.8.2 The xid attribute The result element may have one xid attribute. 2.8.3 The class attribute The result element may have one class attribute. 2.8.4 The xref attribute The result element may have one xref attribute. 2.8.5 Schema Fragment 2.9 The exception element The exception element maps responses a resource can return if a query is invalid. Possible exceptions may be the content of either a field, link, include, or text element. The exception element may appear zero or more times. It must be a child of the resource or fragment elements. 2.9.1 The id attribute The result element may have one id attribute. 2.9.2 The xid attribute The result element may have one xid attribute. 2.9.3 The class attribute The result element may have one class attribute. 2.9.4 The xref attribute The result element may have one xref attribute. 2.9.5 Schema Fragment 2.10 Combined Example ... Login Unsuccessful. Try again. ... ... Frank ... ... frank@frank.com ... 3 RELATIONSHIPS 3.1 Overview Relationships in PSI are mapped with identifiers and references. Any PSI element with a class, xref, or ref attribute can point to another element's id or xid attribute and vice versa. All relationships in PSI are one-to-one; conforming processors must not allow one reference to point to multiple identifiers. The ref attribute maps arbitrary relationships, the class attribute maps inheritance, and the xref attribute maps relationships depending on the context of an expression. Other relationship mapping grammars like xml:base or XLink can be used with PSI but their role is supplemental. PSI-provided links are largely internal; they only map relationships within PSI. The xref attribute may map relationships outside of PSI depending on the context of the expression it contains. 3.2 The link element The link element maps a unidirectional reference that acts as a stand-in for an actual node. It would normally map unidirectional links like HTML hrefs, aliases, shortcuts, or UNIX soft links. The link element can appear zero or more times. It must be a child of the filter, collection, resource, fragment, param, result, or exception elements. Its content is mixed. 3.2.1 The ref attribute The ref attribute is a reference to the globally unique identifier of the node a link element is standing-in for. The link element may have one ref attribute. Its value must be a string matching another node's id attribute. 3.2.2 The xref attribute The xref attribute is a reference containing an pattern that identifies the node a link element is a stand-in for. The link element may have one xref attribute. Its value must be a string. 3.2.3 Example Home About Us ... 3.2.4 Schema Fragment 4 DATA SHARING 4.1 Overview. Data sharing is mapped in PSI by separating data shared by multiple nodes from data unique to one node. Shared data is mapped in nodes that act like templates. Inside a template node, areas between blocks of shared data are mapped as replaceable fields. An outside node's class or xref attribute then references a replaceable field's id or xid attribute within a template node. During use, the node's unique data is inserted at the location of the replaceable field it references. Shared data is inserted around the replaceable field. 4.2 The field element The field element maps locations inside a node that can be replaced by data from more than one outside source. The use of the field element is similar to the use of format strings (%s) in the Python programming language. This line of Python code: >>> print "The %s who say %s!" % ("knights", "Ni!") will result in: "The knights who say Ni!" The field element may appear zero or more times. It must be a child of the resource, fragment, param, result, or exception elements. 4.2.1 The id attribute. The field element may have one id attribute. 4.2.2 The xid attribute The field element may have one xid attribute. 4.2.3 Example ...

The who say .

...
Knights Ni! knights ni!
This will result in:

The Knights who say Ni!

when the resource "CapDoc" is processed or:

The knights who say ni!

when the resource "noCapDoc" is processed. 4.2.4 Schema Fragment 4.3 The include element The include element maps locations inside a node where data from one other source can be inserted. This maps one-to-one relationships, not one-to-many relationships like the field element. The include element is the PSI equivalent of xml:include. xml:include can be used for inserting external content into PSI. PSI's include element is strictly internal. It only maps where a node defined in PSI will be inserted into another node defined in PSI. The include element can appear zero or more times. It must be a child of the resource, fragment, param, result, or exception elements. 4.3.1 The ref attribute The ref attribute is a reference to the globally unique identifier of an outside node that will be inserted into a node. The include element may have one ref attribute. Its value must match the id attribute of another node. 4.3.2 The xref attribute The xref attribute is a reference containing a pattern that identifies an outside node that will be inserted into a node. The include element may have one xref attribute. Its value must be a string. 4.3.3 Example ... Home ... 4.3.4 Schema Fragment 5 METADATA HOOKS 5.1 Overview In PSI, a node can be described to whatever level of detail desired. PSI provides only the most basic internal metadata. Its handling of metadata is intended to provide little more than hooks for other metadata grammars like RDF/Dublin Core: 5.2 The metadata element The metadata element is a listing of information about a node. The use of the metadata element in PSI is similar to its use in SMIL 2.0. The metadata element may appear once. It must be a child of the collection, fragment, or resource elements. 5.2.1 The state attribute The state attribute maps a node's current condition. It could be used to plan how a node will be structured, indicate a resource is locked, or trigger version control. The metadata element may have one state attribute. Its value must match one of four strings: 5.2.1.1 The planned value The planned value indicates that this node will be created in the future. This would be used if the basic layout of a node was being laid out but had not been populated with data yet. 5.2.1.2 The readlock value The readlock value indicates that a node is currently in use and locked against reading or writing. 5.2.1.3 The writelock value The writelock value indicates that a node is currently in use and locked against writing. 5.2.1.4 The nolock value The nolock value indicates that a node is not being used. 5.2.2 The ref attribute The ref attribute is a reference to the globally unique identifier of the outside node currently using a node. This would normally correspond to a a human or computer user mapped as a resource. The metadata element may have one ref attribute. Its value must be a string matching the id attribute of another node. 5.2.3 The xref attribute The xref attribute is a reference with a pattern that identifies an outside node currently using a node. The metadata element may have one xref attribute. Its value must be a string. 5.2.4 Example ... ... ... ... 5.2.5 Schema Fragment 5.3 The log element The log element is a single record entry in a node's usage history. The log element may appear zero or more times. It must be a child of the metadata element. 5.3.1 The type attribute The type attribute defines what kind of use was recorded. Usually, this was how a node was accessed. The log element requires one type attribute. Its value must match one of five strings: 5.3.1.1 The read value The read value indicates the recorded use was a node being accessed by an outside node. 5.3.1.2 The write value The write value indicates the recorded use was a node being modified by an outside node. 5.3.1.3 The create value The create value indicates the recorded use was a node being created by an outside node. 5.3.1.4 The delete value The delete value indicates the recorded use was a node being removed by an outside node. 5.3.1.6 The acl value The acl value indicates the recorded use was node having its access permissions modified by an outside node. 5.3.2 The state attribute The state attribute records a node's condition at the time the log entry was made. The log element may have one state attribute. Its value must match one of four strings: 5.3.2.1 The planned value The planned value indicates that a node was being planned. 5.3.2.2 The readlock value The readlock value indicates that a node was in use and locked against reading or writing. 5.3.2.3 The writelock value The writelock value indicates that a node was in use and locked against writing. 5.3.2.4 The nolock value The nolock value indicates that a node was not in use. 5.3.3 The start attribute The start attribute records when use of a node began. The log element may have one start attribute. Its value must be a string. 5.3.4 The end attribute The end attribute records when use of a node ended. The log element may have one end attribute. Its value must be a string. 5.3.5 The ref attribute The ref attribute identifies which outside node used a node. This normally corresponds to a human user or processor mapped as a PSI resource. The log element may have one ref attribute. Its value must be a string matching the id attribute of another node. 5.3.6 The xref attribute The xref attribute is a reference with a pattern that identifies an outside node currently using a node. The metadata element may have one xref attribute. Its value must be a string. 5.3.7 Example Some user looked at the directory listing. The webmaster looked at the directory listing. ... ... 5.3.8 Schema Fragment 6 FILTERING 6.1 Overview PSI allows a series of filters to be applied to any node. This allows fine-grained processing control on large nodes and small. Filters can also reference each other to form filter chains. Each filter contains a series of rules. Many of this rules are conditional statements; if true, the processor does something, if not, it passes on to the next rule. A new rule is needed for each new way a processor should be controlled. Filters apply to the node they are attached to and all its children. If a rule from a child node's filter conflicts with a rule from a parent node's filter, the child's filter overrides the parent's filter. A series of link elements can also be inserted under a filter to link to a specific node node should be passed through for processing. 6.2 The filter element The filter element is a series of rules that control how a node is processed. The filter element may appear zero or more times. It must be a child of the collection, template, fragment, and resource elements. 6.2.1 The id attribute. The filter element may have one id attribute. 6.2.2 The xid attribute. The filter element may have one xid attribute. 6.2.3 The ref attribute The filter element may have one ref attribute. The ref attribute usually references the next filter a processor should use if a filter is part of a filter chain. 6.2.4 The xref attribute The filter element may have one xref attribute. The xref attribute usually references the next filter a processor should use if a filter is part of a filter chain. 6.2.5 Example ... ... ... ... 6.2.6 Schema Fragment 6.3 The sort element The sort element maps a rule that controls either a node's order in relationship to other nodes or the order of anything within its scope unless it is overridden locally. This rule can map the order a node occupies in space and time or the order a node and its children are processed in. The sort element may appear zero or more times. It must be a child of the filter element. 6.3.1 The type attribute The type attribute defines a condition that has to be true for a sort rule to be applied. The sort element may have one type attribute. Its value must be a string. 6.3.2 The match attribute The match attribute defines a pattern that has to match the type attribute for a sort rule to be applied. The sort element may have one match attribute. Its value must be a string. 6.3.3 The action attribute The action attribute defines what kind of order will be applied to a node and its children. The sort element requires one action attribute. Its value must match one of seven strings: 6.3.3.1 The none value The none value indicates that a node and its children have no preset order. 6.3.3.2 The root value The root value indicates that a node and its children always come first. 6.3.3.3 The seq value The seq value indicates that a node and its children will be ordered in sequence. 6.3.3.4 The choice value The choice value indicates that a node and its children are alternatives. 6.3.3.5 The par value The par value indicates that a node and its children parallel other nodes and each other. 6.3.3.6 The pass value The choice value indicates that a node and its children are excluded from any sorting. 6.3.3.7 The stop value The stop value indicates that sorting should come to a halt. 6.3.4 The ref attribute The ref attribute references the globally unique identifier of the node a node should sort itself in relation to. The sort element may have one ref attribute. Its value must be a string matching another node's id attribute. 6.3.5 The xref attribute The xref attribute references a pattern that identifies the node a node should sort itself in relation to. The sort element may have one xref attribute. Its value must be a string. 6.3.6 Example ... ... ... ... ... ... ... ... ... 6.3.7 Schema Fragment 6.4 The time element The time element is a rule that maps a node's position in time. This rule could map when a node is available, what place it occupies in a sequence of nodes, or when it disappears. The time element may appear one time. It must be a child of the filter element. 6.4.1 The type attribute The type attribute defines the unit of time a time element uses. The time element may have one type attribute. Its value must match one of eight strings: 6.4.1.1 The year value The year value indicates the unit of time is a year. 6.4.1.2 The month value The month value indicates the unit of time is a month. 6.4.1.3 The week value The week value indicates the unit of time is a week. 6.4.1.4 The day value The day value indicates the unit of time is a day. 6.4.1.5 The hour value The hour value indicates the unit of time is an hour. 6.4.1.6 The min value The min value indicates the unit of time is a minute. 6.4.1.7 The sec value The sec value indicates the unit of time is a second. 6.4.1.8 The mil value The mil value indicates the unit of time is a millisecond. 6.4.2 The action attribute The action attribute defines what happens to a node when its time expires. The time element may have one action attribute. Its value must match one of four strings: 6.4.2.1 The repeat value The repeat value indicates that a node should repeat itself in time (how many times is determined by the value of the repeat attribute). 6.4.2.2 The pause value The repeat value indicates that a node should stop and maintain its state (how long is determined by the value of the pause attribute). 6.4.2.3 The jump value The jump value indicates that a processor should jump from this node to to another node upon completion of this nodes time. 6.4.2.4 The stop value The stop value indicates that a processor should remove a node from the timeline. 6.4.3 The length attribute The length attribute sets the number of time units (defined by the type attribute) that measure a node's time to live. The time element may have one length attribute. Its value must be a string.. 6.4.4 The start attribute The start attribute sets the exact start time of a node's position in time. The time element may have one start attribute. Its value must be a string. 6.4.5 The end attribute The end attribute sets the exact ending time of a node's position in time. The time element may have one end attribute. Its value must be a string. 6.4.6 The repeat attribute The repeat attribute sets how many times a node could repeat itself in time. The time element may have one repeat attribute. Its value must be a string. 6.4.7 The pause attribute The pause attribute defines the time that should elapse between one node's end time and the next node's start time. Can be infinite. The time element may have one pause attribute. Its value must be a string. 6.4.8 The ref attribute The ref attribute references the globally unique identifier of the node the processor jumps to after another node's time expires. The time element may have one ref attribute. Its value must be a string matching another element's id attribute. 6.4.9 The xref attribute The xref attribute references a pattern that identifies the node the processor jumps to after another node's time expires. The time element may have one xref attribute. Its value must be a string. 6.4.10 Example ... ... ... ... ... ... ... ... ... 6.4.11 Schema Fragment 6.5 The access element The access element is a rule that maps how access to a node by an outside node is controlled. If a node represented a user, an access element would reference the id or xid attribute of that node and, based on that, assign it rights. A series of access elements within a filter element forms an access control list. The access element may appear zero or more times. It must be a child of the filter element. 6.5.1 The type attribute The type attribute defines the kind of rights an access element can assign. Most rights can be represented by a combination of the type attribute's values in two or more rules (i.e. permission to copy =write + create). The access element requires one type attribute. Its value must match one of five strings: 6.5.1.1 The read value The read value indicates a node may be accessed by an outside node. 6.5.1.2 The write value The write value indicates a node can be modified by an outside node. 6.5.1.3 The create value The create value indicates that a node may be created by an outside node. 6.5.1.4 The delete value The delete value indicates that a node may be removed by an outside node. 6.5.1.5 The acl value The acl value indicates that a node may have its access permissions modified by an outside node. 6.5.2 The action attribute The action attribute defines if an access right for a node has been granted or denied. The access element requires one action attribute. Its value must match one of two strings: 6.5.2.1 The grant value The grant value indicates that an access right has been granted. 6.5.2.2 The deny value The deny value indicates that an access right has not been granted. 6.5.3 The auth attribute The auth attribute defines what kind of authentication or encryption is required to authenticate the node an access rule applies to. The access element may have one auth attribute. Its value must be a string. 6.5.4 The ref attribute The ref attribute defines what node an access rule applies to by referencing the node's globally unique identifier. The access element may have one ref attribute. Its value must be a string matching another element's id attribute. 6.5.5 The xref attribute The xref attribute defines what node an access rule applies to by referencing a pattern that identifies a node. The access element may have one xref attribute. Its value must be a string. 6.5.6 Example ... ... ... ... 6.5.7 Schema Fragment 6.6 The version element The version element maps how version conflicts over nodes are controlled. A version rule can indicate that a node should be replaced, forked, or archived within PSI if certain conditions are true. Or it can just force processing of a node to abort. A version rule can also control how, if a node is replaced, forked, or archived, its id attribute should be marked to reflect changes in its condition. The version element can appear zero or more times. It must be a child of the filter element. 6.6.1 The type attribute The type attribute defines the PSI attribute that decides what happens in a version conflict. The version element requires one type attribute. Its value must match one of five strings: 6.6.1.1 The class value The class value indicates that a node's association with another node as defined by a PSI class attribute is the deciding factor in a version conflict. 6.6.1.2 The ref value The ref value indicates that a node's association with another node as defined by a PSI ref attribute is the deciding factor in a version conflict. 6.6.1.3 The xref value The xref value indicates that a node's association with another node as defined by a PSI xref attribute is the deciding factor in a version conflict. 6.6.1.4 The type value The type value indicates that the value of a node's type attribute is the deciding factor in a version conflict. 6.6.1.5 The state value The state value indicates that the value of a node's state attribute is the deciding factor in a version conflict. 6.6.1.6 The start value The start value indicates that the value of node's start attribute is the deciding factor in a version conflict. 6.6.1.7 The end value The end value indicates that the value of a node's end attribute is the deciding factor in a version conflict. 6.6.2 The match attribute The match attribute is a string that defines a pattern that, when evaluated against the value of the type attribute, must be true for a version rule to apply to a version conflict. The version element requires one match attribute. Its value must be a string. 6.6.3 The action attribute The action attribute defines what action is taken within PSI when a node version conflict occurs. The version element requires one action attribute. Its value must match one of four strings: 6.6.3.1 The replace value The replace value indicates that processor should replace the existing node with the changed version. 6.6.3.2 The fork value The fork value indicates that the processor should add the changed version of the node as a new, separate node while leaving the existing node intact. 6.6.3.3 The archive value The archive value indicates that processor should assign the existing node a new id attribute value and assign the existing node's old id attribute value to the changed version of the node. 6.6.3.4 The stop value The stop value indicates that a processor should stop processing a node. 6.6.4 The mark attribute The mark attribute defines how the id attribute of a changed node, if it needs to be distinguished from its predecessor, should be changed to differentiate itself from its predecessor. The version element may have one mark attribute. The value of the mark attribute must match one of three strings: 6.6.4.1 The seq value The seq value indicates that the processor should append a sequentially incrementing version number to the id attribute value of a changed node's predecessor. 6.6.4.2 The start value The start value indicates that the processor should append the start time of the node processing activity that created a changed node to the id attribute value of its predecessor. 6.6.4.3 The end value The start value indicates that the processor should append the end time of the node processing activity that created a changed node to the id attribute value of its predecessor. ... ... ... ... ... ... ... ... ... ... 6.6.5 Schema Fragment 7 APPENDIX I 7.1 The PSI Document Type Definition > 7.2 The PSI Schema.