[Zope3-checkins] CVS: zopeproducts/xml/xslt/examples - README.txt:1.1 __init__.py:1.1 configure.zcml:1.1 example.xml:1.1 ooadapter.py:1.1 ooo2html.xsl:1.1 ooview.py:1.1

Philipp von Weitershausen philikon@philikon.de
Fri, 20 Jun 2003 11:11:43 -0400


Update of /cvs-repository/zopeproducts/xml/xslt/examples
In directory cvs.zope.org:/tmp/cvs-serv15767/xml/xslt/examples

Added Files:
	README.txt __init__.py configure.zcml example.xml ooadapter.py 
	ooo2html.xsl ooview.py 
Log Message:
Moved the xml_examples, xslt, xslt_examples and xmldom products to one
xml product.


=== Added File zopeproducts/xml/xslt/examples/README.txt ===
XSLT Example
============

What this example does:

  * Sets up a view for Open Office documents -- that is, XML Documents
    that declare they contain Open Office writer XML that displays the
    document content as HTML.

  * The view works by using an adapter to do the transformation work using
    XSLT.

The view gets set up as the default view of XML documents which
contain OpenOffice XML. That is, save from the OpenOffice writer,
unzip the save file, take the 'content.xml' file and put it into an
XML Document in Zope 3. In addition, add the following two attributes
to the root node of the XML to signal to Zope that it is indeed an
OpenOffice document:
  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://openoffice.org/hypothetical/document.xsd"

An example of such an XML file is included as 'example.xml'. If you
place it into an XML Document looking at its public view (or
'view.html' alternatively) will show you the contents transformed to
HTML.



=== Added File zopeproducts/xml/xslt/examples/__init__.py ===
##############################################################################
#
# Copyright (c) 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""
$Id: __init__.py,v 1.1 2003/06/20 15:11:42 philikon Exp $
"""


=== Added File zopeproducts/xml/xslt/examples/configure.zcml ===
<zopeConfigure
   xmlns="http://namespaces.zope.org/zope"
   xmlns:browser="http://namespaces.zope.org/browser"
   xmlns:zopexml="http://namespaces.zope.org/zope-xml">

<!-- First, we define two schema interfaces. They don't have to exist at their
     specified URIs for this application (they have to for more advanced
     uses) -->

<zopexml:schemaInterface
    uri="http://openoffice.org/hypothetical/document.xsd" />

<zopexml:schemaInterface
    uri="http://www.w3.org/hypothetical/html" />

<adapter 
    for="http://openoffice.org/hypothetical/document.xsd" 
    provides="http://www.w3.org/hypothetical/html" 
    factory=".ooadapter.OOAdapter"
    permission="zope.View" />

<browser:pages
    for="http://openoffice.org/hypothetical/document.xsd"
    permission="zope.View"
    class=".ooview.OOView">
  <browser:page 
    name="view.html"
    attribute="render" />           
</browser:pages>

<browser:defaultView
    for="http://openoffice.org/hypothetical/document.xsd"
    name="view.html" />

</zopeConfigure>


=== Added File zopeproducts/xml/xslt/examples/example.xml ===
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE office:document-content PUBLIC "-//OpenOffice.org//DTD OfficeDocument 1.0//EN" "office.dtd">
<office:document-content
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:office="http://openoffice.org/2000/office"
  xmlns:style="http://openoffice.org/2000/style"
  xmlns:text="http://openoffice.org/2000/text"
  xmlns:table="http://openoffice.org/2000/table"
  xmlns:draw="http://openoffice.org/2000/drawing"
  xmlns:fo="http://www.w3.org/1999/XSL/Format"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns:number="http://openoffice.org/2000/datastyle"
  xmlns:svg="http://www.w3.org/2000/svg"
  xmlns:chart="http://openoffice.org/2000/chart"
  xmlns:dr3d="http://openoffice.org/2000/dr3d"
  xmlns:math="http://www.w3.org/1998/Math/MathML"
  xmlns:form="http://openoffice.org/2000/form"
  xmlns:script="http://openoffice.org/2000/script"
  office:class="text"
  office:version="1.0"
  xsi:schemaLocation="http://openoffice.org/hypothetical/document.xsd">

  <office:script/>

  <office:font-decls>
    <style:font-decl
      style:name="Arial Unicode MS"
      fo:font-family="&apos;Arial Unicode MS&apos;"
      style:font-pitch="variable"/>
    <style:font-decl
      style:name="HG Mincho Light J"
      fo:font-family="&apos;HG Mincho Light J&apos;"
      style:font-pitch="variable"/>
    <style:font-decl
      style:name="Thorndale"
      fo:font-family="Thorndale"
      style:font-family-generic="roman"
      style:font-pitch="variable"/>
    <style:font-decl
      style:name="Albany"
      fo:font-family="Albany"
      style:font-family-generic="swiss"
      style:font-pitch="variable"/>
  </office:font-decls>

  <office:automatic-styles/>

  <office:body>
    <text:sequence-decls>
      <text:sequence-decl text:display-outline-level="0"
	text:name="Illustration"/>
      <text:sequence-decl text:display-outline-level="0"
	text:name="Table"/>
      <text:sequence-decl text:display-outline-level="0"
	text:name="Text"/>
      <text:sequence-decl text:display-outline-level="0"
	text:name="Drawing"/>
    </text:sequence-decls>

    <text:h text:style-name="Heading 1" text:level="1">Hello world</text:h>

    <text:p text:style-name="Standard"/>

    <text:p text:style-name="Standard">
      This OpenOffice document is automatically transformed to HTML by
      Zope 3&apos;s fledgling XML architecture.
    </text:p>

  </office:body>
</office:document-content>

=== Added File zopeproducts/xml/xslt/examples/ooadapter.py ===
##############################################################################
#
# Copyright (c) 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""
$Id: ooadapter.py,v 1.1 2003/06/20 15:11:42 philikon Exp $
"""

