diff options
author | Tomas Frydrych <tf@linux.intel.com> | 2010-10-28 16:17:15 +0100 |
---|---|---|
committer | Tomas Frydrych <tf@linux.intel.com> | 2010-12-08 07:48:44 +0000 |
commit | 59c12f98ac71c7cfa1adaa55cc3839f02ef71382 (patch) | |
tree | eaab8f2fddb1e110b72eb86e0246000c9606b774 | |
parent | 7906a4724858064d9b926bf0213fa8f2c2a5c413 (diff) |
tweaks
-rw-r--r-- | nscreen-protocol.xml | 654 | ||||
-rwxr-xr-x | scripts/docbook-to-pdf.sh | 14 | ||||
-rw-r--r-- | scripts/template.xsl | 140 | ||||
-rw-r--r-- | scripts/titlepage.templates.xml | 1197 |
4 files changed, 577 insertions, 1428 deletions
diff --git a/nscreen-protocol.xml b/nscreen-protocol.xml index ed73134..6e34258 100644 --- a/nscreen-protocol.xml +++ b/nscreen-protocol.xml @@ -2,13 +2,17 @@ <article xmlns="http://docbook.org/ns/docbook" version="5.0" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink" - xml:id="nscreen-protocol" xml:lang="en" class="specification"> + xml:id="nscreen-protocol" xml:lang="en" class="specification" + status="draft"> <info> <title>nScreen Protocol Specification</title> - <subtitle>Version 1.0</subtitle> + <subtitle>Version 0.2</subtitle> - <orgname>Intel Corporation</orgname> + <org> + <orgname>Intel Corporation</orgname> + <orgdiv>Open Source Technology Centre</orgdiv> + </org> <author> <personname> @@ -32,10 +36,22 @@ <revnumber>0.2</revnumber> <date>27 October 2010</date> <revremark> - responding to first batch of comments from Will Thompson (Collabora) + responding to comments from Will Thompson (Collabora) + </revremark> + </revision> + <revision> + <revnumber>0.3</revnumber> + <date>27 October 2010</date> + <revremark> + tidying up loose ends </revremark> </revision> </revhistory> + + <copyright> + <year>2010</year> + <holder>Intel Corporation</holder> + </copyright> </info> <?hard-pagebreak?> @@ -85,7 +101,7 @@ <listitem> <para> - To provide standard meta-data model to facilitate efficient + To provide standardised meta-data model to facilitate efficient inter-application communication. </para> </listitem> @@ -136,9 +152,9 @@ <itemizedlist> <listitem> <para> - Task-oriented applications: these are the principal participants - in the nScreen mesh. They are user-facing applications, such as - media players, that have been enriched by adding the nScreen + Task-oriented applications: these are the core participants in the + nScreen mesh. They are user-facing applications, such as media + players, that have been enriched by adding the nScreen capabilities. </para> </listitem> @@ -225,10 +241,6 @@ protocol also specifies means through which application describe themselves to the user. </para> - - <para> - (For full XML definition see <xref linkend="appendix-dtd"/>.) - </para> </section> <section xml:id="intro-xmpp"> @@ -368,10 +380,10 @@ <listitem> <para> Normal XMPP presence information is broadcast across all subscribed - contacts, and, in the case of link-local XMPP protocol, advertised - entirely openly via m-DNS broadcasts; consequently the protocol - avoids using the presence mechanism for meta-data exchanges, - including the extended status information (see <xref + contacts, or, in the case of link-local XMPP protocol, even + advertised entirely openly via m-DNS broadcasts; consequently the + protocol avoids using the presence mechanism for meta-data + exchanges, including the extended status information (see <xref linkend="messaging-status"/>). </para> </listitem> @@ -399,7 +411,7 @@ or server-less context, are identified using a bare XMPP JID<citation><xref linkend="rfc3920"/></citation>. A single application connection to the nScreen mesh is identified by a fully - qualified JID, consisting of a bare JID identifying the application + qualified JID, consisting of a bare JID, identifying the application, and a resource identifier; multiple simultaneous connections by single application are permitted and differentiated by the resource part of the fully qualified JID (an example of a bare JID would be @@ -408,9 +420,9 @@ </para> <para> - (In the remainder of this document, the term 'JID' is used to refer + In the remainder of this document, the term 'JID' is used to refer to bare JIDs; if a fully qualified jabber id is meant, this will - always be explicitly stated.) + always be explicitly stated. </para> </section> @@ -437,13 +449,14 @@ <para> Standard XMPP does not provide a formal mechanism for identity verification. Because the authentication of two communicating users, - A and B, is typically done separately and independently by two - different servers, A's trust in B's identity implies A's trust in - the authentication procedures of B's service provider, which cannot - be automatically granted. Therefore, this generic scenario is only - acceptable if data exchanged between A and B contains no sensitive - information, i.e., for what essentially amounts to an anonymous - nScreen service. + <code>A</code> and <code>B</code>, is typically done separately and + independently by two different servers, <code>A</code>'s trust in + <code>B</code>'s identity implies <code>A</code>'s trust in the + authentication procedures of <code>B</code>'s service provider, + which cannot be automatically granted. Therefore, this generic + scenario is only acceptable if data exchanged between <code>A</code> + and <code>B</code> contains no sensitive information, i.e., for what + essentially amounts to an anonymous nScreen service. </para> <para> @@ -453,12 +466,12 @@ additional identity verification measures beyond what is specified by the current version of the protocol, or be implemented using a dedicated nScreen server that requires direct login, and does not - permit server hops (i.e., both A and B are logging into the same - server in order to talk to each other). In this situation the - service provider is fully in control of the authentication - procedure, and, assuming 1:1 mapping between users and their - authentication credentials is in place, successful authentication - provides also for identity verification. + permit server hops (i.e., both <code>A</code> and <code>B</code> are + logging into the same server in order to talk to each other). In + this situation the service provider is fully in control of the + authentication procedure, and, assuming 1:1 mapping between users + and their authentication credentials is in place, successful + authentication provides also for identity verification. </para> </section> @@ -468,9 +481,10 @@ <para> In server-less context of a home cloud, the 1:1 mapping between nScreen users and authentication credentials cannot be guaranteed; a - simple home cloud set up might rely on a shared secret to allow - applications across the cloud to authenticate, which in turn allows - an authenticated application to spoof another application. + simple home cloud set up might, for example, rely on a shared secret + to allow applications across the cloud to authenticate, which in + turn allows an authenticated application to spoof another + application. </para> <para> @@ -588,6 +602,7 @@ <annotation role="comment"> <info> <authorinitials>tf</authorinitials> + <orgname>Intel</orgname> </info> <para> Ideally, some form of e2e TLS channel for exchange of presence and @@ -596,9 +611,9 @@ linkend="jng-xtls"/></citation>. The xep-e2e will do in principle; it is worth noting that it is unlikely to be used because entities requiring this level of privacy will have to use a dedicated - nScreen server for identity verification, in which case the TLS - provides complete privacy of data in transit, rendering e2e - superfluous. + nScreen server for identity verification, in which case TLS + provides complete privacy of data in transit by virtue of no + server hops being involved, thus rendering e2e superfluous. </para> </annotation> @@ -609,16 +624,17 @@ <?hard-pagebreak?> <section xml:id="local-nscreen"> - <title>Local-nscreen protocol</title> + <title>Link-local nScreen protocol</title> <para> - The local-nscreen protocol allows for automatic connection between + The link-local nScreen protocol allows for automatic connection between nScreen clients running on the same LAN. It is derived from the local-xmpp protocol, but with some differences: - <annotation role="comment"> + <annotation role="implementation"> <info> <authorinitials>wt</authorinitials> + <orgname>Collabora</orgname> </info> <para> Should be possible to support in salut using a connection parameter. @@ -638,13 +654,13 @@ Connection is done by JID and resource as with regular XMPP; the JID part before the '@' symbol is provided explicitly to the connection manager, the server part after '@' is worked out - automatically by the connection manager. + automatically by the connection manager, </para> </listitem> <listitem> <para> - The connection manager implements a subscription mechanism + The connection manager implements the subscription mechanism described below (<xref linkend="local-nscreen-subscription"/>, </para> </listitem> @@ -662,11 +678,11 @@ <para> Standard XMPP subscription is implemented exchanging - <code><presence></code> stanzas. However, the link-local version - of XMPP<citation><xref linkend="xep0174"/></citation> uses m-DNS - broadcast to distribute presence information, which makes it + <code><presence/></code> stanzas. However, the link-local + version of XMPP<citation><xref linkend="xep0174"/></citation> uses + m-DNS broadcast to distribute presence information, which makes it unsuitable for exchanging client-specific - <code><presence></code> stanzas, so a different mechanism for + <code><presence/></code> stanzas, so a different mechanism for establishing subscription is needed. </para> @@ -676,19 +692,19 @@ subscription so that any user-level APIs could be identical for both the server-based and server-less scenarios. To this end, the local-nscreen protocol defines a thin layer allowing the relevant - <code><presence></code> stanzas to be delivered independently of - the m-DNS presence broadcasts. + <code><presence/></code> stanzas to be delivered independently + of the m-DNS presence broadcasts. </para> <para> The local-nscreen subscription handshake is carried out by exchanging - <code><iq></code> <code>set</code> stanzas using + <code><iq/></code> <code>set</code> stanzas using <code>urn:nscreen:local-subscription</code> namespace. These - <code><iq></code> stanzas provide a wrapper around appropriate - <code><presence></code> stanzas as used by the standard XMPP + <code><iq/></code> stanzas provide a wrapper around appropriate + <code><presence/></code> stanzas as used by the standard XMPP subscription mechanism, so that a local-nscreen subscription exchange can be converted into a standard XMPP subscription exchange by simply - stripping out the external <code><iq></code> layer. + stripping out the external <code><iq/></code> layer. </para> <para> @@ -696,9 +712,10 @@ this mechanism. </para> -<annotation role='comment'> +<annotation role='implementation'> <info> <authorinitials>tf</authorinitials> + <orgname>Intel</orgname> </info> <para> The initial Telepathy implementation of this protocol might not implement @@ -726,7 +743,7 @@ The mechanism for obtaining descriptive application information is XMPP Service Discovery extension<citation><xref linkend="xep0030"/></citation>; the descriptive information is contained - in a <code><identity></code> element of <code>category</code> + in a <code><identity/></code> element of <code>category</code> 'client'. Two new types are defined for use with this category: <code>'nscreen-application'</code> and <code>'nscreen-controller'</code>, corresponding to task-oriented and @@ -737,25 +754,29 @@ <annotation role='comment'> <info> <authorinitials>tf</authorinitials> + <orgname>Intel</orgname> </info> <para> - I assume this will work in server-less context? + I assume XEP-0030 will work in server-less context? </para> </annotation> <para> - The <code>name</code> attribute of the <code><identity></code> + The <code>name</code> attribute of the <code><identity/></code> element holds application name, while the <code>xml:lang</code> attribute identifies the locale used by the <code>name</code> attribute. As per XMPP Service Discovery extension<citation><xref linkend="xep0030"/></citation>, the query reply may include multiple - <code><identity></code> elements of the same category and type, - but with different <code>xml:lang</code> attribute. However, if the - <code><query></code> of the original request has an explicit - <code>xml:lang</code> attribute, the reply contents should be filtered - by that attribute. If the <code>xml:lang</code> attribute of the - <code><query></code> cannot be matched the respondent may return - either a suitable fall-back, or all available translations. + <code><identity/></code> elements of the same category and type, + but with different <code>xml:lang</code> attribute. + </para> + + <para> + If the <code><query/></code> of the original request has an + explicit <code>xml:lang</code> attribute, the reply contents should be + filtered by that attribute. If the <code>xml:lang</code> attribute of + the <code><query/></code> cannot be matched the respondent may + return either a suitable fall-back, or all available translations. </para> <para> @@ -763,7 +784,7 @@ linkend="appendix-dtd"/>). </para> - <section xml:id="messaging-app-info-example"> + <example xml:id="messaging-app-info-example"> <title>Application Information XML example</title> <programlisting language="xml"><![CDATA[ @@ -789,7 +810,7 @@ </iq>]]> </programlisting> - </section> + </example> </section> @@ -800,17 +821,16 @@ nScreen applications advertise their capabilities via XMPP Entity Capabilities protocol<citation><xref linkend="xep0115"/></citation>, using <code>urn:nscreen:capabilities</code> as the value of the - <code>node</code> attribute of the <code><c></code> element. + <code>node</code> attribute of the <code><c/></code> element. </para> <para> Each individual capability is represented by the - <code><feature></code> element; the <code>var</code> attribute is + <code><feature/></code> element; the <code>var</code> attribute is constructed by concatenating an <code>'urn:nscreen:capabilies:'</code> - prefix and the canonical name of the capabality (i.e., for standard - capabilities, as defined in <xref - linkend="messaging-metadata-caps"/>). For example, a video playback - capability would be represented as: + prefix and the canonical name of the capabality (for standard + capabilities defined in <xref linkend="messaging-metadata-caps"/>). For + example, a video playback capability would be represented as: </para> <programlisting><![CDATA[ @@ -825,15 +845,15 @@ <para> Extended status information is advertised using XMPP Personal Eventing Protocol<citation><xref linkend="xep0163"/></citation>. The status - payload is held by an <code><nscreen:status></code> element and + payload is held by an <code><nscreen:status/></code> element and its attributes; applications with multiple capabilites must include - an <code><nscreen:status></code> element for each capability. + an <code><nscreen:status/></code> element for each capability. </para> <para> The following attributes, in addition to those defined in <xref linkend="messaging-metadata-attributes"/>, are used with the - <code><nscreen:status></code> element: + <code><nscreen:status/></code> element: <variablelist> <varlistentry> @@ -863,8 +883,8 @@ <listitem> <para> - The activity this status represents; optional, if not present - <code>ns-activity-idle</code> is implied. The value should be + The activity this status represents; optional (if not present + <code>ns-activity-idle</code> is implied). The value should be preferably one of those defined in <xref linkend="messaging-metadata-activity"/> </para> @@ -876,9 +896,9 @@ <listitem> <para> - boolean indicating whether capability this status applies to is - the primary capability of the application; optional, if absent - <code>false</code> is implied. + Boolean indicating whether capability this status applies to is + the primary capability of the application; optional (if absent + <code>false</code> is implied). </para> </listitem> </varlistentry> @@ -887,7 +907,7 @@ </para> <para> - While the <code><nscreen:status></code> element can be extended + While the <code><nscreen:status/></code> element can be extended with custom attributes, no frequently changing information (such as current playback position) is permitted as part of status to avoid flooding of the network. @@ -895,40 +915,38 @@ <para> Human readable description is provided using one or more - <code><nscreen:description></code> elements inside the - <code><nscreen:status></code> element; each - <code><nscreen:description></code> element must have an + <code><nscreen:description/></code> elements inside the + <code><nscreen:status/></code> element; each + <code><nscreen:description/></code> element must have an <code>xml:lang</code> attribute, and multiple - <code><nscreen:description></code> elements must have a different + <code><nscreen:description/></code> elements must have a different <code>xml:lang</code> attribute each. </para> - <section xml:id="messaging-status-avatars"> - <title>Support for Avatars</title> + <example xml:id="messaging-status-example"> + <title>Status XML example</title> - <para> - In addition to the extended status mechanism described above, it is - recommended that all nScreen implementations support the XMPP User - Avatar specification<citation><xref linkend="xep0084"/></citation>. - </para> - </section> - - <section xml:id="messaging-status-example"> - <title>Status XML example</title> - - <programlisting><![CDATA[ + <programlisting><![CDATA[ <nscreen:status version='1.0' capability='ns-caps-video' activity='ns-activity-play' uri='some random youtube url' volume='0.75'> - <nscreen:description xml:lang='en-GB'> Playing a video about colour-based optical illusions. </nscreen:description> - </nscreen:status>]]> - </programlisting> + </programlisting> + </example> + + <section xml:id="messaging-status-avatars"> + <title>Support for Avatars</title> + + <para> + In addition to the extended status mechanism described above, it is + recommended that all nScreen implementations support the XMPP User + Avatar specification<citation><xref linkend="xep0084"/></citation>. + </para> </section> </section> @@ -938,34 +956,64 @@ <para> Instruction messages are used to send nScreen commands and information queries. The protocol defines a set of generic XML elements that are - used to encapsulate nScreen messages, with parameters transmitted via + used to encapsulate such messages, with parameters transmitted via XML attributes. </para> <para> - The messages per se are exchanged using XMPP <code><iq></code> - stanzas, with xmlns of 'urn:nscreen:message'. Commands are dispatched - using <code><iq></code> stanza of type <code>set</code>, while - information requests are sent using type <code>get</code>. All - <code>get</code> / <code>set</code> requests are acknowledged by the - recipient using <code><iq></code> stanzas of type - <code>result</code> or <code>error</code>. + The messages per se are exchanged using XMPP <code><iq/></code> + stanzas, with xmlns of <code>urn:nscreen:message</code>. + + <itemizedlist> + <listitem> + <para> + Commands are dispatched using <code><iq/></code> stanza of + type <code>set</code>, + </para> + </listitem> + + <listitem> + <para> + Information requests are sent using type <code>get</code>, + </para> + </listitem> + + <listitem> + <para> + All <code>get</code> / <code>set</code> requests must be + acknowledged by the recipient using <code><iq/></code> + stanzas of type <code>result</code> or <code>error</code>, + </para> + </listitem> + + <listitem> + <para> + Error handling is done via <code><iq/></code> stanzas of + type <code>error</code>, using the stanza error protocol + (<code>urn:ietf:params:xml:ns:xmpp-stanzas</code>) defined by XMPP + core <citation><xref linkend="rfc3920"/></citation>. Additional, + application specific information can be included as per the + core protocol. + </para> + </listitem> + </itemizedlist> </para> + <section xml:id="messaging-commands-iq-set"> <title>Commands</title> <para> - Commands use <code>set</code> type <code><iq></code> stanzas; + Commands use <code>set</code> type <code><iq/></code> stanzas; the command payload is carried by one of the following XML elements. </para> <section xml:id="messaging-commands-command"> - <title><code><nscreen:command></code></title> + <title><code><nscreen:command/></code></title> <para> - A command sent from application A to application B to executed - directly by application B. + A command sent from application <code>A</code> to application <code>B</code> to executed + directly by application <code>B</code>. </para> <para> Required attributes: @@ -977,7 +1025,7 @@ </term> <listitem> <para> - The nscreen protocol version. + The nscreen protocol version, </para> </listitem> </varlistentry> @@ -990,7 +1038,7 @@ <para> Capability on which the command is to operate, preferably using one of the values defined in <xref - linkend="messaging-metadata-caps"/>. + linkend="messaging-metadata-caps"/>, </para> </listitem> </varlistentry> @@ -1002,7 +1050,7 @@ <listitem> <para> Activity to carry out, preferably using one of the values - defined in <xref linkend="messaging-metadata-activity"/>. + defined in <xref linkend="messaging-metadata-activity"/>, </para> </listitem> </varlistentry> @@ -1013,9 +1061,9 @@ </term> <listitem> <para> - Time of command dispatch in standard XMPP - format<citation><xref linkend="xep0082"/></citation>, with - at least millisecond precision. + Time of command dispatch with at least millisecond + precision, in standard XMPP format<citation><xref + linkend="xep0082"/></citation>. </para> </listitem> </varlistentry> @@ -1027,14 +1075,64 @@ linkend="messaging-metadata-attributes"/>, are used to further qualify the capability and activity specified. </para> + + <section xml:id="messaging-commands-command-error"> + <title>Error handling</title> + + <para> + When the resource to which the nScreen command pertains is + unavailable, the command recipient should return an error that + best describes reason why: + + <variablelist> + <varlistentry> + <term><code><forbidden/></code></term> + <listitem> + <para> + The recipient does not have sufficient privilidges to + carry out the command. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><code><item-not-found/></code></term> + <listitem> + <para> + The resource could not be located. + </para> + </listitem> + </varlistentry> + </variablelist> + </para> + + <para> + The <code>type</code> attribute of the + <code><error/></code> stanza should be set appropriately: + the <code>modify</code> value should be used if the recepient is + able to explore other sources for the same resource; the value + <code>cancel</code> is used to indicate that no further attempts + to execute this command should be made. + </para> + + <para> + When handling errors of type <code>modify</code>, the sender must + explore each possible source no more than once. When all known + sources are exhausted, the initiating application should notify + user that the command could not be executed. + </para> + + </section> + </section> <section xml:id="messaging-commands-transfer"> - <title><code><nscreen:transfer></code></title> + <title><code><nscreen:transfer/></code></title> <para> - A request by application A to application B to transfer B's activity - to application C. + A request by application <code>A</code> to application + <code>B</code> to transfer <code>B</code>'s activity to application + <code>C</code>. </para> <para> @@ -1047,7 +1145,7 @@ </term> <listitem> <para> - The nscreen protocol version. + The nscreen protocol version, </para> </listitem> </varlistentry> @@ -1058,7 +1156,7 @@ </term> <listitem> <para> - Capability that is subject of the transfer. + Capability that is subject of the transfer, </para> </listitem> </varlistentry> @@ -1090,46 +1188,106 @@ <title>Information requests</title> <para> - Information requests use <code>get</code> type <code><iq></code> - stanzas; the command payload is carried by one of the following XML - elements. + Information requests use <code>get</code> type + <code><iq/></code> stanzas; the command payload is carried by + one of the following XML elements: </para> <section xml:id="messaging-commands-find"> - <title><code><nscreen:find></code></title> + <title><code><nscreen:find/></code></title> <para> - A request by application A to a control application C to identify - suitable application B to dispatch a (subsequent) command to. The - criteria for the search is given by the supplied attributes, (e.g., - application capability would be specified using the - <code>capability</code> attribute); the control application returns - the result of the search using the - <code><nscreen:find-result></code> element (see <xref - linkend="messaging-commands-find-result"/>. - </para> + A request by an application <code>A</code> to a control application + <code>C</code> to identify a suitable application <code>B</code> to + dispatch a (subsequent) command to: - <para> - If no suitable running application matching the specified criteria - can be identified, the control application C must return immediately - an error of type <code>wait</code>, then attempt to start a suitable - application. When the application successfully starts up, the control - application must dispatch the - <code><nscreen:find-result></code> response, with an identical - <code>id</code>attribute of the <code><iq></code> query. If - the application fails to start, the control application should - return error of type <code>unavailable</code>, again with an - identical <code>id</code>attribute of the <code><iq></code> - query. - </para> + <itemizedlist> + <listitem> + <para> + The criteria for the search is given by the supplied + attributes, (e.g., application capability would be specified + using the <code>capability</code> attribute), + </para> + </listitem> - <para> - Rationale: because of the need to - facilitate e2e encryption, commands cannot be proxied through - control applications; the <code>find</code> request allows - clients to initiate a transfer to an application that might - not yet be running on the target device. + <listitem> + <para> + The search is limited to the service context the control + application is part of, or, in the case of the home cloud, the + device the control application is running on, + </para> + </listitem> + <listitem> + <para> + The control application returns the result of the search using + the <code><nscreen:find-result/></code> element (see + <xref linkend="messaging-commands-find-result"/>). + </para> + </listitem> + </itemizedlist> </para> + +<annotation role='comment'> + <info> + <authorinitials>tf</authorinitials> + <orgname>Intel</orgname> + </info> + <para> + Rationale: because of the need to + facilitate e2e encryption, commands cannot be proxied through + control applications; the <code>find</code> request allows + clients to initiate a transfer to an application that might + not yet be running on the target device. + </para> + + <para> + Not allowing proxying of commands via intermediate applications also + significantly simplifies issues related to access control. + </para> +</annotation> + + <section xml:id="messaging-commands-find-error"> + <title>Error handling</title> + + <para> + If no suitable running application matching the specified criteria + can be identified but a suitable application is available on the + system, the control application must return immediately an error + of type <code>wait</code>, then attempt to start a suitable + application. + </para> + + <para> + If a suitable application does not exist on the system, the + control application must return immediately error of type + <code>cancel</code> and an error condition + <code><item-not-found/></code>. + </para> + + <para> + When the spawned client application successfully starts up, the + control application must dispatch the + <code><nscreen:find-result/></code> response, with an + identical <code>id</code> attribute of the + <code><iq/></code> query. If the application fails to start, + the control application must dispatch error of type + <code>cancel</code>, again with an identical <code>id</code> + attribute of the <code><iq/></code> query; the error + condition should indicate why the application failed to start, if + that is known. + </para> + + <para> + Application that receives an <code><error/></code> of type + <code>wait</code> in response to + <code><nscreen:find/></code> request should wait for + further communication from the recipient (either result or error); + the sender must not resend the original request in response to the + <code>wait</code> error (NB: this is a departure from the regular + semantics of XMPP <code>wait</code> errors). + </para> + </section> + </section> </section> @@ -1137,61 +1295,51 @@ <title>Replies</title> <para> - All received <code>set</code> and <code>get</code> nScreen messages - queries must be explicitly acknowledged by the recipient. Success is - indicated using an <code><iq></code> stanza of type - <code>result</code>, while stanzas of type <code>error</code> are used - to indicate failure. - </para> + All received <code>set</code> and <code>get</code> nScreen message + queries must be explicitly acknowledged by the recipient: - <para> - Depending on the nature of the original <code><iq></code> - <code>get</code> / <code>set</code> stanza, returned stanza might, or might not hold additional information - using one of the following XML elements. + <itemizedlist> + <listitem> + <para> + Failure is inidicated using an an <code><iq/></code> + stanza of type <code>error</code>, + </para> + </listitem> + + <listitem> + <para> + Success is indicated by a stanza of type <code>result</code>, + </para> + </listitem> + + <listitem> + <para> + Depending on the nature of the original query, a returned + <code>result</code> stanza might, or might not hold additional + information using one of the following XML elements. + </para> + </listitem> + </itemizedlist> </para> <section xml:id="messaging-commands-find-result"> - <title><code><nscreen:find-result></code></title> + <title><code><nscreen:find-result/></code></title> <para> Reply to a previous <code>find</code> query that was successfully resolved. The identified application JID is stored in the - <code>jid</code> attribute. - </para> - </section> - - <section xml:id="messaging-commands-errors"> - <title><code><error></code></title> - - <para> - Returned stanzas of type <code>error</code> should include - additional information as to the nature of the error, using the XMPP - <code><error></code> container with the standard - <code>urn:ietf:params:xml:ns:xmpp-stanzas</code> namespace. - -<annotation role='todo'> - <info> - <authorinitials>tf</authorinitials> - </info> - <para> - Define some common error conditions here and types. - - Can we manage with not defining our own error condition namespace ? - </para> -</annotation> + required <code>jid</code> attribute. </para> - </section> - </section> - <section xml:id="messaging-commands-example"> - <title>Command example</title> + <example xml:id="messaging-commands-example"> + <title>Command example</title> - <para> - The following XML snippet tells some other application to start - playing given video starting 3/4 into the video duration: - </para> + <para> + The following XML snippet tells some other application to start + playing given video starting 3/4 into the video duration: + </para> - <programlisting><![CDATA[ + <programlisting><![CDATA[ <iq type='set' id='command1' to='magic-video-player@blackbox.local' @@ -1213,11 +1361,11 @@ id='command1' to='the-other-player@bluebox.local' from='magic-video-player@blackbox.local' - xmlns='urn:nscreen:message'> + xmlns='urn:nscreen:message'/>]]> + </programlisting> + </example> - <success/> -</iq>]]> - </programlisting> + </section> </section> </section> @@ -1225,8 +1373,9 @@ <title>Common meta-data classes</title> <para> - The canonical definition is given by the DTD (see Appendix A); the - following information is extracted from the DTD for convenience. + The canonical definition is given by the DTD (see <xref + linkend="appendix-dtd"/>); the following information is extracted from + the DTD for convenience. </para> @@ -1300,6 +1449,7 @@ <annotation role='comment'> <info> <authorinitials>tf</authorinitials> + <orgname>Intel</orgname> </info> <para> More stuff should be added here; open to suggestions. @@ -1382,6 +1532,7 @@ <annotation role='comment'> <info> <authorinitials>tf</authorinitials> + <orgname>Intel</orgname> </info> <para> More stuff should be added here, open to suggestions. @@ -1405,13 +1556,11 @@ <listitem> <para> - <code>uri</code> a of a resource associated with activity; - this can be either a <code>url</code> from which the resource + <code>uri</code> a of a resource associated with activity. + This can be either a <code>url</code> from which the resource can be fetched, or a <code>urn</code> identifying a suitable - protocol through which the resource can be obtained directly - from the initiating application (e.g., - <code>urn:xmpp:jingle:apps:rtp:video</code> would indicate a - video is to be streamed using the Jingle RTP protocol). + protocol through which the resource can be obtained (see <xref + linkend="messaging-data-transfer-urns"/>). </para> </listitem> </varlistentry> @@ -1421,11 +1570,12 @@ <listitem> <para> - uid: uid identifying resource associated with activity. + Universal id identifying resource associated with activity, <annotation role='comment'> <info> <authorinitials>tf</authorinitials> + <orgname>Intel</orgname> </info> <para> The idea is being able to use something like, for example, @@ -1442,7 +1592,7 @@ <listitem> <para> - volume level (floating point number from <0,1>) + volume level (floating point number from <0,1>), </para> </listitem> </varlistentry> @@ -1454,7 +1604,7 @@ <para> activity progress (floating point number from <0,1> this is the preferred way of passing information - such as stream position. + such as stream position, </para> </listitem> </varlistentry> @@ -1498,7 +1648,7 @@ <listitem> <para> speed of activity (floating point number; 1.0 indicates - normal speed) + normal speed). </para> </listitem> </varlistentry> @@ -1511,8 +1661,8 @@ prefix. </para> </section> - </section> + </section> <section xml:id="messaging-data-transfer"> <title>Data Transfer Protocols</title> @@ -1531,7 +1681,8 @@ <para> The preferred file transfer protocol is SI File Transfer<citation><xref linkend="xep0096"/></citation>; this - protocol must be supported by all compliant nScreen clients. + protocol must be supported by all compliant nScreen clients for + which a <code>file</code> constitutes a meaningful data unit, </para> </listitem> @@ -1557,12 +1708,81 @@ streaming should implement this protocol. </para> </section> + + <section xml:id="messaging-data-transfer-urns"> + <title>URNs for common resource fetching protocols</title> + + <para> + This section codifies <code>urn</code> to be used with the + <code>uri</code> attribute of nScreen commands to indicate how to + reach the resource. + </para> + <para> + <variablelist> + <varlistentry> + <term><code>urn:nscreen:si-file</code></term> + + <listitem> + <para> + Resource can be obtained from initiating application using SI + File Transfer<citation><xref linkend="xep0096"/></citation>, + see <xref linkend="messaging-data-transfer-files"/>. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><code>urn:nscreen:jingle:ft</code></term> + + <listitem> + <para> + Resource can be obtained from initiating application using + XMPP Jingle File Transfer<citation><xref + linkend="xep0234"/></citation>, see <xref + linkend="messaging-data-transfer-files"/>. + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><code>urn:nscreen:jingle:rtp</code></term> + + <listitem> + <para> + Resource can be obtained from initiating application using + XMPP Jingle RTP<citation><xref linkend="xep0167"/></citation>, + see <xref linkend="messaging-data-transfer-streaming"/> + </para> + </listitem> + </varlistentry> + + <varlistentry> + <term><code>urn:nscreen:upnp-av</code></term> + + <listitem> + <para> + Resource can be obtained using UPnP AV protocols. + </para> + </listitem> + </varlistentry> + </variablelist> + </para> + </section> </section> </section> <?hard-pagebreak?> <appendix xml:id="appendix-dtd"> <title>nScreen DTD</title> +<annotation role='todo'> + <info> + <authorinitials>tf</authorinitials> + <orgname>Intel</orgname> + </info> + <para> + Should split the DTD into individual namespaces. + </para> +</annotation> <programlisting> <!-- The xi:include line must be aligned directly at the end of this comment, as any padding will end up in the final document !!! --><xi:include diff --git a/scripts/docbook-to-pdf.sh b/scripts/docbook-to-pdf.sh index 3b45169..14de6ed 100755 --- a/scripts/docbook-to-pdf.sh +++ b/scripts/docbook-to-pdf.sh @@ -7,12 +7,16 @@ # /usr/lib/jvm/java-6-openjdk/jre/ on my Debian box annot="1" +impl="1" +draft="maybe" sfx="-internal" while [ "x$1" != x ]; do case "$1" in --final ) annot="0" + annot="0" + draft="no" sfx="";; --help ) echo "\n Usage: $0 [options]\n" @@ -29,16 +33,20 @@ done xsltproc -o /tmp/titlepage.xsl \ --stringparam show.annotations.comments "$annot" \ + --stringparam show.annotations.implementation "$impl" \ + --stringparam draft.mode "$draft" \ --xinclude \ /usr/share/xml/docbook/stylesheet/nwalsh/template/titlepage.xsl \ scripts/titlepage.templates.xml || exit 1 xsltproc \ --xinclude \ - --stringparam show.annotations.comments "$annot" \ + --stringparam show.annotations.comments "$annot" \ + --stringparam show.annotations.implementation "$impl" \ + --stringparam draft.mode "$draft" \ -o nscreen-protocol.fo scripts/template.xsl nscreen-protocol.xml || exit 1; fop -fo nscreen-protocol.fo -pdf nscreen-protocol${sfx}.pdf || exit 1 -rm -f nscreen-protocol.fo -rm -f /tmp/titlepage.xsl +#rm -f nscreen-protocol.fo +#rm -f /tmp/titlepage.xsl diff --git a/scripts/template.xsl b/scripts/template.xsl index 4f09455..17a3d0c 100644 --- a/scripts/template.xsl +++ b/scripts/template.xsl @@ -13,8 +13,9 @@ <fo:block break-after='page' /> </xsl:template> - <xsl:include href="/tmp/titlepage.xsl"/> +<xsl:include href="/tmp/titlepage.xsl"/> +<!-- <xsl:include href="titlepage.xsl"/> --> <!-- general settings --> @@ -29,8 +30,69 @@ <xsl:param name="bibliography.style" select="iso690"/> <xsl:param name="highlight.source" select="0"></xsl:param> <xsl:param name="shade.verbatim" select="1"></xsl:param> + <xsl:param name="toc.section.depth">3</xsl:param> + <xsl:param name="draft.mode">maybe</xsl:param> + <xsl:param name="draft.watermark.image"></xsl:param> - <!-- annotations output --> + <!-- make the 'Draft' text in page headers bold and read to make it more + prominent than the default --> + <xsl:template name="draft.text"> + <xsl:choose> + <xsl:when test="$draft.mode = 'yes'"> + <fo:inline color="red" font-weight="bold"> + <xsl:call-template name="gentext"> + <xsl:with-param name="key" select="'Draft'"/> + </xsl:call-template> + </fo:inline> + </xsl:when> + <xsl:when test="$draft.mode = 'no'"> + <!-- nop --> + </xsl:when> + <xsl:when test="ancestor-or-self::*[@status][1]/@status = 'draft'"> + <fo:inline color="red" font-weight="bold"> + <xsl:call-template name="gentext"> + <xsl:with-param name="key" select="'Draft'"/> + </xsl:call-template> + </fo:inline> + </xsl:when> + <xsl:otherwise> + <!-- nop --> + </xsl:otherwise> + </xsl:choose> + </xsl:template> + + <!-- the autogenerated org content just concats everything, so provide + custom template --> + <xsl:template match="org" mode="article.titlepage.recto.auto.mode"> + <fo:block xsl:use-attribute-sets="article.titlepage.recto.style" + space-before="0.5em" + space-after="6.0em" + start-indent="0pt" + end-indent="0pt"> + + <fo:block space-before="1.5em" + font-size="12pt" + space-after="0.5em"> + + <xsl:apply-templates select="orgname" + mode="article.titlepage.recto.mode"/> + </fo:block> + + <fo:block space-before="1.5em" + font-size="14.4pt" + space-after="0.5em"> + + <xsl:apply-templates select="orgdiv" + mode="article.titlepage.recto.mode"/> + </fo:block> + </fo:block> + </xsl:template> + + <!-- - - - - - - - - - - --> + <!-- annotations output --> + <!-- - - - - - - - - - - --> + + <!-- comments --> <xsl:template match="annotation[@role='comment']"> <xsl:if test="$show.annotations.comments != 0"> <fo:block xsl:use-attribute-sets="annotations.comment"> @@ -38,6 +100,27 @@ <xsl:text>Comment by </xsl:text> <fo:inline color="darkblue"> <xsl:value-of select="descendant::authorinitials"/> + <xsl:text> (</xsl:text> + <xsl:value-of select="descendant::orgname"/> + <xsl:text>)</xsl:text> + </fo:inline> + </fo:block> + <xsl:apply-templates/> + </fo:block> + </xsl:if> + </xsl:template> + + <!-- implementation notes --> + <xsl:template match="annotation[@role='implementation']"> + <xsl:if test="$show.annotations.implementation != 0"> + <fo:block xsl:use-attribute-sets="annotations.implementation"> + <fo:block font-weight="bold" color="green"> + <xsl:text>Implementation note by </xsl:text> + <fo:inline color="darkblue"> + <xsl:value-of select="descendant::authorinitials"/> + <xsl:text> (</xsl:text> + <xsl:value-of select="descendant::orgname"/> + <xsl:text>)</xsl:text> </fo:inline> </fo:block> <xsl:apply-templates/> @@ -45,6 +128,7 @@ </xsl:if> </xsl:template> + <!-- TODO notes (read and error if trying to generate final version) --> <xsl:template match="annotation[@role='todo']"> <xsl:if test="$show.annotations.comments = 0"> <xsl:message terminate="yes"> @@ -56,12 +140,16 @@ <xsl:text>TODO by </xsl:text> <fo:inline color="blue"> <xsl:value-of select="descendant::authorinitials"/> + <xsl:text> (</xsl:text> + <xsl:value-of select="descendant::orgname"/> + <xsl:text>)</xsl:text> </fo:inline> </fo:block> <xsl:apply-templates/> </fo:block> </xsl:template> + <!-- attribute sets for annotations --> <xsl:attribute-set name="annotations.comment"> <xsl:attribute name="space-before">0.5em</xsl:attribute> <xsl:attribute name="font-size">9pt</xsl:attribute> @@ -72,6 +160,16 @@ <xsl:attribute name="border">0.75pt solid darkred</xsl:attribute> </xsl:attribute-set> + <xsl:attribute-set name="annotations.implementation"> + <xsl:attribute name="space-before">0.5em</xsl:attribute> + <xsl:attribute name="font-size">9pt</xsl:attribute> + <xsl:attribute name="line-height">10pt</xsl:attribute> + <xsl:attribute name="text-align">left</xsl:attribute> + <xsl:attribute name="end-indent">2mm</xsl:attribute> + <xsl:attribute name="padding">1mm</xsl:attribute> + <xsl:attribute name="border">0.75pt solid green</xsl:attribute> + </xsl:attribute-set> + <xsl:attribute-set name="annotations.todo"> <xsl:attribute name="space-before">0.5em</xsl:attribute> <xsl:attribute name="font-size">9pt</xsl:attribute> @@ -82,24 +180,28 @@ <xsl:attribute name="border">1pt solid red</xsl:attribute> </xsl:attribute-set> -<xsl:attribute-set name="section.title.level2.properties"> - <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute> - <xsl:attribute name="space-before.optimum">1.0em</xsl:attribute> - <xsl:attribute name="space-before.maximum">1.0em</xsl:attribute> -</xsl:attribute-set> + <!-- tweak level two title spacing a bit --> + <xsl:attribute-set name="section.title.level2.properties"> + <xsl:attribute name="space-before.minimum">0.8em</xsl:attribute> + <xsl:attribute name="space-before.optimum">1.0em</xsl:attribute> + <xsl:attribute name="space-before.maximum">1.0em</xsl:attribute> + </xsl:attribute-set> -<xsl:attribute-set name="shade.verbatim.style"> - <xsl:attribute name="background-color">#f4f4f4</xsl:attribute> - <xsl:attribute name="border">0.5pt solid black</xsl:attribute> - <xsl:attribute name="padding-left">1pc</xsl:attribute> - <xsl:attribute name="padding-right">1pc</xsl:attribute> - <xsl:attribute name="space-before">0</xsl:attribute> -</xsl:attribute-set> -<xsl:attribute-set name="monospace.verbatim.properties" - use-attribute-sets="verbatim.properties monospace.properties"> - <xsl:attribute name="start-indent">5pc</xsl:attribute> - <xsl:attribute name="end-indent">1pc</xsl:attribute> -</xsl:attribute-set> + <!-- border around the shading of verbatim styles (e.g., programlisting) --> + <xsl:attribute-set name="shade.verbatim.style"> + <xsl:attribute name="background-color">#f4f4f4</xsl:attribute> + <xsl:attribute name="border">0.5pt solid black</xsl:attribute> + <xsl:attribute name="padding-left">1pc</xsl:attribute> + <xsl:attribute name="padding-right">1pc</xsl:attribute> + <xsl:attribute name="space-before">0</xsl:attribute> + </xsl:attribute-set> + + <!-- fixup spacing around verbatim environments --> + <xsl:attribute-set name="monospace.verbatim.properties" + use-attribute-sets="verbatim.properties monospace.properties"> + <xsl:attribute name="start-indent">5pc</xsl:attribute> + <xsl:attribute name="end-indent">1pc</xsl:attribute> + </xsl:attribute-set> <!-- not sure why, but the appendix title is indented like the body text, not like section title; this overrides that. --> diff --git a/scripts/titlepage.templates.xml b/scripts/titlepage.templates.xml index c362cfe..3f6f6b9 100644 --- a/scripts/titlepage.templates.xml +++ b/scripts/titlepage.templates.xml @@ -35,12 +35,7 @@ <t:titlepage-content t:side="recto" text-align="center"> - <orgname space-before="0.5em" - font-size="&hsize2;" - space-after="6.0em" - start-indent="0pt" - end-indent="0pt" - /> + <org/> <mediaobject/> @@ -50,6 +45,7 @@ font-size="&hsize5;" font-weight="bold" space-after="1.0em" + space-before="5.0em" start-indent="0pt" end-indent="0pt" /> @@ -63,16 +59,6 @@ end-indent="0pt" /> - <orgauthor space-before="0.5em" - font-size="&hsize3;" - start-indent="0pt" - end-indent="0pt" - /> - <authorgroup space-before="0.5em" - font-size="&hsize2;" - start-indent="0pt" - end-indent="0pt" - /> <author space-before="4.0em" font-size="&hsize2;" space-after="0.8em" @@ -82,18 +68,6 @@ <email font-size="&hsize2;"/> - <othercredit space-before="0.5em" - start-indent="0pt" - end-indent="0pt" - /> - <releaseinfo space-before="0.5em" - start-indent="0pt" - end-indent="0pt" - /> - <copyright space-before="0.5em" - start-indent="0pt" - end-indent="0pt" - /> <legalnotice text-align="start" margin-left="0.5in" margin-right="0.5in" @@ -101,744 +75,25 @@ start-indent="0pt" end-indent="0pt" /> - <pubdate space-before="0.5em" - start-indent="0pt" - end-indent="0pt" - /> - <abstract space-before="0.5em" - text-align="start" - margin-left="0.5in" - margin-right="0.5in" - font-family="{$body.fontset}" - start-indent="0pt" - end-indent="0pt" - /> - - <revision space-before="2.0em" - start-indent="0pt" - end-indent="0pt" - font-size="&hsize0;" - /> <!-- the space after is an uggly hack to force the generated toc onto a new page --> - <revhistory space-before="5in" + <revhistory space-before="3.5in" start-indent="0pt" end-indent="0pt" font-size="&hsize0space;"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - <fo:block break-after="page"/> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - -<t:titlepage t:element="set" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:named-template="division.title" - param:node="ancestor-or-self::set[1]" - text-align="center" - font-size="&hsize5;" - space-before="&hsize5space;" - font-weight="bold" - font-family="{$title.fontset}"/> - <subtitle - font-family="{$title.fontset}" - text-align="center"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="book" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:named-template="division.title" - param:node="ancestor-or-self::book[1]" - text-align="center" - font-size="&hsize5;" - space-before="&hsize5space;" - font-weight="bold" - font-family="{$title.fontset}"/> - <subtitle - text-align="center" - font-size="&hsize4;" - space-before="&hsize4space;" - font-family="{$title.fontset}"/> - <orgauthor font-size="&hsize3;" - keep-with-next="always" - space-before="2in"/> - <authorgroup space-before="2in"/> - <author font-size="&hsize3;" - space-before="&hsize2space;" - keep-with-next="always"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - <title - t:named-template="book.verso.title" - font-size="&hsize2;" - font-weight="bold" - font-family="{$title.fontset}"/> - <orgauthor/> - <authorgroup t:named-template="verso.authorgroup"/> - <author/> - <othercredit/> - <pubdate space-before="1em"/> - <copyright/> - <abstract/> - <legalnotice font-size="8pt"/> - </t:titlepage-content> - - <t:titlepage-separator> - <fo:block break-after="page"/> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - <fo:block break-after="page"/> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - -<t:titlepage t:element="part" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:named-template="division.title" - param:node="ancestor-or-self::part[1]" - text-align="center" - font-size="&hsize5;" - space-before="&hsize5space;" - font-weight="bold" - font-family="{$title.fontset}"/> - <subtitle - text-align="center" - font-size="&hsize4;" - space-before="&hsize4space;" - font-weight='bold' - font-style='italic' - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<t:titlepage t:element="partintro" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - text-align="center" - font-size="&hsize5;" - font-weight="bold" - space-before="1em" - font-family="{$title.fontset}"/> - <subtitle - text-align="center" - font-size="&hsize2;" - font-weight="bold" - font-style="italic" - font-family="{$title.fontset}"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - -<t:titlepage t:element="reference" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:named-template="division.title" - param:node="ancestor-or-self::reference[1]" - text-align="center" - font-size="&hsize5;" - space-before="&hsize5space;" - font-weight="bold" - font-family="{$title.fontset}"/> - <subtitle - font-family="{$title.fontset}" - text-align="center"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - -<t:titlepage t:element="refsynopsisdiv" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - -<t:titlepage t:element="refsection" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - -<t:titlepage t:element="refsect1" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - -<t:titlepage t:element="refsect2" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - -<t:titlepage t:element="refsect3" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="dedication" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="component.title" - param:node="ancestor-or-self::dedication[1]" - margin-left="{$title.margin.left}" - font-size="&hsize5;" - font-family="{$title.fontset}" - font-weight="bold"/> - <subtitle - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="preface" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="component.title" - param:node="ancestor-or-self::preface[1]" - margin-left="{$title.margin.left}" - font-size="&hsize5;" - font-family="{$title.fontset}" - font-weight="bold"/> - <subtitle - font-family="{$title.fontset}"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="chapter" t:wrapper="fo:block" - font-family="{$title.fontset}"> - <t:titlepage-content t:side="recto" margin-left="{$title.margin.left}"> - <title t:named-template="component.title" - param:node="ancestor-or-self::chapter[1]" - font-size="&hsize5;" - font-weight="bold"/> - - <subtitle space-before="0.5em" - font-style="italic" - font-size="&hsize2;" - font-weight="bold"/> - <orgauthor space-before="0.5em" - space-after="0.5em" - font-size="&hsize2;"/> - - <authorgroup space-before="0.5em" - space-after="0.5em" - font-size="&hsize2;"/> - - <author space-before="0.5em" - space-after="0.5em" - font-size="&hsize2;"/> - - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="appendix" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:named-template="component.title" - param:node="ancestor-or-self::appendix[1]" - margin-left="{$title.margin.left}" - font-size="&hsize5;" - font-weight="bold" - font-family="{$title.fontset}"/> - <subtitle - font-family="{$title.fontset}"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - -<t:titlepage t:element="section" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - margin-left="{$title.margin.left}" - font-family="{$title.fontset}"/> - <subtitle - font-family="{$title.fontset}"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<t:titlepage t:element="sect1" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - margin-left="{$title.margin.left}" - font-family="{$title.fontset}"/> - <subtitle - font-family="{$title.fontset}"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<t:titlepage t:element="sect2" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - margin-left="{$title.margin.left}" - font-family="{$title.fontset}"/> - <subtitle - font-family="{$title.fontset}"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<t:titlepage t:element="sect3" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - margin-left="{$title.margin.left}" - font-family="{$title.fontset}"/> - <subtitle - font-family="{$title.fontset}"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<t:titlepage t:element="sect4" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - margin-left="{$title.margin.left}" - font-family="{$title.fontset}"/> - <subtitle - font-family="{$title.fontset}"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<t:titlepage t:element="sect5" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - margin-left="{$title.margin.left}" - font-family="{$title.fontset}"/> - <subtitle - font-family="{$title.fontset}"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<t:titlepage t:element="simplesect" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - margin-left="{$title.margin.left}" - font-family="{$title.fontset}"/> - <subtitle - font-family="{$title.fontset}"/> - <orgauthor/> - <authorgroup/> - <author/> - <othercredit/> - <releaseinfo/> - <copyright/> - <legalnotice/> - <pubdate/> - <revision/> - <revhistory/> - <abstract/> + <copyright space-before="3.5em" + start-indent="0pt" + end-indent="0pt" + /> </t:titlepage-content> <t:titlepage-content t:side="verso"> </t:titlepage-content> <t:titlepage-separator> + <fo:block break-after="page"/> </t:titlepage-separator> <t:titlepage-before t:side="recto"> @@ -848,440 +103,4 @@ </t:titlepage-before> </t:titlepage> -<!-- ==================================================================== --> - - <t:titlepage t:element="bibliography" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="component.title" - param:node="ancestor-or-self::bibliography[1]" - margin-left="{$title.margin.left}" - font-size="&hsize5;" - font-family="{$title.fontset}" - font-weight="bold"/> - <subtitle - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="bibliodiv" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title t:named-template="component.title" - param:node="ancestor-or-self::bibliodiv[1]" - margin-left="{$title.margin.left}" - font-size="&hsize4;" - font-family="{$title.fontset}" - font-weight="bold"/> - <subtitle - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="glossary" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="component.title" - param:node="ancestor-or-self::glossary[1]" - margin-left="{$title.margin.left}" - font-size="&hsize5;" - font-family="{$title.fontset}" - font-weight="bold"/> - <subtitle - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="glossdiv" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title t:named-template="component.title" - param:node="ancestor-or-self::glossdiv[1]" - margin-left="{$title.margin.left}" - font-size="&hsize4;" - font-family="{$title.fontset}" - font-weight="bold"/> - <subtitle - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="index" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="component.title" - param:node="ancestor-or-self::index[1]" - param:pagewide="1" - margin-left="0pt" - font-size="&hsize5;" - font-family="{$title.fontset}" - font-weight="bold"/> - <subtitle - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - -<!-- ==================================================================== --> - - <!-- The indexdiv.title template is used so that manual and --> - <!-- automatically generated indexdiv titles get the same --> - <!-- formatting. --> - - <t:titlepage t:element="indexdiv" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title t:force="1" - t:named-template="indexdiv.title" - param:title="title"/> - <subtitle - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="setindex" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="component.title" - param:node="ancestor-or-self::setindex[1]" - param:pagewide="1" - margin-left="0pt" - font-size="&hsize5;" - font-family="{$title.fontset}" - font-weight="bold"/> - <subtitle - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="colophon" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="component.title" - param:node="ancestor-or-self::colophon[1]" - margin-left="{$title.margin.left}" - font-size="&hsize5;" - font-family="{$title.fontset}" - font-weight="bold"/> - <subtitle - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> -</t:titlepage> - -<!-- ==================================================================== --> - - <t:titlepage t:element="table.of.contents" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="gentext" - param:key="'TableofContents'" - space-before.minimum="1em" - space-before.optimum="1.5em" - space-before.maximum="2em" - space-after="0.5em" - margin-left="{$title.margin.left}" - font-size="&hsize3;" - font-weight="bold" - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - - <t:titlepage t:element="list.of.tables" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="gentext" - param:key="'ListofTables'" - space-before.minimum="1em" - space-before.optimum="1.5em" - space-before.maximum="2em" - space-after="0.5em" - margin-left="{$title.margin.left}" - font-size="&hsize3;" - font-weight="bold" - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - - <t:titlepage t:element="list.of.figures" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="gentext" - param:key="'ListofFigures'" - space-before.minimum="1em" - space-before.optimum="1.5em" - space-before.maximum="2em" - space-after="0.5em" - margin-left="{$title.margin.left}" - font-size="&hsize3;" - font-weight="bold" - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - - <t:titlepage t:element="list.of.examples" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="gentext" - param:key="'ListofExamples'" - space-before.minimum="1em" - space-before.optimum="1.5em" - space-before.maximum="2em" - space-after="0.5em" - margin-left="{$title.margin.left}" - font-size="&hsize3;" - font-weight="bold" - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - - <t:titlepage t:element="list.of.equations" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="gentext" - param:key="'ListofEquations'" - space-before.minimum="1em" - space-before.optimum="1.5em" - space-before.maximum="2em" - space-after="0.5em" - margin-left="{$title.margin.left}" - font-size="&hsize3;" - font-weight="bold" - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - - <t:titlepage t:element="list.of.procedures" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="gentext" - param:key="'ListofProcedures'" - space-before.minimum="1em" - space-before.optimum="1.5em" - space-before.maximum="2em" - space-after="0.5em" - margin-left="{$title.margin.left}" - font-size="&hsize3;" - font-weight="bold" - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - - <t:titlepage t:element="list.of.unknowns" t:wrapper="fo:block"> - <t:titlepage-content t:side="recto"> - <title - t:force="1" - t:named-template="gentext" - param:key="'ListofUnknown'" - space-before.minimum="1em" - space-before.optimum="1.5em" - space-before.maximum="2em" - space-after="0.5em" - margin-left="{$title.margin.left}" - font-size="&hsize3;" - font-weight="bold" - font-family="{$title.fontset}"/> - </t:titlepage-content> - - <t:titlepage-content t:side="verso"> - </t:titlepage-content> - - <t:titlepage-separator> - </t:titlepage-separator> - - <t:titlepage-before t:side="recto"> - </t:titlepage-before> - - <t:titlepage-before t:side="verso"> - </t:titlepage-before> - </t:titlepage> - -<!-- ==================================================================== --> - </t:templates> |