Specification: XML Sapiens 2.0 Red Graphic Systems November 10, 2006 Current version: www.xmlsapiens.org/spec/ (in PDF) Author: Dmitry Sheiko, Red Graphic Systems Reviewers: Maxim Baryshnikov, Red Graphic Systems Pavel Levkovich, Red Graphic Systems (c) 2004-2006 Red Graphic Systems www.redgraphic.com Abstract This specification defines XML Sapiens version 2.0 - the XML-based language used for describing of web-application data, presentation and functionality composition. XML Sapiens - is an SGML application conforming to International Standard ISO 8879 - Standard Generalized Markup Language [ISO8879]. The language complies with the XML specification (http://www.w3.org/TR/2004/REC- xml11-20040204/). Document Status Version 2.0 Available Formats XML Sapiens 2.0 Specification is also available in the following formats: Text file: http://xmlsapiens.org/spec/sapi20.txt (106 Кb), GZIP TAR-file containing HTML-documents: http://xmlsapiens.org/spec/sapi20.tgz (319 Кb), ZIP-file containing HTML-documents (ZIP, not EXE): http://xmlsapiens.org/spec/sapi20.zip (319 Кb), PDF-file: http://xmlsapiens.org/spec/sapi20.pdf (703 Kb). In the event there is a discrepancy between the printed version and the electronic version of XML Sapiens specification, the electronic version shall prevail. Available Languages The English version of this specification is the only normative version. However, for translations of this document, see http://xmlsapiens.org/spec/. Errata The list of known errors in this specification is available at http://xmlsapiens.org/spec/error/ Please report errors in this document to editor@xmlsapiens.org. Contents 1 Introduction 5 2 About XML Sapiens Specification 5 2.1 Specification Structure 5 2.2 Document Conventions 6 2.2.1 Conventions 6 2.2.2 Elements and Attributes 6 2.2.3 Notes and Examples 6 2.3 Acknowledgements 7 2.4 Copyright Notice 7 3 XML Sapiens Architecture 8 3.1 Introduction 8 3.1.1 What is XML Sapiens? 8 3.1.2 What Is Web-Application Functionality? 8 3.1.3 Brief History of the Language 9 3.1.4 How to Use XML Sapiens? 9 3.1.5 XML Sapiens and XSLT 9 3.1.6 XML Sapiens and interface markup languages 11 3.2 XML Sapiens Model of Data Presentation 12 3.2.1 Template 13 3.2.2 Presentation Code 13 3.2.3 XML Sapiens Repository 13 3.3 Objects of SAPI Documents 13 3.3.1 Query Containers 13 3.3.2 Field sets 14 3.3.3 Dynamic Data Containers 14 3.3.4 Objects Identification 14 3.4 DDC Call Parameters 15 3.5 DDC Stream Redirection 16 3.6 XML Sapiens Expressions 16 3.7 Inclusion of XML Sapiens Documents 17 3.7.1 Inclusions of CMS System Language Code 17 3.7.2 Inclusions of files 17 3.8 XML Sapiens - based CMS 17 3.8.1 Model of Managed Site 17 3.8.2 Structure of a XML Sapiens-based CMS 19 3.8.3 XML Sapiens Processor 20 3.8.4 Recommended Environment Variables 22 3.8.5 Recommended CMS Applications 22 3.8.6 XML Sapiens Namespace 27 4 Document Structure 27 4.1 Introduction 27 4.2 SGML Constructs Used in XML Sapiens 28 4.2.1 Elements 28 4.2.2 Attributes 29 4.2.3 Character References 29 4.2.4 Comments 30 4.3 How to Read the XML Sapiens DTD 30 4.3.1 DTD Comments 30 4.3.2 Parameter Entity Definitions 30 4.3.3 Element Declarations 31 4.3.4 Attribute Declarations 32 4.4 Basic Data Types 32 4.4.1 Case Information 33 4.4.2 Basic Data Types 33 4.4.3 Text Strings 33 4.4.4 URIs 33 4.4.5 Single Characters 34 4.4.6 Character Data 34 4.4.7 Dates and Times 34 5 Global Structure of a XML Sapiens Document 35 5.1 Introduction to the XML Sapiens Document Structure 35 5.2 XML Sapiens Version Information 35 5.3 The XML Sapiens Element 36 5.3.1 Attribute version 36 5.3.2 Attribute xmlns:sapi 37 5.3.3 Attribute encoding 37 5.3.4 Attribute cache 37 5.3.5 Attribute mdate 37 5.4 XML Sapiens Document Namespace 37 5.4.1 Element SAPI:NAMESPACES 38 5.4.2 Element SAPI:NAMESPACE 38 5.4.3 Element SAPI:SITE 39 5.4.4 Element SAPI:SITE-LANG 39 5.4.5 Element SAPI:SITE-ITEM 40 5.4.6 Element SAPI:CONTAINER 40 6 Body of the XML Sapiens Document 42 6.1 Code Owner Information 42 6.1.1 Element SAPI:AUTHOR 42 6.1.2 Element SAPI:NAME 42 6.1.3 Element SAPI:EMAIL 42 6.1.4 Element SAPI:URI 43 6.2 Comments 43 6.2.1 Element SAPI:COMMENTS 43 6.3 Data Containers 43 6.3.1 Query Container (Element SAPI:QC) 44 6.3.2 Dynamic Data Container (SAPI:DDC) 47 6.3.3 Field set (Element SAPI:FIELDSET) 54 6.4 Pointers 58 6.4.1 Pointer (Element SAPI:APPLY) 58 6.4.2 Pointer (Attribute SAPI:%Attribib) 59 6.5 Additional Operands 60 6.5.1 File Inclusion (Element SAPI:INCLUDE) 60 7 XML Reference Information for SAPI 61 7.1 Document Validation 61 8 References 61 8.1 Normative References 61 8.2 Informative References 63 9 Conclusion 65 1 Introduction XML Sapiens is XML-based language used for describing of web-application data, presentation and functionality composition. XML Sapiens is aimed to help at cutting down time expenses in a web-project development thus lowering project's cost and to minimize laborious system programming in web-site development. It is achieved by the web-application development within three self-depended aspects: data, presentation and functionality. 2 About XML Sapiens Specification 2.1 Specification Structure The specification consists of the following sections: Sections 2 and 4: Introduction to XML Sapiens The introduction gives overview of XML Sapiens, provides a brief history of the development of the XML Sapiens language and provides some tips on XML Sapiens usage. "Documentation Structure" contains guidelines on how to read XML Sapiens Document Type Definitions (DTD). Sections 5 - 6: XML Sapiens Reference Manual The major part of the reference manual is the XML Sapiens language reference, which defines all elements and attributes of the language. This document has been designed by topics rather than by the grammar of XML Sapiens. The language reference consists of the following information: Objects that make up a logical model of a website document: › Interaction of these objects. › Definition of content queries. › Description of functional scenarios. Formal SGML-definition of XML Sapiens: SGML-definition of XML Sapiens DTD: http://xmlsapiens.org/spec/sapi20.dtd. References A list of normative and informative documents. . 2.2 Document Conventions 2.2.1 Conventions This specification is intended to help a wide range of CMS-developers to organize user interface management using XML Sapiens. The specification allows its readers to become familiar with the XML Sapiens language, to master it and use it in various projects. The specification can be approached in several ways: › Read from beginning to end. The specification begins with a general presentation of the XML Sapiens language and becomes more technical and specific towards the end. › Quick access to information. In order to get information about syntax and semantics as quickly as possible, the electronic version of the specification includes the following features: o Every reference to an element or attribute is linked to its definition in the specification. o The front pages of the three sections of the specification extend the initial table of contents with more detail about that section. 2.2.2 Elements and Attributes Names of the elements are written in uppercase letters (for example, SAPI:COMMENTS). Names of the attributes are written in lowercase letters (for example, title). Please note that in XML Sapiens the names of elements and attributes are not case-sensitive. The convention is meant to encourage readability. Element and attribute names in this document have been marked up and may be rendered specially by some user agents. Each attribute definition specifies the type of its value. If the type allows a small set of possible values, the definition lists the set of values separated by a bar (|). After the type information, each attribute definition indicates the case-sensitivity of its values in square brackets ("[]"). See Section 4.4.1 for details. 2.2.3 Notes and Examples Informative notes are emphasized to stand out from the surrounding text and may be rendered specially by some user agents. The examples and notes have been marked up and may be rendered specially by some user agents. 2.3 Acknowledgements Thanks to everyone who has helped to author the XML Sapiens specification. Special thanks to the management of Red Graphic Systems (http://www.redgraphic.com) for project support, financial and technical assistance. Many thanks to the project team: Author of the specification: Dmitry Sheiko (d@redgraphic.com) Reviewers: Maxim Baryshnikov (mb@redgraphic.com) and Pavel Levkovich (pl@redgraphic.com) Thanks to Irina Znosok (i@redgraphic.com) for the design of the project www.xmlsapiens.org. Thanks to Pavel Levkovich (pl@redgraphic.com) for the layout of the project www.xmlsapiens.org and HTML-version of the specification. Special thanks to Maxim Baryshnikov for the development of the XML Sapiens -processor and XML Sapiens-oriented Open Source CMS (SAPID). Many thanks to the members of the working group HTML 4 for the sample and template of a high-class structure and contents of the language specification (Copyright (c) World Wide Web Consortium, http://www.w3.org/TR/html401). 2.4 Copyright Notice Copyright (c) 2004-2006 Red Graphic Systems, (www.redgraphic.com). All rights reserved. The documents available at http://xmlsapiens.org are provided by their respective copyright holders according to the following license. By obtaining, using and/or copying this document or the document from xmlsapiens.org containing a reference to the present notice, you agree that you have read, understood, and will comply with the following terms and conditions: Permission to use, copy and distribute any part of this document or the document from xmlsapiens.org containing a reference to the present notice, by any means and for any purpose and without fee or royalty is hereby granted, provided that the following information appears on all copies of the document or portions thereof: › Reference to the original document of xmlsapiens.org or its URL. › Copyright notice of the original author, if available. Otherwise, the following notice shall be provided: "Copyright (c) Red Graphic Systems. All rights reserved." › Document status, if available. › If space permits, the full text of the NOTICE below shall be included. › Besides, any software or document based on or derived from this document or its parts should include a Thank you notice to the copyright holders. This license grants no permissions to modify the original document or create any documents on its basis. THIS DOCUMENT IS PROVIDED "AS IS"; COPYRIGHT HOLDERS GIVE NO WARRANTIES, EXPRESS OR IMPLIED. BY WAY OF EXAMPLE, BUT NOT LIMITATION, COPYRIGHT HOLDERS GIVE NO WARRANTIES OF MERCHANTIBILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE USE OF THIS DOCUMENTS WILL NOT INFRINGE ANY THIRD-PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. COPYRIGHT HOLDERS WILL BEAR NO LIABILITY FOR ANY DAMAGE OR LOSS, DIRECT, INDIRECT, INTENTIONAL OR REGULAR, CAUSED BY THE USE OF THIS DOCUMENT OR PORTIONS THEREOF. The name and trademarks of copyright holders may NOT be used in advertising pertaining to this document or its contents without specific, written prior permission. Title to copyright in this document will at all times remain with copyright holders. 3 XML Sapiens Architecture 3.1 Introduction 3.1.1 What is XML Sapiens? XML Sapiens is XML-based language used for describing of web-application data, presentation and functionality composition. XML Sapiens is aimed to help at cutting down time expenses in a web-project development thus lowering project's cost and to minimize laborious system programming in web-site development. It is achieved by the web-application development within three self-depended aspects: data, presentation and functionality. XML Sapiens is an XML-based language that allows authors to manage the objects of the web-application document and their interaction, to detach the functional level of the web- application from the presentation and data levels (see section 3.8.1). XML Sapiens unifies the description of user interfaces for CMS and enables free interchange of such through "XML Sapiens Works Gallery" (http://xmlsapiens.org/lib/). 3.1.2 What Is Web-Application Functionality? The functionality of a web-application, its part or a separate document is a user interface that enables interaction between the user and the web-application. The most typical examples of site functional solutions are the following: navigation site menu, document path indicator, news module, dynamic authorization form, etc. Any functional solution can be defined in a XML Sapiens-document and used in the web-application. A functional solution can be also imported from the "XML Sapiens Works Gallery" (http://xmlsapiens.org/lib/), tailored to specific needs and then implemented in a project. 3.1.3 Brief History of the Language In the middle of 2003, Red Graphic Systems faced the task to create an environment for web-application development that could enable efficient management of web-project content, as well as of the presentation and functionality (see section.3.8.1). As a result, the Site Sapiens platform (http://www.sitesapiens.com) was developed, which derived from a XML Sapiens language prototype. 3.1.4 How to Use XML Sapiens? In order to use XML Sapiens you will need a XML Sapiens processor. You can use an available Open Source solution of Red Graphic Systems for PHP (http://sapiprocessor.sourceforge.net/) or develop your own processor based on the recommendations of the XML Sapiens working group (for details please refer to section 3.8.1). 3.1.5 XML Sapiens and XSLT Any web document can be logically divided into data and their presentation. Besides, a web document as a rule contains elements of user interface (navigation, forms for information input, ect.). In compliance with W3C recommendations, document presentation - in spite of its data - is managed by XSLT technology (http://www.w3.org/TR/xslt). Document's data are placed in an XML file and changed according to XSLT template rules. With the help of XSLT it is also possible to assign presentation for user interface forms, but initial data of these forms in the XML file are necessary for such a change. XML Sapiens allows defining data source for each user interface form as well as describing the form logic. XML Sapiens processor will analyze developer instructions and will broaden the initial XML file with user interface form data for the current environment state. Based on the data received from the XML file, XSLT transformer will create the final form of the document. Thus XML Sapiens helps to separate abstract constituents of a web-site: data, presentation and user interface. Initial XML data1 data2 <sapi:apply name="qc.title.value"> XML Sapiens file script interface.sapi Menu not found CMS-application error Final XML data1 data2 /intro/ Introduction /chapter1/ Chapter 1 /chapter2/ Chapter 2 <![CDATA[Introduction]]> Content

]]>
3.1.6 XML Sapiens and interface markup languages XML Sapiens can be used for declaration of user interface rendering, but it doesn't contain API to access a component library at client side like XAML/ XUL/ MXML (Flex) do. XML Sapiens can be used in tandem with (www.uiml.org) for dynamic creation of skeleton for application area and element definition list (content of APP/DEFINE elements). XML Sapiens also can help to improve initial documents XUL (http://www.mozilla.org/projects/xul/), XAML (http://msdn.microsoft.com/library/default.asp?url=/library/en- us/dnintlong/html/longhornch03.asp), Flex (http://www.macromedia.com/software/flex/), Web Applications 1.0 (http://www.whatwg.org/specs/web-apps/current-work/) to define editable areas and to define models of user interface forms. 3.2 XML Sapiens Model of Data Presentation For better understanding of the XML Sapiens technology, we should analyze the process of document generation in a XML Sapiens-based system. After document request the system identifies it, get its content and attributes. Also it determines document template. The presentation code corresponds to the syntax of the selected markup language (HTML, XHTML, SVG, etc.) and contains XML Sapiens instructions. System passes the template and the content of the document to XML Sapiens processor, which returns transformed ready-to-display document. Figure 1. XML Sapiens Model of Data Presentation While document is being transformed the XML Sapiens processor analyses the code of the template turning to XML Sapiens repository (XML Sapiens object set) when it is necessary. The pointers of XML Sapiens query containers are transformed in according with environment state (document review, document editing and so on) and container instructions. They can turn into related content object, decorated content object or user interface of the content query. The pointers of field sets are transformed into content query groups. The pointers of dynamic data containers are transformed in according with assigned algorithms. SAPI:INCLUDE instructions are changed by code of requested files. 3.2.1 Template You can assign a template for any type of document or a group of documents, which specifies how the document is displayed on the website. The template contains a presentation code and pointers to XML Sapiens objects. 3.2.2 Presentation Code To define the layout of the document displayed in the browser or in any other client-based user software for interaction with the site, the code of the selected markup language is used. XML Sapiens has no limitations for the list of allowed markup languages. However, it is recommended to use XML-based languages or HTML. 3.2.3 XML Sapiens Repository XML Sapiens repository is set of XML Sapiens object files, valid DTD XML Sapiens. 3.3 Objects of SAPI Documents 3.3.1 Query Containers Query containers (see section 6.3.1) refer to the fragments of the document displayed on the site; the content of these fragments can be modified by the administrator. The containers contain the code of user data queries and related formatting. The query code is provided in the syntax of the markup language of the presentation code. For example: &this.title.value; &this.data.value; If the processor has found a query container of this type (inputtext) it chooses the appropriate section of the description (if it is content delivery, it takes the section where state="delivery", if it is administration, it takes the section where state="admin"). 3.3.2 Field sets If we need the document is displayed in different ways within different environment stages, we can define document field sets for specified stages by means of a SAPI:FIELDSET object. 3.3.3 Dynamic Data Containers Dynamic data containers (see section 6.3.4) refer to the fragments of the document displayed on the website. The content of these containers is based on a functional algorithm. These containers contain the description of functional algorithms. 3.3.4 Objects Identification A XML Sapiens object can be called through the SAPI:APPLY pointer, or directly in the condition expression. Objects identifiers have the following syntax: object_name.object_attribute XML Sapiens objects have the following attributes: Category Description value Value returned by the object Sample output of static data container content, where the name of the container is var1: Sample content output of a node of the CMS applications nodes set (see section 3.8.5.7) in the body of a dynamic data container (name of the container implies "this", name of the set implies "this", name of the set variable is "envar"): Sample expression of a dynamic data container condition in the body of the container (name of the container implies "this", name of the set implies "this", name of the set variable is envar): Sample content output of a CMS environment variable, where the name of the variable is var1: 3.3.4.1 Properties of the Node of the CMS Application Nodes Set A node of the set (see section 3.8.5.7) returned by a CMS application has the following properties: Command Description position Returns the position of the current node within the nodes set (starting with 1). length Returns the number of nodes within the nodes set. The number of nodes in the CMS application nodes set can be found out in the following way: 3.4 DDC Call Parameters If it is necessary to use in templates one and the same DDC, but differently, depending on its position, it is possible to indicate DDC call parameters for further analysis of they values in DDC conditions. Delivery of DDC parameters is performed in the following way: Value of param 1 Value of param 2 Values of DDC parameters will be available in DDC conditions in the following variables: this.param.pvar1.value and this.param.pvar2.value 3.5 DDC Stream Redirection If representation template projecting requires to start CMS-application of particular DDC, but not return DDC source code into the template immediately it is necessary to use the DDC stream redirection into environment variable. Thus a new variable will be created which will take the DDC code. Further this variable can be shown once or several times in the template by the SAPI:APPLY element. DDC stream redirection syntaxes is as follows: ... ... 3.6 XML Sapiens Expressions XML Sapiens expressions can be used to describe the logic of functional solutions in dynamic data containers. While developing the expression operands the constructions of the XML script language XEXPR (http://www.w3.org/TR/2000/NOTE-xexpr-20001121/) where used. The XML Sapiens specification supports expressions of comparison. There expressions can return one of the two values (0 or1), meaning respectively either FLASE or TRUE In the content of attributes XML Sapiens specification allows the following expression operands: lt(A, B, C) (less), leq(A, B, C) (less or equal), geq(A, B, C) (more or equal), eq(A, B, C) or == (equal), neq(A, B, C) or != (not equal), gt(A, B, C) (more). A B C - values, separated by commas. For grouping the expressions, it is allowed to use round brackets, and logic operands as well: and(A, B, C) or AND(A, B, C) and or(A, B, C) or OR(A, B, C). It is also allowed to use mathematic operands: add(A, B, C) or + (add - for numerals, merge - for strings), subtract(A, B, C) or - (substraction), multiply(A, B, C) or * (multiplication), divide(A, B, C) (division). XML Sapiens expressions allow direct reference CMS environment variables. E.g. Records not found CMS-application error The expressions can be used in the EXP attribute of the SAPI:WHEN element, in the SELECT attribute of the SAPI:FOR-EACH element, in the EXP attribute of the SAPI:APPLY element or in the attributes of SAPI:%Attrib format If it is necessary to get the executive result of the XML Sapiens expression, the following syntaxes can be used in container code (SAPI:CODE element) 3.7 Inclusion of XML Sapiens Documents 3.7.1 Inclusions of CMS System Language Code In certain cases a direct access to the code of CMS development language is required. XML Sapiens supports inclusions of system language code of the following syntax: When a XML Sapiens data container contains inclusions of external language code, it should be specified in the EXTERNAL container attribute. System language inclusions are not recommended, since they cause loss of system solutions portability. 3.7.2 Inclusions of files Following statement is used to include and evaluate files: 3.8 XML Sapiens - based CMS 3.8.1 Model of Managed Site A site managed by CMS can be represented by four logical levels. The data level defines the infrastructure of incoming content. The functional level describes the models of interactions between various user groups from data presentation interfaces. The presentation level is a mature user interface that enables delivery of the requested media data to the Internet/Intranet users. The management level is an interface of CMS administrative area; it allows users to manage data, functionality and presentation levels. Figure 2. Four-level model of a managed site 3.8.1.1 Data Level The infrastructure of the data arriving at the site can have various implementations. However, XML Sapiens contains guidelines on using the query containers (see section 6.3.1), which define the management interface by the contents provided in the CMS administrative area. When saying that the CMS is used in the site administration mode, the administrative level or the administrative area is implied. 3.8.1.2 Functional Level The functional level of a site is described in the XML Sapiens repository. 3.8.1.3 Presentation Level This document describes the following data presentation model: When displaying any part of the site, according to the parameters of the requested document (URI), CMS determines the environment variables compatible with the XML Sapiens specification. Then the system identifier of the requested site document and its related definition are determined, including the pointers to the document presentation template and the XML Sapiens repository. These parameters are transferred to the XML Sapiens processor for generation of the site document presentation. The CMS mode in the process of visitors looking through the site implies the presentation level or the presentation area. Figure 3. Model of the data presentation process 3.8.2 Structure of a XML Sapiens-based CMS According to the XML Sapiens specification, CMS contains a prehandler that analyzes the current URL and defines the environment variables (see section 3.8.4). CMS also contains a sufficient number of presentation templates (see section 3.2.1), a XML Sapiens repository (see section Ошибка! Источник ссылки не найден.), a data repository and a processor that generates the document. Figure 4. MVC paradigm of XML Sapiens 3.8.2.1 CMS Data Repository The CMS data repository stores the managed content of the site. Each document of the site has its own unique identifier. Each element of the site can have an unlimited number of query containers, which act as content fragments in the process of document presentation. The content provided in a certain query container for a certain document in the administrative area is placed in the data repository so that it could be restored by the same parameters when viewing the site at the presentation level. 3.8.3 XML Sapiens Processor The XML Sapiens specification does not limit the developers to one platform or one technological solution for CMS documents assembling. To get a general idea of the XML Sapiens concept, considering the principle of document generation in a XML Sapiens- based CMS during site viewing is suggested. 3.8.3.1 XML Sapiens-Transformations during Site Viewing At the initial stage of the process, according to the URL typed in the address bar or bound to a link, CMS environment variables (see section 3.8.4) are determined. Next the processor accesses the presentation template and checks for the presence of XML Sapiens object pointers (SAPI:APPLY, section 6.4). To ensure full compliance with the XML Sapiens specification, the presence of constructs should be analyzed, since their content is transmitted to the system language for further execution. Using the pointers in the document template, the processor calls the XML Sapiens repository for objects content (see section 3.3). 3.8.3.1.1 Analysis of Data Pointers When the processor refers to a XML Sapiens repository through a data pointer, it returns to the document prototype a value of the CMS environment variable with the name specified in the NAME attribute of the SAPI:APPLY element. 3.8.3.1.2 Analysis of Query Containers When the processor refers to a XML Sapiens repository through a pointer to a query container, it returns appropriate content to the document prototype. Let's consider a query container pointer: The content will be transferred to the document prototype. It will correspond to the CMS data repository container newsbody (news content) of the document. 3.8.3.1.3 Analysis of Field Sets When the processor meets field set inclusions, it fetches the instructions of an appropriate field set for current environment stage and returns it into the document prototype. Example: 3.8.3.1.4 Analysis of Dynamic Data Containers When the processor refers to a XML Sapiens repository through a pointer to a dynamic data container (see section 6.3.2), it analyzes the content of the container. First of all, the conditions of the root element SAPI:CHOOSE are analyzed. The condition expressions SAPI:EXP are parsed in the syntax specified in part Ошибка! Источник ссылки не найден.. The content of the conditions, the expressions of which are TRUE, are added to the returned value thread. If the condition contains the SAPI:FOR-EACH construct, the application specified in the SELECT attribute is called in according with specified parameters (). A similar condition analysis will be carried out as many times as there are values in the returned nodes set (see section 3.8.5.7). As soon as all instructions of the dynamic data container are implemented, the processor returns to the document prototype the returned value thread. 3.8.3.1.5 Analysis of System Language Inclusions When the processor finds constructs, it sends their content to the CMS system language for execution. The result of implemented instructions is returned into the document prototype. 3.8.3.1.6 Analysis of File Inclusions When the processor finds constructions, it fetches the specified file, processes it and returns its content into the document prototype. 3.8.3.2 XML Sapiens-Transformation during Site Administration Administration area is the interface for document content management. A document may contain an unlimited number of query containers, which will be represented in the interface by corresponding forms. Types of the forms are defined in the query container. In the administration area the processor operates the same way as in the presentation area, except that the query containers are processed differently. The pointers to the XML Sapiens query containers is transformed into GUI content query forms. 3.8.4 Recommended Environment Variables Environment variables are the variables created in the process of site document generation. Environment variables are mostly defined at the beginning of the process based on address string parameters (URL). Environment variables contain all the necessary information about the selected document and about the executed interface command. The meaning of SAPI:EXP expressions is in comparative operations with the CMS environment variables. Starting at 1.1 version of XML Sapiens specification, environment variables represented as object tree. Root element of this tree is abstract element "project". It defines interface of entire information area. "Project" objects set unite all site definition objects. Objects' names correspond to variables, identifying sites or language versions of sites in information area structure. Each of these site objects contains own set of objects. As a result, to get value of configuration record "feedback_email" can be called in the following way: project.sitea_en.config.feedback_email.value which is equivalent to sitea_en.config.feedback_email.value If this value belongs to current site, syntax simplifies: config.feedback_email.value 3.8.5 Recommended CMS Applications XML Sapiens does not describe functional solutions at the system level. The structure of the data repository and interaction with it are designed at the discretion of CMS developers. However, for description unification and exchange of functional solutions (see "XML Sapiens Works Gallery" http://xmlsapiens.org/lib/) the specification provides a list of recommended applications to be referred to in dynamic data containers. The list contains applications (functions of the CMS programming language), their descriptions, parameters and variables of returned nodes sets (see section 3.8.5.7). The XML Sapiens specification provides no recommendations on the content of the functions, but recommends input data (parameters) and output data (nodes properties of the CMS application nodes set). The most recent list of recommended applications for XML Sapiens-based CMS is available at: http://xmlsapiens.org/spec/functionlist/ 3.8.5.1 get_infochannel() Description: Retrieves informational channel (record set) data Use value_1 value_1 Parameters: * limit {A,B} - assigns the limitation of displaying node number * sources {Doc/RecID of the record set} - assigns the sources of the record set * root {record set address} - assigns relational address of the record set * orderby {struct.fieldname ASC} - assigns sorting key of the list * withdata {yes} - gets attributes and data into the list * levellimitation {A,B} - assigns the limitation of level range * withpathscalculation - gets know information about parent sections * groupby - assigns the key of list grouping * filter {line} - assigns the key of list filtration Node set variables: * this.length.value - list element number * this.this.id.value - node ID * this.this.level.value - nesting level * this.this.type.value - node type (record/recset) * this.this.cdate.value - creation time (DATETIME ) * this.this.cdatetime.value - creation time (UNIX TIMESTAMP) * this.this.mdate.value - modification time (DATETIME) * this.this.href.value - node address * this.this.counter.value - address counter * this.this.recsetslength.value - nesting record set record number * this.this.fieldname.value - index filed value * this.this.parent_name.value - name of the parent section * this.this.parent_href.value - pointer of the parent section 3.8.5.2 get_tree() Description: Retrieves the hierarchical structure of the informational space or of its part. Use value_1 value_1 Parameters: * limit {A,B} - assigns the limitation of displaying nodes number * root {branch address} - retrieves a branch of structure tree * orderby {struct.fieldname ASC} - assigns sorting key of the list * withdata {yes} - to get attributes and data into the list * levellimitation {A,B} - assigns the limitation of level range * filterbyrelation {relation_name} - assigns association filter Node set variables: * this.length.value - list element number * this.this.id.value - node ID * this.this.level.value - nesting level * this.this.type.value - node type (record/recset) * this.this.cdate.value - creation time (DATETIME ) * this.this.cdatetime.value - creation time (UNIX TIMESTAMP) * this.this.mdate.value - modification time (DATETIME) * this.this.href.value - node address * this.this.counter.value - address counter * this.this.branchlength.value - nesting structure branch element number * this.this.recsetslength.value - nesting record set record number * this.this.document_id.value - ID of the branch first document 3.8.5.3 get_recorddata() Description: Gets record content Use value_1 value_1 Parameters: * sources {document ID} - gets the record with specified ID Node set variables: * this.this.id.value - node ID * this.this.type.value - node type (record/recset) * this.this.cdate.value - creation time (DATETIME ) * this.this.cdatetime.value - creation time (UNIX TIMESTAMP) * this.this.mdate.value - modification time (DATETIME) * this.this.href.value - node address * this.this.fieldname.value - field data 3.8.5.4 get_documentdata() Description: Gets document content Use value_1 value_1 Parameters: * root {document address} - assigns the relational address of the document * sources {document ID} - gets the document with specified ID Node set variables: * this.this.id.value - ID документа * this.this.level.value - nesting level * this.this.type.value - node type (item/recset) * this.this.cdate.value - creation time (DATETIME ) * this.this.cdatetime.value - creation time (UNIX TIMESTAMP) * this.this.mdate.value - modification time (DATETIME) * this.this.href.value - document address * this.this.fieldname.value - field data 3.8.5.5 get_track() Description: Gets the document track Use Parameters: none Node set variables: * this.this.item_id.value - node ID * this.this.item_level.value - nesting level * this.this.item_type.value - document type (item/recset) * this.this.item_var.value - document variable * this.this.cdate.value - creation time (DATETIME ) * this.this.cdatetime.value - creation time (UNIX TIMESTAMP) * this.this.mdate.value - modification time (DATETIME) * this.this.href.value - document address * this.this.name.value - document name * this.this.currentpage.value - chosen section flag 3.8.5.6 get_related() Description: Gets group elements list Use value_1 value_1 Parameters: * relation { association pointer} - assigns an association * parent_sources {parent element ID} - assigns a relationship * child_sources {child element ID} - assigns a relationship Node set variables: * this.this.id.value - node ID * this.this.level.value - nesting level * this.this.type.value - node type (record/recset) * this.this.cdate.value - creation time (DATETIME ) * this.this.cdatetime.value - creation time (UNIX TIMESTAMP) * this.this.mdate.value - modification time (DATETIME) * this.this.href.value - node address * this.this.fieldname.value - field data 3.8.5.7 CMS Application Nodes Set When in the element a reference to the system programming language application is provided, it is implied that the application will return to the processor a set of nodes, the elements of which will be sequentially transmitted to the content of the element and become the list content. Each node of the returned nodes set contains the attributes defined in the Table of recommended CMS applications (see section 3.8.5). Sample reference to CMS application nodes attributes: 3.8.6 XML Sapiens Namespace Conventional site document structure is a hierarchical tree with information area in its root. Each site of the space is the basis of its own structure branch. The next tree level is sections. The XML Sapiens specification allows describing the "visibility" scope for XML Sapiens objects in the common document structure of the information space. For this purpose, the namespace for referencing during data container generation is defined by the SAPI:NAMESPACE element. The namespace definition describes the way it is connected to the areas of common document structure of information space. 4 Document Structure 4.1 Introduction The Extensible Markup Language (XML) is a subset of SGML (http://www.w3.org/TR/2004/REC-xml11-20040204/). SGML is a system for defining markup languages. It allows authors to mark up their documents by representing structural, presentational, and semantic information alongside content (http://www.w3.org/MarkUp/SGML/). XML Sapiens is one of the examples of a SGML markup language. XML Sapiens is compatible with XML. XML Sapiens definitions are provided in this document with the SGML syntax. Names of XML Sapiens elements mostly correspond to related XSL objects (http://www.w3.org/Style/XSL/). 4.2 SGML Constructs Used in XML Sapiens 4.2.1 Elements A SGML document type definition declares element types that represent structures or desired behavior. XML SAPIENS includes element types that represent data containers, comments, functions, etc. Each element type declaration generally describes three parts: a start tag, content, and an end tag. The element's name appears in the start tag (written ) and the end tag (written ); note the slash before the element name in the end tag. For example, the start and end tags of the element type delimit the items in a list: Dmitry Sheiko sheiko@cmsdevelopment.com www.cmsdevelopment.com Some XML SAPIENS element types have no content (SAPI:APPLY, SAPI:INCLUDE, etc.). Such element types should be defined in the syntax of the "empty element tag" (see http://www.w3.org/TR/2004/REC-xml11-20040204/#sec-starttags): Correctness restrictions: Unique attribute specification An attribute name cannot be used more than once within one start tag (or an empty element tag). Correctness restrictions: Absence of character < in attribute values Characters < and > are not allowed in attribute values. All element types mentioned in this specification are listed in the Elements Reference. 4.2.2 Attributes Elements may have associated properties, called attributes, which may have values (by default, or set by authors or scripts). Attribute/value pairs appear before the final ">" of an element's start tag. Any number of (legal) attribute value pairs, separated by spaces, may appear in an element's start tag. They may appear in any order. By default, SGML requires that all attribute values be delimited using either double quotation marks (ASCII decimal 34) or single quotation marks (ASCII decimal 39). Single quotation marks can be included within the attribute value when the value is delimited by double quotation marks, and vice versa. Authors may also use numeric character references (see section 4.2.3) to represent double quotes (") and single quotes ('). For double quotes authors can also use the the character entity reference ". The attribute value may only contain letters (a-z and A-Z), digits (0-9), hyphens (ASCII decimal 45) and periods (ASCII decimal 46). Using quotation marks is strongly recommended. Attribute names are never case-sensitive. Attribute values are generally case-sensitive. The definition of each attribute in the attributes list indicates whether its value is case-sensitive. List of all attributes defined in this specification is provided in the Attributes Reference (see section Ошибка! Источник ссылки не найден.). 4.2.3 Character References Character references are numeric or symbolic names for characters that may be included in a XML Sapiens document. They are useful for referring to rarely used characters, or those that authoring tools make it difficult or impossible to enter. You will see character references throughout this document; they begin with a "&" sign and end with a semi- colon (;). Some common examples include the following: * "<" represents the < sign. * ">" represents the > sign. * """ represents the " mark. * "å" (in decimal) represents the letter "a" with a small circle above it. * "И" (in decimal) represents the Cyrillic capital letter "I". * "水" (in hexadecimal) represents the Chinese character for water. XML Sapiens character references are discussed in detail later in this section on the "List of XML SAPIENS Document Characters". According to the XML specification, using the   reference is not allowed; you can get a non-breaking space using the   reference. 4.2.4 Comments XML SAPIENS comments have the following syntax: White space is not permitted between the markup declaration open delimiter(""). A common error is to include a string of hyphens ("---") within a comment. Authors should avoid putting two or more adjacent hyphens inside comments. Information that appears between comments has no special meaning (for example, character references (see section 4.2.3) are not interpreted as such). 4.3 How to Read the XML Sapiens DTD Each element and attribute declaration in this specification is accompanied by its document type definition fragment. We have chosen to include the DTD fragments in the specification rather than seek more approachable, but longer and less precise means of describing properties of an element. The following tutorial should allow readers unfamiliar with SGML to read the DTD and understand the technical details of the XML Sapiens specification. 4.3.1 DTD Comments In DTDs, comments may spread over one or more lines. In the DTD, comments are delimited by a pair of "--" marks, e.g. Here, the comment "named property value" explains the use of the SAPI:APPLY element type. Comments in the DTD are informative only. 4.3.2 Parameter Entity Definitions The XML SAPIENS DTD begins with a series of parameter entity definitions. A parameter entity definition defines a kind of macro that may be referenced and expanded elsewhere in the DTD. These macros may not appear in XML Sapiens documents, only in the DTD. Other types of macros, called character references (see section 4.2.3), may be used in the text of a XML Sapiens document or within attribute values. When a parameter entity is referred to by name in the DTD, it is expanded into a string. A parameter entity definition begins with the keyword . Instances of parameter entities in the DTD begin with "%", then the parameter entity name, and followed by an optional ";". The following example defines the string that the "%sample;" entity will expand to: The string the parameter entity expands to may contain other parameter entity names. These names are expanded recursively. 4.3.3 Element Declarations A XML SAPIENS DTD consists of element type declarations and their attributes. The character ends it. Between these the following are specified: 1. The element name. 2. Whether the element tag is optional. Two hyphens that appear after the element name mean that the start and end tags are mandatory. One hyphen followed by letter "O" indicates that the end tag can be omitted. A pair of "O" letters indicate that both the start and end tags can be omitted. 3. The element content, if any. The allowed content for an element is called its content model. Element types that are designed to have no content are called empty elements. The content model for such element types is declared using the keyword "EMPTY". The following example demonstrates a declaration of an empty element type: * The element type being declared is SAPI:APPLY. * The hyphen and the following "O" indicate that the end tag can be omitted, but together with the content model "EMPTY", this is strengthened to the rule that the end tag must be omitted. * The "EMPTY" keyword means that instances of this type must not have content. 4.3.3.1 Content Model Definitions The content model describes what may be contained by an instance of an element type. Content model definitions may include: * The names of allowed or forbidden element types. * DTD entities. * Document text (indicated by the SGML construct "#PCDATA"). The text may contain character references (see section 4.2.3). Note that they begin with "&" and end with a semicolon (e.g., "Hergé's adventures of Tintin" contains the character entity reference for the "e acute" character). The content model of an element is specified with the following syntax: ( ... ) Delimits groups. A | B Either A or B must occur, but not both. A , B Either A or B must occur, in that order. A & B Both A and B must occur, in any order. A? A must occur zero or one time. A* A must occur zero or more times. A+ A must occur one or more time. Here is a sample XML Sapiens DTD: The SAPI:EXP element (see section 6.3.2.9) may only contain text and character references (see section 4.2.3); - this is indicated by the SGML data type CDATA. Some XML Sapiens element types use an additional SGML feature to exclude elements from their content model. Excluded elements are preceded by a hyphen. Explicit exclusions override permitted elements. 4.3.4 Attribute Declarations The . Each attribute definition is a triplet that defines: * The name of an attribute. * The type of the attribute's value or an explicit set of possible values. Values defined explicitly by the DTD are case-insensitive. * Whether the default value of the attribute is implicit (keyword "#IMPLIED"), in which case the default value must be supplied by the user agent (in some cases via inheritance from parent elements); always required (keyword "#REQUIRED"); or fixed to the given value (keyword "#FIXED"). Some attribute definitions explicitly specify a default value for the attribute. 4.3.4.1 DTD Entities in Attribute Definitions Attribute definitions may also contain parameter entity references. 4.3.4.2 Boolean Attributes Some attributes play the role of boolean variables. Their presence in the start tag of an element implies that the value of the attribute is "TRUE". Their absence implies the "FALSE" value. Boolean attributes may legally take a single value: the name of the attribute itself. 4.4 Basic Data Types This section of the specification describes the basic data types that may appear as an element's content or an attribute's value. 4.4.1 Case Information Each attribute definition includes information about case-sensitivity of its values. The case information is presented with the following keys: CS The value is case-sensitive (i.e., user agents interpret "a" and "A" differently). CI The value is case-insensitive (i.e., user agents interpret "a" and "A" as the same). CN The value is not subject to case changes, e.g., because it is a number or a character from the document character set. CA The element or attribute definition itself provides case information. CT Refer to the type definition for details about case-sensitivity. If an attribute value is a list, the keys apply to each value in the list, unless otherwise indicated. 4.4.2 Basic Data Types The document type definition specifies the syntax of XML Sapiens element content and attribute values using SGML tokens (e.g., PCDATA, CDATA, NAME, ID, etc). See [ISO8879, http://www.iso.ch/cate/d16387.html] for their full definitions. The following is a summary of key information: CDATA is a sequence of characters from the document character set and may include character references (see section 4.2.3). User agents should interpret attribute values as follows: › Replace character references (see section 4.2.3) with characters; › Ignore line feeds; › Replace each carriage return or tab with a single space. 4.4.3 Text Strings A number of attributes (%Text; in the DTD) take the text that is meant to be "human readable". Introductory information about attributes can be found in the tutorial discussion of attributes. 4.4.4 URIs This specification uses the term URI as defined in [URI] (see [RFC1630, http://ds.internic.net/rfc/rfc1630.txt]). Note that URIs include URLs (as defined in [RFC1738, http://ds.internic.net/rfc/rfc1738.txt] and [RFC1808, http://ds.internic.net/rfc/rfc1808.txt]). URIs are represented in the DTD by the parameter entity %URI;. URIs in general are case-sensitive. There may be URIs, or parts of URIs, where case doesn't matter (e.g., machine names), but identifying these may not be easy. Users should always consider URIs case-sensitive (to be on the safe side). 4.4.5 Single Characters Certain attributes call a single character from a set of document characters. These attributes take the %Character type in the DTD. Single characters can be specified using character references (e.g. "&"). 4.4.6 Character Data Certain attributes call single document characters. These attributes take the %Text type in the DTD. 4.4.7 Dates and Times [ISO8601] allows many options and variations in the presentation of dates and times. The current specification uses one of the formats described in the [DATETIME] profile for its definition of legal date/time strings ( %Datetime in the DTD). The format is: YYYY-MM-DDThh:mm:ssTZD where: YYYY four-digit year ММ two-digit month (01=January, etc.) DD two-digit day of month (01 through 31) hh two digits of hour (00 through 23) (am/pm NOT allowed) mm two digits of minute (00 through 59) ss two digits of second (00 through 59) TZD time zone designator Time zone designators: Z indicates UTC (Coordinated Universal Time). The "Z" must be uppercase. +hh:mm indicates that the time is a local time which is hh hours and mm minutes ahead of UTC. -hh:mm indicates that the time is a local time which is hh hours and mm minutes behind of UTC. Exactly the components shown here must be present, with exactly this punctuation. Note that the "T" letter appears literally in the string (it must be uppercase), to indicate the beginning of the time element, as specified in [ISO8601] If a generating application does not know the time to the second, it may use the value "00" for seconds (and minutes and hours, if necessary). Note. [DATETIME] does not address the issue of leap seconds. 5 Global Structure of a XML Sapiens Document 5.1 Introduction to the XML Sapiens Document Structure A XML Sapiens document consists of three parts: 1. Lines containing the XML Sapiens DTD version being used (see section Ошибка! Источник ссылки не найден.); 2. Lines indicating that the language belongs to the XML language group; 3. Root section containing the body of the document. The body can be implemented by the XML Sapiens element. White space (spaces, newlines, tabs, and comments) may appear before or after each section. Here is an example of a simple XML Sapiens document:

Hello world!

5.2 XML Sapiens Version Information A valid XML Sapiens document declares what version of SAPI is used in the document. Document type declaration names the document type definition (DTD) in this document (see [ISO8879]). To date, only one version of the XML Sapiens language is available, and accordingly - only one DTD: (http://www.xmlsapiens.org/spec/sapi20.dtd). 5.3 The XML Sapiens Element Start tag: mandatory, End tag: mandatory Attribute definitions version = %Text [CN] Mandatory. The value of this attribute specifies which XML Sapiens DTD version governs the current document. xmlns:sapi = %URI [CN] Optional. Formal XML NS definition. encoding = %Charset [CI] Recommended. The value of this attribute specifies the language encoding used in the document. cache = %Charset [CI] Optional. The value of this attribute shows to the processor, whether caching of the current document is allowed. mdate = %Datetime [CN] Optional. This attribute contains the date and time of the latest document modification. After document type declaration, the remainder of an HTML document is comprised in the SAPI element. Thus, a typical XML Sapiens document has the following structure: ... 5.3.1 Attribute version Attribute definitions version = %Text [CN] Mandatory. The value of this attribute specifies which XML Sapiens DTD version governs the current document. This attribute indicates to the processor, according to which version of the XML Sapiens language the document should be analyzed. The DTD pattern for the XML Sapiens version of the current document is specified in the xmlns:sapi attribute. 5.3.2 Attribute xmlns:sapi Attributes definition xmlns:sapi = %URI [CN] Optional. Formal definition of XML Sapiens XML Namespaces (http://www.w3.org/TR/REC-xml-names) 5.3.3 Attribute encoding Attributes definition encoding = %Charset [CI] Optional.The value of this attribute specifies the language encoding used in the document. 5.3.4 Attribute cache Attributes definition cache = %Charset [CI] Optional. Value "nocache" of this attribute indicates to the processor, whether caching of the current document is allowed. Example of this document: ... 5.3.5 Attribute mdate Attributes definition mdate = %Datetime [CN] Optional. This attribute contains the date and time of the latest document modification. Though this attribute is optional for the SAPI element, the availability of date and time of modifications can help to organize the version control of XML Sapiens document. 5.4 XML Sapiens Document Namespace XML Sapiens allows binding of XML Sapiens document objects and logical site areas. For this purpose an element describing namespaces for XML Sapiens objects is created. 5.4.1 Element SAPI:NAMESPACES Start tag: mandatory, End tag: mandatory The XML Sapiens namespace is defined in the document body (the SAPI element). Sample document: ... 5.4.2 Element SAPI:NAMESPACE Start tag: mandatory, End tag: mandatory Attributes definition name = %Text [CN] Mandatory. The value of this attribute specifies the namespace name. This name is the identifier of the namespace in XML Sapiens objects attribute. Example: ... 5.4.2.1 Attribute name Attributes definition name = %Text [CN] Mandatory. The value of this attribute specifies the namespace name. This name is the identifier of the namespace in XML Sapiens objects attribute. 5.4.3 Element SAPI:SITE Start tag: mandatory, End tag: ommited Attributes definition id = %Text [CN] Mandatory. The value of this attribute specifies the identifier of the displayed site. 5.4.3.1 Attribute id Attributes definition id = %Text [CN] Mandatory. The value of this attribute specifies the identifier of the displayed site. This attribute contains the site identifier in the CMS-specific syntax. In case the CMS maintains one site of information space, the function of this element has no meaning. 5.4.4 Element SAPI:SITE-LANG Start tag: mandatory, End tag: ommited Attributes definition id = %Text [CN] Mandatory. The value of this attribute specifies the language version of the displayed site. 5.4.4.1 Attribute id Attributes definition id = %Text [CN] Mandatory. The value of this attribute specifies the identifier of the language version of the displayed site. This attribute contains the identifier of the site language version in the CMS-specific syntax. In case the CMS maintains one language version of the site information space, the function of this element has no meaning. 5.4.5 Element SAPI:SITE-ITEM Start tag: mandatory, End tag: ommited Attributes definition id = %Text [CN] Mandatory. The value of this attribute specifies the identifier of the section of the displayed site. 5.4.5.1 Attribute id Attributes definition id = %Text [CN] Mandatory. The value of this attribute specifies the identifier of the section of the displayed site. This attribute contains a site section identifier in the CMS-specific syntax. In case the CMS maintains just one section of site information space, the function of this element has no meaning. 5.4.6 Element SAPI:CONTAINER Start tag: mandatory, End tag: ommited Attributes definition name = %Text [CN] Mandatory. The value of this attribute specifies the XML Sapiens document container. 5.4.6.1 Attribute name Attributes definition name = %Text [CN] Mandatory. The value of this attribute specifies the name of XML Sapiens container. This attribute allows describing the namespace of a certain container. 6 Body of the XML Sapiens Document 6.1 Code Owner Information One or more authors may be assigned to a XML Sapiens document or to a data container (see section 6.3). To assign a group of authors, the SAPI:AUTHOR element is created for each author in the document body. To assign authors to a data container, the SAPI:AUTHOR elements are also created in the document body. Information about the authors provides feedback to the authors in "XML Sapiens Works Gallery" (http://xmlsapiens.org/lib/) 6.1.1 Element SAPI:AUTHOR Start tag: mandatory, End tag: mandatory The SAPI:AUTHOR element contains information about the author of the document or of the data container. Example: Dmitry Sheiko sheiko@cmsdevelopment.com www.cmsdevelopment.com 6.1.2 Element SAPI:NAME Start tag: mandatory, End tag: mandatory The SAPI:NAME element contains the name of the author the document or of the data container. 6.1.3 Element SAPI:EMAIL Start tag: mandatory, End tag: mandatory The SAPI:EMAIL element contains the e-mail address of the author of the document or of the data container. 6.1.4 Element SAPI:URI Start tag: mandatory, End tag: mandatory The SAPI:URI element contains the site URI of the author of the document or of the data container. 6.2 Comments The XML Sapiens document or data container may be commented. Comments specify the purpose and specific details of functional solutions "XML Sapines Works Gallery" (http://xmlsapiens.org/lib/) 6.2.1 Element SAPI:COMMENTS Start tag: mandatory, End tag: mandatory The SAPI:COMMENTS element contains the author's comments and notes on the document or data container. Example: Comments content... 6.3 Data Containers Data containers form the basis of the XML Sapiens language. This is the content of containers that defines the functional solutions scenarios for a document of a SAPI-based CMS. The XML Sapiens language includes containers of 2 types: query containers (SAPI:QC) and dynamic data containers (SAPI:DDC). Query containers (see section 6.3.1) refer to the fragments of a document displayed on a site. The content of the containers can be modified by the CMS administrator. These containers contain the code of user data queries and related formatting. Dynamic data containers (see section 6.3.2) refer to the fragments of the document displayed on the website. The content of these containers is based on a functional algorithm. These containers contain the description of functional algorithms. 6.3.1 Query Container (Element SAPI:QC) Start tag: mandatory, End tag: mandatory Attributes definition type = %Text [CN] Mandatory. The value of this attribute contains the data container type. title = %Text [CI] Optional. The value of this attribute contains the data container title specifying the container in the list. ns = %Text [CN] Optional. The value of this attribute contains a pointer to the namespace, which the given data container is assigned to. state = %Text [CN] Optional. If an element contains this attribute, its value specifies when processor has to implement this description. mdate = %Datetime [CN] Optional. This attribute contains the date and time of the latest document modification. Query containers refer to the fragments of the displayed document. The content of these containers can be modified by the CMS administrator. A container can be called from the presentation template of the displayed site document, or from other containers through the SAPI:APPLY element (see section Ошибка! Источник ссылки не найден.) or through the SAPI:%Attribib attribute (see section 6.4). These containers contain the code of user data queries and their related formatting. Example of a query container: &this.title.value; 6.3.1.1 Attribute type Attributes definition type = %Text [CN] Mandatory. The value of this attribute contains the data container type. This attribute contains the data container type that identifies the object in a XML Sapiens document (see section 3.3.4). The container content (the data it refers to) can be called using the SAPI:APPLY element. 6.3.1.2 Attribute title Attributes definition title = %Text [CI] Recommended. The value of this attribute contains the data container title that specifies the container in the list. This attribute should not be ignored. A short but an informal container description will help to avoid errors during site configuration. 6.3.1.3 Attribute ns Attributes definition ns = %Text [CN] Optional. The value of this attribute contains a pointer to the namespace assigned to the given data container. 6.3.1.4 Attribute state Attributes definition status = %Text [CN] Optional. If an element contains this attribute, its value specifies to the processor when it has to implement this description. 6.3.1.5 Attribute mdate Attributes definition mdate = %Datetime [CN] Optional. This attribute contains the date and time of the latest document modification. 6.3.2 Dynamic Data Container (SAPI:DDC) Start tag: mandatory, End tag: mandatory Attributes definition name = %Text [CN] Mandatory. The value of this attribute contains a data container name. title = %Text [CI] Recommended. The value of this attribute contains the data container title that specifies the container in the list. category = %Text [CI] Recommended. The value of this attribute specifies the category of the dynamic data container (see section Ошибка! Источник ссылки не найден.). ns = %Text [CN] Optional. The value of this attribute contains a pointer to the namespace assigned to the given data container. mdate = %Datetime [CN] Optional. This attribute contains the date and time of the latest document modification. Dynamic data containers refer to the fragments of the document displayed on the site. The content of the containers is generated on the basis of a functional algorithm. These containers provide the description of functional algorithms. Dynamic data containers are the so-called functional solutions of a CMS site interface. A container can be called from the presentation template of the document displayed on the site, and from other containers using the SAPI:APPLY element (see section Ошибка! Источник ссылки не найден.) or the SAPI:%Attribib attribute (see section 6.4). A dynamic data container contains elements SAPI:AUTHOR, SAPI:COMMENTS and SAPI:CHOOSE. The last element (SAPI:CHOOSE) is a handler of the CMS environment status condition. If an expression (Element SAPI:EXP or Attribute EXP) complies with the "TRUE" value, the content of the condition element (SAPI:WHEN) is executed. Conditions may contain the data presentation code (see section 3.2), pointers to containers or an enumeration handler (SAPI:FOR-EACH). The enumeration handler calls the CMS application, the name of which is specified in the SELECT attribute of the SAPI:FOR- EACH element. This application returns a set of nodes to the processor. The enumeration handler may contain a conditions processor. A condition handler is called as many times as there are elements in the nodes set returned by the application. Conditions may contain a data presentation code and data pointers. After each iteration of the enumeration handler the content of the "TRUE" value is returned. The nodes of the set contains the data returned by the application. The data is available in the nodes properties (see section 3.8.5.7). If an error occurs during CMS application is executing, processor will return the code, which is specified within SAPI:FALLBACK. If the CMS application returns empty array, the processor will return the code, which specified within SAPI:IFEMPTY. Example of a dynamic data container: Dmitry Sheiko sheiko@cmsdevelopment.com www.cmsdevelopment.com DDC example Hello world! It's the home page! 1024 Records was not found CMS-application error 6.3.2.1 Attribute name Attributes definition name = %Text [CN] Mandatory. The value of this attribute contains a data container name. This attribute contains the data container name that identifies the object in a XML Sapiens document (see section 3.3.4). The container content (the data it refers to) can be called using the SAPI:APPLY element. 6.3.2.2 Attribute title Attributes definition title = %Text [CI] Recommended. The value of this attribute contains the data container title that specifies the container in the list. This attribute should not be ignored. A short but an informal container description will help to avoid errors during site configuration. 6.3.2.3 Attribute category Attributes definition category [CI] Recommended. The value of this attribute specifies the category of the dynamic data container. This attribute allows cataloguing a container (functional solution) in "XML Sapiens Works Gallery" (http://xmlsapiens.org/lib/), and informs the CMS on the processing peculiarities for this container. A list of available categories for dynamic data containers is provided in section Ошибка! Источник ссылки не найден.. 6.3.2.4 Attribute ns Attributes definition ns = %Text [CN] Optional. The value of this attribute contains a pointer to the namespace assigned to the given data container. 6.3.2.5 Attribute mdate Attributes definition mdate = %Datetime [CN] Optional. This attribute contains the date and time of the latest document modification. 6.3.2.6 Element SAPI:CHOOSE Start tag: mandatory, End tag: mandatory This element is a condition processor. A condition processor indicates that the CMS processor should process the "TRUE" conditions from those available in the body of the SAPI:CHOOSE element. 6.3.2.7 Element SAPI:WHEN Start tag: mandatory, End tag: mandatory Attributes definition title = %Text [CI] Recommended. The value of this attribute contains the title of the container condition. The title specifies the container condition title defining the site debugging condition. exp = = %Text [CI] Optional. This attribute contains condition expressions. In addition to the condition expression (see section 6.3.2.9), a condition of a dynamic data container may contain either the SAPI:CODE element (see section 6.3.2.8) or an enumeration handler (see section 6.3.2.10). Though a condition expression can be written in one line without characters (<>) that are not allowed for attributes, a condition expression can be placed within the EXP attribute. For example: HTML... Otherwise, a condition expression should be specified in the SAPI:EXP element. For example: or(eq(argvs.0.value,'home'),eq(argvs.0.value,'')) HTML... 6.3.2.7.1 Attribute title Attributes definition title = %Text [CI] Recommended. The value of this attribute contains the container condition title that specifies the condition during site debugging. 6.3.2.7.2 Attribute exp Attributes definition exp = = %Text [CI] Optional. This attribute contains a condition expression. This element allows to define condition expressions. A condition is treated as "TRUE" and is processed by the processor only in case its value is "TRUE". Using condition expressions in the syntax of XML Sapiens expressions is allowed (see section Ошибка! Источник ссылки не найден.). In certain cases using the syntax of the system language (see section 3.7.1) is also allowed. 6.3.2.8 Element SAPI:CODE Start tag: mandatory, End tag: mandatory This element contains the presentation code (see section 3.2.2). The code may contain pointers to data and data containers (see section 3.3). 6.3.2.9 Element SAPI:EXP Start tag: mandatory, End tag: mandatory This element allows to define condition expressions. A condition is treated as "TRUE" and is processed by the processor only in case its value is "TRUE". Using condition expressions in the syntax of XML Sapiens expressions is allowed (see section Ошибка! Источник ссылки не найден.). 6.3.2.10 Element SAPI:FOR-EACH Start tag: mandatory, End tag: mandatory Attributes definition select = %Text [CN] Mandatory. The value of this attribute contains a pointer to the CMS application. name = %Text [CN] Mandatory. The value of this attribute contains the enumeration name. title = %Text [CI] Mandatory. The value of this attribute contains the enumeration title specifying the enumeration during site debugging. Conditions (SAPI:WHEN see section 6.3.2.7) may contain an enumeration handler (this element). An enumeration handler calls the CMS application, the name of which is specified in the SELECT attributes. The application returns a nodes set (see section 3.8.5.7) to the CMS processor. An enumeration handler may contain a condition processor, which is called as many times as there are nodes in the set returned by the application. Conditions, in their turn, may contain a data presentation code and data pointers. After each iteration of the enumeration handler the content of the "TRUE" value is returned. For example: /company/ CMS-application error 6.3.2.10.1 Attribute select Attributes definition select = %Text [CN] Mandatory. The value of this attribute contains a pointer to the CMS application (see section 3.8.5). 6.3.2.10.2 Attribute name Attributes definition name = %Text [CN] Mandatory. The value of this attribute contains the enumeration name. 6.3.2.10.3 Attribute title Attributes definition title = %Text [CI] Recommended. The value of this attribute contains the enumeration title specifying it during site debugging. 6.3.2.10.4 Attribute status Attributes definition status = %Text [CN] Optional. . If an element contains this attribute, its value specifies the status of the enumeration activity. 6.3.2.11 Element SAPI:FALLBACK Start tag: mandatory, End tag: mandatory The element specifies a respond of the processor if an error occurs while the CMS- application is executing. 6.3.2.12 Элемент SAPI:IFEMPTY Start tag: mandatory, End tag: mandatory The element specifies a respond of the processor when the CMS-application returns empty array. 6.3.2.13 Element SAPI:PARAMS Start tag: mandatory, End tag: mandatory The element specifies area of CMS application parameters. 6.3.2.14 Element SAPI:PARAM Start tag: mandatory, End tag: mandatory Attributes definition name= %Text [CN] Mandatory. CMS application parameter name. This element specifies a parameter of the CMS-application 6.3.2.14.1 Attribute name Attributes definition name= %Text [CN] Mandatory. CMS application parameter name. 6.3.3 Field set (Element SAPI:FIELDSET) Start tag: mandatory, End tag: mandatory Attributes definition type = %Text [CN] Mandatory. The value of this attribute contains the field set type. title = %Text [CI] Recommended. The value of this attribute contains the field set type. ns = %Text [CN] Optional. The value of this attribute contains a pointer to the namespace assigned to the given field set. state = %Text [CN] Optional. If an element contains this attribute, its value specifies the status of the environment where this description is topical. mdate = %Datetime [CN] Optional. This attribute contains the date and time of the latest document modification. Field sets are used for document structure specifying for given environment states. An example of field set definition: 6.3.3.1 Attribute type Attributes definition type = %Text [CN] Mandatory. The value of this attribute contains the field set type. This attribute contains the field set type that identifies the object in a XML Sapiens document (see section 3.3.4). The field set content (the data it refers to) can be called using the SAPI:INCLUDE element. 6.3.3.2 Attribute title Attributes definition title = %Text [CI] Recommended. The value of this attribute contains the field set title that specifies the container in the list. 6.3.3.3 Attribute ns Attributes definition ns = %Text [CN] Optional. The value of this attribute contains a pointer to the namespace assigned to the given field set. 6.3.3.4 Attribute state Attributes definition state = %Text [CN] Optional. If an element contains this attribute, its value specifies the status of the environment where this description is topical. 6.3.3.5 Attribute mdate Attributes definition mdate = %Datetime [CN] Optional. This attribute contains the date and time of the latest field set modification. 6.3.3.6 Element SAPI:BODY Start tag: mandatory, End tag: mandatory This element contains the presentation code (see section 3.2.2). The code may contain pointers to data and data containers (see section 3.3). 6.4 Pointers SAPI pointers are used to call the objects content either in the data presentation code or in the data container body. Data pointers return the values of the CMS environment variables (see section 3.8.4). The value of a variable may be called through the SAPI:VALUE-OF element or the SAPI:%Attrib attribute. Container pointers return the content of data containers. 6.4.1 Pointer (Element SAPI:APPLY) Start tag: mandatory, End tag: mandatory Attributes definition name = %Text [CN] Mandatory. The value of this attribute contains the name of the pointer to object properties (see section 3.3.4). exp = %Text [CN] The value of this attribute contains expressions. type = %Text [CN] The value of this attribute contains type of the data query title = %Text [CN] The value of this attribute contains title of the data query. The title is displayed against content queries within document administrating. index = %Text [CN] The attribute informs system this field is indexing one. href = %Text [CN] The attribute informs system where is container description file location in the case of container pointer The element referencing an environment variable through a pointer returns the value of the variable. An example of a content query: An example of a scenario with parameter giving: /section1/ Attention! You can use the construction of XML predefinitions for getting of environment variable value: &variable1.value; 6.4.1.1 Attribute name Attributes definition name = %Text [CN] Mandatory. The value of this attribute contains a pointer to object properties. exp = %Text [CN] Mandatory. The value of this attribute contains expressions. type = %Text [CN] The value of this attribute contains type of the data query title = %Text [CN] The value of this attribute contains title of the data query. The title is displayed against content queries within document administrating. index = %Text [CN] The attribute informs system this field is indexing one. 6.4.2 Pointer (Attribute SAPI:%Attribib) Attributes definition %Attrib = %Text [CN] Mandatory. The value of this attribute contains the name of the parent element attribute into which the processor integrates the value of the CMS environment variable. In case the value of the environment variable should be inserted in the element attribute, an additional attribute is used with the following syntax: SAPI:name_of_attribute_for_insertion. 6.4.2.1 Attribute %Attrib Attributes definition %Attrib = %Text [CN] Mandatory. The value of this attribute contains the name of the parent element attribute into which the processor integrates the value of the CMS environment variable. 6.5 Additional Operands 6.5.1 File Inclusion (Element SAPI:INCLUDE) Start tag: mandatory, End tag: omitted Attributes definition href = %Text [CN] Mandatory. The value of this attribute contains path to the including file parse = %Text [CN] Mandatory. The value of this attribute assigns type of file processing (fieldset, html, php and so on). state = %Text [CN] Mandatory. The value of this attribute assigns topical state of environment within field set inclusion. XML Sapiens can unclude into the document files, scripts, templates or informational structures (field sets). You can use SAPI:INCLUDE for these purposes. 6.5.1.1 Attribute href Attributes definition href = %Text [CN] Mandatory. The value of this attribute contains path to the including file 6.5.1.2 Attribute parse Attributes definition parse = %Text [CN] Mandatory. The value of this attribute assigns type of file processing (fieldset, html, php and so on). 6.5.1.3 Attribute state Attributes definition state = %Text [CN] Mandatory. The value of this attribute assigns topical state of environment within field set inclusion. 7 XML Reference Information for SAPI The following section contains the formal XML definition of the SAPI language. This file is also available in the ASCII format: (Default DTD: http://xmlsapiens.org/spec/sapi20.dtd 7.1 Document Validation To verify that a document conforms to the XML Sapiens DTD, it should be validated with a XML Sapiens grammar validator. 8 References 8.1 Normative References [CSS1] "Cascading Style Sheets, level 1", H. W. Lie and B. Bos, 17 December 1996. Available at http://www.w3.org/TR/REC-CSS1-961217 [DATETIME] "Date and Time Formats", W3C Note, M. Wolf and C. Wicksteed, 15 September 1997. Available at http://www.w3.org/TR/NOTE-datetime [IANA] "Assigned Numbers", STD 2, RFC 1700, USC/ISI, Reynolds and J. Postel, October 1994. Available at http://ds.internic.net/rfc/rfc1700.txt [ISO639] "Codes for the presentation of names of countries", ISO 3166:1993. For details refer to http://www.iso.ch/cate/d4766.html. Also see http://www.sil.org/sgml/iso639a.html. [ISO3166] "Codes for the presentation of names of countries", ISO 3166:1993. [ISO8601] "Data elements and interchange formats - Information interchange - Presentation of dates and times", ISO 8601:1988. [ISO8879] "Information Processing - Text and Office Systems - Standard Generalized Markup Language (SGML)", ISO 8879:1986. Please refer to http://www.iso.ch/cate/d16387.html for information about the standard. [ISO10646] Information Technology - Universal Multiple-Octet Coded Character Set (UCS) - Part 1: Architecture and Basic Multilingual Plane", ISO/IEC 10646-1:1993. The first five amendments in ISO/IEC 10646-1:1993 are also taken into consideration in this specification. [ISO88591] "Information Processing -- 8-bit single-byte coded graphic character sets -- Part 1: Latin alphabet No. 1", ISO 8859-1:1987. [MIMETYPES] List of registered content types (MIME types). The registered content types can be downloaded from ftp://ftp.isi.edu/in-notes/iana/assignments/media-types/. [RFC1555] "Hebrew Character Encoding for Internet Messages", H. Nussbacher and Y. Bourvine, December 1993. Available at http://ds.internic.net/rfc/rfc1555.txt. [RFC1556] "Handling of Bi-directional Texts in MIME", H. Nussbacher, December 1993. Available at http://ds.internic.net/rfc/rfc1556.txt. [RFC1738] "Uniform Resource Locators", T. Berners-Lee, L. Masinter, and M. McCahill, December 1994. Available at http://ds.internic.net/rfc/rfc1738.txt. [RFC1766] "Tags for the Identification of Languages", H. Alvestrand, March 1995. Available at http://ds.internic.net/rfc/rfc1766.txt. [RFC1808] "Relative Uniform Resource Locators", R. Fielding, June 1995. Available at http://ds.internic.net/rfc/rfc1808.txt. [RFC2044] "UTF-8, a transformation format of ISO 10646", F. Yergeau, January 1998. Available at http://ds.internic.net/rfc/rfc2044.txt. [RFC2045] "Multipurpose Internet Mail Extensions (MIME) Part One: Format of Internet Message Bodies", Freed and N. Borenstein, November 1996. Available at http://ds.internic.net/rfc/rfc2045.txt. Note that this RFC obsoletes RFC1521, RFC1522, and RFC1590. [RFC2046] "Multipurpose Internet Mail Extensions (MIME) Part Two: Media Types", N. Freed and N. Borenstein, November 1996. Available at http://ds.internic.net/rfc/rfc2046.txt. Note that this RFC obsoletes RFC1521, RFC1522, and RFC1590. [RFC2068] "HTTP version 1.1 ", R. Fielding, J. Gettys, J. Mogul, H. Frystyk Nielsen and T. Berners-Lee, January 1997. Available at http://ds.internic. net/rfc/rfc2068.txt. [RFC2119] "Keywords for use in RFCs to Indicate Requirement Levels", S. Bradner, March 1997. Available at http://ds.internic.net/rfc/rfc2119.txt. [RFC2141] "URN Syntax", R. Moats, May 1997. Available at http://ds.internic.net/rfc/rfc2141.txt. [SRGB] "A Standard Default Color Space for the Internet", version 1.10, M. Stokes, M. Anderson, S. Chandrasekar, and R. Motta, 5 November 1996. Available at http://www.w3.org/Graphics/Color/sRGB [UNICODE] "The Unicode Standard, Version 2.0", The Unicode Consortium, Addison-Wesley Developers Press, 1996. Errors in http://www.unicode.org/unicode/uni2errata/bidi.htm are taken into consideration in this specification. For more details on the Unicode Consortium refer to http://www.unicode.org/ [URI] "Uniform Resource Identifiers (URI): Generic Syntax and Semantics", T. Berners- Lee, R. Fielding, L. Masinter, 18 November 1997. Available at http://www.ics.uci.edu/pub/ietf/uri/draft-fielding-uri-syntax-01.txt. The document is still under development, for amendments refer to the addresses of [RFC1738] and [RFC1808]. [WEBSGML] "TC Suggestions on WebSGML Adaptation for SGML", C. F. Goldfarb, ed., 14 June 1997. Available at http://www.sgmlsource.com/8879rev/n1929.htm 8.2 Informative References [BRYAN88] "SGML: An Author's Guide to the Standard Generalized Markup Language", M. Bryan, Addison-Wesley Publishing Co., 1988. [CALS] Continuous Acquisition and Life-Cycle Support (CALS). CALS is a Department of Defense strategy for achieving effective creation, exchange, and use of digital data for weapon systems and equipment. More information can be found on the CALS page at http://navysgml.dt.navy.mil/cals.html. [CHARSETS] Registered charset values. Download a list of registered charset values from ftp://ftp.isi.edu/in-notes/iana/assignments/character-sets. [CSS2] "Cascading Style Sheets, level 2", B. Bos, H. W. Lie, C. Lilley, and I. Jacobs, November 1997. Available at http://www.w3.org/TR/WD-CSS2/ [DCORE] The Dublin Core: for more information refer to http://purl.org/metadata/dublin_core [ETHNO] "Ethnologue, Languages of the World", 12th Edition, Barbara F. Grimes editor, Summer Institute of Linguistics, October 1992. [GOLD90] "The SGML Handbook", C. F. Goldfarb, Clarendon Press, 1991. [HTML30] "HuperText Markup Language Specification Version 3.0", D. Raggett, September 1995. Available at http://www.w3.org/MarkUp/html3/CoverPage. [HTML32] "HTML 3.2 Reference Specification", D. Raggett, 14 January 1997. Available at http://www.w3.org/TR/REC-html32 [HTML3STYLE] "HTML and Style Sheets", B. Bos, D. Raggett, and H. Lie, 24 March 1997. Available at http://www.w3.org/TR/WD-style [LEXHTML] "A Lexical Analyzer for HTML and Basic SGML", D. Connolly, 15 June 1996. Available at http://www.w3.org/TR/WD-html-lex [PICS] Platform for Internet Content (PICS). For more information refer to http://www.w3.org/PICS/ [RDF] Resource Description Language. For more information refer to http://www.w3.org/Metadata/RDF/ [RFC822] "Standard for the Format of ARPA Internet Text Messages", Revised by David H. Crocker, August 1982. Available at http://ds.internic.net/rfc/rfc822.txt. [RFC850] "Standard for Interchange of USENET Messages", М. Horton, June 1983. Available at http://ds.internic.net/rfc/rfc850.txt. [RFC1468] "Japanese Character Encoding for Internet Messages", Murai, M. Crispin, and E. van der Poel, June 1993. Available at http://ds.internic.net/rfc/rfc1468.txt. [RFC1630] "Universal Resource Identifiers in WWW: A Unifying Syntax for the Expression of Names and Addresses of Objects on the Network as used in the World-Wide Web", T. Berners-Lee, June 1994. Available at http://ds.internic.net/rfc/rfc1630.txt. [RFC1866] "HyperText Markup Language 2.0", T. Berners-Lee and D. Connolly, November 1995. Available at http://ds.internic.net/rfc/rfc1866.txt. [RFC1867] "Form-Based File Upload in HTML", E. Nebel and L. Masinter, November 1995. Available at http://ds.internic.net/rfc/rfc1867.txt. RFC1867 must be updated through ftp://ftp.ietf.org/internet-drafts/draft-masinter-form-data-01.txt, still under development. [RFC1942] "HTML Tables", Dave Ragget, May 1996. Available at http://ds.internic.net/rfc/rfc1942.txt. [RFC2048] "Multipurpose Internet Mail Extension (MIME) Part Four: Registration Procedures", N. Freed, J. Klensin, and J. Postel, November 1996. Available at http://ds.internic.net/rfc/rfc2048.txt. Note that this RFC obsoletes RFC1521, RFC1522, and RFC1590. [RFC2070] "Internationalization of the HyperText Markup Language", F. Yergeau, G. Nicol, G. Adams, and M. Dürst, January 1997. Available at http://ds.internic.net/rfc/rfc2070.txt. [SGMLOPEN] SGML Consortium. Please refer to the SGML Consortium page at http://www.sgmlopen.org/ [SP] SP is a public domain SGML processor. Available at ftp://ftp.jclark.com/pub/sp/. Further information is available at http://www.jclark.com. [SQ91] "The SGML Primer", 3rd Edition, SoftQuad Inc., 1991. [TAKADA] "Multilingual Information Exchange through the World-Wide Web", Toshihiro Takada, Computer Networks and ISDN Systems, Vol. 27, No. 2, pp. 235-241, November 1994. [WAIGUIDE] Guidelines for designing accessible HTML documents are available on the Web Accessibility Initiative (WAI) Web site: http://www.w3.org/WAI/. [VANH90] "Practical SGML", E. van Herwijnen, Kluwer Academic Publishers Group, Norwell and Dordrecht, 1990. 9 Conclusion We hope that this specification will help you to save time for CMS development and provide for the portability of your functional solutions. Experience of other participants of the open project for XML Sapiens support may also be useful (http://xmlsapiens.org). Page 4 of 65 (c) Red Graphic Systems