Abstract
The Zvon site http://www.zvon.org/ is a multilingual educational site based on XML technologies. It contains tens of thousands of heavily crosslinked pages, and is available in several display modes. It offers several types of searches, and yet can be run in a standalone mode on an off-line computer. The practical experience of its daily maintenance, upgrades and related problems will be discussed.
Keywords
Table of Contents
The ZVON.org site (formerly zvon.vscht.cz) is three years old and was built from scratch. It is an educational site, focused mainly on XML-related technologies, and offering references, tutorials and educational tools. It has been redesigned many times, because as it grew many features and methods became unsuitable.
When running a site like ZVON, the most difficult problem is to find a reasonable compromise between very easy publishing (let's say PowerPoint slides) and data reusability (everything kept in a database, centralized administration of all documents). We have decided to go rather the latter way, with all data in XML files, transformed using XSLT to HTML pages, with possible pre-/postprocessing with Perl/Python scripts.
Both XSLT stylesheets and scripts have undergone many changes and what seems to be a reasonable approach is a combination of generic ones (kept in one place for the whole site) and specialized ones (kept locally for each item or set of material).
ZVON contains dozens of materials. One interesting question is, whether it is possible (and reasonable) to create and follow one common document structure (i.e. DTD/schema). Our experience says rather "no", than "yes". References, which are usually extracted from normative DTDs/schemas and texts of specifications, usually have a structure very similar to one another, but tutorials are created ad hoc - document definition must follow the purpose and needs of each particular tutorial. Application of Procrustes' rule - to push the data into a fixed structure - would only do harm. Here the XML deserves its "X" - it's really easy to shape the document "on-fly" to gain maximum flexibility and add additional information during the authoring.
The heterogeneity of document structures implies the organization of scripts and stylesheets. Generic ones are shared for (nearly) all ZVON materials and their purpose is to generate common headers, frontpages, fetch data from metadata files, etc.
Specific stylesheets/scripts are kept within each reference/tutorial, although they are often derived from others (mainly for reference). After some trials, we have found that creating one or two general stylesheets for all materials would lead to cumbersome templates and result in unsustainable maintenance problems.
We use the "low-level" approach also for examples. We have decided to replace the "cut'n'paste source code into <pre>" method with deeply processed active source codes. The advantages are:
| Versioning |
All data and scripts are in a textual form and are kept in CVS, which allows for easy and transparent manipulation of the data. The synchronicity of data and scripts is also easily preserved. Total separation of "data" and "structure" is not reasonable, because XSLT stylesheets (or PHP scripts) always contain about 10% of "data" - headers, table skeletons, etc. |
| Custom linking |
It's possible to define links for individual elements/attributes/attribute values. Typically, when a specification uses XML Schema simple types, it's useful to provide links to the XML Schema reference http://zvon.org/xxl/xmlSchema2001Reference/Output/, which are outbound with respect to the current reference/tutorial. |
| Validity and functionality of examples |
The vast majority of examples are well-formed and valid (which is not the case even in many specifications). For example, the XSLT tutorial http://www.zvon.org/xxl/XSLTutorial/Output/index.html contains only XML and XSLT sources in CVS. The output is completely generated. The same applies also to the XPath tutorial http://www.zvon.org/xxl/XPathTutorial/General/examples.html, where all output - even the graphical display of XML trees with matched nodes - are generated. Of course, it is necessary to check, whether the software used conforms to the specifications. |
Searching is a necessary part of every larger website, and even then the navigation can be sometimes quite difficult. As we have control over nearly all the data (all of which is in the form of XML files), we have decided to abandon the typical website-search approach, which indexes all files, puts the results into a database and searches everything. Instead, we tried to create a set of dedicated sub-searches, e.g.:
| Reference search http://www.zvon.org/php/Search/codes.php |
given a keyword, returns links leading directly to their description page in references |
| Character search http://www.zvon.org/other/charSearch/PHP/search.php |
search in characters, entities - to help in authoring multilingual documents |
| Example repository http://www.zvon.org/HowTo/codes.php |
given a name of element/attribute, returns links leading to relevant examples, i.e. those, which contain this element/attribute in their source code (can distinguish also namespaces) |
The RFC repository http://www.zvon.org/tmRFC/RFC_share/Output/index.htm, which contains thousands of documents, can be searched using our dedicated search, which indexes only titles/subtitles and keywords, or a full-text search using Google.
We can also relatively easily specify the relations among references, tutorials and examples in the example repository http://www.zvon.org/HowTo/Output/index.html - e.g. to pretty-print XML sources in examples and link the elements to their description in references. This can be achieved using a formatting stylesheet which is generated from a "mapping" XML data file (which defines the mapping from element name and namespace to a link using XPath expressions).
All databases (with one exception) are read-only and are dumped from XML sources. We are still waiting for stable and well-tested XML databases.
The variety of output formats is another major reward. From one XML source we generate different output formats:
| Web media |
"Traditional" HTML pages with indexes, cross-links, and direct links to standards. |
| Channels |
We have all the information about materials and events stored in a central repository (of course, an XML file). It's very easy to create an RSS http://www.zvon.org/meta/RSS/Output/RSS1.0.rss (RDF Site Summary), a CDF http://www.zvon.org/meta/RSS/Output/zvon.cdf (Microsoft's "Channel Definition Format") or Mozilla's sidebar channels http://www.zvon.org/Output/bar_list.html. |
| Paper media |
PDF versions of pages (not just an HTML printed to PDF, but compressed and restructured information put on paper) are ready in a moment. We have created hand-outs http://www.zvon.org/Output/cheatsheets/cheatsheet_list.html (or cheatsheets) for our references, using SVG+XSLFO, which are condensed forms of the references, suitable for printing on one or two paper sheets. |
We have demonstrated the multimodal approach on our navigation pages, where various combinations - HTML, HTML with SVG, XML with CSS (no transformation), XML with XSLT (client side transformation) - are present, all from one source. However, we decided to stick to HTML, and if images are used then JPEG/PNG formats (but created by conversion from SVG sources), not to rule out any users/browsers. Future migration to XHTML (XML) would be easy.
Of course, we are still far from being perfect with respect to WAI (Web Accessibility Initiative) rules and general user-accessibility guidelines, but the manual creation of stylesheets inhibits the overuse of unnecessary graphics and HTML constructs.
ZVON translations http://www.zvon.org/index.php?nav_id=translations_list are prepared by volunteers with different skills and it is impossible to define very strict guidelines for delivering the translations. It is very difficult to find any translators and thus the barrier must not be too high. The best data exchange method found so far is a zipped e-mail attachment.
In an ideal case, only the XML sources are translated (e.g. the XML Tutorial http://www.zvon.org/xxl/XMLTutorial/General/book.html, and the Namespaces tutorial http://www.zvon.org/xxl/NamespaceTutorial/Output/index.html) and it enables seamless integration of all multilingual versions. If it happens that someone translates the whole tutorial in its HTML form (such as an XSLT tutorial in Russian http://www.zvon.org/xxl/XSLTutorial/Output_rus/index.htm), the material can be incorporated into website navigation and presented as-is without any problems.
Although the XML sources challenge us to use on-line transformations to different formats, we have decided to stick to static HTML pages (without any JavaScript if possible) where applicable, to PHP where some dynamic processing is necessary and limit the use of servlets to fully interactive tools only (XLabs http://www.zvon.org:9001/saxon/cgi-bin/XLab/XML/xlabIndex.html?stylesheetFile=XSLT/xlabIndex.xslt).
We are using classical web technologies (PHP, MySQL) for interactive user communication, but again, there are XML files in the background from which necessary databases are generated in batch mode.
The backend architecture of the Zvon site has dramatically changed several times to reflect our growing experience and feedback from the users. These changes were smooth thanks to the fact that data was in XML, and therefore not bound to a specific technology. In this way new ideas could be tested and the best available tools used without any concern about compatibility issues.
The ZVON project is supported by Systinet Corp. http://www.systinet.com (formerly IDOOX), a company delivering Web Services infrastructures.
![]() ![]() |
Design & Development by deepX Ltd. 2002 |