eZ Component: Document, Design ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ :Author: $Author$ :Revision: $Revision$ :Date: $Date$ Design description ================== ezcDocument class (abstract) ---------------------------- This class is the base class for each implemented markup format. The extending classes are named like 'ezcDocumentHtmlDocument'. The extending classes implement the required actions to load a file or string in the respective markup and return an arbitrary structure describing the document and containing all available markup information. For each document there will be at least a conversion to the DocBook__ format. The document classes may implement additional interfaces for direct access to some converted format, if there are shortcut implementations available, like the following example shows:: Beside loading a document all document classes need to implement save() method, which returns the document serialized as a string. ezcDocumentWikiBase class ^^^^^^^^^^^^^^^^^^^^^^^^^ There may be extensions, like a basic wiki syntax parser, from the document class, which implement a set of parse helper functions for some set of markup languages. ezcDocumentConversion interface ------------------------------- Interface that defines an abstract conversion class. Real conversion classes will implement conversion of the given document from one format to another. The names of that classes follow the pattern: 'ezcDocumentRstToHtmlConversion'. The main method of this abstract class, convert(), takes a document of the first format and returns a document in the other format. Both objects extend the ezcDocument class:: ezcDocumentXsltConversion ^^^^^^^^^^^^^^^^^^^^^^^^^ There are a lot of conversions which may just work on the base of an XSLT. For all those conversions an abstract ezcDocumentXsltConversion class is provided, which just takes a set of XSLT files to apply to the XML of the source document and handles the selection of a proper XSLT engine. ezcDocumentManager ------------------ The document manager knows about the document parsers to use for each format and offers a set of static convenient methods to change the used parser for a document type, or directly create a document from a string or file. The Syntax for accessing the document manager could look like:: The document manager initiall knows about all internal formats and has them registered. ezcDocumentConversionManager ---------------------------- This won't be implemented in the first release. While you may call the conversion directly, the conversion manager has a set of registered conversion routes and offers you direct access to the document conversions, like:: There will be an interface to overwrite default conversion routes and add or change the classes used for some conversion. Multiple conversions ^^^^^^^^^^^^^^^^^^^^ There may be multiple conversion implementations for a set of formats. A conversion from ezp4xml to HTML may not only be done by using an XSLT, but also using a simple templating enging, based on string replacements, or a ezcDocumentTemplateTieIn which uses ezcTemplate to convert between the documents. ezcDocumentValidation interface ------------------------------- The document classes may implement the ezcDocumentValidation, which provides the method validate( $file ), which can be used to validate an input file before trying to load it. The XML based formats will usually implement this by checking against a RelaxNG based document definition. Algorithms ========== Transforming XML ---------------- XML documents are transformed using XSLT stylesheets and XSL extension for PHP. Transformations are done with ezcDocXSLTTransformer class. Optionally the transformations may be done by the xsltrans CLI utility. Examples ======== Examples for the usage of the ezcDocument API. Loading a document ------------------ :: $doc = new ezcDocumentRstDocument(); $doc->loadFile( '/path/to/my.rst' ); Validating a set of documents ----------------------------- :: $doc = new ezcDocumentXhtmlDocument(); $result_1 = $doc->validate( '/path/to/first.htm' ); $result_2 = $doc->validate( '/path/to/second.htm' ); foreach ( $result_1 as $error ) { echo "- {$error->msg} in {$error->line} in {$error->file}.\n"; } Convert between documents ------------------------- :: $doc = new ezcDocumentRstDocument(); $doc->loadFile( '/path/to/my.rst' ); $converter = new ezcDocumentRstToHtmlConversion(); $converter->option->literalTag = 'code'; $html = $converter->convert( $doc ); // __toString() will of course be implemented, too. echo $doc->save(); Using the document manager -------------------------- :: ezcDocumentManager::setFormat( 'rst', 'myCustomRstHandler' ); $doc = ezcDocumentManager::loadFile( 'rst', '/path/to/my.rst' ); // All errors in the RST syntax should now be magically fixed. echo $doc; .. Local Variables: mode: rst fill-column: 79 End: vim: et syn=rst tw=79