XSLTools

Annotated README.txt

211:a4006b6da1a0
2005-08-25 paulb [project @ 2005-08-25 14:43:34 by paulb] Changed the path encoding to UTF-8 - if this is not correct, ISO-8859-1 will be tried anyway.
paulb@104 1
Introduction
paulb@104 2
------------
paulb@76 3
paulb@104 4
XSLTools is a collection of modules and packages facilitating the development
paulb@104 5
of applications based on XML, XSL stylesheets and transformations, notably Web
paulb@104 6
applications involving complicated Web forms potentially consisting of
paulb@104 7
editable hierarchical structures and potentially involving "live" or "in-page"
paulb@104 8
dynamic updates to portions of those Web forms.
paulb@28 9
paulb@109 10
Quick Start
paulb@109 11
-----------
paulb@109 12
paulb@109 13
Try running the demo:
paulb@109 14
paulb@109 15
python tools/demo.py
paulb@109 16
paulb@109 17
An introductory guide to creating applications can be found in the docs
paulb@109 18
directory - see docs/index.html for the start page.
paulb@109 19
paulb@109 20
Contact, Copyright and Licence Information
paulb@109 21
------------------------------------------
paulb@109 22
paulb@109 23
The current Web page for XSLTools at the time of release is:
paulb@109 24
paulb@109 25
http://www.boddie.org.uk/python/XSLTools.html
paulb@109 26
paulb@109 27
Copyright and licence information can be found in the docs directory - see
paulb@194 28
docs/COPYING.txt, docs/LICENCE.txt and docs/LICENCE-Sarissa.txt for more
paulb@194 29
information.
paulb@109 30
paulb@104 31
Dependencies
paulb@104 32
------------
paulb@104 33
paulb@104 34
XSLTools has the following basic dependencies:
paulb@28 35
paulb@104 36
Package                     Release Information
paulb@104 37
-------                     -------------------
paulb@104 38
paulb@207 39
libxml2dom                  0.2.1
paulb@185 40
libxml2                     Tested with 2.6.17
paulb@185 41
libxslt                     Tested with 1.1.12
paulb@28 42
paulb@210 43
The example Web applications require WebStack (release 1.0 or later).
paulb@104 44
paulb@190 45
New in XSLTools 0.2 (Changes since XSLTools 0.1)
paulb@190 46
------------------------------------------------
paulb@190 47
paulb@201 48
Made a new XSLTools package and moved XSLOutput into it.
paulb@201 49
Added XMLTable (to the XSLTools package).
paulb@194 50
Changed in-page requests to contain proper POST data.
paulb@194 51
Added Debian package support.
paulb@194 52
Added missing COPYING.txt file.
paulb@201 53
Renamed the scripts to avoid naming issues in system-wide installations.
paulb@207 54
Added template:if to XSLForms.
paulb@210 55
Updated the code to work with WebStack 1.0 changes.
paulb@190 56
paulb@104 57
Notes on In-Page Update Functionality
paulb@104 58
-------------------------------------
paulb@28 59
paulb@185 60
Special note #1: Konqueror seems in certain cases to remember replaced form
paulb@185 61
content (when replaceChild is used to replace regions of the page which
paulb@185 62
include form elements). This causes the browser to believe that more form
paulb@185 63
fields exist on the page than actually do so, and subsequent form submissions
paulb@185 64
thus include the values of such removed fields. A special hack is in place to
paulb@185 65
disable form fields by changing their names, thus causing Konqueror to not
paulb@185 66
associate such fields with the real, active fields; this hack does not seem to
paulb@185 67
cause problems for Mozilla. This needs some investigation to determine in
paulb@185 68
exactly which circumstances the problem arises.
paulb@185 69
paulb@185 70
Special note #2: Konqueror also seems to crash if asked to find elements using
paulb@185 71
an empty 'id' attribute string. This needs some investigation to see if it
paulb@185 72
really is the getElementById call that causes the crash.
paulb@125 73
paulb@207 74
Special note #3: Konqueror's XMLHttpRequest seems to append null bytes to the
paulb@207 75
end of field values.
paulb@207 76
paulb@104 77
Various browsers (eg. Mozilla/Firefox, Konqueror) will not allow the
paulb@185 78
XMLHttpRequest in-page updates to function unless the URL used in the
paulb@185 79
requestUpdate JavaScript function is compatible with the URL at which the
paulb@185 80
browser finds the application. Currently, relative URLs are in use to avoid
paulb@185 81
this issue of compatibility, but should an absolute URL be deduced using the
paulb@185 82
WebStack API and then used, it may be possible that the values returned by
paulb@185 83
that API do not match the actual addresses entered into the address bar of the
paulb@185 84
browser.
paulb@28 85
paulb@104 86
To check the behaviour of the applications, it is possible to view the
paulb@104 87
document source of the pages served by applications and to verify that the
paulb@185 88
URLs mentioned in the JavaScript function calls (to 'requestUpdate') either be
paulb@185 89
a relative link or involve a URL similar to that which appears in the
paulb@185 90
browser's address bar. In some environments, the use of 'localhost' addresses
paulb@185 91
often confuses the browser and server; one workaround is to use real host
paulb@185 92
names or addresses instead of 'localhost'.
paulb@155 93
paulb@166 94
Choosing an element-path:
paulb@166 95
paulb@166 96
When specifying the "context" of the in-page update, one must imagine which
paulb@166 97
element the template fragment should operate within. If the template:id
paulb@166 98
attribute marks a particular section, then the element-path should be a path
paulb@166 99
to the applicable context element for that section in the complete template
paulb@166 100
document. Note that if a template:element attribute appears on the same
paulb@166 101
element as the template:id attribute then the element-path should refer to the
paulb@166 102
element specified in the template:element attribute.
paulb@166 103
paulb@166 104
Choosing where to put template:attribute, template:id and id:
paulb@166 105
paulb@166 106
When specifying the extent of a template fragment, one must be sure not to put
paulb@166 107
the template:id attribute on the same element as a template:attribute
paulb@166 108
annotation; otherwise, the generated code will be improperly extracted as a
paulb@166 109
fragment producing two versions of the element - one for when the specified
paulb@166 110
attribute is present, and one for when it is not present. Generally,
paulb@166 111
template:id and id can be placed on the same node, however.
paulb@173 112
paulb@173 113
Stable element ordering and element-path:
paulb@173 114
paulb@173 115
Within the element-path, the numbering of the elements will start at 1.
paulb@173 116
Therefore it is vital to choose a region of the form data structure with the
paulb@173 117
element-path which is isolated from surrounding elements whose positions would
paulb@173 118
otherwise be dependent on a stable ordering of elements, and whose processing
paulb@173 119
would be disrupted if some new elements suddenly appeared claiming the same
paulb@173 120
positions in the document. For example:
paulb@173 121
paulb@173 122
  <item value="">         .../item$1/value