import os.path
from zopeproducts.xml.xslt.sheet import XSLTSheet

def readfile(filename):
    f = open(os.path.join(os.path.dirname(__file__), filename), 'r')
    text = f.read()
    f.close()
    return text

OOAdapter = XSLTSheet(readfile('ooo2html.xsl'))


=== Added File zopeproducts/xml/xslt/examples/ooo2html.xsl ===
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:fo="http://www.w3.org/1999/XSL/Format"
                xmlns:xlink="http://www.w3.org/1999/xlink"
                xmlns:svg="http://www.w3.org/2000/svg"
                xmlns:office="http://openoffice.org/2000/office"
                xmlns:style="http://openoffice.org/2000/style"
                xmlns:text="http://openoffice.org/2000/text"
                xmlns:table="http://openoffice.org/2000/table"
                xmlns:draw="http://openoffice.org/2000/drawing">

<!--
##############################################################################
#
# Copyright (c) 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################

When run through a XSLT processor, this style sheet will convert OpenOffice.org XML
documents to rather clean (X)HTML which will still be manually editable.

Written by Philipp "philiKON" von Weitershausen (philikon@philikon.de)

$Id: ooo2html.xsl,v 1.1 2003/06/20 15:11:42 philikon Exp $
-->

<xsl:output method="html" encoding="UTF-8"/>


<xsl:template match="/">
<html>
  <xsl:apply-templates />
</html>
</xsl:template>


<xsl:template match="//office:body">
<body>
  <xsl:apply-templates />
</body>
</xsl:template>



<!-- Text Content ... pages 123ff file format documentation-->

<!-- Paragraph -->
<xsl:template match="//text:p">
<p>
  <!-- if this attribute is there, it refers to a style definition -->
  <xsl:if test="@text:style-name">
    <!-- thus, add CSS styles -->
    <xsl:call-template name="apply-style" />
  </xsl:if>
  <xsl:apply-templates />
</p>
</xsl:template>


<!-- Space -->
<xsl:template match="//text:s">
  <!-- XXX a range() function or something like that would be useful... -->
  <xsl:for-each select="@text:c">
    <xsl:text>&#160;</xsl:text>
  </xsl:for-each>
</xsl:template>


<!-- Tab Stop-->
<xsl:template match="//text:tab-stop">
  <xsl:text>	</xsl:text>
</xsl:template>


