SchemaForms Code
Brought to you by:
michal-ruzicka,
numberone
| File | Date | Author | Commit |
|---|---|---|---|
| img | 2008-11-30 | numberone | [r1] initial release |
| README | 2008-12-11 | numberone | [r13] style, minor bugs |
| SForm.pm | 2008-12-11 | numberone | [r13] style, minor bugs |
| example.xml | 2008-12-02 | numberone | [r11] documentation |
| example.xsd | 2008-12-11 | numberone | [r13] style, minor bugs |
| generate.cgi | 2008-12-02 | numberone | [r11] documentation |
| index.html | 2008-12-02 | numberone | [r11] documentation |
| save.cgi | 2008-12-02 | numberone | [r11] documentation |
| sform.js | 2008-12-11 | numberone | [r13] style, minor bugs |
| style.css | 2008-12-11 | numberone | [r13] style, minor bugs |
KNOWN BUGS
1. there must be at least two global simpleType and complexType
to work correctly
-------------------------------------------------------------------
SchemaForms -- Web-based forms based on XML-Schema
==================================================
SchemaForms is a toolkit for generating HTML forms from XML-Schema
description, optionaly preloading them from supplied XML file, with
ability to save submitted form data again to XML file.
Only a subset of XML-Schema is recognized during displaying the form
(see specification below) and an additional attributes in XML-Schema are
required to behave SchemaForms correctly. These are used to determine
appropriate layout and style of form and form fields.
Package description
-------------------
SchemaForms toolkit consists of:
SForm.pm
-- server-side perl library containing XML-Schema and XML
manipulation code, used by generate.cgi and save.cgi.
generate.cgi
-- server-side wrapper used to generate HTML form (both
structure and content) from XML-Schema and XML file,
to the format readable by JavaScipt.
save.cgi
-- server-side wrapper used to save submitted form data into
XML file (optionally by validating against XML-Schema).
index.html
-- example of integration of SchemaForms into a web page.
Generates form based on example.xsd XML-Schema, saving
data to example.xml XML file. JavaScript representing
form and data definition is dynamically loaded using
generate.cgi script.
sform.js
-- static JavaScript code used to build and manage HTML form.
Integration of SchemaForms with YOUR application
------------------------------------------------
Modify your web page according to index.html, including img/ files,
style.css file, sform.js and generate.cgi?... JavaScripts. Use onload
event to initialize SchemaForms.
You will need to add code for retrieving your XML file name to the
generate.cgi script (see $xsd_filename, $element_name and $xml_filename
variables on the top of generate.cgi), based on your application logic.
The same apply for save.cgi. To save submitted data to the XML file, you
should send an object identifier from (hidden) field in form to your version
of save.cgi script and compute correct path name to XML file.
Feel free to change generate.cgi and save.cgi as you need. If you have
perl-based application, you can even use SForm library directly.
If you need to add your own type of form field ('widget'), look at
Line* or Type* classes in sform.js and include another JS file with
your widget implementation.
Defining form fields layout and style
-------------------------------------
TODO: In this chapter following _should_ be described:
- form: options
- Type* classes
- Line* classes
Supported subset of XML-Schema
------------------------------
Not all XML-Schema features are supported by SchemaForm.
Only following XML-Schema elements are supported:
schema
simpleType* $name sTdef
complexType* $name cTdef
attribute* $default? $name [ $type | simpleType ]
element+ $default? $name [ $type | simpleType | complexType ]
element $default? $min/maxOccurs?
[ $ref | $name [ $type | simpleType | complexType ] ]
attribute $default? $use=("Optional"|"required")="1/1"?
[ $ref | $name [ $type | simpleType ] ]
simpleType sTdef
sTdef
restriction [ $base | simpleType ]
enumeration* $value - form:render="TypeEnum"
pattern* $value - kontrola JavaScriptem?
# min*, max*, length*??
complexType [mixed!="true"] cTdef
cTdef
simpleContent
extension $base
attribute*
complexContent
extension $base
sequence
element*
attribute*
sequence
element*
attribute*
In short we DO NOT support following XML-Schema features:
* xs:union
* xs:choice
* xs:all
* xs:any
* xs:complexContent
* xs:complexType mixed=true