paulb@173 123
    <type value=""/>      .../item$1/type$1/value
paulb@173 124
    <comment value=""/>   .../item$1/comment$2/value
paulb@173 125
  </item>
paulb@173 126
paulb@173 127
  In-page update...
paulb@173 128
paulb@173 129
  <comment value=""/>     .../item$1/comment$1/value
paulb@173 130
paulb@173 131
Notes on XSL
paulb@173 132
------------
paulb@173 133
paulb@173 134
libxslt seems to be quite liberal on the definition of runtime parameters, in
paulb@173 135
that there is no apparent need to explicitly declare the corresponding global
paulb@173 136
variables in stylesheets. Whilst this is nice, we may eventually need to
paulb@173 137
detect such variables and add them in the preparation process.
paulb@184 138
paulb@184 139
Release Procedures
paulb@184 140
------------------
paulb@184 141
paulb@201 142
Update the XSLTools/__init__.py and XSLForms/__init__.py __version__
paulb@201 143
attributes.
paulb@184 144
Change the version number and package filename/directory in the documentation.
paulb@184 145
Change code examples in the documentation if appropriate.
paulb@184 146
Update the release notes (see above).
paulb@184 147
Check the setup.py file and ensure that all package directories are mentioned.
paulb@207 148
Check the release information in the PKG-INFO file and in the package
paulb@207 149
changelog (and other files).
paulb@184 150
Tag, export.
paulb@184 151
Generate the API documentation.
paulb@184 152
Remove generated .pyc files: rm `find . -name "*.pyc"`
paulb@184 153
Archive, upload.
paulb@184 154
Upload the introductory documentation.
paulb@184 155
Update PyPI, PythonInfo Wiki, Vaults of Parnassus entries.
paulb@184 156
paulb@184 157
Generating the API Documentation
paulb@184 158
--------------------------------
paulb@184 159
paulb@184 160
In order to prepare the API documentation, it is necessary to generate some
paulb@184 161
Web pages from the Python source code. For this, the epydoc application must
paulb@184 162
be available on your system. Then, inside the XSLTools directory, run the
paulb@184 163
apidocs.sh tool script as follows:
paulb@184 164
paulb@184 165
./tools/apidocs.sh
paulb@184 166
paulb@184 167
Some warnings may be generated by the script, but the result should be a new
paulb@184 168
apidocs directory within the XSLTools directory.