<!-- Span -->
<xsl:template match="//text:span">
<span>
  <!-- if this attribute is there, it refers to a style definition -->
  <xsl:if test="@text:style-name">
    <!-- thus, add CSS styles -->
    <xsl:call-template name="apply-style" />
  </xsl:if>
  <xsl:apply-templates />
</span>
</xsl:template>


<!-- Link -->
<xsl:template match="//text:a">
<a>
  <xsl:attribute name="href">
    <xsl:value-of select="@xlink:href" />
  </xsl:attribute>
  <xsl:if test="@office:target-frame-name">
   <xsl:attribute name="target">
     <xsl:value-of select="@office:target-frame-name" />
   </xsl:attribute>
  </xsl:if>
  <xsl:apply-templates />
</a>
</xsl:template>


<!-- Bookmark -->
<xsl:template match="//text:bookmark">
<a id="{@text:name}" />
</xsl:template>


<!-- Ordered List  -->
<xsl:template match="//text:ordered-list">
<ol>
  <xsl:apply-templates />
</ol>
</xsl:template>


<!-- Unordered List  -->
<xsl:template match="//text:unordered-list">
<ul>
  <xsl:apply-templates />
</ul>
</xsl:template>


<!-- Ordered List  -->
<xsl:template match="//text:list-item">
<li><xsl:apply-templates /></li>
</xsl:template>


<!-- Line break  -->
<xsl:template match="//text:line-break">
<br />
</xsl:template>


<!-- Table Content ... pages 261ff file format documentation-->

<!-- Table  -->
<xsl:template match="//table:table">
<table>
  <!-- if this attribute is there, it refers to a style definition -->
  <xsl:if test="@table:style-name">
    <!-- thus, add CSS styles -->
    <xsl:call-template name="apply-style">
      <xsl:with-param name="style-name" select="@table:style-name" />
    </xsl:call-template>
  </xsl:if>
  <xsl:apply-templates />
</table>
</xsl:template>


<!-- Table Header Rows -->
<xsl:template match="//table:table-header-rows">
  <xsl:apply-templates mode="header-row" />
</xsl:template>


<!-- Table Row -->
<xsl:template match="//table:table-row">
<tr>
  <!-- if this attribute is there, it refers to a style definition -->
  <xsl:if test="@table:style-name">
    <!-- thus, add CSS styles -->
    <xsl:call-template name="apply-style">
      <xsl:with-param name="style-name" select="@table:style-name" />
    </xsl:call-template>
  </xsl:if>
  <xsl:apply-templates />
</tr>
</xsl:template>


<!-- Table Cell -->
<xsl:template match="//table:table-cell">
<td>
  <!-- if this attribute is there, it refers to a style definition -->
  <xsl:if test="@table:style-name">
    <!-- thus, add CSS styles -->
    <xsl:call-template name="apply-style">
      <xsl:with-param name="style-name" select="@table:style-name" />
    </xsl:call-template>
  </xsl:if>
  <xsl:apply-templates />
</td>
</xsl:template>

<xsl:template match="//table:table-cell" mode="header-row">
<th>
  <!-- if this attribute is there, it refers to a style definition -->
  <xsl:if test="@table:style-name">
    <!-- thus, add CSS styles -->
    <xsl:call-template name="apply-style">
      <xsl:with-param name="style-name" select="@table:style-name" />
    </xsl:call-template>
  </xsl:if>
  <xsl:apply-templates />
</th>
</xsl:template>



<!-- Draw Content ... pages 362ff file format documentation-->

<xsl:template match="//draw:image">
  <img alt="{@draw:name}" src="{@xlink:href}" />
</xsl:template>



<!-- Styles ... used everywhere -->

<xsl:template name="apply-style">
  <!-- This template is called by text:p and text:span templates in order to
       insert a style attribute with CSS styles -->
  <xsl:param name="style-name" select="@text:style-name" />
  <xsl:attribute name="style">
    <xsl:apply-templates
         select="//style:style[@style:name=$style-name]/style:properties/@*"
         mode="style" />
  </xsl:attribute>
</xsl:template>


