123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- 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::
- <?php
- class ezcDocumentRstDocument extends ezcDocument implements
- ezcDocumentHtmlConversion
- {
- // Required by ezcDocumentHtmlConversion interface
- public function getAsHtml()
- {
- // Use direct conversion using `rst2html.py`
- }
- }
- ?>
- 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::
- <?php
- abstract class ezcDocumentConversion
- {
- /**
- * @return ezcDocument
- */
- abstract public function convert( ezcDocument $source );
- }
- ?>
- 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::
- <?php
- ezcDocumentManager::setFormat( 'rst', 'myCustomRstDocument' );
- $doc = ezcDocumentManager::loadFile( 'rst', '/path/to/my.rst' );
- ?>
- 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::
- <?php
- $result = ezcDocumentConversionManager::convert(
- 'rst', 'xhtml', '/path/to/my.rst'
- );
- ?>
- 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
|