blob: 235a2f49a1a3d1130292faf28f45affee6b38fba [file] [log] [blame]
<?php
/**
* File containing the ezcDocumentEzXml class
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
* @package Document
* @version //autogen//
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
*/
/**
* The document handler for the eZ Publish 3 XML document markup.
*
* @package Document
* @version //autogen//
*/
class ezcDocumentEzXml extends ezcDocumentXmlBase implements ezcDocumentValidation
{
/**
* Construct document xml base.
*
* @ignore
* @param ezcDocumentEzXmlOptions $options
* @return void
*/
public function __construct( ezcDocumentEzXmlOptions $options = null )
{
parent::__construct( $options === null ?
new ezcDocumentEzXmlOptions() :
$options );
}
/**
* Return document compiled to the docbook format
*
* The internal document structure is compiled to the docbook format and
* the resulting docbook document is returned.
*
* This method is required for all formats to have one central format, so
* that each format can be compiled into each other format using docbook as
* an intermediate format.
*
* You may of course just call an existing converter for this conversion.
*
* @return ezcDocumentDocbook
*/
public function getAsDocbook()
{
$converter = new ezcDocumentEzXmlToDocbookConverter();
$converter->options->errorReporting = $this->options->errorReporting;
$document = $converter->convert( $this );
$document->setPath( $this->path );
return $document;
}
/**
* Create document from docbook document
*
* A document of the docbook format is provided and the internal document
* structure should be created out of this.
*
* This method is required for all formats to have one central format, so
* that each format can be compiled into each other format using docbook as
* an intermediate format.
*
* You may of course just call an existing converter for this conversion.
*
* @param ezcDocumentDocbook $document
* @return void
*/
public function createFromDocbook( ezcDocumentDocbook $document )
{
if ( $this->options->validate &&
$document->validateString( $document ) !== true )
{
$this->triggerError( E_WARNING, "You try to convert an invalid docbook document. This may lead to invalid output." );
}
$this->path = $document->getPath();
$converter = new ezcDocumentDocbookToEzXmlConverter();
$converter->options->errorReporting = $this->options->errorReporting;
$doc = $converter->convert( $document );
$this->document = $doc->getDomDocument();
}
/**
* Validate the input file
*
* Validate the input file against the specification of the current
* document format.
*
* Returns true, if the validation succeded, and an array with
* ezcDocumentValidationError objects otherwise.
*
* @param string $file
* @return mixed
*/
public function validateFile( $file )
{
$oldSetting = libxml_use_internal_errors( true );
libxml_clear_errors();
$document = new DOMDocument();
$document->load( $file );
$document->relaxNGValidate( $this->options->relaxNgSchema );
// Get all errors
$xmlErrors = libxml_get_errors();
$errors = array();
foreach ( $xmlErrors as $error )
{
$errors[] = ezcDocumentValidationError::createFromLibXmlError( $error );
}
libxml_clear_errors();
libxml_use_internal_errors( $oldSetting );
return ( count( $errors ) ? $errors : true );
}
/**
* Validate the input string
*
* Validate the input string against the specification of the current
* document format.
*
* Returns true, if the validation succeded, and an array with
* ezcDocumentValidationError objects otherwise.
*
* @param string $string
* @return mixed
*/
public function validateString( $string )
{
$oldSetting = libxml_use_internal_errors( true );
libxml_clear_errors();
$document = new DOMDocument();
$document->loadXml( $string );
$document->relaxNGValidate( $this->options->relaxNgSchema );
// Get all errors
$xmlErrors = libxml_get_errors();
$errors = array();
foreach ( $xmlErrors as $error )
{
$errors[] = ezcDocumentValidationError::createFromLibXmlError( $error );
}
libxml_clear_errors();
libxml_use_internal_errors( $oldSetting );
return ( count( $errors ) ? $errors : true );
}
}
?>