<!-- Format Attributes -->
<xsl:template match="@fo:*|@style:width" mode="style">
  <!-- The following attributes in the XSL format (fo) namespace are used
       by OpenOffice.org but don't seem to be part of CSS. This may lead to
       not 100% valid CSS.
       * language
       * country
       * text-shadow
       * text-align-last
       * hyphenate
       * hyphenation-keep
       * hyphenation-remain-char-count
       * hyphenation-push-char-count
       * hyphenation-ladder-count
       * break-before
       * break-after
  -->
  <xsl:value-of select="local-name()" />
  <xsl:text>:</xsl:text>
  <xsl:value-of select="." />
  <xsl:text>; </xsl:text>
</xsl:template>

<xsl:template match="@fo:text-align" mode="style">
  <xsl:if test=".='start'"   >text-align:left; </xsl:if>
  <xsl:if test=".='center'"  >text-align:center; </xsl:if>
  <xsl:if test=".='end'"     >text-align:right; </xsl:if>
  <xsl:if test=".='justify'" >text-align:justify; </xsl:if>
</xsl:template>


<!-- Style Attributes -->
<xsl:template match="@style:font-name" mode="style">
  <xsl:text>font-family:</xsl:text>
  <xsl:value-of select="local-name()" />
  <xsl:text>; </xsl:text>
</xsl:template>

<xsl:template match="@style:text-underline" mode="style">
  <xsl:text>text-decoration:underline; </xsl:text>
</xsl:template>

<xsl:template match="@style:text-crossing-out" mode="style">
  <xsl:text>text-decoration:line-through; </xsl:text>
</xsl:template>

<xsl:template match="@style:text-blinking" mode="style">
  <xsl:text>text-decoration:blink; </xsl:text>
</xsl:template>

<xsl:template match="@style:text-background-color" mode="style">
  <xsl:text>background-color:</xsl:text>
  <xsl:value-of select="." />
  <xsl:text>; </xsl:text>
</xsl:template>

<xsl:template match="@style:border-line-width" mode="style">
  <xsl:text>border-width:</xsl:text>
  <xsl:value-of select="." />
  <xsl:text>; </xsl:text>
</xsl:template>

<xsl:template match="@style:border-line-width-top" mode="style">
  <xsl:text>border-top-width:</xsl:text>
  <xsl:value-of select="." />
  <xsl:text>; </xsl:text>
</xsl:template>

<xsl:template match="@style:border-line-width-bottom" mode="style">
  <xsl:text>border-bottom-width:</xsl:text>
  <xsl:value-of select="." />
  <xsl:text>; </xsl:text>
</xsl:template>

<xsl:template match="@style:border-line-width-left" mode="style">
  <xsl:text>border-left-width:</xsl:text>
  <xsl:value-of select="." />
  <xsl:text>; </xsl:text>
</xsl:template>

<xsl:template match="@style:border-line-width-right" mode="style">
  <xsl:text>border-right-width:</xsl:text>
  <xsl:value-of select="." />
  <xsl:text>; </xsl:text>
</xsl:template>

<!-- we need this, otherwise the processor will just print the attribute
     contents while we want unmatched attributes not to appear -->
<xsl:template match="@*" mode="style" />


</xsl:stylesheet>



=== Added File zopeproducts/xml/xslt/examples/ooview.py ===
##############################################################################
#
# Copyright (c) 2003 Zope Corporation and Contributors.
# All Rights Reserved.
#
# This software is subject to the provisions of the Zope Public License,
# Version 2.0 (ZPL).  A copy of the ZPL should accompany this distribution.
# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
# FOR A PARTICULAR PURPOSE.
#
##############################################################################
"""
$Id: ooview.py,v 1.1 2003/06/20 15:11:42 philikon Exp $
"""
from zope.publisher.browser import BrowserView
from zope.component import getAdapter
from zope.app.xml.schemainterface import XMLSchemaInterfaceClass
from zope.proxy import removeAllProxies

class OOView(BrowserView):
    def render(self):
        xmlsource = getAdapter(
            self.context,
            XMLSchemaInterfaceClass('http://www.w3.org/hypothetical/html'))
        # XXX hack around security weirdness
        xmlsource = removeAllProxies(xmlsource)       
        return xmlsource.source