Initial import of the Hibernate3 module
git-svn-id: https://svn.jboss.org/repos/hibernate/trunk/Hibernate3/doc@3890 1b8cb986-b30d-0410-93ca-fae66ebed9b2
|
@ -0,0 +1,117 @@
|
|||
/* Javadoc style sheet */
|
||||
|
||||
/* Define colors, fonts and other style attributes here to override the defaults */
|
||||
|
||||
/* Page background color */
|
||||
body { font-family: Arial;
|
||||
background-color: white;
|
||||
font-size: 10pt;
|
||||
}
|
||||
td { font-family: Arial;
|
||||
font-size: 10pt;
|
||||
}
|
||||
/* Table colors */
|
||||
.TableHeadingColor { background: #F4F4F4 }
|
||||
.TableSubHeadingColor { background: #F4F4F4 }
|
||||
.TableRowColor { background: #FFFFFF }
|
||||
|
||||
/* Font used in left-hand frame lists */
|
||||
.FrameTitleFont { font-size: normal; font-family: Arial }
|
||||
.FrameHeadingFont { font-size: normal; font-family: Arial }
|
||||
.FrameItemFont { font-size: normal; font-family: Arial }
|
||||
|
||||
/* Example of smaller, sans-serif font in frames */
|
||||
/* .FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
|
||||
|
||||
/* Navigation bar fonts and colors */
|
||||
.NavBarCell1 { background-color:#F4F4F4;}
|
||||
.NavBarCell1Rev { background-color:silver;}
|
||||
|
||||
.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;}
|
||||
.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
|
||||
|
||||
.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
|
||||
.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
|
||||
|
||||
A {
|
||||
color: #003399;
|
||||
}
|
||||
|
||||
A:active {
|
||||
color: #003399;
|
||||
}
|
||||
|
||||
A:visited {
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
TD, TH, SPAN {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
BLOCKQUOTE {
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
|
||||
/*H1, H2, H3, H4, H5, H6 {
|
||||
color: #000000;
|
||||
font-weight:500;
|
||||
margin-top:10px;
|
||||
padding-top:15px;
|
||||
}
|
||||
|
||||
H1 { font-size: 150%; }
|
||||
H2 { font-size: 140%; }
|
||||
H3 { font-size: 110%; font-weight: bold; }
|
||||
H4 { font-size: 110%; font-weight: bold;}
|
||||
H5 { font-size: 100%; font-style: italic; }
|
||||
H6 { font-size: 100%; font-style: italic; }*/
|
||||
|
||||
TT {
|
||||
font-size: 90%;
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
PRE {
|
||||
font-size: 90%;
|
||||
padding: 5px;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: #CCCCCC;
|
||||
background-color: #F4F4F4;
|
||||
}
|
||||
|
||||
UL, OL, LI {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
HR {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
background-color: #CCCCCC;
|
||||
border-width: 0px;
|
||||
padding: 0px;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
|
||||
.variablelist {
|
||||
padding-top: 10;
|
||||
padding-bottom:10;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.itemizedlist, UL {
|
||||
padding-top: 0;
|
||||
padding-bottom:0;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.term {
|
||||
font-weight:bold;
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
<body>
|
||||
|
||||
<h2>Hibernate API</h2>
|
||||
|
||||
This documentation concentrates upon the following <b>Core API</b> interfaces:
|
||||
<li><tt>net.sf.hibernate.Hibernate</tt></li>
|
||||
<li><tt>net.sf.hibernate.Session</tt></li>
|
||||
<li><tt>net.sf.hibernate.SessionFactory</tt></li>
|
||||
<li><tt>net.sf.hibernate.Transaction</tt></li>
|
||||
<li><tt>net.sf.hibernate.Query</tt></li>
|
||||
<li><tt>net.sf.hibernate.Criteria</tt></li>
|
||||
<li><tt>net.sf.hibernate.ScrollableResults</tt></li>
|
||||
<li><tt>net.sf.hibernate.cfg.Configuration</tt></li>
|
||||
<li><tt>net.sf.hibernate.expression.Expression</tt></li>
|
||||
<li><tt>net.sf.hibernate.expression.Order</tt></li>
|
||||
<li><tt>net.sf.hibernate.expression.Example</tt></li>
|
||||
These interfaces are fully intended to be exposed to application code.<br>
|
||||
<br>
|
||||
The <b>Extension API</b> is intended to be used by application programmers
|
||||
to extend Hibernate functionality. None of these interfaces are intended
|
||||
to be called by the application - they are called internally by Hibernate.
|
||||
This API is less stable than the Core API. The safest way to extend
|
||||
functionality is to contribute extensions back to the project; that way
|
||||
extensions will be updated when the Extension API changes.<br>
|
||||
<br>
|
||||
Full Hibernate documentation may be found at
|
||||
<a href="http://hibernate.org">hibernate.org</a>.
|
||||
@see net.sf.hibernate.Hibernate
|
||||
@see net.sf.hibernate.Session
|
||||
@see net.sf.hibernate.SessionFactory
|
||||
@see net.sf.hibernate.Transaction
|
||||
@see net.sf.hibernate.Query
|
||||
@see net.sf.hibernate.Criteria
|
||||
@see net.sf.hibernate.ScrollableResults
|
||||
@see net.sf.hibernate.cfg.Configuration
|
||||
@see net.sf.hibernate.expression.Expression
|
||||
@see net.sf.hibernate.expression.Order
|
||||
@see net.sf.hibernate.expression.Example
|
||||
</body>
|
|
@ -0,0 +1,9 @@
|
|||
We're using the DocBook XSL distribution for HTML and PDF
|
||||
generation. The best results can be achieved with the
|
||||
Saxon XSLT processor (don't use Xalan!) and the Apache
|
||||
FOP library.
|
||||
|
||||
The documentation is generated with the distribution
|
||||
build.xml target 'doc<pdf|html|htmlsingle>'.
|
||||
|
||||
christian@hibernate.org
|
|
@ -0,0 +1,146 @@
|
|||
<project name="HibernateDocumentation" default="all.doc" basedir=".">
|
||||
|
||||
<!-- Set build directories for all formats. -->
|
||||
<property name="build.dir" value="${basedir}/build"/>
|
||||
|
||||
<!-- Support files for build process. -->
|
||||
<property name="support.dir" value="${basedir}/support"/>
|
||||
|
||||
<!-- Set DocBook stylesheets. -->
|
||||
<property name="db.style.fopdf" value="fopdf.xsl"/>
|
||||
<property name="db.style.html" value="html_chunk.xsl"/>
|
||||
<property name="db.style.htmlsingle" value="html.xsl"/>
|
||||
|
||||
<!-- Classpath for the build tools. -->
|
||||
<path id="lib.classpath">
|
||||
<fileset dir="${support.dir}/lib">
|
||||
<include name="**/*.jar"/>
|
||||
</fileset>
|
||||
</path>
|
||||
|
||||
<!-- ################################################################## -->
|
||||
|
||||
<target name="all.doc"
|
||||
depends="clean"
|
||||
description="Compile documentation for all languages and all formats.">
|
||||
|
||||
<!-- TRANSLATOR: Duplicate this line for your language -->
|
||||
<antcall target="lang.all"><param name="lang" value="en"/></antcall>
|
||||
|
||||
</target>
|
||||
|
||||
<target name="all.revdiff"
|
||||
description="Generates a diff report for all translated versions.">
|
||||
|
||||
<!-- TRANSLATOR: Duplicate this line for your language -->
|
||||
<antcall target="lang.revdiff"><param name="lang" value="de"/></antcall>
|
||||
|
||||
</target>
|
||||
|
||||
<!-- ################################################################## -->
|
||||
|
||||
<target name="clean">
|
||||
|
||||
<!-- Delete build directory. -->
|
||||
<delete dir="${build.dir}"/>
|
||||
|
||||
</target>
|
||||
|
||||
<target name="lang.all">
|
||||
<!-- Compile the documentation for a single language in all formats. -->
|
||||
<antcall target="lang.docpdf"/>
|
||||
<antcall target="lang.dochtml"/>
|
||||
<antcall target="lang.dochtmlsingle"/>
|
||||
<antcall target="lang.htmlmisc"/>
|
||||
</target>
|
||||
|
||||
<target name="lang.docpdf">
|
||||
|
||||
<!-- Copy all the images to the output location, will be removed later. -->
|
||||
<copy todir="${build.dir}/${lang}/pdf/images">
|
||||
<fileset dir="${basedir}/${lang}/images">
|
||||
<include name="**/*.png"/>
|
||||
<include name="**/*.svg"/>
|
||||
<include name="**/*.gif"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
|
||||
<!-- Create the XSL/FO temporary file. -->
|
||||
<java classname="com.icl.saxon.StyleSheet" fork="true" dir="${basedir}">
|
||||
<classpath refid="lib.classpath"/>
|
||||
<arg value="-o"/>
|
||||
<arg value="${build.dir}/${lang}/pdf/docbook_fop.tmp"/>
|
||||
<arg value="${basedir}/${lang}/master.xml"/>
|
||||
<arg value="${basedir}/${lang}/styles/${db.style.fopdf}"/>
|
||||
</java>
|
||||
|
||||
<!-- Create a PDF from the XSL/FO. -->
|
||||
<java classname="org.apache.fop.apps.Fop" fork="true" dir="${basedir}">
|
||||
<classpath refid="lib.classpath"/>
|
||||
<arg value="${build.dir}/${lang}/pdf/docbook_fop.tmp"/>
|
||||
<arg value="${build.dir}/${lang}/pdf/hibernate_reference.pdf"/>
|
||||
</java>
|
||||
|
||||
<!-- Delete temporary files. -->
|
||||
<delete file="${build.dir}/${lang}/pdf/docbook_fop.tmp"/>
|
||||
<delete dir="${build.dir}/${lang}/pdf/images"/>
|
||||
|
||||
</target>
|
||||
|
||||
<target name="lang.dochtml">
|
||||
|
||||
<mkdir dir="${build.dir}/${lang}/html/"/>
|
||||
|
||||
<java classname="com.icl.saxon.StyleSheet" fork="true" dir="${build.dir}/${lang}/html">
|
||||
<classpath refid="lib.classpath"/>
|
||||
<arg value="${basedir}/${lang}/master.xml"/>
|
||||
<arg value="${basedir}/${lang}/styles/${db.style.html}"/>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
<target name="lang.dochtmlsingle">
|
||||
|
||||
<mkdir dir="${build.dir}/${lang}/html_single/"/>
|
||||
|
||||
<java classname="com.icl.saxon.StyleSheet" fork="true" dir="${basedir}">
|
||||
<classpath refid="lib.classpath"/>
|
||||
<arg value="-o"/>
|
||||
<arg value="${build.dir}/${lang}/html_single/index.html"/>
|
||||
<arg value="${basedir}/${lang}/master.xml"/>
|
||||
<arg value="${basedir}/${lang}/styles/${db.style.htmlsingle}"/>
|
||||
</java>
|
||||
</target>
|
||||
|
||||
<target name="lang.htmlmisc">
|
||||
|
||||
<!-- Copy images and CSS for HTML documentation, language specific. -->
|
||||
<copy todir="${build.dir}/${lang}/shared/images">
|
||||
<fileset dir="${basedir}/${lang}/images">
|
||||
<include name="**/*.png"/>
|
||||
<include name="**/*.gif"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
<copy todir="${build.dir}/${lang}/shared/css">
|
||||
<fileset dir="${basedir}/${lang}/styles">
|
||||
<include name="**/*.css"/>
|
||||
</fileset>
|
||||
</copy>
|
||||
|
||||
</target>
|
||||
|
||||
<target name="lang.revdiff">
|
||||
|
||||
<taskdef name="revdiff"
|
||||
classname="org.hibernate.docproc.revdiff.RevDiffReportTask"
|
||||
classpathref="lib.classpath">
|
||||
|
||||
</taskdef>
|
||||
|
||||
<revdiff original="${basedir}/en/master.xml"
|
||||
copy="${basedir}/${lang}/master.xml"
|
||||
report="${build.dir}/status_${lang}.html"/>
|
||||
|
||||
</target>
|
||||
|
||||
|
||||
</project>
|
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 9.5 KiB |
After Width: | Height: | Size: 9.1 KiB |
|
@ -0,0 +1,429 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
|
||||
[
|
||||
<!ATTLIST svg
|
||||
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
|
||||
]>
|
||||
<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
width="354.331"
|
||||
height="336.614"
|
||||
id="svg1">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
x1="0"
|
||||
y1="0"
|
||||
x2="1"
|
||||
y2="0"
|
||||
id="linearGradient127"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop128" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop129" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="0"
|
||||
y1="0"
|
||||
x2="1"
|
||||
y2="0"
|
||||
id="linearGradient130"
|
||||
xlink:href="#linearGradient127"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad" />
|
||||
<radialGradient
|
||||
cx="0.5"
|
||||
cy="0.5"
|
||||
fx="0.5"
|
||||
fy="0.5"
|
||||
r="0.5"
|
||||
id="radialGradient131"
|
||||
xlink:href="#linearGradient127"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad" />
|
||||
</defs>
|
||||
<g
|
||||
transform="matrix(0.823795,0,0,0.823795,0.120302,5.25349)"
|
||||
style="font-size:12;"
|
||||
id="g659">
|
||||
<rect
|
||||
width="212.257"
|
||||
height="57.2441"
|
||||
x="17.9576"
|
||||
y="100.132"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect137" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="13.4238"
|
||||
y="95.9309"
|
||||
transform="matrix(0.743454,0,0,0.482981,6.46949,52.2178)"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect132" />
|
||||
</g>
|
||||
<rect
|
||||
width="325.86"
|
||||
height="63.6537"
|
||||
x="17.4083"
|
||||
y="15.194"
|
||||
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect136" />
|
||||
<rect
|
||||
width="325.86"
|
||||
height="63.6537"
|
||||
x="13.6713"
|
||||
y="12.4966"
|
||||
style="font-size:12;fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect126" />
|
||||
<g
|
||||
transform="matrix(1.14345,0,0,0.729078,-1.67818,105.325)"
|
||||
style="font-size:12;"
|
||||
id="g164">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="77.2688"
|
||||
x="16.6979"
|
||||
y="222.966"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect138" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="77.2688"
|
||||
x="14.7335"
|
||||
y="221.002"
|
||||
transform="translate(-1.30962,-1.30992)"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect133" />
|
||||
</g>
|
||||
<text
|
||||
x="170.824753"
|
||||
y="58.402939"
|
||||
transform="scale(0.823795,0.823795)"
|
||||
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text183">
|
||||
<tspan
|
||||
x="170.824997"
|
||||
y="58.402901"
|
||||
id="tspan360">
|
||||
Application</tspan>
|
||||
</text>
|
||||
<text
|
||||
x="178.076340"
|
||||
y="364.281433"
|
||||
transform="scale(0.823795,0.823795)"
|
||||
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text197">
|
||||
<tspan
|
||||
x="178.076004"
|
||||
y="364.281006"
|
||||
id="tspan421">
|
||||
Database</tspan>
|
||||
</text>
|
||||
<text
|
||||
x="68.605331"
|
||||
y="138.524582"
|
||||
transform="scale(0.823795,0.823795)"
|
||||
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text216">
|
||||
<tspan
|
||||
x="68.605301"
|
||||
y="138.524994"
|
||||
id="tspan384">
|
||||
SessionFactory</tspan>
|
||||
</text>
|
||||
<rect
|
||||
width="67.0014"
|
||||
height="101.35"
|
||||
x="196.927"
|
||||
y="89.2389"
|
||||
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect387" />
|
||||
<rect
|
||||
width="67.0014"
|
||||
height="101.35"
|
||||
x="194.633"
|
||||
y="86.4389"
|
||||
style="font-size:12;fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect388" />
|
||||
<text
|
||||
x="249.108841"
|
||||
y="173.885559"
|
||||
transform="scale(0.823795,0.823795)"
|
||||
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text389">
|
||||
<tspan
|
||||
x="249.108994"
|
||||
y="173.886002"
|
||||
id="tspan392">
|
||||
Session</tspan>
|
||||
</text>
|
||||
<rect
|
||||
width="73.0355"
|
||||
height="101.35"
|
||||
x="270.995"
|
||||
y="90.0018"
|
||||
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect395" />
|
||||
<rect
|
||||
width="73.0355"
|
||||
height="101.35"
|
||||
x="267.869"
|
||||
y="87.2018"
|
||||
style="font-size:12;fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect396" />
|
||||
<text
|
||||
x="328.593658"
|
||||
y="174.715622"
|
||||
transform="scale(0.823795,0.823795)"
|
||||
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text397">
|
||||
<tspan
|
||||
x="328.593994"
|
||||
y="174.716003"
|
||||
id="tspan563">
|
||||
Transaction</tspan>
|
||||
</text>
|
||||
<g
|
||||
transform="matrix(0.29544,0,0,0.397877,9.70533,103.96)"
|
||||
style="font-size:12;"
|
||||
id="g565">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="16.6979"
|
||||
y="99.2053"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect566" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="13.4238"
|
||||
y="95.9309"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect567" />
|
||||
</g>
|
||||
<text
|
||||
x="25.592752"
|
||||
y="204.497803"
|
||||
transform="scale(0.823795,0.823795)"
|
||||
style="font-size:10;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text568">
|
||||
<tspan
|
||||
x="25.592800"
|
||||
y="204.498001"
|
||||
id="tspan662">
|
||||
TransactionFactory</tspan>
|
||||
</text>
|
||||
<g
|
||||
transform="matrix(0.298082,0,0,0.397877,99.6898,103.96)"
|
||||
style="font-size:12;"
|
||||
id="g573">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="16.6979"
|
||||
y="99.2053"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect574" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="13.4238"
|
||||
y="95.9309"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect575" />
|
||||
</g>
|
||||
<text
|
||||
x="134.030670"
|
||||
y="205.532791"
|
||||
transform="scale(0.823795,0.823795)"
|
||||
style="font-size:10;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text576">
|
||||
<tspan
|
||||
x="134.031006"
|
||||
y="205.533005"
|
||||
id="tspan664">
|
||||
ConnectionProvider</tspan>
|
||||
</text>
|
||||
<g
|
||||
transform="matrix(1.14345,0,0,0.729078,-1.67818,38.9539)"
|
||||
style="font-size:12;"
|
||||
id="g587">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="77.2688"
|
||||
x="16.6979"
|
||||
y="222.966"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect588" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="77.2688"
|
||||
x="14.7335"
|
||||
y="221.002"
|
||||
transform="translate(-1.30962,-1.30992)"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect589" />
|
||||
</g>
|
||||
<rect
|
||||
width="90.951"
|
||||
height="44.4829"
|
||||
x="25.6196"
|
||||
y="206.028"
|
||||
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect594" />
|
||||
<rect
|
||||
width="90.951"
|
||||
height="44.4829"
|
||||
x="24.4229"
|
||||
y="204.135"
|
||||
style="font-size:12;fill:#b3b3b3;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect595" />
|
||||
<text
|
||||
x="85.575645"
|
||||
y="282.300354"
|
||||
transform="scale(0.823795,0.823795)"
|
||||
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;text-anchor:middle;"
|
||||
id="text596">
|
||||
<tspan
|
||||
x="85.575600"
|
||||
y="282.299988"
|
||||
id="tspan607">
|
||||
JNDI</tspan>
|
||||
</text>
|
||||
<rect
|
||||
width="90.951"
|
||||
height="44.4829"
|
||||
x="236.937"
|
||||
y="206.791"
|
||||
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect610" />
|
||||
<rect
|
||||
width="90.951"
|
||||
height="44.4829"
|
||||
x="235.741"
|
||||
y="204.898"
|
||||
style="font-size:12;fill:#b3b3b3;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect611" />
|
||||
<text
|
||||
x="342.093201"
|
||||
y="283.226410"
|
||||
transform="scale(0.823795,0.823795)"
|
||||
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;text-anchor:middle;"
|
||||
id="text612">
|
||||
<tspan
|
||||
x="342.092987"
|
||||
y="283.226013"
|
||||
id="tspan621">
|
||||
JTA</tspan>
|
||||
</text>
|
||||
<rect
|
||||
width="90.951"
|
||||
height="44.4829"
|
||||
x="130.134"
|
||||
y="206.791"
|
||||
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect616" />
|
||||
<rect
|
||||
width="90.951"
|
||||
height="44.4829"
|
||||
x="128.937"
|
||||
y="204.898"
|
||||
style="font-size:12;fill:#b3b3b3;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect617" />
|
||||
<text
|
||||
x="212.445343"
|
||||
y="283.226410"
|
||||
transform="scale(0.823795,0.823795)"
|
||||
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;text-anchor:middle;"
|
||||
id="text618">
|
||||
<tspan
|
||||
x="212.445007"
|
||||
y="283.226013"
|
||||
id="tspan623">
|
||||
JDBC</tspan>
|
||||
</text>
|
||||
<g
|
||||
transform="matrix(0.823795,0,0,0.823795,0.120302,6.19341)"
|
||||
style="font-size:12;"
|
||||
id="g637">
|
||||
<g
|
||||
transform="matrix(0.499515,0,0,0.415467,-0.237339,5.61339)"
|
||||
id="g167">
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="61.8805"
|
||||
y="68.4288"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect134" />
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="59.2613"
|
||||
y="65.8095"
|
||||
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect135" />
|
||||
</g>
|
||||
<text
|
||||
x="33.749969"
|
||||
y="50.589706"
|
||||
style="font-size:11;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text188">
|
||||
<tspan
|
||||
x="33.750000"
|
||||
y="50.589699"
|
||||
id="tspan635">
|
||||
Transient Objects</tspan>
|
||||
</text>
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.823795,0,0,0.823795,0.120302,5.25349)"
|
||||
style="font-size:12;"
|
||||
id="g644">
|
||||
<g
|
||||
transform="matrix(0.297486,0,0,0.516482,230.251,36.9178)"
|
||||
id="g364">
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="61.8805"
|
||||
y="68.4288"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect365" />
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="59.2613"
|
||||
y="65.8095"
|
||||
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect366" />
|
||||
</g>
|
||||
<text
|
||||
x="277.123230"
|
||||
y="85.155571"
|
||||
style="font-size:11;font-weight:normal;stroke-width:1pt;font-family:Helvetica;text-anchor:middle;"
|
||||
id="text367">
|
||||
<tspan
|
||||
x="277.122986"
|
||||
y="85.155602"
|
||||
id="tspan631">
|
||||
Persistent</tspan>
|
||||
<tspan
|
||||
x="277.122986"
|
||||
y="96.155602"
|
||||
id="tspan633">
|
||||
Objects</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 6.6 KiB |
|
@ -0,0 +1,334 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
|
||||
[
|
||||
<!ATTLIST svg
|
||||
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
|
||||
]>
|
||||
<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
width="318.898"
|
||||
height="248.031"
|
||||
id="svg1">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
x1="0"
|
||||
y1="0"
|
||||
x2="1"
|
||||
y2="0"
|
||||
id="linearGradient127"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop128" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop129" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="0"
|
||||
y1="0"
|
||||
x2="1"
|
||||
y2="0"
|
||||
id="linearGradient130"
|
||||
xlink:href="#linearGradient127"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad" />
|
||||
<radialGradient
|
||||
cx="0.5"
|
||||
cy="0.5"
|
||||
fx="0.5"
|
||||
fy="0.5"
|
||||
r="0.5"
|
||||
id="radialGradient131"
|
||||
xlink:href="#linearGradient127"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad" />
|
||||
</defs>
|
||||
<rect
|
||||
width="291.837"
|
||||
height="57.0074"
|
||||
x="17.3169"
|
||||
y="18.646"
|
||||
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect136" />
|
||||
<rect
|
||||
width="291.837"
|
||||
height="57.0074"
|
||||
x="13.9703"
|
||||
y="16.2302"
|
||||
style="font-size:12;fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect126" />
|
||||
<g
|
||||
transform="matrix(0.326107,0,0,0.765831,9.59261,8.98517)"
|
||||
style="font-size:12;"
|
||||
id="g161">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="16.6979"
|
||||
y="99.2053"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect137" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="13.4238"
|
||||
y="95.9309"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect132" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(1.02406,0,0,0.652953,0.223384,39.9254)"
|
||||
style="font-size:12;"
|
||||
id="g164">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="77.2688"
|
||||
x="16.6979"
|
||||
y="222.966"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect138" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="77.2688"
|
||||
x="14.7335"
|
||||
y="221.002"
|
||||
transform="translate(-1.30962,-1.30992)"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect133" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.449834,0,0,0.338463,-3.15909,9.73319)"
|
||||
style="font-size:12;"
|
||||
id="g167">
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="61.8805"
|
||||
y="68.4288"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect134" />
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="59.2613"
|
||||
y="65.8095"
|
||||
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect135" />
|
||||
</g>
|
||||
<text
|
||||
x="302.277679"
|
||||
y="65.943230"
|
||||
transform="scale(0.73778,0.73778)"
|
||||
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text183">
|
||||
<tspan
|
||||
x="302.277954"
|
||||
y="65.943184"
|
||||
id="tspan360">
|
||||
Application</tspan>
|
||||
</text>
|
||||
<text
|
||||
x="36.235924"
|
||||
y="63.796055"
|
||||
transform="scale(0.73778,0.73778)"
|
||||
style="font-size:14;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text188">
|
||||
<tspan
|
||||
x="36.235950"
|
||||
y="63.796051"
|
||||
id="tspan427">
|
||||
Transient Objects</tspan>
|
||||
</text>
|
||||
<text
|
||||
x="180.416245"
|
||||
y="290.543701"
|
||||
transform="scale(0.73778,0.73778)"
|
||||
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text197">
|
||||
<tspan
|
||||
x="180.415939"
|
||||
y="290.543549"
|
||||
id="tspan421">
|
||||
Database</tspan>
|
||||
</text>
|
||||
<text
|
||||
x="25.037701"
|
||||
y="179.154755"
|
||||
transform="scale(0.73778,0.73778)"
|
||||
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text216">
|
||||
<tspan
|
||||
x="25.037655"
|
||||
y="179.154648"
|
||||
id="tspan384">
|
||||
SessionFactory</tspan>
|
||||
</text>
|
||||
<g
|
||||
transform="matrix(0.252763,0,0,0.765831,109.104,8.98517)"
|
||||
style="font-size:12;"
|
||||
id="g386">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="16.6979"
|
||||
y="99.2053"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect387" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="13.4238"
|
||||
y="95.9309"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect388" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.297394,0,0,0.572692,101.502,21.6359)"
|
||||
style="font-size:12;"
|
||||
id="g364">
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="61.8805"
|
||||
y="68.4288"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect365" />
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="59.2613"
|
||||
y="65.8095"
|
||||
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect366" />
|
||||
</g>
|
||||
<text
|
||||
x="202.746506"
|
||||
y="102.992203"
|
||||
transform="scale(0.73778,0.73778)"
|
||||
style="font-size:14;font-weight:normal;stroke-width:1pt;font-family:Helvetica;text-anchor:middle;"
|
||||
id="text367">
|
||||
<tspan
|
||||
x="202.746948"
|
||||
y="102.992249"
|
||||
id="tspan423">
|
||||
Persistent</tspan>
|
||||
<tspan
|
||||
x="202.746948"
|
||||
y="116.992355"
|
||||
id="tspan425">
|
||||
Objects</tspan>
|
||||
</text>
|
||||
<text
|
||||
x="174.458496"
|
||||
y="180.080795"
|
||||
transform="scale(0.73778,0.73778)"
|
||||
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text389">
|
||||
<tspan
|
||||
x="174.458618"
|
||||
y="180.080338"
|
||||
id="tspan392">
|
||||
Session</tspan>
|
||||
</text>
|
||||
<g
|
||||
transform="matrix(0.127369,0,0,0.765831,188.675,8.98517)"
|
||||
style="font-size:12;"
|
||||
id="g394">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="16.6979"
|
||||
y="99.2053"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect395" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="13.4238"
|
||||
y="95.9309"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect396" />
|
||||
</g>
|
||||
<text
|
||||
x="260.413269"
|
||||
y="179.154739"
|
||||
transform="scale(0.73778,0.73778)"
|
||||
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text397">
|
||||
<tspan
|
||||
x="260.412964"
|
||||
y="179.154343"
|
||||
id="tspan400">
|
||||
JDBC</tspan>
|
||||
</text>
|
||||
<g
|
||||
transform="matrix(0.127369,0,0,0.765831,229.156,8.98517)"
|
||||
style="font-size:12;"
|
||||
id="g405">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="16.6979"
|
||||
y="99.2053"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect406" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="13.4238"
|
||||
y="95.9309"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect407" />
|
||||
</g>
|
||||
<text
|
||||
x="320.606903"
|
||||
y="179.154739"
|
||||
transform="scale(0.73778,0.73778)"
|
||||
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text408">
|
||||
<tspan
|
||||
x="320.606964"
|
||||
y="179.154343"
|
||||
id="tspan417">
|
||||
JNDI</tspan>
|
||||
</text>
|
||||
<g
|
||||
transform="matrix(0.127369,0,0,0.765831,269.281,8.98517)"
|
||||
style="font-size:12;"
|
||||
id="g411">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="16.6979"
|
||||
y="99.2053"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect412" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="13.4238"
|
||||
y="95.9309"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect413" />
|
||||
</g>
|
||||
<text
|
||||
x="377.096313"
|
||||
y="179.154739"
|
||||
transform="scale(0.73778,0.73778)"
|
||||
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text414">
|
||||
<tspan
|
||||
x="377.096008"
|
||||
y="179.154999"
|
||||
id="tspan145">
|
||||
JTA</tspan>
|
||||
</text>
|
||||
</svg>
|
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 8.4 KiB |
|
@ -0,0 +1,250 @@
|
|||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
|
||||
[
|
||||
<!ATTLIST svg
|
||||
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
|
||||
]>
|
||||
<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
|
||||
<svg
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
width="248.031"
|
||||
height="248.031"
|
||||
id="svg1">
|
||||
<defs
|
||||
id="defs3">
|
||||
<linearGradient
|
||||
x1="0"
|
||||
y1="0"
|
||||
x2="1"
|
||||
y2="0"
|
||||
id="linearGradient127"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad">
|
||||
<stop
|
||||
style="stop-color:#000000;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop128" />
|
||||
<stop
|
||||
style="stop-color:#ffffff;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop129" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
x1="0"
|
||||
y1="0"
|
||||
x2="1"
|
||||
y2="0"
|
||||
id="linearGradient130"
|
||||
xlink:href="#linearGradient127"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad" />
|
||||
<radialGradient
|
||||
cx="0.5"
|
||||
cy="0.5"
|
||||
fx="0.5"
|
||||
fy="0.5"
|
||||
r="0.5"
|
||||
id="radialGradient131"
|
||||
xlink:href="#linearGradient127"
|
||||
gradientUnits="objectBoundingBox"
|
||||
spreadMethod="pad" />
|
||||
</defs>
|
||||
<g
|
||||
transform="matrix(0.771934,0,0,0.771934,4.36019,-3.02123)"
|
||||
style="font-size:12;"
|
||||
id="g158">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="77.2688"
|
||||
x="16.6979"
|
||||
y="17.3527"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect136" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="77.2688"
|
||||
x="14.7335"
|
||||
y="15.3883"
|
||||
transform="translate(-1.30962,-1.30992)"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect126" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.771934,0,0,0.771934,4.36019,3.04452)"
|
||||
style="font-size:12;"
|
||||
id="g161">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="16.6979"
|
||||
y="99.2053"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect137" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="118.523"
|
||||
x="13.4238"
|
||||
y="95.9309"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect132" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.771934,0,0,0.771934,4.36019,8.0993)"
|
||||
style="font-size:12;"
|
||||
id="g164">
|
||||
<rect
|
||||
width="285.502"
|
||||
height="77.2688"
|
||||
x="16.6979"
|
||||
y="222.966"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect138" />
|
||||
<rect
|
||||
width="285.502"
|
||||
height="77.2688"
|
||||
x="14.7335"
|
||||
y="221.002"
|
||||
transform="translate(-1.30962,-1.30992)"
|
||||
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect133" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.771934,0,0,0.543505,2.59104,21.1103)"
|
||||
style="font-size:12;"
|
||||
id="g167">
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="61.8805"
|
||||
y="68.4288"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect134" />
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="59.2613"
|
||||
y="65.8095"
|
||||
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect135" />
|
||||
</g>
|
||||
<text
|
||||
x="105.392174"
|
||||
y="56.568123"
|
||||
transform="scale(0.771934,0.771934)"
|
||||
style="font-size:24;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text183">
|
||||
<tspan
|
||||
x="105.392273"
|
||||
y="56.568146"
|
||||
id="tspan186">
|
||||
Application</tspan>
|
||||
</text>
|
||||
<text
|
||||
x="81.820183"
|
||||
y="103.149330"
|
||||
transform="scale(0.771934,0.771934)"
|
||||
style="font-size:20;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text188">
|
||||
<tspan
|
||||
x="81.820213"
|
||||
y="103.149727"
|
||||
id="tspan206">
|
||||
Persistent Objects</tspan>
|
||||
</text>
|
||||
<text
|
||||
x="111.548180"
|
||||
y="278.927887"
|
||||
transform="scale(0.771934,0.771934)"
|
||||
style="font-size:24;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text197">
|
||||
<tspan
|
||||
x="111.547874"
|
||||
y="278.927551"
|
||||
id="tspan200">
|
||||
Database</tspan>
|
||||
</text>
|
||||
<text
|
||||
x="94.436180"
|
||||
y="153.805740"
|
||||
transform="scale(0.771934,0.771934)"
|
||||
style="font-size:24;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||
id="text216">
|
||||
<tspan
|
||||
x="94.436180"
|
||||
y="153.805740"
|
||||
id="tspan221">
|
||||
HIBERNATE</tspan>
|
||||
</text>
|
||||
<g
|
||||
transform="matrix(0.771934,0,0,0.771934,2.59083,1.02261)"
|
||||
style="font-size:12;"
|
||||
id="g254">
|
||||
<g
|
||||
transform="translate(4.58374,2.61928)"
|
||||
id="g176">
|
||||
<g
|
||||
transform="matrix(0.571429,0,0,0.67347,-10.6174,117.093)"
|
||||
id="g170">
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="61.8805"
|
||||
y="68.4288"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect171" />
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="59.2613"
|
||||
y="65.8095"
|
||||
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect172" />
|
||||
</g>
|
||||
<g
|
||||
transform="matrix(0.571429,0,0,0.67347,138.682,117.093)"
|
||||
id="g173">
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="61.8805"
|
||||
y="68.4288"
|
||||
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect174" />
|
||||
<rect
|
||||
width="199.065"
|
||||
height="61.5532"
|
||||
x="59.2613"
|
||||
y="65.8095"
|
||||
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||
id="rect175" />
|
||||
</g>
|
||||
</g>
|
||||
<text
|
||||
x="47.259438"
|
||||
y="182.367538"
|
||||
style="font-weight:bold;stroke-width:1pt;font-family:Courier;"
|
||||
id="text191">
|
||||
<tspan
|
||||
x="47.259399"
|
||||
y="182.367996"
|
||||
id="tspan212">
|
||||
hibernate.</tspan>
|
||||
<tspan
|
||||
x="47.259399"
|
||||
y="194.367996"
|
||||
id="tspan214">
|
||||
properties</tspan>
|
||||
</text>
|
||||
<text
|
||||
x="198.523010"
|
||||
y="188.260941"
|
||||
style="font-weight:normal;stroke-width:1pt;font-family:helvetica;"
|
||||
id="text194">
|
||||
<tspan
|
||||
id="tspan195">
|
||||
XML Mapping</tspan>
|
||||
</text>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 6.2 KiB |
|
@ -0,0 +1,168 @@
|
|||
<?xml version='1.0' encoding="iso-8859-1"?>
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||
"../support/docbook-dtd/docbookx.dtd"
|
||||
[
|
||||
<!ENTITY quickstart SYSTEM "modules/quickstart.xml">
|
||||
<!ENTITY architecture SYSTEM "modules/architecture.xml">
|
||||
<!ENTITY configuration SYSTEM "modules/configuration.xml">
|
||||
<!ENTITY persistent-classes SYSTEM "modules/persistent_classes.xml">
|
||||
<!ENTITY basic-mapping SYSTEM "modules/basic_mapping.xml">
|
||||
<!ENTITY collection-mapping SYSTEM "modules/collection_mapping.xml">
|
||||
<!ENTITY component-mapping SYSTEM "modules/component_mapping.xml">
|
||||
<!ENTITY inheritance-mapping SYSTEM "modules/inheritance_mapping.xml">
|
||||
<!ENTITY manipulating-data SYSTEM "modules/manipulating_data.xml">
|
||||
<!ENTITY transactions SYSTEM "modules/transactions.xml">
|
||||
<!ENTITY query-hql SYSTEM "modules/query_hql.xml">
|
||||
<!ENTITY query-criteria SYSTEM "modules/query_criteria.xml">
|
||||
<!ENTITY query-sql SYSTEM "modules/query_sql.xml">
|
||||
<!ENTITY performance SYSTEM "modules/performance.xml">
|
||||
<!ENTITY toolset-guide SYSTEM "modules/toolset_guide.xml">
|
||||
<!ENTITY example-parentchild SYSTEM "modules/example_parentchild.xml">
|
||||
<!ENTITY example-weblog SYSTEM "modules/example_weblog.xml">
|
||||
<!ENTITY example-mappings SYSTEM "modules/example_mappings.xml">
|
||||
<!ENTITY best-practices SYSTEM "modules/best_practices.xml">
|
||||
]>
|
||||
|
||||
<book lang="en">
|
||||
|
||||
<bookinfo>
|
||||
<title>HIBERNATE - Relational Persistence for Idiomatic Java</title>
|
||||
<subtitle>Hibernate Reference Documentation</subtitle>
|
||||
<releaseinfo>3.0</releaseinfo>
|
||||
</bookinfo>
|
||||
|
||||
<toc/>
|
||||
|
||||
<preface id="preface">
|
||||
<title>Preface</title>
|
||||
|
||||
<para>
|
||||
Working with object-oriented software and a relational database can be cumbersome
|
||||
and time consuming in today's enterprise environments. Hibernate is an object/relational
|
||||
mapping tool for Java environments. The term object/relational mapping (ORM) refers to
|
||||
the technique of mapping a data representation from an object model to a relational
|
||||
data model with a SQL-based schema.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Hibernate not only takes care of the mapping from Java classes to
|
||||
database tables (and from Java data types to SQL data types), but also provides data
|
||||
query and retrieval facilities and can significantly reduce development time otherwise
|
||||
spent with manual data handling in SQL and JDBC.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Hibernates goal is to relieve the developer from 95 percent of common data persistence
|
||||
related programming tasks. Hibernate may not be the best solution for data-centric
|
||||
applications that only use stored-procedures to implement the business logic in the
|
||||
database, it is most useful with object-oriented domain models and business logic in
|
||||
the Java-based middle-tier. However, Hibernate can certainly help you to remove or
|
||||
encapsulate vendor-specific SQL code and will help with the common task of result set
|
||||
translation from a tabular representation to a graph of objects.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If you are new to Hibernate and Object/Relational Mapping or even Java,
|
||||
please follow these steps:
|
||||
</para>
|
||||
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Read <xref linkend="quickstart"/> for a 30 minute tutorial, using Tomcat.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Read <xref linkend="architecture"/> to understand the environments where
|
||||
Hibernate can be used.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Have a look at the <literal>eg/</literal> directory in the Hibernate
|
||||
distribution, it contains a simple standalone application. Copy your
|
||||
JDBC driver to the <literal>lib/</literal> directory and edit
|
||||
<literal>src/hibernate.properties</literal>, specifying correct values for
|
||||
your database. From a command prompt in the distribution directory,
|
||||
type <literal>ant eg</literal> (using Ant), or under Windows, type
|
||||
<literal>build eg</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Use this reference documentation as your primary source of information.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
FAQs are answered on the Hibernate website.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Third party demos, examples and tutorials are linked on the Hibernate
|
||||
website.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The Community Area on the Hibernate website is a good source for
|
||||
design patterns and various integration solutions (Tomcat, JBoss, Spring,
|
||||
Struts, EJB, etc.).
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
An offline version of the Hibernate website is distributed with
|
||||
Hibernate in the <literal>doc/</literal> subdirectory.
|
||||
</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
|
||||
<para>
|
||||
If you have questions, use the user forum linked on the Hibernate website. We also
|
||||
provide a JIRA issue trackings system for bug reports and feature requests. If you
|
||||
are interested in the development of Hibernate, join the developer mailing list.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Commercial development, production support and training for Hibernate is available
|
||||
through JBoss Inc. (see http://www.hibernate.org/SupportTraining/). Hibernate is a
|
||||
project of the JBoss Professional Open Source product suite.
|
||||
</para>
|
||||
|
||||
</preface>
|
||||
|
||||
&quickstart;
|
||||
|
||||
&architecture;
|
||||
|
||||
&configuration;
|
||||
|
||||
&persistent-classes;
|
||||
|
||||
&basic-mapping;
|
||||
&collection-mapping;
|
||||
&component-mapping;
|
||||
&inheritance-mapping;
|
||||
|
||||
&manipulating-data;
|
||||
&transactions;
|
||||
|
||||
&query-hql;
|
||||
&query-criteria;
|
||||
&query-sql;
|
||||
|
||||
&performance;
|
||||
|
||||
&toolset-guide;
|
||||
|
||||
&example-parentchild;
|
||||
&example-weblog;
|
||||
&example-mappings;
|
||||
|
||||
&best-practices;
|
||||
|
||||
</book>
|
||||
|
|
@ -0,0 +1,172 @@
|
|||
<chapter id="architecture">
|
||||
|
||||
<title>Architecture</title>
|
||||
|
||||
<sect1 id="architecture-overview">
|
||||
<title>Overview</title>
|
||||
|
||||
<para>
|
||||
A (very) high-level view of the Hibernate architecture:
|
||||
</para>
|
||||
|
||||
<mediaobject>
|
||||
<imageobject role="fo">
|
||||
<imagedata fileref="images/overview.svg" format="SVG" align="center"/>
|
||||
</imageobject>
|
||||
<imageobject role="html">
|
||||
<imagedata fileref="../shared/images/overview.gif" format="GIF" align="center"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
|
||||
<para>
|
||||
This diagram shows Hibernate using the database and configuration data to
|
||||
provide persistence services (and persistent objects) to the application.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
We would like to show a more detailed view of the runtime architecture.
|
||||
Unfortunately, Hibernate is flexible and supports several approaches. We will
|
||||
show the two extremes. The "lite" architecture has the application
|
||||
provide its own JDBC connections and manage its own transactions. This approach
|
||||
uses a minimal subset of Hibernate's APIs:
|
||||
</para>
|
||||
|
||||
<mediaobject>
|
||||
<imageobject role="fo">
|
||||
<imagedata fileref="images/lite.svg" format="SVG" align="center"/>
|
||||
</imageobject>
|
||||
<imageobject role="html">
|
||||
<imagedata fileref="../shared/images/lite.gif" format="GIF" align="center"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
|
||||
<para>
|
||||
The "full cream" architecture abstracts the application away from the
|
||||
underlying JDBC/JTA APIs and lets Hibernate take care of the details.
|
||||
</para>
|
||||
|
||||
<mediaobject>
|
||||
<imageobject role="fo">
|
||||
<imagedata fileref="images/full_cream.svg" format="SVG" align="center"/>
|
||||
</imageobject>
|
||||
<imageobject role="html">
|
||||
<imagedata fileref="../shared/images/full_cream.gif" format="GIF" align="center"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
|
||||
<para>
|
||||
Heres some definitions of the objects in the diagrams:
|
||||
|
||||
<variablelist spacing="compact">
|
||||
<varlistentry>
|
||||
<term>SessionFactory (<literal>net.sf.hibernate.SessionFactory</literal>)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A threadsafe (immutable) cache of compiled mappings for a single database.
|
||||
A factory for <literal>Session</literal> and a client of
|
||||
<literal>ConnectionProvider</literal>. Might hold an optional (second-level)
|
||||
cache of data that is reusable between transactions, at a
|
||||
process- or cluster-level.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Session (<literal>net.sf.hibernate.Session</literal>)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
A single-threaded, short-lived object representing a conversation between
|
||||
the application and the persistent store. Wraps a JDBC connection. Factory
|
||||
for <literal>Transaction</literal>. Holds a mandatory (first-level) cache
|
||||
of persistent objects, used when navigating the object graph or looking up
|
||||
objects by identifier.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Persistent Objects and Collections</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Short-lived, single threaded objects containing persistent state and business
|
||||
function. These might be ordinary JavaBeans/POJOs, the only special thing about
|
||||
them is that they are currently associated with (exactly one)
|
||||
<literal>Session</literal>. As soon as the <literal>Session</literal> is closed,
|
||||
they will be detached and free to use in any application layer (e.g. directly
|
||||
as data transfer objects to and from presentation).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Transient Objects and Collections</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Instances of persistent classes that are not currently associated with a
|
||||
<literal>Session</literal>. They may have been instantiated by
|
||||
the application and not (yet) persisted or they may have been instantiated by a
|
||||
closed <literal>Session</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Transaction (<literal>net.sf.hibernate.Transaction</literal>)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
(Optional) A single-threaded, short-lived object used by the application to
|
||||
specify atomic units of work. Abstracts application from underlying JDBC,
|
||||
JTA or CORBA transaction. A <literal>Session</literal> might span several
|
||||
<literal>Transaction</literal>s in some cases.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>ConnectionProvider (<literal>net.sf.hibernate.connection.ConnectionProvider</literal>)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
(Optional) A factory for (and pool of) JDBC connections. Abstracts application from
|
||||
underlying <literal>Datasource</literal> or <literal>DriverManager</literal>.
|
||||
Not exposed to application, but can be extended/implemented by the developer.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>TransactionFactory (<literal>net.sf.hibernate.TransactionFactory</literal>)</term>
|
||||
<listitem>
|
||||
<para>
|
||||
(Optional) A factory for <literal>Transaction</literal> instances. Not exposed to the
|
||||
application, but can be extended/implemented by the developer.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Given a "lite" architecture, the application bypasses the
|
||||
<literal>Transaction</literal>/<literal>TransactionFactory</literal> and/or
|
||||
<literal>ConnectionProvider</literal> APIs to talk to JTA or JDBC directly.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="architecture-jmx">
|
||||
<title>JMX Integration</title>
|
||||
<para>
|
||||
JMX is the J2EE standard for management of Java components. Hibernate may be managed via
|
||||
a JMX standard MBean but because most application servers do not yet support JMX, Hibernate
|
||||
also affords some non-standard configuration mechanisms.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Please see the Hibernate website for more information on how to configure Hibernate to
|
||||
run as a JMX component inside JBoss.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="architecture-jca">
|
||||
<title>JCA Support</title>
|
||||
<para>
|
||||
Hibernate may also be configured as a JCA connector. Please see the website for more
|
||||
details.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
|
@ -0,0 +1,168 @@
|
|||
<chapter id="best-practices">
|
||||
|
||||
<title>Best Practices</title>
|
||||
|
||||
<variablelist spacing="compact">
|
||||
<varlistentry>
|
||||
<term>Write fine-grained classes and map them using <literal><component></literal>.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Use an <literal>Address</literal> class to encapsulate <literal>street</literal>,
|
||||
<literal>suburb</literal>, <literal>state</literal>, <literal>postcode</literal>.
|
||||
This encourages code reuse and simplifies refactoring.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Declare identifier properties on persistent classes.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Hibernate makes identifier properties optional. There are all sorts of reasons why
|
||||
you should use them. We recommend that identifiers be 'synthetic' (generated, with
|
||||
no business meaning) and of a non-primitive type. For maximum flexibility, use
|
||||
<literal>java.lang.Long</literal> or <literal>java.lang.String</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Place each class mapping in its own file.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Don't use a single monolithic mapping document. Map <literal>com.eg.Foo</literal> in
|
||||
the file <literal>com/eg/Foo.hbm.xml</literal>. This makes particularly good sense in
|
||||
a team environment.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Load mappings as resources.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Deploy the mappings along with the classes they map.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Consider externalising query strings.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
This is a good practice if your queries call non-ANSI-standard SQL functions.
|
||||
Externalising the query strings to mapping files will make the application more portable.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Use bind variables.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
As in JDBC, always replace non-constant values by "?". Never use string manipulation to
|
||||
bind a non-constant value in a query! Even better, consider using named parameters in
|
||||
queries.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Don't manage your own JDBC connections.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Hibernate lets the application manage JDBC connections. This approach should be considered
|
||||
a last-resort. If you can't use the built-in connections providers, consider providing your
|
||||
own implementation of <literal>net.sf.hibernate.connection.ConnectionProvider</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Consider using a custom type.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Suppose you have a Java type, say from some library, that needs to be persisted but doesn't
|
||||
provide the accessors needed to map it as a component. You should consider implementing
|
||||
<literal>net.sf.hibernate.UserType</literal>. This approach frees the application
|
||||
code from implementing transformations to / from a Hibernate type.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Use hand-coded JDBC in bottlenecks.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
In performance-critical areas of the system, some kinds of operations (eg. mass update /
|
||||
delete) might benefit from direct JDBC. But please, wait until you <emphasis>know</emphasis>
|
||||
something is a bottleneck. And don't assume that direct JDBC is necessarily faster. If need to
|
||||
use direct JDBC, it might be worth opening a Hibernate <literal>Session</literal> and using that SQL
|
||||
connection. That way you can still use the same transaction strategy and underlying connection
|
||||
provider.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Understand <literal>Session</literal> flushing.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
From time to time the Session synchronizes its persistent state with the database. Performance will
|
||||
be affected if this process occurs too often. You may sometimes minimize unnecessary flushing by
|
||||
disabling automatic flushing or even by changing the order of queries and other operations within a
|
||||
particular transaction.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>In a three tiered architecture, consider using <literal>saveOrUpdate()</literal>.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
When using a servlet / session bean architecture, you could pass persistent objects loaded in
|
||||
the session bean to and from the servlet / JSP layer. Use a new session to service each request.
|
||||
Use <literal>Session.update()</literal> or <literal>Session.saveOrUpdate()</literal> to update the
|
||||
persistent state of an object.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>In a two tiered architecture, consider using session disconnection.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
When using a servlet only, you may reuse the same session for multiple client requests. Just
|
||||
remember to disconnect the session before returning control to the client.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Don't treat exceptions as recoverable.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
This is more of a necessary practice than a "best" practice. When an exception occurs, roll back
|
||||
the <literal>Transaction</literal> and close the <literal>Session</literal>. If you don't, Hibernate
|
||||
can't guarantee that in-memory state accurately represents persistent state. As a special case of this,
|
||||
do not use <literal>Session.load()</literal> to determine if an instance with the given identifier
|
||||
exists on the database; use <literal>find()</literal> instead.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Prefer lazy fetching for associations.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Use eager (outer-join) fetching sparingly. Use proxies and/or lazy collections for most associations
|
||||
to classes that are not cached at the JVM-level. For associations to cached classes, where there is
|
||||
a high probability of a cache hit, explicitly disable eager fetching using
|
||||
<literal>outer-join="false"</literal>. When an outer-join fetch is appropriate to a particular use
|
||||
case, use a query with a <literal>left join</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Consider abstracting your business logic from Hibernate.</term>
|
||||
<listitem>
|
||||
<para>
|
||||
Hide (Hibernate) data-access code behind an interface. Combine the <emphasis>DAO</emphasis> and
|
||||
<emphasis>Thread Local Session</emphasis> patterns. You can even have some classes persisted by
|
||||
handcoded JDBC, associated to Hibernate via a <literal>UserType</literal>. (This advice is
|
||||
intended for "sufficiently large" applications; it is not appropriate for an application with
|
||||
five tables!)
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
</chapter>
|
||||
|
|
@ -0,0 +1,373 @@
|
|||
<chapter id="components">
|
||||
<title>Component Mapping</title>
|
||||
|
||||
<para>
|
||||
The notion of a <emphasis>component</emphasis> is re-used in several different contexts,
|
||||
for different purposes, throughout Hibernate.
|
||||
</para>
|
||||
|
||||
<sect1 id="components-dependentobjects">
|
||||
<title>Dependent objects</title>
|
||||
|
||||
<para>
|
||||
A component is a contained object that is persisted as a value type, not an entity.
|
||||
The term "component" refers to the object-oriented notion of composition
|
||||
(not to architecture-level components). For example, you might model a person like this:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[public class Person {
|
||||
private java.util.Date birthday;
|
||||
private Name name;
|
||||
private String key;
|
||||
public String getKey() {
|
||||
return key;
|
||||
}
|
||||
private void setKey(String key) {
|
||||
this.key=key;
|
||||
}
|
||||
public java.util.Date getBirthday() {
|
||||
return birthday;
|
||||
}
|
||||
public void setBirthday(java.util.Date birthday) {
|
||||
this.birthday = birthday;
|
||||
}
|
||||
public Name getName() {
|
||||
return name;
|
||||
}
|
||||
public void setName(Name name) {
|
||||
this.name = name;
|
||||
}
|
||||
......
|
||||
......
|
||||
}]]></programlisting>
|
||||
|
||||
<programlisting><![CDATA[public class Name {
|
||||
char initial;
|
||||
String first;
|
||||
String last;
|
||||
public String getFirst() {
|
||||
return first;
|
||||
}
|
||||
void setFirst(String first) {
|
||||
this.first = first;
|
||||
}
|
||||
public String getLast() {
|
||||
return last;
|
||||
}
|
||||
void setLast(String last) {
|
||||
this.last = last;
|
||||
}
|
||||
public char getInitial() {
|
||||
return initial;
|
||||
}
|
||||
void setInitial(char initial) {
|
||||
this.initial = initial;
|
||||
}
|
||||
}]]></programlisting>
|
||||
|
||||
<para>
|
||||
Now <literal>Name</literal> may be persisted as a component of
|
||||
<literal>Person</literal>. Notice that <literal>Name</literal> defines getter
|
||||
and setter methods for its persistent properties, but doesn't need to declare
|
||||
any interfaces or identifier properties.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Our Hibernate mapping would look like:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="eg.Person" table="person">
|
||||
<id name="Key" column="pid" type="string">
|
||||
<generator class="uuid.hex"/>
|
||||
</id>
|
||||
<property name="birthday" type="date"/>
|
||||
<component name="Name" class="eg.Name"> <!-- class attribute optional -->
|
||||
<property name="initial"/>
|
||||
<property name="first"/>
|
||||
<property name="last"/>
|
||||
</component>
|
||||
</class>]]></programlisting>
|
||||
|
||||
<para>
|
||||
The person table would have the columns <literal>pid</literal>,
|
||||
<literal>birthday</literal>,
|
||||
<literal>initial</literal>,
|
||||
<literal>first</literal> and
|
||||
<literal>last</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Like all value types, components do not support shared references. The null
|
||||
value semantics of a component are <emphasis>ad hoc</emphasis>. When reloading the
|
||||
containing object, Hibernate will assume that if all component columns are
|
||||
null, then the entire component is null. This should be okay for most purposes.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The properties of a component may be of any Hibernate type (collections, many-to-one
|
||||
associations, other components, etc). Nested components should <emphasis>not</emphasis>
|
||||
be considered an exotic usage. Hibernate is intended to support a very fine-grained
|
||||
object model.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <literal><component></literal> element allows a <literal><parent></literal>
|
||||
subelement that maps a property of the component class as a reference back to the
|
||||
containing entity.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="eg.Person" table="person">
|
||||
<id name="Key" column="pid" type="string">
|
||||
<generator class="uuid.hex"/>
|
||||
</id>
|
||||
<property name="birthday" type="date"/>
|
||||
<component name="Name" class="eg.Name">
|
||||
<parent name="namedPerson"/> <!-- reference back to the Person -->
|
||||
<property name="initial"/>
|
||||
<property name="first"/>
|
||||
<property name="last"/>
|
||||
</component>
|
||||
</class>]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="components-incollections">
|
||||
<title>Collections of dependent objects</title>
|
||||
|
||||
<para>
|
||||
Collections of components are supported (eg. an array of type
|
||||
<literal>Name</literal>). Declare your component collection by
|
||||
replacing the <literal><element></literal> tag with a
|
||||
<literal><composite-element></literal> tag.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<set name="someNames" table="some_names" lazy="true">
|
||||
<key column="id"/>
|
||||
<composite-element class="eg.Name"> <!-- class attribute required -->
|
||||
<property name="initial"/>
|
||||
<property name="first"/>
|
||||
<property name="last"/>
|
||||
</composite-element>
|
||||
</set>]]></programlisting>
|
||||
|
||||
<para>
|
||||
Note: if you define a <literal>Set</literal> of composite elements, it is
|
||||
very important to implement <literal>equals()</literal> and
|
||||
<literal>hashCode()</literal> correctly.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Composite elements may contain components but not collections. If your
|
||||
composite element itself contains
|
||||
components, use the <literal><nested-composite-element></literal>
|
||||
tag. This is a pretty exotic case - a collection of components which
|
||||
themselves have components. By this stage you should be asking yourself
|
||||
if a one-to-many association is more appropriate. Try remodelling the
|
||||
composite element as an entity - but note that even though the Java model
|
||||
is the same, the relational model and persistence semantics are still
|
||||
slightly different.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Please note that a composite element mapping doesn't support null-able properties
|
||||
if you're using a <literal><set></literal>. Hibernate
|
||||
has to use each columns value to identify a record when deleting objects
|
||||
(there is no separate primary key column in the composite element table),
|
||||
which is not possible with null values. You have to either use only
|
||||
not-null properties in a composite-element or choose a
|
||||
<literal><list></literal>, <literal><map></literal>,
|
||||
<literal><bag></literal> or <literal><idbag></literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A special case of a composite element is a composite element with a nested
|
||||
<literal><many-to-one></literal> element. A mapping like this allows
|
||||
you to map extra columns of a many-to-many association table to the
|
||||
composite element class. The following is a many-to-many association
|
||||
from <literal>Order</literal> to <literal>Item</literal> where
|
||||
<literal>purchaseDate</literal>, <literal>price</literal> and
|
||||
<literal>quantity</literal> are properties of the association:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="eg.Order" .... >
|
||||
....
|
||||
<set name="purchasedItems" table="purchase_items" lazy="true">
|
||||
<key column="order_id">
|
||||
<composite-element class="eg.Purchase">
|
||||
<property name="purchaseDate"/>
|
||||
<property name="price"/>
|
||||
<property name="quantity"/>
|
||||
<many-to-one name="item" class="eg.Item"/> <!-- class attribute is optional -->
|
||||
</composite-element>
|
||||
</set>
|
||||
</class>]]></programlisting>
|
||||
|
||||
<para>Even ternary (or quaternary, etc) associations are possible:</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="eg.Order" .... >
|
||||
....
|
||||
<set name="purchasedItems" table="purchase_items" lazy="true">
|
||||
<key column="order_id">
|
||||
<composite-element class="eg.OrderLine">
|
||||
<many-to-one name="purchaseDetails class="eg.Purchase"/>
|
||||
<many-to-one name="item" class="eg.Item"/>
|
||||
</composite-element>
|
||||
</set>
|
||||
</class>]]></programlisting>
|
||||
|
||||
<para>
|
||||
Composite elements may appear in queries using the same syntax as
|
||||
associations to other entities.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="components-asmapindex">
|
||||
<title>Components as Map indices</title>
|
||||
|
||||
<para>
|
||||
The <literal><composite-index></literal> element lets you map a
|
||||
component class as the key of a <literal>Map</literal>. Make sure you override
|
||||
<literal>hashCode()</literal> and <literal>equals()</literal> correctly on
|
||||
the component class.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="components-compositeid">
|
||||
<title>Components as composite identifiers</title>
|
||||
|
||||
<para>
|
||||
You may use a component as an identifier of an entity class. Your component
|
||||
class must satisfy certain requirements:
|
||||
</para>
|
||||
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
It must implement <literal>java.io.Serializable</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
It must re-implement <literal>equals()</literal> and
|
||||
<literal>hashCode()</literal>, consistently with the database's
|
||||
notion of composite key equality.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
You can't use an <literal>IdentifierGenerator</literal> to generate composite keys.
|
||||
Instead the application must assign its own identifiers.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Since a composite identifier must be assigned to the object before saving it,
|
||||
we can't use <literal>unsaved-value</literal> of the identifier to distinguish
|
||||
between newly instantiated instances and instances saved in a previous session.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
You may instead implement <literal>Interceptor.isUnsaved()</literal> if
|
||||
you wish to use <literal>saveOrUpdate()</literal> or cascading save / update.
|
||||
As an alternative, you may also set the <literal>unsaved-value</literal>
|
||||
attribute on a <literal><version></literal> (or
|
||||
<literal><timestamp></literal>) element to specify a
|
||||
value that indicates a new transient instance. In this case, the version
|
||||
of the entity is used instead of the (assigned) identifier and you don't have
|
||||
to implement <literal>Interceptor.isUnsaved()</literal> yourself.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Use the <literal><composite-id></literal> tag (same attributes and
|
||||
elements as <literal><component></literal>) in place of
|
||||
<literal><id></literal> for the declaration of a composite identifier
|
||||
class:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="eg.Foo" table"FOOS">
|
||||
<composite-id name="compId" class="eg.FooCompositeID">
|
||||
<key-property name="string"/>
|
||||
<key-property name="short"/>
|
||||
<key-property name="date" column="date_" type="date"/>
|
||||
</composite-id>
|
||||
<property name="name"/>
|
||||
....
|
||||
</class>]]></programlisting>
|
||||
|
||||
<para>
|
||||
Now, any foreign keys into the table <literal>FOOS</literal> are also composite.
|
||||
You must declare this in your mappings for other classes. An association to
|
||||
<literal>Foo</literal> would be declared like this:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<many-to-one name="foo" class="eg.Foo">
|
||||
<!-- the "class" attribute is optional, as usual -->
|
||||
<column name="foo_string"/>
|
||||
<column name="foo_short"/>
|
||||
<column name="foo_date"/>
|
||||
</many-to-one>]]></programlisting>
|
||||
|
||||
<para>
|
||||
This new <literal><column></literal> tag is also used by multi-column custom types.
|
||||
Actually it is an alternative to the <literal>column</literal> attribute everywhere. A
|
||||
collection with elements of type <literal>Foo</literal> would use:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<set name="foos">
|
||||
<key column="owner_id"/>
|
||||
<many-to-many class="eg.Foo">
|
||||
<column name="foo_string"/>
|
||||
<column name="foo_short"/>
|
||||
<column name="foo_date"/>
|
||||
</many-to-many>
|
||||
</set>]]></programlisting>
|
||||
|
||||
<para>
|
||||
On the other hand, <literal><one-to-many></literal>, as usual, declares no columns.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If <literal>Foo</literal> itself contains collections, they will also need a
|
||||
composite foreign key.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="eg.Foo">
|
||||
....
|
||||
....
|
||||
<set name="dates" lazy="true">
|
||||
<key> <!-- a collection inherits the composite key type -->
|
||||
<column name="foo_string"/>
|
||||
<column name="foo_short"/>
|
||||
<column name="foo_date"/>
|
||||
</key>
|
||||
<element column="foo_date" type="date"/>
|
||||
</set>
|
||||
</class>]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="components-dynamic">
|
||||
<title>Dynamic components</title>
|
||||
|
||||
<para>
|
||||
You may even map a property of type <literal>Map</literal>:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<dynamic-component name="userAttributes">
|
||||
<property name="foo" column="FOO"/>
|
||||
<property name="bar" column="BAR"/>
|
||||
<many-to-one name="baz" class="eg.Baz" column="BAZ"/>
|
||||
</dynamic-component>]]></programlisting>
|
||||
|
||||
<para>
|
||||
The semantics of a <literal><dynamic-component></literal> mapping are identical
|
||||
to <literal><component></literal>. The advantage of this kind of mapping is
|
||||
the ability to determine the actual properties of the bean at deployment time, just
|
||||
by editing the mapping document. (Runtime manipulation of the mapping document is
|
||||
also possible, using a DOM parser.)
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
|
@ -0,0 +1,356 @@
|
|||
<chapter id="example-mappings">
|
||||
<title>Example: Various Mappings</title>
|
||||
|
||||
<para>
|
||||
This chapters shows off some more complex association mappings.
|
||||
</para>
|
||||
|
||||
<sect1 id="example-mappings-emp">
|
||||
<title>Employer/Employee</title>
|
||||
|
||||
<para>
|
||||
The following model of the relationship between <literal>Employer</literal> and
|
||||
<literal>Employee</literal> uses an actual entity class (<literal>Employment</literal>)
|
||||
to represent the association. This is done because there might be more than one
|
||||
period of employment for the same two parties. Components are used to model monetory
|
||||
values and employee names.
|
||||
</para>
|
||||
|
||||
<mediaobject>
|
||||
<imageobject role="fo">
|
||||
<imagedata fileref="images/EmployerEmployee.gif" format="GIF" align="center"/>
|
||||
</imageobject>
|
||||
<imageobject role="html">
|
||||
<imagedata fileref="../shared/images/EmployerEmployee.gif" format="GIF" align="center"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
|
||||
<para>
|
||||
Heres a possible mapping document:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<hibernate-mapping>
|
||||
|
||||
<class name="Employer" table="employers">
|
||||
<id name="id">
|
||||
<generator class="sequence">
|
||||
<param name="sequence">employer_id_seq</param>
|
||||
</generator>
|
||||
</id>
|
||||
<property name="name"/>
|
||||
</class>
|
||||
|
||||
<class name="Employment" table="employment_periods">
|
||||
|
||||
<id name="id">
|
||||
<generator class="sequence">
|
||||
<param name="sequence">employment_id_seq</param>
|
||||
</generator>
|
||||
</id>
|
||||
<property name="startDate" column="start_date"/>
|
||||
<property name="endDate" column="end_date"/>
|
||||
|
||||
<component name="hourlyRate" class="MonetoryAmount">
|
||||
<property name="amount">
|
||||
<column name="hourly_rate" sql-type="NUMERIC(12, 2)"/>
|
||||
</property>
|
||||
<property name="currency" length="12"/>
|
||||
</component>
|
||||
|
||||
<many-to-one name="employer" column="employer_id" not-null="true"/>
|
||||
<many-to-one name="employee" column="employee_id" not-null="true"/>
|
||||
|
||||
</class>
|
||||
|
||||
<class name="Employee" table="employees">
|
||||
<id name="id">
|
||||
<generator class="sequence">
|
||||
<param name="sequence">employee_id_seq</param>
|
||||
</generator>
|
||||
</id>
|
||||
<property name="taxfileNumber"/>
|
||||
<component name="name" class="Name">
|
||||
<property name="firstName"/>
|
||||
<property name="initial"/>
|
||||
<property name="lastName"/>
|
||||
</component>
|
||||
</class>
|
||||
|
||||
</hibernate-mapping>]]></programlisting>
|
||||
|
||||
<para>
|
||||
And heres the table schema generated by <literal>SchemaExport</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[create table employers (
|
||||
id BIGINT not null,
|
||||
name VARCHAR(255),
|
||||
primary key (id)
|
||||
)
|
||||
|
||||
create table employment_periods (
|
||||
id BIGINT not null,
|
||||
hourly_rate NUMERIC(12, 2),
|
||||
currency VARCHAR(12),
|
||||
employee_id BIGINT not null,
|
||||
employer_id BIGINT not null,
|
||||
end_date TIMESTAMP,
|
||||
start_date TIMESTAMP,
|
||||
primary key (id)
|
||||
)
|
||||
|
||||
create table employees (
|
||||
id BIGINT not null,
|
||||
firstName VARCHAR(255),
|
||||
initial CHAR(1),
|
||||
lastName VARCHAR(255),
|
||||
taxfileNumber VARCHAR(255),
|
||||
primary key (id)
|
||||
)
|
||||
|
||||
alter table employment_periods
|
||||
add constraint employment_periodsFK0 foreign key (employer_id) references employers
|
||||
alter table employment_periods
|
||||
add constraint employment_periodsFK1 foreign key (employee_id) references employees
|
||||
create sequence employee_id_seq
|
||||
create sequence employment_id_seq
|
||||
create sequence employer_id_seq]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="example-mappings-authorwork">
|
||||
<title>Author/Work</title>
|
||||
|
||||
<para>
|
||||
Consider the following model of the relationships between <literal>Work</literal>,
|
||||
<literal>Author</literal> and <literal>Person</literal>. We represent the relationship
|
||||
between <literal>Work</literal> and <literal>Author</literal> as a many-to-many
|
||||
association. We choose to represent the relationship between <literal>Author</literal>
|
||||
and <literal>Person</literal> as one-to-one association. Another possibility would be to
|
||||
have <literal>Author</literal> extend <literal>Person</literal>.
|
||||
</para>
|
||||
|
||||
<mediaobject>
|
||||
<imageobject role="fo">
|
||||
<imagedata fileref="images/AuthorWork.gif" format="GIF" align="center"/>
|
||||
</imageobject>
|
||||
<imageobject role="html">
|
||||
<imagedata fileref="../shared/images/AuthorWork.gif" format="GIF" align="center"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
|
||||
<para>
|
||||
The following mapping document correctly represents these relationships:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<hibernate-mapping>
|
||||
|
||||
<class name="Work" table="works" discriminator-value="W">
|
||||
|
||||
<id name="id" column="id">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
<discriminator column="type" type="character"/>
|
||||
|
||||
<property name="title"/>
|
||||
<set name="authors" table="author_work" lazy="true">
|
||||
<key>
|
||||
<column name="work_id" not-null="true"/>
|
||||
</key>
|
||||
<many-to-many class="Author">
|
||||
<column name="author_id" not-null="true"/>
|
||||
</many-to-many>
|
||||
</set>
|
||||
|
||||
<subclass name="Book" discriminator-value="B">
|
||||
<property name="text"/>
|
||||
</subclass>
|
||||
|
||||
<subclass name="Song" discriminator-value="S">
|
||||
<property name="tempo"/>
|
||||
<property name="genre"/>
|
||||
</subclass>
|
||||
|
||||
</class>
|
||||
|
||||
<class name="Author" table="authors">
|
||||
|
||||
<id name="id" column="id">
|
||||
<!-- The Author must have the same identifier as the Person -->
|
||||
<generator class="assigned"/>
|
||||
</id>
|
||||
|
||||
<property name="alias"/>
|
||||
<one-to-one name="person" constrained="true"/>
|
||||
|
||||
<set name="works" table="author_work" inverse="true" lazy="true">
|
||||
<key column="author_id"/>
|
||||
<many-to-many class="Work" column="work_id"/>
|
||||
</set>
|
||||
|
||||
</class>
|
||||
|
||||
<class name="Person" table="persons">
|
||||
<id name="id" column="id">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
<property name="name"/>
|
||||
</class>
|
||||
|
||||
</hibernate-mapping>]]></programlisting>
|
||||
|
||||
<para>
|
||||
There are four tables in this mapping. <literal>works</literal>,
|
||||
<literal>authors</literal> and <literal>persons</literal> hold work, author
|
||||
and person data respectively. <literal>author_work</literal> is an association
|
||||
table linking authors to works. Heres the table schema, as generated by
|
||||
<literal>SchemaExport</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[create table works (
|
||||
id BIGINT not null generated by default as identity,
|
||||
tempo FLOAT,
|
||||
genre VARCHAR(255),
|
||||
text INTEGER,
|
||||
title VARCHAR(255),
|
||||
type CHAR(1) not null,
|
||||
primary key (id)
|
||||
)
|
||||
|
||||
create table author_work (
|
||||
author_id BIGINT not null,
|
||||
work_id BIGINT not null,
|
||||
primary key (work_id, author_id)
|
||||
)
|
||||
|
||||
create table authors (
|
||||
id BIGINT not null generated by default as identity,
|
||||
alias VARCHAR(255),
|
||||
primary key (id)
|
||||
)
|
||||
|
||||
create table persons (
|
||||
id BIGINT not null generated by default as identity,
|
||||
name VARCHAR(255),
|
||||
primary key (id)
|
||||
)
|
||||
|
||||
alter table authors
|
||||
add constraint authorsFK0 foreign key (id) references persons
|
||||
alter table author_work
|
||||
add constraint author_workFK0 foreign key (author_id) references authors
|
||||
alter table author_work
|
||||
add constraint author_workFK1 foreign key (work_id) references works]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="example-mappings-customerorderproduct">
|
||||
<title>Customer/Order/Product</title>
|
||||
|
||||
<para>
|
||||
Now consider a model of the relationships between <literal>Customer</literal>,
|
||||
<literal>Order</literal> and <literal>LineItem</literal> and <literal>Product</literal>.
|
||||
There is a one-to-many association between <literal>Customer</literal> and
|
||||
<literal>Order</literal>, but how should we represent <literal>Order</literal> /
|
||||
<literal>LineItem</literal> / <literal>Product</literal>? I've chosen to map
|
||||
<literal>LineItem</literal> as an association class representing the many-to-many
|
||||
association between <literal>Order</literal> and <literal>Product</literal>. In
|
||||
Hibernate, this is called a composite element.
|
||||
</para>
|
||||
|
||||
<mediaobject>
|
||||
<imageobject role="fo">
|
||||
<imagedata fileref="images/CustomerOrderProduct.gif" format="GIF" align="center"/>
|
||||
</imageobject>
|
||||
<imageobject role="html">
|
||||
<imagedata fileref="../shared/images/CustomerOrderProduct.gif" format="GIF" align="center"/>
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
|
||||
<para>
|
||||
The mapping document:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<hibernate-mapping>
|
||||
|
||||
<class name="Customer" table="customers">
|
||||
<id name="id">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
<property name="name"/>
|
||||
<set name="orders" inverse="true" lazy="true">
|
||||
<key column="customer_id"/>
|
||||
<one-to-many class="Order"/>
|
||||
</set>
|
||||
</class>
|
||||
|
||||
<class name="Order" table="orders">
|
||||
<id name="id">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
<property name="date"/>
|
||||
<many-to-one name="customer" column="customer_id"/>
|
||||
<list name="lineItems" table="line_items" lazy="true">
|
||||
<key column="order_id"/>
|
||||
<index column="line_number"/>
|
||||
<composite-element class="LineItem">
|
||||
<property name="quantity"/>
|
||||
<many-to-one name="product" column="product_id"/>
|
||||
</composite-element>
|
||||
</list>
|
||||
</class>
|
||||
|
||||
<class name="Product" table="products">
|
||||
<id name="id">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
<property name="serialNumber"/>
|
||||
</class>
|
||||
|
||||
</hibernate-mapping>]]></programlisting>
|
||||
|
||||
<para>
|
||||
<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> and
|
||||
<literal>products</literal> hold customer, order, order line item and product data
|
||||
respectively. <literal>line_items</literal> also acts as an association table linking
|
||||
orders with products.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[create table customers (
|
||||
id BIGINT not null generated by default as identity,
|
||||
name VARCHAR(255),
|
||||
primary key (id)
|
||||
)
|
||||
|
||||
create table orders (
|
||||
id BIGINT not null generated by default as identity,
|
||||
customer_id BIGINT,
|
||||
date TIMESTAMP,
|
||||
primary key (id)
|
||||
)
|
||||
|
||||
create table line_items (
|
||||
line_number INTEGER not null,
|
||||
order_id BIGINT not null,
|
||||
product_id BIGINT,
|
||||
quantity INTEGER,
|
||||
primary key (order_id, line_number)
|
||||
)
|
||||
|
||||
create table products (
|
||||
id BIGINT not null generated by default as identity,
|
||||
serialNumber VARCHAR(255),
|
||||
primary key (id)
|
||||
)
|
||||
|
||||
alter table orders
|
||||
add constraint ordersFK0 foreign key (customer_id) references customers
|
||||
alter table line_items
|
||||
add constraint line_itemsFK0 foreign key (product_id) references products
|
||||
alter table line_items
|
||||
add constraint line_itemsFK1 foreign key (order_id) references orders]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
|
@ -0,0 +1,385 @@
|
|||
<chapter id="example-parentchild">
|
||||
<title>Example: Parent/Child</title>
|
||||
|
||||
<para>
|
||||
One of the very first things that new users try to do with Hibernate is to model a parent / child type
|
||||
relationship. There are two different approaches to this. For various reasons the most convenient
|
||||
approach, especially for new users, is to model both <literal>Parent</literal> and <literal>Child</literal>
|
||||
as entity classes with a <literal><one-to-many></literal> association from <literal>Parent</literal>
|
||||
to <literal>Child</literal>. (The alternative approach is to declare the <literal>Child</literal> as a
|
||||
<literal><composite-element></literal>.) Now, it turns out that default semantics of a one to many
|
||||
association (in Hibernate) are much less close to the usual semantics of a parent / child relationship than
|
||||
those of a composite element mapping. We will explain how to use a <emphasis>bidirectional one to many
|
||||
association with cascades</emphasis> to model a parent / child relationship efficiently and elegantly. It's
|
||||
not at all difficult!
|
||||
</para>
|
||||
|
||||
<sect1 id="example-parentchild-collections">
|
||||
<title>A note about collections</title>
|
||||
|
||||
<para>
|
||||
Hibernate collections are considered to be a logical part of their owning entity; never of the
|
||||
contained entities. This is a crucial distinction! It has the following consequences:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
When we remove / add an object from / to a collection, the version number of the collection owner
|
||||
is incremented.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
If an object that was removed from a collection is an instance of a value type (eg, a composite
|
||||
element), that object will cease to be persistent and its state will be completely removed from
|
||||
the database. Likewise, adding a value type instance to the collection will cause its state to be
|
||||
immediately persistent.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
On the other hand, if an entity is removed from a collection (a one-to-many or many-to-many
|
||||
association), it will not be deleted, by default. This behaviour is completely consistent - a
|
||||
change to the internal state of another entity should not cause the associated entity to vanish!
|
||||
Likewise, adding an entity to a collection does not cause that entity to become persistent, by
|
||||
default.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
Instead, the default behaviour is that adding an entity to a collection merely creates a link between
|
||||
the two entities, while removing it removes the link. This is very appropriate for all sorts of cases.
|
||||
Where it is not appropriate at all is the case of a parent / child relationship, where the life of the
|
||||
child is bound to the lifecycle of the parent.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="example-parentchild-bidir">
|
||||
<title>Bidirectional one-to-many</title>
|
||||
|
||||
<para>
|
||||
Suppose we start with a simple <literal><one-to-many></literal> association from
|
||||
<literal>Parent</literal> to <literal>Child</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<set name="children">
|
||||
<key column="parent_id"/>
|
||||
<one-to-many class="Child"/>
|
||||
</set>]]></programlisting>
|
||||
|
||||
<para>
|
||||
If we were to execute the following code
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Parent p = .....;
|
||||
Child c = new Child();
|
||||
p.getChildren().add(c);
|
||||
session.save(c);
|
||||
session.flush();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Hibernate would issue two SQL statements:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>an <literal>INSERT</literal> to create the record for <literal>c</literal></para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
an <literal>UPDATE</literal> to create the link from <literal>p</literal> to
|
||||
<literal>c</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
This is not only inefficient, but also violates any <literal>NOT NULL</literal> constraint on the
|
||||
<literal>parent_id</literal> column.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The underlying cause is that the link (the foreign key <literal>parent_id</literal>) from
|
||||
<literal>p</literal> to <literal>c</literal> is not considered part of the state of the <literal>Child</literal>
|
||||
object and is therefore not created in the <literal>INSERT</literal>. So the solution is to make the link part
|
||||
of the <literal>Child</literal> mapping.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<many-to-one name="parent" column="parent_id" not-null="true"/>]]></programlisting>
|
||||
|
||||
<para>
|
||||
(We also need to add the <literal>parent</literal> property to the <literal>Child</literal> class.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Now that the <literal>Child</literal> entity is managing the state of the link, we tell the collection not
|
||||
to update the link. We use the <literal>inverse</literal> attribute.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<set name="children" inverse="true">
|
||||
<key column="parent_id"/>
|
||||
<one-to-many class="Child"/>
|
||||
</set>]]></programlisting>
|
||||
|
||||
<para>
|
||||
The following code would be used to add a new <literal>Child</literal>
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||
Child c = new Child();
|
||||
c.setParent(p);
|
||||
p.getChildren().add(c);
|
||||
session.save(c);
|
||||
session.flush();]]></programlisting>
|
||||
|
||||
<para>
|
||||
And now, only one SQL <literal>INSERT</literal> would be issued!
|
||||
</para>
|
||||
|
||||
<para>
|
||||
To tighten things up a bit, we could create an <literal>addChild()</literal> method of
|
||||
<literal>Parent</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[public void addChild(Child c) {
|
||||
c.setParent(this);
|
||||
children.add(c);
|
||||
}]]></programlisting>
|
||||
|
||||
<para>
|
||||
Now, the code to add a <literal>Child</literal> looks like
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||
Child c = new Child();
|
||||
p.addChild(c);
|
||||
session.save(c);
|
||||
session.flush();]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="example-parentchild-cascades">
|
||||
<title>Cascading lifecycle</title>
|
||||
|
||||
<para>
|
||||
The explicit call to <literal>save()</literal> is still annoying. We will address this by
|
||||
using cascades.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<set name="children" inverse="true" cascade="all">
|
||||
<key column="parent_id"/>
|
||||
<one-to-many class="Child"/>
|
||||
</set>]]></programlisting>
|
||||
|
||||
<para>
|
||||
This simplifies the code above to
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||
Child c = new Child();
|
||||
p.addChild(c);
|
||||
session.flush();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Similarly, we don't need to iterate over the children when saving or deleting a <literal>Parent</literal>.
|
||||
The following removes <literal>p</literal> and all its children from the database.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||
session.delete(p);
|
||||
session.flush();]]></programlisting>
|
||||
|
||||
<para>
|
||||
However, this code
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||
Child c = (Child) p.getChildren().iterator().next();
|
||||
p.getChildren().remove(c);
|
||||
c.setParent(null);
|
||||
session.flush();]]></programlisting>
|
||||
|
||||
<para>
|
||||
will not remove <literal>c</literal> from the database; it will ony remove the link to <literal>p</literal>
|
||||
(and cause a <literal>NOT NULL</literal> constraint violation, in this case). You need to explicitly
|
||||
<literal>delete()</literal> the <literal>Child</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||
Child c = (Child) p.getChildren().iterator().next();
|
||||
p.getChildren().remove(c);
|
||||
session.delete(c);
|
||||
session.flush();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Now, in our case, a <literal>Child</literal> can't really exist without its parent. So if we remove
|
||||
a <literal>Child</literal> from the collection, we really do want it to be deleted. For this, we must
|
||||
use <literal>cascade="all-delete-orphan"</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<set name="children" inverse="true" cascade="all-delete-orphan">
|
||||
<key column="parent_id"/>
|
||||
<one-to-many class="Child"/>
|
||||
</set>]]></programlisting>
|
||||
|
||||
<para>
|
||||
Note: even though the collection mapping specifies <literal>inverse="true"</literal>, cascades are still
|
||||
processed by iterating the collection elements. So if you require that an object be saved, deleted or
|
||||
updated by cascade, you must add it to the collection. It is not enough to simply call
|
||||
<literal>setParent()</literal>.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="example-parentchild-update">
|
||||
<title>Using cascading <literal>update()</literal></title>
|
||||
|
||||
<para>
|
||||
Suppose we loaded up a <literal>Parent</literal> in one <literal>Session</literal>, made some changes in a UI
|
||||
action and wish to persist these changes in a new Session (by calling <literal>update()</literal>). The
|
||||
<literal>Parent</literal> will contain a collection of childen and, since cascading update is enabled, Hibernate
|
||||
needs to know which children are newly instantiated and which represent existing rows in the database. Lets assume
|
||||
that both <literal>Parent</literal> and <literal>Child</literal> have (synthetic) identifier properties of type
|
||||
<literal>java.lang.Long</literal>. Hibernate will use the identifier property value to determine which of the
|
||||
children are new. (You may also use the version or timestamp property, see
|
||||
<xref linkend="manipulatingdata-updating-detached"/>.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <literal>unsaved-value</literal> attribute is used to specify the identifier value of a newly instantiated
|
||||
instance. <literal>unsaved-value</literal> defaults to "null", which is perfect for a <literal>Long</literal>
|
||||
identifier type. If we would have used a primitive identitifier property, we would need to specify
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<id name="id" type="long" unsaved-value="0">]]></programlisting>
|
||||
|
||||
<para>
|
||||
for the <literal>Child</literal> mapping. (There is also an <literal>unsaved-value</literal> attribute
|
||||
for version and timestamp property mappings.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The following code will update <literal>parent</literal> and <literal>child</literal> and insert
|
||||
<literal>newChild</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[//parent and child were both loaded in a previous session
|
||||
parent.addChild(child);
|
||||
Child newChild = new Child();
|
||||
parent.addChild(newChild);
|
||||
session.update(parent);
|
||||
session.flush();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Well, thats all very well for the case of a generated identifier, but what about assigned identifiers
|
||||
and composite identifiers? This is more difficult, since <literal>unsaved-value</literal> can't
|
||||
distinguish between a newly instantiated object (with an identifier assigned by the user) and an object
|
||||
loaded in a previous session. In these cases, you will probably need to give Hibernate a hint; either
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
define <literal>unsaved-value="null"</literal> or <literal>unsaved-value="negative"</literal>
|
||||
on a <literal><version></literal> or <literal><timestamp></literal> property
|
||||
mapping for the class.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
set <literal>unsaved-value="none"</literal> and explicitly <literal>save()</literal>
|
||||
newly instantiated children before calling <literal>update(parent)</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
set <literal>unsaved-value="any"</literal> and explicitly <literal>update()</literal>
|
||||
previously persistent children before calling <literal>update(parent)</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
<literal>none</literal> is the default <literal>unsaved-value</literal> for assigned and composite
|
||||
identifiers.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
There is one further possibility. There is a new <literal>Interceptor</literal> method named
|
||||
<literal>isUnsaved()</literal> which lets the application implement its own strategy for distinguishing
|
||||
newly instantiated objects. For example, you could define a base class for your persistent classes.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[public class Persistent {
|
||||
private boolean _saved = false;
|
||||
public void onSave() {
|
||||
_saved=true;
|
||||
}
|
||||
public void onLoad() {
|
||||
_saved=true;
|
||||
}
|
||||
......
|
||||
public boolean isSaved() {
|
||||
return _saved;
|
||||
}
|
||||
}]]></programlisting>
|
||||
|
||||
<para>
|
||||
(The <literal>saved</literal> property is non-persistent.)
|
||||
Now implement <literal>isUnsaved()</literal>, along with <literal>onLoad()</literal>
|
||||
and <literal>onSave()</literal> as follows.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[public Boolean isUnsaved(Object entity) {
|
||||
if (entity instanceof Persistent) {
|
||||
return new Boolean( !( (Persistent) entity ).isSaved() );
|
||||
}
|
||||
else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public boolean onLoad(Object entity,
|
||||
Serializable id,
|
||||
Object[] state,
|
||||
String[] propertyNames,
|
||||
Type[] types) {
|
||||
|
||||
if (entity instanceof Persistent) ( (Persistent) entity ).onLoad();
|
||||
return false;
|
||||
}
|
||||
|
||||
public boolean onSave(Object entity,
|
||||
Serializable id,
|
||||
Object[] state,
|
||||
String[] propertyNames,
|
||||
Type[] types) {
|
||||
|
||||
if (entity instanceof Persistent) ( (Persistent) entity ).onSave();
|
||||
return false;
|
||||
}]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="example-parentchild-conclusion">
|
||||
<title>Conclusion</title>
|
||||
|
||||
<para>
|
||||
There is quite a bit to digest here and it might look confusing first time around. However, in practice, it
|
||||
all works out quite nicely. Most Hibernate applications use the parent / child pattern in many places.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
We mentioned an alternative in the first paragraph. None of the above issues exist in the case of
|
||||
<literal><composite-element></literal> mappings, which have exactly the semantics of a parent / child
|
||||
relationship. Unfortunately, there are two big limitations to composite element classes: composite elements may
|
||||
not own collections, and they should not be the child of any entity other than the unique parent. (However,
|
||||
they <emphasis>may</emphasis> have a surrogate primary key, using an <literal><idbag></literal> mapping.)
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
|
@ -0,0 +1,432 @@
|
|||
<chapter id="example-weblog">
|
||||
<title>Example: Weblog Application</title>
|
||||
|
||||
<sect1 id="example-weblog-classes">
|
||||
<title>Persistent Classes</title>
|
||||
|
||||
<para>
|
||||
The persistent classes represent a weblog, and an item posted
|
||||
in a weblog. They are to be modelled as a standard parent/child
|
||||
relationship, but we will use an ordered bag, instead of a set.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[package eg;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public class Blog {
|
||||
private Long _id;
|
||||
private String _name;
|
||||
private List _items;
|
||||
|
||||
public Long getId() {
|
||||
return _id;
|
||||
}
|
||||
public List getItems() {
|
||||
return _items;
|
||||
}
|
||||
public String getName() {
|
||||
return _name;
|
||||
}
|
||||
public void setId(Long long1) {
|
||||
_id = long1;
|
||||
}
|
||||
public void setItems(List list) {
|
||||
_items = list;
|
||||
}
|
||||
public void setName(String string) {
|
||||
_name = string;
|
||||
}
|
||||
}]]></programlisting>
|
||||
|
||||
<programlisting><![CDATA[package eg;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.util.Calendar;
|
||||
|
||||
public class BlogItem {
|
||||
private Long _id;
|
||||
private Calendar _datetime;
|
||||
private String _text;
|
||||
private String _title;
|
||||
private Blog _blog;
|
||||
|
||||
public Blog getBlog() {
|
||||
return _blog;
|
||||
}
|
||||
public Calendar getDatetime() {
|
||||
return _datetime;
|
||||
}
|
||||
public Long getId() {
|
||||
return _id;
|
||||
}
|
||||
public String getText() {
|
||||
return _text;
|
||||
}
|
||||
public String getTitle() {
|
||||
return _title;
|
||||
}
|
||||
public void setBlog(Blog blog) {
|
||||
_blog = blog;
|
||||
}
|
||||
public void setDatetime(Calendar calendar) {
|
||||
_datetime = calendar;
|
||||
}
|
||||
public void setId(Long long1) {
|
||||
_id = long1;
|
||||
}
|
||||
public void setText(String string) {
|
||||
_text = string;
|
||||
}
|
||||
public void setTitle(String string) {
|
||||
_title = string;
|
||||
}
|
||||
}]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="example-weblog-mappings">
|
||||
<title>Hibernate Mappings</title>
|
||||
|
||||
<para>
|
||||
The XML mappings should now be quite straightforward.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<?xml version="1.0"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC
|
||||
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
|
||||
|
||||
<hibernate-mapping package="eg">
|
||||
|
||||
<class
|
||||
name="Blog"
|
||||
table="BLOGS"
|
||||
lazy="true">
|
||||
|
||||
<id
|
||||
name="id"
|
||||
column="BLOG_ID">
|
||||
|
||||
<generator class="native"/>
|
||||
|
||||
</id>
|
||||
|
||||
<property
|
||||
name="name"
|
||||
column="NAME"
|
||||
not-null="true"
|
||||
unique="true"/>
|
||||
|
||||
<bag
|
||||
name="items"
|
||||
inverse="true"
|
||||
lazy="true"
|
||||
order-by="DATE_TIME"
|
||||
cascade="all">
|
||||
|
||||
<key column="BLOG_ID"/>
|
||||
<one-to-many class="BlogItem"/>
|
||||
|
||||
</bag>
|
||||
|
||||
</class>
|
||||
|
||||
</hibernate-mapping>]]></programlisting>
|
||||
|
||||
<programlisting><![CDATA[<?xml version="1.0"?>
|
||||
<!DOCTYPE hibernate-mapping PUBLIC
|
||||
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
|
||||
|
||||
<hibernate-mapping package="eg">
|
||||
|
||||
<class
|
||||
name="BlogItem"
|
||||
table="BLOG_ITEMS"
|
||||
dynamic-update="true">
|
||||
|
||||
<id
|
||||
name="id"
|
||||
column="BLOG_ITEM_ID">
|
||||
|
||||
<generator class="native"/>
|
||||
|
||||
</id>
|
||||
|
||||
<property
|
||||
name="title"
|
||||
column="TITLE"
|
||||
not-null="true"/>
|
||||
|
||||
<property
|
||||
name="text"
|
||||
column="TEXT"
|
||||
not-null="true"/>
|
||||
|
||||
<property
|
||||
name="datetime"
|
||||
column="DATE_TIME"
|
||||
not-null="true"/>
|
||||
|
||||
<many-to-one
|
||||
name="blog"
|
||||
column="BLOG_ID"
|
||||
not-null="true"/>
|
||||
|
||||
</class>
|
||||
|
||||
</hibernate-mapping>]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="example-weblog-code">
|
||||
<title>Hibernate Code</title>
|
||||
|
||||
<para>
|
||||
The following class demonstrates some of the kinds of things
|
||||
we can do with these classes, using Hibernate.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[package eg;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
|
||||
import net.sf.hibernate.HibernateException;
|
||||
import net.sf.hibernate.Query;
|
||||
import net.sf.hibernate.Session;
|
||||
import net.sf.hibernate.SessionFactory;
|
||||
import net.sf.hibernate.Transaction;
|
||||
import net.sf.hibernate.cfg.Configuration;
|
||||
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
|
||||
|
||||
public class BlogMain {
|
||||
|
||||
private SessionFactory _sessions;
|
||||
|
||||
public void configure() throws HibernateException {
|
||||
_sessions = new Configuration()
|
||||
.addClass(Blog.class)
|
||||
.addClass(BlogItem.class)
|
||||
.buildSessionFactory();
|
||||
}
|
||||
|
||||
public void exportTables() throws HibernateException {
|
||||
Configuration cfg = new Configuration()
|
||||
.addClass(Blog.class)
|
||||
.addClass(BlogItem.class);
|
||||
new SchemaExport(cfg).create(true, true);
|
||||
}
|
||||
|
||||
public Blog createBlog(String name) throws HibernateException {
|
||||
|
||||
Blog blog = new Blog();
|
||||
blog.setName(name);
|
||||
blog.setItems( new ArrayList() );
|
||||
|
||||
Session session = _sessions.openSession();
|
||||
Transaction tx = null;
|
||||
try {
|
||||
tx = session.beginTransaction();
|
||||
session.save(blog);
|
||||
tx.commit();
|
||||
}
|
||||
catch (HibernateException he) {
|
||||
if (tx!=null) tx.rollback();
|
||||
throw he;
|
||||
}
|
||||
finally {
|
||||
session.close();
|
||||
}
|
||||
return blog;
|
||||
}
|
||||
|
||||
public BlogItem createBlogItem(Blog blog, String title, String text)
|
||||
throws HibernateException {
|
||||
|
||||
BlogItem item = new BlogItem();
|
||||
item.setTitle(title);
|
||||
item.setText(text);
|
||||
item.setBlog(blog);
|
||||
item.setDatetime( Calendar.getInstance() );
|
||||
blog.getItems().add(item);
|
||||
|
||||
Session session = _sessions.openSession();
|
||||
Transaction tx = null;
|
||||
try {
|
||||
tx = session.beginTransaction();
|
||||
session.update(blog);
|
||||
tx.commit();
|
||||
}
|
||||
catch (HibernateException he) {
|
||||
if (tx!=null) tx.rollback();
|
||||
throw he;
|
||||
}
|
||||
finally {
|
||||
session.close();
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
public BlogItem createBlogItem(Long blogid, String title, String text)
|
||||
throws HibernateException {
|
||||
|
||||
BlogItem item = new BlogItem();
|
||||
item.setTitle(title);
|
||||
item.setText(text);
|
||||
item.setDatetime( Calendar.getInstance() );
|
||||
|
||||
Session session = _sessions.openSession();
|
||||
Transaction tx = null;
|
||||
try {
|
||||
tx = session.beginTransaction();
|
||||
Blog blog = (Blog) session.load(Blog.class, blogid);
|
||||
item.setBlog(blog);
|
||||
blog.getItems().add(item);
|
||||
tx.commit();
|
||||
}
|
||||
catch (HibernateException he) {
|
||||
if (tx!=null) tx.rollback();
|
||||
throw he;
|
||||
}
|
||||
finally {
|
||||
session.close();
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
public void updateBlogItem(BlogItem item, String text)
|
||||
throws HibernateException {
|
||||
|
||||
item.setText(text);
|
||||
|
||||
Session session = _sessions.openSession();
|
||||
Transaction tx = null;
|
||||
try {
|
||||
tx = session.beginTransaction();
|
||||
session.update(item);
|
||||
tx.commit();
|
||||
}
|
||||
catch (HibernateException he) {
|
||||
if (tx!=null) tx.rollback();
|
||||
throw he;
|
||||
}
|
||||
finally {
|
||||
session.close();
|
||||
}
|
||||
}
|
||||
|
||||
public void updateBlogItem(Long itemid, String text)
|
||||
throws HibernateException {
|
||||
|
||||
Session session = _sessions.openSession();
|
||||
Transaction tx = null;
|
||||
try {
|
||||
tx = session.beginTransaction();
|
||||
BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);
|
||||
item.setText(text);
|
||||
tx.commit();
|
||||
}
|
||||
catch (HibernateException he) {
|
||||
if (tx!=null) tx.rollback();
|
||||
throw he;
|
||||
}
|
||||
finally {
|
||||
session.close();
|
||||
}
|
||||
}
|
||||
|
||||
public List listAllBlogNamesAndItemCounts(int max)
|
||||
throws HibernateException {
|
||||
|
||||
Session session = _sessions.openSession();
|
||||
Transaction tx = null;
|
||||
List result = null;
|
||||
try {
|
||||
tx = session.beginTransaction();
|
||||
Query q = session.createQuery(
|
||||
"select blog.id, blog.name, count(blogItem) " +
|
||||
"from Blog as blog " +
|
||||
"left outer join blog.items as blogItem " +
|
||||
"group by blog.name, blog.id " +
|
||||
"order by max(blogItem.datetime)"
|
||||
);
|
||||
q.setMaxResults(max);
|
||||
result = q.list();
|
||||
tx.commit();
|
||||
}
|
||||
catch (HibernateException he) {
|
||||
if (tx!=null) tx.rollback();
|
||||
throw he;
|
||||
}
|
||||
finally {
|
||||
session.close();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
public Blog getBlogAndAllItems(Long blogid)
|
||||
throws HibernateException {
|
||||
|
||||
Session session = _sessions.openSession();
|
||||
Transaction tx = null;
|
||||
Blog blog = null;
|
||||
try {
|
||||
tx = session.beginTransaction();
|
||||
Query q = session.createQuery(
|
||||
"from Blog as blog " +
|
||||
"left outer join fetch blog.items " +
|
||||
"where blog.id = :blogid"
|
||||
);
|
||||
q.setParameter("blogid", blogid);
|
||||
blog = (Blog) q.list().get(0);
|
||||
tx.commit();
|
||||
}
|
||||
catch (HibernateException he) {
|
||||
if (tx!=null) tx.rollback();
|
||||
throw he;
|
||||
}
|
||||
finally {
|
||||
session.close();
|
||||
}
|
||||
return blog;
|
||||
}
|
||||
|
||||
public List listBlogsAndRecentItems() throws HibernateException {
|
||||
|
||||
Session session = _sessions.openSession();
|
||||
Transaction tx = null;
|
||||
List result = null;
|
||||
try {
|
||||
tx = session.beginTransaction();
|
||||
Query q = session.createQuery(
|
||||
"from Blog as blog " +
|
||||
"inner join blog.items as blogItem " +
|
||||
"where blogItem.datetime > :minDate"
|
||||
);
|
||||
|
||||
Calendar cal = Calendar.getInstance();
|
||||
cal.roll(Calendar.MONTH, false);
|
||||
q.setCalendar("minDate", cal);
|
||||
|
||||
result = q.list();
|
||||
tx.commit();
|
||||
}
|
||||
catch (HibernateException he) {
|
||||
if (tx!=null) tx.rollback();
|
||||
throw he;
|
||||
}
|
||||
finally {
|
||||
session.close();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
|
@ -0,0 +1,335 @@
|
|||
<chapter id="inheritance">
|
||||
<title>Inheritance Mapping</title>
|
||||
|
||||
<sect1 id="inheritance-strategies" revision="1">
|
||||
<title>The Three Strategies</title>
|
||||
|
||||
<para>
|
||||
Hibernate supports the three basic inheritance mapping strategies.
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
table per class hierarchy
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
table per subclass
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
table per concrete class (some limitations)
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
It is even possible to use different mapping strategies for different
|
||||
branches of the same inheritance hierarchy, but the same limitations
|
||||
apply as apply to table-per-concrete class mappings. Hibernate does
|
||||
not support mixing <literal><subclass></literal> mappings and
|
||||
<literal><joined-subclass></literal> mappings inside the same
|
||||
<literal><class></literal> element.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Suppose we have an interface <literal>Payment</literal>, with implementors
|
||||
<literal>CreditCardPayment</literal>, <literal>CashPayment</literal>,
|
||||
<literal>ChequePayment</literal>. The table-per-hierarchy mapping would
|
||||
look like:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="Payment" table="PAYMENT">
|
||||
<id name="id" type="long" column="PAYMENT_ID">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
<discriminator column="PAYMENT_TYPE" type="string"/>
|
||||
<property name="amount" column="AMOUNT"/>
|
||||
...
|
||||
<subclass name="CreditCardPayment" discriminator-value="CREDIT">
|
||||
...
|
||||
</subclass>
|
||||
<subclass name="CashPayment" discriminator-value="CASH">
|
||||
...
|
||||
</subclass>
|
||||
<subclass name="ChequePayment" discriminator-value="CHEQUE">
|
||||
...
|
||||
</subclass>
|
||||
</class>]]></programlisting>
|
||||
|
||||
<para>
|
||||
Exactly one table is required. There is one big limitation of this
|
||||
mapping strategy: columns declared by the subclasses may not have
|
||||
<literal>NOT NULL</literal> constraints.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A table-per-subclass mapping would look like:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="Payment" table="PAYMENT">
|
||||
<id name="id" type="long" column="PAYMENT_ID">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
<property name="amount" column="AMOUNT"/>
|
||||
...
|
||||
<joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
|
||||
<key column="PAYMENT_ID"/>
|
||||
...
|
||||
</joined-subclass>
|
||||
<joined-subclass name="CashPayment" table="CASH_PAYMENT">
|
||||
<key column="PAYMENT_ID"/>
|
||||
...
|
||||
</joined-subclass>
|
||||
<joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
|
||||
<key column="PAYMENT_ID"/>
|
||||
...
|
||||
</joined-subclass>
|
||||
</class>]]></programlisting>
|
||||
|
||||
<para>
|
||||
Four tables are required. The three subclass tables have primary
|
||||
key associations to the superclass table (so the relational model
|
||||
is actually a one-to-one association).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Note that Hibernate's implementation of table-per-subclass requires
|
||||
no discriminator column. Other object/relational mappers use a
|
||||
different implementation of table-per-subclass which requires a type
|
||||
discriminator column in the superclass table. The approach taken by
|
||||
Hibernate is much more difficult to implement but arguably more
|
||||
correct from a relational point of view.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
For either of these two mapping strategies, a polymorphic
|
||||
association to <literal>Payment</literal> is mapped using
|
||||
<literal><many-to-one></literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<many-to-one name="payment"
|
||||
column="PAYMENT"
|
||||
class="Payment"/>]]></programlisting>
|
||||
|
||||
<para>The table-per-concrete-class strategy is very different.</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="CreditCardPayment" table="CREDIT_PAYMENT">
|
||||
<id name="id" type="long" column="CREDIT_PAYMENT_ID">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
<property name="amount" column="CREDIT_AMOUNT"/>
|
||||
...
|
||||
</class>
|
||||
|
||||
<class name="CashPayment" table="CASH_PAYMENT">
|
||||
<id name="id" type="long" column="CASH_PAYMENT_ID">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
<property name="amount" column="CASH_AMOUNT"/>
|
||||
...
|
||||
</class>
|
||||
|
||||
<class name="ChequePayment" table="CHEQUE_PAYMENT">
|
||||
<id name="id" type="long" column="CHEQUE_PAYMENT_ID">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
<property name="amount" column="CHEQUE_AMOUNT"/>
|
||||
...
|
||||
</class>]]></programlisting>
|
||||
|
||||
<para>
|
||||
Three tables were required. Notice that nowhere do we
|
||||
mention the <literal>Payment</literal> interface explicitly.
|
||||
Instead, we make use of Hibernate's <emphasis>implicit
|
||||
polymorphism</emphasis>. Also notice that properties of
|
||||
<literal>Payment</literal> are mapped in each of the
|
||||
subclasses.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In this case, a polymorphic association to <literal>Payment</literal>
|
||||
is mapped using <literal><any></literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<any name="payment"
|
||||
meta-type="class"
|
||||
id-type="long">
|
||||
<column name="PAYMENT_CLASS"/>
|
||||
<column name="PAYMENT_ID"/>
|
||||
</any>]]></programlisting>
|
||||
|
||||
<para>
|
||||
It would be better if we defined a <literal>UserType</literal>
|
||||
as the <literal>meta-type</literal>, to handle the mapping from
|
||||
type discriminator strings to <literal>Payment</literal> subclass.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<any name="payment"
|
||||
meta-type="PaymentMetaType"
|
||||
id-type="long">
|
||||
<column name="PAYMENT_TYPE"/> <!-- CREDIT, CASH or CHEQUE -->
|
||||
<column name="PAYMENT_ID"/>
|
||||
</any>]]></programlisting>
|
||||
|
||||
<para>
|
||||
There is one further thing to notice about this mapping.
|
||||
Since the subclasses are each mapped in their own
|
||||
<literal><class></literal> element (and since
|
||||
<literal>Payment</literal> is just an interface), each of
|
||||
the subclasses could easily be part of another table-per-class
|
||||
or table-per-subclass inheritance hierarchy! (And you can
|
||||
still use polymorphic queries against the
|
||||
<literal>Payment</literal> interface.)
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="CreditCardPayment" table="CREDIT_PAYMENT">
|
||||
<id name="id" type="long" column="CREDIT_PAYMENT_ID">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
<discriminator column="CREDIT_CARD" type="string"/>
|
||||
<property name="amount" column="CREDIT_AMOUNT"/>
|
||||
...
|
||||
<subclass name="MasterCardPayment" discriminator-value="MDC"/>
|
||||
<subclass name="VisaPayment" discriminator-value="VISA"/>
|
||||
</class>
|
||||
|
||||
<class name="NonelectronicTransaction" table="NONELECTRONIC_TXN">
|
||||
<id name="id" type="long" column="TXN_ID">
|
||||
<generator class="native"/>
|
||||
</id>
|
||||
...
|
||||
<joined-subclass name="CashPayment" table="CASH_PAYMENT">
|
||||
<key column="PAYMENT_ID"/>
|
||||
<property name="amount" column="CASH_AMOUNT"/>
|
||||
...
|
||||
</joined-subclass>
|
||||
<joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
|
||||
<key column="PAYMENT_ID"/>
|
||||
<property name="amount" column="CHEQUE_AMOUNT"/>
|
||||
...
|
||||
</joined-subclass>
|
||||
</class>]]></programlisting>
|
||||
|
||||
<para>
|
||||
Once again, we don't mention <literal>Payment</literal> explicitly. If we
|
||||
execute a query against the <literal>Payment</literal> interface - for
|
||||
example, <literal>from Payment</literal> - Hibernate
|
||||
automatically returns instances of <literal>CreditCardPayment</literal>
|
||||
(and its subclasses, since they also implement <literal>Payment</literal>),
|
||||
<literal>CashPayment</literal> and <literal>ChequePayment</literal> but
|
||||
not instances of <literal>NonelectronicTransaction</literal>.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="inheritance-limitations">
|
||||
<title>Limitations</title>
|
||||
|
||||
<para>
|
||||
Hibernate assumes that an association maps to exactly one foreign key column.
|
||||
Multiple associations per foreign key are tolerated (you might need to specify
|
||||
<literal>inverse="true"</literal> or <literal>insert="false" update="false"</literal>),
|
||||
but there is no way to map any association to multiple foreign keys. This means that:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
when an association is modified, it is always the same foreign key that is
|
||||
updated
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
when an association is fetched lazily, a single database query is used
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
when an association is fetched eagerly, it may be fetched using a single
|
||||
outer join
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
In particular, it implies that polymorphic one-to-many associations to
|
||||
classes mapped using the table-per-concrete-class strategy are
|
||||
<emphasis>not supported</emphasis>. (Fetching this association would
|
||||
require multiple queries or multiple joins.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The following table shows the limitations of table-per-concrete-class
|
||||
mappings, and of implicit polymorphism, in Hibernate.
|
||||
</para>
|
||||
|
||||
<table frame="topbot">
|
||||
<title>Features of inheritance mappings</title>
|
||||
<tgroup cols='8' align='left' colsep='1' rowsep='1'>
|
||||
<colspec colname='c1' colwidth="1*"/>
|
||||
<colspec colname='c2' colwidth="1*"/>
|
||||
<colspec colname='c3' colwidth="1*"/>
|
||||
<colspec colname='c4' colwidth="1*"/>
|
||||
<colspec colname='c5' colwidth="1*"/>
|
||||
<colspec colname='c6' colwidth="1*"/>
|
||||
<colspec colname='c7' colwidth="1*"/>
|
||||
<colspec colname='c8' colwidth="1*"/>
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Inheritance strategy</entry>
|
||||
<entry>Polymorphic many-to-one</entry>
|
||||
<entry>Polymorphic one-to-one</entry>
|
||||
<entry>Polymorphic one-to-many</entry>
|
||||
<entry>Polymorphic many-to-many</entry>
|
||||
<entry>Polymorphic <literal>load()/get()</literal></entry>
|
||||
<entry>Polymorphic queries</entry>
|
||||
<entry>Polymorphic joins</entry>
|
||||
<entry>Outer join fetching</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>table-per-class-hierarchy</entry>
|
||||
<entry><literal><many-to-one></literal></entry>
|
||||
<entry><literal><one-to-one></literal></entry>
|
||||
<entry><literal><one-to-many></literal></entry>
|
||||
<entry><literal><many-to-many></literal></entry>
|
||||
<entry><literal>s.get(Payment.class, id)</literal></entry>
|
||||
<entry><literal>from Payment p</literal></entry>
|
||||
<entry><literal>from Order o join o.payment p</literal></entry>
|
||||
<entry><emphasis>supported</emphasis></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>table-per-subclass</entry>
|
||||
<entry><literal><many-to-one></literal></entry>
|
||||
<entry><literal><one-to-one></literal></entry>
|
||||
<entry><literal><one-to-many></literal></entry>
|
||||
<entry><literal><many-to-many></literal></entry>
|
||||
<entry><literal>s.get(Payment.class, id)</literal></entry>
|
||||
<entry><literal>from Payment p</literal></entry>
|
||||
<entry><literal>from Order o join o.payment p</literal></entry>
|
||||
<entry><emphasis>supported</emphasis></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>table-per-concrete-class (implicit polymorphism)</entry>
|
||||
<entry><literal><any></literal></entry>
|
||||
<entry><emphasis>not supported</emphasis></entry>
|
||||
<entry><emphasis>not supported</emphasis></entry>
|
||||
<entry><literal><many-to-any></literal></entry>
|
||||
<entry><emphasis>use a query</emphasis></entry>
|
||||
<entry><literal>from Payment p</literal></entry>
|
||||
<entry><emphasis>not supported</emphasis></entry>
|
||||
<entry><emphasis>not supported</emphasis></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
|
@ -0,0 +1,684 @@
|
|||
<chapter id="performance">
|
||||
<title>Improving performance</title>
|
||||
|
||||
<sect1 id="performance-collections">
|
||||
<title>Understanding Collection performance</title>
|
||||
|
||||
<para>
|
||||
We've already spent quite some time talking about collections.
|
||||
In this section we will highlight a couple more issues about
|
||||
how collections behave at runtime.
|
||||
</para>
|
||||
|
||||
<sect2 id="performance-collections-taxonomy">
|
||||
<title>Taxonomy</title>
|
||||
|
||||
<para>Hibernate defines three basic kinds of collections:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>collections of values</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>one to many associations</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>many to many associations</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
This classification distinguishes the various table and foreign key
|
||||
relationships but does not tell us quite everything we need to know
|
||||
about the relational model. To fully understand the relational structure
|
||||
and performance characteristics, we must also consider the structure of
|
||||
the primary key that is used by Hibernate to update or delete collection
|
||||
rows. This suggests the following classification:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>indexed collections</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>sets</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>bags</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
All indexed collections (maps, lists, arrays) have a primary key consisting
|
||||
of the <literal><key></literal> and <literal><index></literal>
|
||||
columns. In this case collection updates are usually extremely efficient -
|
||||
the primary key may be efficiently indexed and a particular row may be efficiently
|
||||
located when Hibernate tries to update or delete it.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Sets have a primary key consisting of <literal><key></literal> and element
|
||||
columns. This may be less efficient for some types of collection element, particularly
|
||||
composite elements or large text or binary fields; the database may not be able to index
|
||||
a complex primary key as efficently. On the other hand, for one to many or many to many
|
||||
associations, particularly in the case of synthetic identifiers, it is likely to be just
|
||||
as efficient. (Side-note: if you want <literal>SchemaExport</literal> to actually create
|
||||
the primary key of a <literal><set></literal> for you, you must declare all columns
|
||||
as <literal>not-null="true"</literal>.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Bags are the worst case. Since a bag permits duplicate element values and has no
|
||||
index column, no primary key may be defined. Hibernate has no way of distinguishing
|
||||
between duplicate rows. Hibernate resolves this problem by completely removing
|
||||
(in a single <literal>DELETE</literal>) and recreating the collection whenever it
|
||||
changes. This might be very inefficient.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Note that for a one-to-many association, the "primary key" may not be the physical
|
||||
primary key of the database table - but even in this case, the above classification
|
||||
is still useful. (It still reflects how Hibernate "locates" individual rows of the
|
||||
collection.)
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="performance-collections-mostefficientupdate">
|
||||
<title>Lists, maps and sets are the most efficient collections to update</title>
|
||||
|
||||
<para>
|
||||
From the discussion above, it should be clear that indexed collections
|
||||
and (usually) sets allow the most efficient operation in terms of adding,
|
||||
removing and updating elements.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
There is, arguably, one more advantage that indexed collections have over sets for
|
||||
many to many associations or collections of values. Because of the structure of a
|
||||
<literal>Set</literal>, Hibernate doesn't ever <literal>UPDATE</literal> a row when
|
||||
an element is "changed". Changes to a <literal>Set</literal> always work via
|
||||
<literal>INSERT</literal> and <literal>DELETE</literal> (of individual rows). Once
|
||||
again, this consideration does not apply to one to many associations.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
After observing that arrays cannot be lazy, we would conclude that lists, maps and sets
|
||||
are the most performant collection types. (With the caveat that a set might be less
|
||||
efficient for some collections of values.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Sets are expected to be the most common kind of collection in Hibernate applications.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<emphasis>There is an undocumented feature in this release of Hibernate. The
|
||||
<literal><idbag></literal> mapping implements bag semantics for a collection
|
||||
of values or a many to many association and is more efficient that any other
|
||||
style of collection in this case!</emphasis>
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="performance-collections-mostefficentinverse">
|
||||
<title>Bags and lists are the most efficient inverse collections</title>
|
||||
|
||||
<para>
|
||||
Just before you ditch bags forever, there is a particular case in which bags (and also lists)
|
||||
are much more performant than sets. For a collection with <literal>inverse="true"</literal>
|
||||
(the standard bidirectional one-to-many relationship idiom, for example) we can add elements
|
||||
to a bag or list without needing to initialize (fetch) the bag elements! This is because
|
||||
<literal>Collection.add()</literal> or <literal>Collection.addAll()</literal> must always
|
||||
return true for a bag or <literal>List</literal> (unlike a <literal>Set</literal>). This can
|
||||
make the following common code much faster.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Parent p = (Parent) sess.load(Parent.class, id);
|
||||
Child c = new Child();
|
||||
c.setParent(p);
|
||||
p.getChildren().add(c); //no need to fetch the collection!
|
||||
sess.flush();]]></programlisting>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="performance-collections-oneshotdelete">
|
||||
<title>One shot delete</title>
|
||||
|
||||
<para>
|
||||
Occasionally, deleting collection elements one by one can be extremely inefficient. Hibernate
|
||||
isn't completly stupid, so it knows not to do that in the case of an newly-empty collection
|
||||
(if you called <literal>list.clear()</literal>, for example). In this case, Hibernate will
|
||||
issue a single <literal>DELETE</literal> and we are done!
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Suppose we add a single element to a collection of size twenty and then remove two elements.
|
||||
Hibernate will issue one <literal>INSERT</literal> statement and two <literal>DELETE</literal>
|
||||
statements (unless the collection is a bag). This is certainly desirable.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
However, suppose that we remove eighteen elements, leaving two and then add thee new elements.
|
||||
There are two possible ways to proceed
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>delete eighteen rows one by one and then insert three rows</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>remove the whole collection (in one SQL <literal>DELETE</literal>) and insert
|
||||
all five current elements (one by one)</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
Hibernate isn't smart enough to know that the second option is probably quicker in this case.
|
||||
(And it would probably be undesirable for Hibernate to be that smart; such behaviour might
|
||||
confuse database triggers, etc.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Fortunately, you can force this behaviour (ie. the second strategy) at any time by discarding
|
||||
(ie. dereferencing) the original collection and returning a newly instantiated collection with
|
||||
all the current elements. This can be very useful and powerful from time to time.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
</sect1>
|
||||
|
||||
<para>
|
||||
We have already shown how you can use lazy initialization for persistent collections
|
||||
in the chapter about collection mappings. A similar effect is achievable for ordinary object
|
||||
references, using CGLIB proxies. We have also mentioned how Hibernate caches persistent
|
||||
objects at the level of a <literal>Session</literal>. More aggressive caching strategies
|
||||
may be configured upon a class-by-class basis.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In the next section, we show you how to use these features, which may be used to
|
||||
achieve much higher performance, where necessary.
|
||||
</para>
|
||||
|
||||
<sect1 id="performance-proxies">
|
||||
<title>Proxies for Lazy Initialization</title>
|
||||
|
||||
<para>
|
||||
Hibernate implements lazy initializing proxies for persistent objects using runtime
|
||||
bytecode enhancement (via the excellent CGLIB library).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The mapping file declares a class or interface to use as the proxy interface
|
||||
for that class. The recommended approach is to specify the class itself:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="eg.Order" proxy="eg.Order">]]></programlisting>
|
||||
|
||||
<para>
|
||||
The runtime type of the proxies will be a subclass of <literal>Order</literal>. Note that
|
||||
the proxied class must implement a default constructor with at least package visibility.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
There are some gotchas to be aware of when extending this approach to polymorphic
|
||||
classes, eg.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="eg.Cat" proxy="eg.Cat">
|
||||
......
|
||||
<subclass name="eg.DomesticCat" proxy="eg.DomesticCat">
|
||||
.....
|
||||
</subclass>
|
||||
</class>]]></programlisting>
|
||||
|
||||
<para>
|
||||
Firstly, instances of <literal>Cat</literal> will never be castable to
|
||||
<literal>DomesticCat</literal>, even if the underlying instance is an
|
||||
instance of <literal>DomesticCat</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)
|
||||
if ( cat.isDomesticCat() ) { // hit the db to initialize the proxy
|
||||
DomesticCat dc = (DomesticCat) cat; // Error!
|
||||
....
|
||||
}]]></programlisting>
|
||||
|
||||
<para>
|
||||
Secondly, it is possible to break proxy <literal>==</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[
|
||||
Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy
|
||||
DomesticCat dc =
|
||||
(DomesticCat) session.load(DomesticCat.class, id); // required new DomesticCat proxy!
|
||||
System.out.println(cat==dc); // false]]></programlisting>
|
||||
|
||||
<para>
|
||||
However, the situation is not quite as bad as it looks. Even though we now have two references
|
||||
to different proxy objects, the underlying instance will still be the same object:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy
|
||||
System.out.println( dc.getWeight() ); // 11.0]]></programlisting>
|
||||
|
||||
<para>
|
||||
Third, you may not use a CGLIB proxy for a <literal>final</literal> class or a class
|
||||
with any <literal>final</literal> methods.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Finally, if your persistent object acquires any resources upon instantiation (eg. in
|
||||
initializers or default constructor), then those resources will also be acquired by
|
||||
the proxy. The proxy class is an actual subclass of the persistent class.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
These problems are all due to fundamental limitations in Java's single inheritence model.
|
||||
If you wish to avoid these problems your persistent classes must each implement an interface
|
||||
that declares its business methods. You should specify these interfaces in the mapping file. eg.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="eg.Cat" proxy="eg.ICat">
|
||||
......
|
||||
<subclass name="eg.DomesticCat" proxy="eg.IDomesticCat">
|
||||
.....
|
||||
</subclass>
|
||||
</class>]]></programlisting>
|
||||
|
||||
<para>
|
||||
where <literal>Cat</literal> implements the interface <literal>ICat</literal> and
|
||||
<literal>DomesticCat</literal> implements the interface <literal>IDomesticCat</literal>. Then
|
||||
proxies for instances of <literal>Cat</literal> and <literal>DomesticCat</literal> may be returned
|
||||
by <literal>load()</literal> or <literal>iterate()</literal>. (Note that <literal>find()</literal>
|
||||
does not return proxies.)
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[ICat cat = (ICat) session.load(Cat.class, catid);
|
||||
Iterator iter = session.iterate("from cat in class eg.Cat where cat.name='fritz'");
|
||||
ICat fritz = (ICat) iter.next();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Relationships are also lazily initialized. This means you must declare any properties to be of
|
||||
type <literal>ICat</literal>, not <literal>Cat</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Certain operations do <emphasis>not</emphasis> require proxy initialization
|
||||
</para>
|
||||
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>equals()</literal>, if the persistent class does not override
|
||||
<literal>equals()</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>hashCode()</literal>, if the persistent class does not override
|
||||
<literal>hashCode()</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The identifier getter method
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
Hibernate will detect persistent classes that override <literal>equals()</literal> or
|
||||
<literal>hashCode()</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Exceptions that occur while initializing a proxy are wrapped in a
|
||||
<literal>LazyInitializationException</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Sometimes we need to ensure that a proxy or collection is initialized before closing the
|
||||
<literal>Session</literal>. Of course, we can alway force initialization by calling
|
||||
<literal>cat.getSex()</literal> or <literal>cat.getKittens().size()</literal>, for example.
|
||||
But that is confusing to readers of the code and is not convenient for generic code.
|
||||
The static methods <literal>Hibernate.initialize()</literal> and <literal>Hibernate.isInitialized()</literal>
|
||||
provide the application with a convenient way of working with lazyily initialized collections or
|
||||
proxies. <literal>Hibernate.initialize(cat)</literal> will force the initialization of a proxy,
|
||||
<literal>cat</literal>, as long as its <literal>Session</literal> is still open.
|
||||
<literal>Hibernate.initialize( cat.getKittens() )</literal> has a similar effect for the collection
|
||||
of kittens.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="performance-cache">
|
||||
<title>The Second Level Cache</title>
|
||||
|
||||
<para>
|
||||
A Hibernate <literal>Session</literal> is a transaction-level cache of persistent data. It is
|
||||
possible to configure a cluster or JVM-level (<literal>SessionFactory</literal>-level) cache on
|
||||
a class-by-class and collection-by-collection basis. You may even plug in a clustered cache. Be
|
||||
careful. Caches are never aware of changes made to the persistent store by another application
|
||||
(though they may be configured to regularly expire cached data).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
By default, Hibernate uses EHCache for JVM-level caching. (JCS support is now deprecated and will
|
||||
be removed in a future version of Hibernate.) You may choose a different implementation by
|
||||
specifying the name of a class that implements <literal>net.sf.hibernate.cache.CacheProvider</literal>
|
||||
using the property <literal>hibernate.cache.provider_class</literal>.
|
||||
</para>
|
||||
|
||||
<table frame="topbot">
|
||||
<title>Cache Providers</title>
|
||||
<tgroup cols='5' align='left' colsep='1' rowsep='1'>
|
||||
<colspec colname='c1' colwidth="1*"/>
|
||||
<colspec colname='c2' colwidth="3*"/>
|
||||
<colspec colname='c3' colwidth="1*"/>
|
||||
<colspec colname='c4' colwidth="1*"/>
|
||||
<colspec colname='c5' colwidth="1*"/>
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Cache</entry>
|
||||
<entry>Provider class</entry>
|
||||
<entry>Type</entry>
|
||||
<entry>Cluster Safe</entry>
|
||||
<entry>Query Cache Supported</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>Hashtable (not intended for production use)</entry>
|
||||
<entry><literal>net.sf.hibernate.cache.HashtableCacheProvider</literal></entry>
|
||||
<entry>memory</entry>
|
||||
<entry></entry>
|
||||
<entry>yes</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>EHCache</entry>
|
||||
<entry><literal>net.sf.ehcache.hibernate.Provider</literal></entry>
|
||||
<entry>memory, disk</entry>
|
||||
<entry></entry>
|
||||
<entry>yes</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>OSCache</entry>
|
||||
<entry><literal>net.sf.hibernate.cache.OSCacheProvider</literal></entry>
|
||||
<entry>memory, disk</entry>
|
||||
<entry></entry>
|
||||
<entry>yes</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SwarmCache</entry>
|
||||
<entry><literal>net.sf.hibernate.cache.SwarmCacheProvider</literal></entry>
|
||||
<entry>clustered (ip multicast)</entry>
|
||||
<entry>yes (clustered invalidation)</entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>JBoss TreeCache</entry>
|
||||
<entry><literal>net.sf.hibernate.cache.TreeCacheProvider</literal></entry>
|
||||
<entry>clustered (ip multicast), transactional</entry>
|
||||
<entry>yes (replication)</entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<sect2 id="performance-cache-mapping">
|
||||
<title>Cache mappings</title>
|
||||
|
||||
<para>
|
||||
The <literal><cache></literal> element of a class or collection mapping has the
|
||||
following form:
|
||||
</para>
|
||||
|
||||
<programlistingco>
|
||||
<areaspec>
|
||||
<area id="cache1" coords="2 70"/>
|
||||
</areaspec>
|
||||
<programlisting><![CDATA[<cache
|
||||
usage="transactional|read-write|nonstrict-read-write|read-only"
|
||||
/>]]></programlisting>
|
||||
<calloutlist>
|
||||
<callout arearefs="cache1">
|
||||
<para>
|
||||
<literal>usage</literal> specifies the caching strategy:
|
||||
<literal>transactional</literal>,
|
||||
<literal>read-write</literal>,
|
||||
<literal>nonstrict-read-write</literal> or
|
||||
<literal>read-only</literal>
|
||||
</para>
|
||||
</callout>
|
||||
</calloutlist>
|
||||
</programlistingco>
|
||||
|
||||
<para>
|
||||
Alternatively (preferrably?), you may specify <literal><class-cache></literal> and
|
||||
<literal><collection-cache></literal> elements in <literal>hibernate.cfg.xml</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <literal>usage</literal> attribute specifies a <emphasis>cache concurrency strategy</emphasis>.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="performance-cache-readonly">
|
||||
<title>Strategy: read only</title>
|
||||
|
||||
<para>
|
||||
If your application needs to read but never modify instances of a persistent class, a
|
||||
<literal>read-only</literal> cache may be used. This is the simplest and best performing
|
||||
strategy. Its even perfectly safe for use in a cluster.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="eg.Immutable" mutable="false">
|
||||
<cache usage="read-only"/>
|
||||
....
|
||||
</class>]]></programlisting>
|
||||
|
||||
</sect2>
|
||||
|
||||
|
||||
<sect2 id="performance-cache-readwrite">
|
||||
<title>Strategy: read/write</title>
|
||||
|
||||
<para>
|
||||
If the application needs to update data, a <literal>read-write</literal> cache might be appropriate.
|
||||
This cache strategy should never be used if serializable transaction isolation level is required.
|
||||
If the cache is used in a JTA environment, you must specify the property
|
||||
<literal>hibernate.transaction.manager_lookup_class</literal>, naming a strategy for obtaining the
|
||||
JTA <literal>TransactionManager</literal>. In other environments, you should ensure that the transaction
|
||||
is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called.
|
||||
If you wish to use this strategy in a cluster, you should ensure that the underlying cache implementation
|
||||
supports locking. The built-in cache providers do <emphasis>not</emphasis>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<class name="eg.Cat" .... >
|
||||
<cache usage="read-write"/>
|
||||
....
|
||||
<set name="kittens" ... >
|
||||
<cache usage="read-write"/>
|
||||
....
|
||||
</set>
|
||||
</class>]]></programlisting>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="performance-cache-nonstrict">
|
||||
<title>Strategy: nonstrict read/write</title>
|
||||
|
||||
<para>
|
||||
If the application only occasionally needs to update data (ie. if it is extremely unlikely that two
|
||||
transactions would try to update the same item simultaneously) and strict transaction isolation is
|
||||
not required, a <literal>nonstrict-read-write</literal> cache might be appropriate. If the cache is
|
||||
used in a JTA environment, you must specify <literal>hibernate.transaction.manager_lookup_class</literal>.
|
||||
In other environments, you should ensure that the transaction is completed when
|
||||
<literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="performance-cache-transactional">
|
||||
<title>Strategy: transactional</title>
|
||||
|
||||
<para>
|
||||
The <literal>transactional</literal> cache strategy provides support for fully transactional cache
|
||||
providers such as JBoss TreeCache. Such a cache may only be used in a JTA environment and you must
|
||||
specify <literal>hibernate.transaction.manager_lookup_class</literal>.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<para>
|
||||
None of the cache providers support all of the cache concurrency strategies. The following table shows
|
||||
which providers are compatible with which concurrency strategies.
|
||||
</para>
|
||||
|
||||
<table frame="topbot">
|
||||
<title>Cache Concurrency Strategy Support</title>
|
||||
<tgroup cols='5' align='left' colsep='1' rowsep='1'>
|
||||
<colspec colname='c1' colwidth="1*"/>
|
||||
<colspec colname='c2' colwidth="1*"/>
|
||||
<colspec colname='c3' colwidth="1*"/>
|
||||
<colspec colname='c4' colwidth="1*"/>
|
||||
<colspec colname='c5' colwidth="1*"/>
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Cache</entry>
|
||||
<entry>read-only</entry>
|
||||
<entry>nonstrict-read-write</entry>
|
||||
<entry>read-write</entry>
|
||||
<entry>transactional</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>Hashtable (not intended for production use)</entry>
|
||||
<entry>yes</entry>
|
||||
<entry>yes</entry>
|
||||
<entry>yes</entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>EHCache</entry>
|
||||
<entry>yes</entry>
|
||||
<entry>yes</entry>
|
||||
<entry>yes</entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>OSCache</entry>
|
||||
<entry>yes</entry>
|
||||
<entry>yes</entry>
|
||||
<entry>yes</entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>SwarmCache</entry>
|
||||
<entry>yes</entry>
|
||||
<entry>yes</entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>JBoss TreeCache</entry>
|
||||
<entry>yes</entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry>yes</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="performance-sessioncache" revision="2">
|
||||
<title>Managing the <literal>Session</literal> Cache</title>
|
||||
|
||||
<para>
|
||||
Whenever you pass an object to <literal>save()</literal>, <literal>update()</literal>
|
||||
or <literal>saveOrUpdate()</literal> and whenever you retrieve an object using
|
||||
<literal>load()</literal>, <literal>find()</literal>, <literal>iterate()</literal>,
|
||||
or <literal>filter()</literal>, that object is added to the internal cache of the
|
||||
<literal>Session</literal>. When <literal>flush()</literal> is subsequently called,
|
||||
the state of that object will be synchronized with the database. If you do not want
|
||||
this synchronization to occur or if you are processing a huge number of objects and
|
||||
need to manage memory efficiently, the <literal>evict()</literal> method may be
|
||||
used to remove the object and its collections from the cache.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Iterator cats = sess.iterate("from eg.Cat as cat"); //a huge result set
|
||||
while ( cats.hasNext() ) {
|
||||
Cat cat = (Cat) iter.next();
|
||||
doSomethingWithACat(cat);
|
||||
sess.evict(cat);
|
||||
}]]></programlisting>
|
||||
|
||||
<para>
|
||||
Hibernate will evict associated entities automatically if the association is mapped
|
||||
with <literal>cascade="all"</literal> or <literal>cascade="all-delete-orphan"</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <literal>Session</literal> also provides a <literal>contains()</literal> method
|
||||
to determine if an instance belongs to the session cache.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
To completely evict all objects from the session cache, call <literal>Session.clear()</literal>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
For the second-level cache, there are methods defined on <literal>SessionFactory</literal> for
|
||||
evicting the cached state of an instance, entire class, collection instance or entire collection
|
||||
role.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="performance-querycache">
|
||||
<title>The Query Cache</title>
|
||||
|
||||
<para>
|
||||
Query result sets may also be cached. This is only useful for queries that are run
|
||||
frequently with the same parameters. To use the query cache you must first enable it
|
||||
by setting the property <literal>hibernate.cache.use_query_cache=true</literal>. This
|
||||
causes the creation of two cache regions - one holding cached query result sets
|
||||
(<literal>net.sf.hibernate.cache.QueryCache</literal>), the other holding timestamps
|
||||
of most recent updates to queried tables
|
||||
(<literal>net.sf.hibernate.cache.UpdateTimestampsCache</literal>). Note that the query
|
||||
cache does not cache the state of any entities in the result set; it caches only
|
||||
identifier values and results of value type. So the query cache is usually used in
|
||||
conjunction with the second-level cache.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Most queries do not benefit from caching, so by default queries are not cached. To
|
||||
enable caching, call <literal>Query.setCacheable(true)</literal>. This call allows
|
||||
the query to look for existing cache results or add its results to the cache when
|
||||
it is executed.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If you require fine-grained control over query cache expiration policies, you may
|
||||
specify a named cache region for a particular query by calling
|
||||
<literal>Query.setCacheRegion()</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[List blogs = sess.createQuery("from Blog blog where blog.blogger = :blogger")
|
||||
.setEntity("blogger", blogger)
|
||||
.setMaxResults(15)
|
||||
.setCacheable(true)
|
||||
.setCacheRegion("frontpages")
|
||||
.list();]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
|
@ -0,0 +1,512 @@
|
|||
<chapter id="persistent-classes">
|
||||
<title>Persistent Classes</title>
|
||||
|
||||
<para>
|
||||
Persistent classes are classes in an application that implement the entities
|
||||
of the business problem (e.g. Customer and Order in an E-commerce application).
|
||||
Persistent classes have, as the name implies, transient and also persistent
|
||||
instance stored in the database.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Hibernate works best if these classes follow some simple rules, also known
|
||||
as the Plain Old Java Object (POJO) programming model.
|
||||
</para>
|
||||
|
||||
<sect1 id="persistent-classes-pojo">
|
||||
<title>A simple POJO example</title>
|
||||
|
||||
<para>
|
||||
Most Java applications require a persistent class representing felines.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[package eg;
|
||||
import java.util.Set;
|
||||
import java.util.Date;
|
||||
|
||||
public class Cat {
|
||||
private Long id; // identifier
|
||||
private String name;
|
||||
private Date birthdate;
|
||||
private Cat mate;
|
||||
private Set kittens
|
||||
private Color color;
|
||||
private char sex;
|
||||
private float weight;
|
||||
|
||||
private void setId(Long id) {
|
||||
this.id=id;
|
||||
}
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
void setMate(Cat mate) {
|
||||
this.mate = mate;
|
||||
}
|
||||
public Cat getMate() {
|
||||
return mate;
|
||||
}
|
||||
|
||||
void setBirthdate(Date date) {
|
||||
birthdate = date;
|
||||
}
|
||||
public Date getBirthdate() {
|
||||
return birthdate;
|
||||
}
|
||||
void setWeight(float weight) {
|
||||
this.weight = weight;
|
||||
}
|
||||
public float getWeight() {
|
||||
return weight;
|
||||
}
|
||||
|
||||
public Color getColor() {
|
||||
return color;
|
||||
}
|
||||
void setColor(Color color) {
|
||||
this.color = color;
|
||||
}
|
||||
void setKittens(Set kittens) {
|
||||
this.kittens = kittens;
|
||||
}
|
||||
public Set getKittens() {
|
||||
return kittens;
|
||||
}
|
||||
// addKitten not needed by Hibernate
|
||||
public void addKitten(Cat kitten) {
|
||||
kittens.add(kitten);
|
||||
}
|
||||
void setSex(char sex) {
|
||||
this.sex=sex;
|
||||
}
|
||||
public char getSex() {
|
||||
return sex;
|
||||
}
|
||||
}]]></programlisting>
|
||||
|
||||
<para>
|
||||
There are four main rules to follow here:
|
||||
</para>
|
||||
|
||||
|
||||
<sect2 id="persistent-classes-pojo-accessors">
|
||||
<title>Declare accessors and mutators for persistent fields</title>
|
||||
|
||||
<para>
|
||||
<literal>Cat</literal> declares accessor methods for all its persistent fields.
|
||||
Many other ORM tools directly persist instance variables. We believe
|
||||
it is far better to decouple this implementation detail from the persistence
|
||||
mechanism. Hibernate persists JavaBeans style properties, and recognizes method
|
||||
names of the form <literal>getFoo</literal>, <literal>isFoo</literal> and
|
||||
<literal>setFoo</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Properties need <emphasis>not</emphasis> be declared public - Hibernate can
|
||||
persist a property with a default, <literal>protected</literal> or <literal>
|
||||
private</literal> get / set pair.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="persistent-classes-pojo-constructor">
|
||||
<title>Implement a default constructor</title>
|
||||
|
||||
<para>
|
||||
<literal>Cat</literal> has an implicit default (no-argument) constructor. All
|
||||
persistent classes must have a default constructor (which may be non-public) so
|
||||
Hibernate can instantiate them using <literal>Constructor.newInstance()</literal>.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="persistent-classes-pojo-identifier">
|
||||
<title>Provide an identifier property (optional)</title>
|
||||
|
||||
<para>
|
||||
<literal>Cat</literal> has a property called <literal>id</literal>. This property
|
||||
holds the primary key column of a database table. The property might have been called
|
||||
anything, and its type might have been any primitive type, any primitive "wrapper"
|
||||
type, <literal>java.lang.String</literal> or <literal>java.util.Date</literal>. (If
|
||||
your legacy database table has composite keys, you can even use a user-defined class
|
||||
with properties of these types - see the section on composite identifiers below.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The identifier property is optional. You can leave it off and let Hibernate keep track
|
||||
of object identifiers internally. However, for many applications it is still
|
||||
a good (and very popular) design decision.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
What's more, some functionality is available only to classes which declare an
|
||||
identifier property:
|
||||
</para>
|
||||
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
Cascaded updates (see "Lifecycle Objects")
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>Session.saveOrUpdate()</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
We recommend you declare consistently-named identifier properties on persistent
|
||||
classes. We further recommend that you use a nullable (ie. non-primitive) type.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 id="persistent-classes-pojo-final">
|
||||
<title>Prefer non-final classes (optional)</title>
|
||||
<para>
|
||||
A central feature of Hibernate, <emphasis>proxies</emphasis>, depends upon the
|
||||
persistent class being either non-final, or the implementation of an interface
|
||||
that declares all public methods.
|
||||
</para>
|
||||
<para>
|
||||
You can persist <literal>final</literal> classes that do not implement an interface
|
||||
with Hibernate, but you won't be able to use proxies - which will limit your options
|
||||
for performance tuning somewhat.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="persistent-classes-inheritance">
|
||||
<title>Implementing inheritance</title>
|
||||
|
||||
<para>
|
||||
A subclass must also observe the first and second rules. It inherits its
|
||||
identifier property from <literal>Cat</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[package eg;
|
||||
|
||||
public class DomesticCat extends Cat {
|
||||
private String name;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
protected void setName(String name) {
|
||||
this.name=name;
|
||||
}
|
||||
}]]></programlisting>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="persistent-classes-equalshashcode">
|
||||
<title>Implementing <literal>equals()</literal> and <literal>hashCode()</literal></title>
|
||||
|
||||
<para>
|
||||
You have to override the <literal>equals()</literal> and <literal>hashCode()</literal>
|
||||
methods if you intend to mix objects of persistent classes (e.g. in a <literal>Set</literal>).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<emphasis>This only applies if these objects are loaded in two different
|
||||
<literal>Session</literal>s, as Hibernate only guarantees JVM identity (<literal> a == b </literal>,
|
||||
the default implementation of <literal>equals()</literal>) inside a single
|
||||
<literal>Session</literal>!</emphasis>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Even if both objecs <literal>a</literal> and <literal>b</literal> are the same database row
|
||||
(they have the same primary key value as their identifier), we can't guarantee that they are
|
||||
the same Java instance outside of a particular <literal>Session</literal> context.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The most obvious way is to implement <literal>equals()</literal>/<literal>hashCode()</literal>
|
||||
by comparing the identifier value of both objects. If the value is the same, both must
|
||||
be the same database row, they are therefore equal (if both are added to a <literal>Set</literal>,
|
||||
we will only have one element in the <literal>Set</literal>). Unfortunately, we can't use that
|
||||
approach. Hibernate will only assign identifier values to objects that are persistent,
|
||||
a newly created instance will not have any identifier value! We recommend implementing
|
||||
<literal>equals()</literal> and <literal>hashCode()</literal> using
|
||||
<emphasis>Business key equality</emphasis>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Business key equality means that the <literal>equals()</literal>
|
||||
method compares only the properties that form the business key, a key that would
|
||||
identify our instance in the real world (a <emphasis>natural</emphasis> candidate key):
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[public class Cat {
|
||||
|
||||
...
|
||||
public boolean equals(Object other) {
|
||||
if (this == other) return true;
|
||||
if (!(other instanceof Cat)) return false;
|
||||
|
||||
final Cat cat = (Cat) other;
|
||||
|
||||
if (!getName().equals(cat.getName())) return false;
|
||||
if (!getBirthday().equals(cat.getBirthday())) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public int hashCode() {
|
||||
int result;
|
||||
result = getName().hashCode();
|
||||
result = 29 * result + getBirthday().hashCode();
|
||||
return result;
|
||||
}
|
||||
|
||||
}]]></programlisting>
|
||||
|
||||
<para>
|
||||
Keep in mind that our candidate key (in this case a composite of name and birthday)
|
||||
has to be only valid for a particular comparison operation (maybe even only in a
|
||||
single use case). We don't need the stability criteria we usually apply to a real
|
||||
primary key!
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="persistent-classes-lifecycle">
|
||||
<title>Lifecycle Callbacks</title>
|
||||
|
||||
<para>
|
||||
Optionally, a persistent class might implement the interface
|
||||
<literal>Lifecycle</literal> which provides some callbacks that allow
|
||||
the persistent object to perform necessary initialization/cleanup after
|
||||
save or load and before deletion or update.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<!-- TODO: add xref to interceptor -->
|
||||
The Hibernate <literal>Interceptor</literal> offers a less intrusive
|
||||
alternative, however.
|
||||
</para>
|
||||
|
||||
<programlistingco>
|
||||
<areaspec>
|
||||
<area id="lifecycle1" coords="2 70"/>
|
||||
<area id="lifecycle2" coords="3 70" />
|
||||
<area id="lifecycle3" coords="4 70"/>
|
||||
<area id="lifecycle4" coords="5 70" />
|
||||
</areaspec>
|
||||
<programlisting><![CDATA[public interface Lifecycle {
|
||||
public boolean onSave(Session s) throws CallbackException;
|
||||
public boolean onUpdate(Session s) throws CallbackException;
|
||||
public boolean onDelete(Session s) throws CallbackException;
|
||||
public void onLoad(Session s, Serializable id);
|
||||
}]]></programlisting>
|
||||
<calloutlist>
|
||||
<callout arearefs="lifecycle1">
|
||||
<para>
|
||||
<literal>onSave</literal> - called just before the object is saved or
|
||||
inserted
|
||||
</para>
|
||||
</callout>
|
||||
<callout arearefs="lifecycle2">
|
||||
<para>
|
||||
<literal>onUpdate</literal> - called just before an object is updated
|
||||
(when the object is passed to <literal>Session.update()</literal>)
|
||||
</para>
|
||||
</callout>
|
||||
<callout arearefs="lifecycle3">
|
||||
<para>
|
||||
<literal>onDelete</literal> - called just before an object is deleted
|
||||
</para>
|
||||
</callout>
|
||||
<callout arearefs="lifecycle4">
|
||||
<para>
|
||||
<literal>onLoad</literal> - called just after an object is loaded
|
||||
</para>
|
||||
</callout>
|
||||
</calloutlist>
|
||||
</programlistingco>
|
||||
|
||||
<para>
|
||||
<literal>onSave()</literal>, <literal>onDelete()</literal> and
|
||||
<literal>onUpdate()</literal> may be used to cascade saves and
|
||||
deletions of dependent objects. This is an alternative to declaring cascaded
|
||||
operations in the mapping file. <literal>onLoad()</literal> may
|
||||
be used to initialize transient properties of the object from its persistent
|
||||
state. It may not be used to load dependent objects since the
|
||||
<literal>Session</literal> interface may not be invoked from
|
||||
inside this method. A further intended usage of <literal>onLoad()</literal>,
|
||||
<literal>onSave()</literal> and <literal>onUpdate()</literal> is to store a
|
||||
reference to the current <literal>Session</literal> for later use.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Note that <literal>onUpdate()</literal> is not called every time the object's
|
||||
persistent state is updated. It is called only when a transient object is passed
|
||||
to <literal>Session.update()</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If <literal>onSave()</literal>, <literal>onUpdate()</literal> or
|
||||
<literal>onDelete()</literal> return <literal>true</literal>, the operation is
|
||||
silently vetoed. If a <literal>CallbackException</literal> is thrown, the operation
|
||||
is vetoed and the exception is passed back to the application.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Note that <literal>onSave()</literal> is called after an identifier is assigned to
|
||||
the object, except when native key generation is used.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="persistent-classes-validatable">
|
||||
<title>Validatable callback</title>
|
||||
|
||||
<para>
|
||||
If the persistent class needs to check invariants before its state is
|
||||
persisted, it may implement the following interface:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[public interface Validatable {
|
||||
public void validate() throws ValidationFailure;
|
||||
}]]></programlisting>
|
||||
|
||||
<para>
|
||||
The object should throw a <literal>ValidationFailure</literal> if an invariant
|
||||
was violated. An instance of <literal>Validatable</literal> should not change
|
||||
its state from inside <literal>validate()</literal>.
|
||||
</para>
|
||||
<para>
|
||||
Unlike the callback methods of the <literal>Lifecycle</literal> interface,
|
||||
<literal>validate()</literal> might be called at unpredictable times. The
|
||||
application should not rely upon calls to <literal>validate()</literal> for
|
||||
business functionality.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="persistent-classes-xdoclet">
|
||||
<title>Using XDOclet markup</title>
|
||||
|
||||
<para>
|
||||
In the next chapter we will show how Hibernate mappings may be expressed using
|
||||
a simple, readable XML format. Many Hibernate users prefer to embed mapping
|
||||
information directly in sourcecode using XDoclet <literal>@hibernate.tags</literal>.
|
||||
We will not cover this approach in this document, since strictly it is considered
|
||||
part of XDoclet. However, we include the following example of the <literal>Cat</literal>
|
||||
class with XDoclet mappings.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[package eg;
|
||||
import java.util.Set;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @hibernate.class
|
||||
* table="CATS"
|
||||
*/
|
||||
public class Cat {
|
||||
private Long id; // identifier
|
||||
private Date birthdate;
|
||||
private Cat mate;
|
||||
private Set kittens
|
||||
private Color color;
|
||||
private char sex;
|
||||
private float weight;
|
||||
|
||||
/**
|
||||
* @hibernate.id
|
||||
* generator-class="native"
|
||||
* column="CAT_ID"
|
||||
*/
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
private void setId(Long id) {
|
||||
this.id=id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hibernate.many-to-one
|
||||
* column="MATE_ID"
|
||||
*/
|
||||
public Cat getMate() {
|
||||
return mate;
|
||||
}
|
||||
void setMate(Cat mate) {
|
||||
this.mate = mate;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hibernate.property
|
||||
* column="BIRTH_DATE"
|
||||
*/
|
||||
public Date getBirthdate() {
|
||||
return birthdate;
|
||||
}
|
||||
void setBirthdate(Date date) {
|
||||
birthdate = date;
|
||||
}
|
||||
/**
|
||||
* @hibernate.property
|
||||
* column="WEIGHT"
|
||||
*/
|
||||
public float getWeight() {
|
||||
return weight;
|
||||
}
|
||||
void setWeight(float weight) {
|
||||
this.weight = weight;
|
||||
}
|
||||
|
||||
/**
|
||||
* @hibernate.property
|
||||
* column="COLOR"
|
||||
* not-null="true"
|
||||
*/
|
||||
public Color getColor() {
|
||||
return color;
|
||||
}
|
||||
void setColor(Color color) {
|
||||
this.color = color;
|
||||
}
|
||||
/**
|
||||
* @hibernate.set
|
||||
* lazy="true"
|
||||
* order-by="BIRTH_DATE"
|
||||
* @hibernate.collection-key
|
||||
* column="PARENT_ID"
|
||||
* @hibernate.collection-one-to-many
|
||||
*/
|
||||
public Set getKittens() {
|
||||
return kittens;
|
||||
}
|
||||
void setKittens(Set kittens) {
|
||||
this.kittens = kittens;
|
||||
}
|
||||
// addKitten not needed by Hibernate
|
||||
public void addKitten(Cat kitten) {
|
||||
kittens.add(kitten);
|
||||
}
|
||||
|
||||
/**
|
||||
* @hibernate.property
|
||||
* column="SEX"
|
||||
* not-null="true"
|
||||
* update="false"
|
||||
*/
|
||||
public char getSex() {
|
||||
return sex;
|
||||
}
|
||||
void setSex(char sex) {
|
||||
this.sex=sex;
|
||||
}
|
||||
}]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
|
@ -0,0 +1,217 @@
|
|||
<chapter id="querycriteria">
|
||||
<title>Criteria Queries</title>
|
||||
|
||||
<para>
|
||||
Hibernate now features an intuitive, extensible criteria query API. For now, this API
|
||||
is less powerful and than the more mature HQL query facilities. In particular, criteria
|
||||
queries do not support projection or aggregation.
|
||||
</para>
|
||||
|
||||
<sect1 id="querycriteria-creating">
|
||||
<title>Creating a <literal>Criteria</literal> instance</title>
|
||||
|
||||
<para>
|
||||
The interface <literal>net.sf.hibernate.Criteria</literal> represents a query against
|
||||
a particular persistent class. The <literal>Session</literal> is a factory for
|
||||
<literal>Criteria</literal> instances.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Criteria crit = sess.createCriteria(Cat.class);
|
||||
crit.setMaxResults(50);
|
||||
List cats = crit.list();]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="querycriteria-narrowing">
|
||||
<title>Narrowing the result set</title>
|
||||
|
||||
<para>
|
||||
An individual query criterion is an instance of the interface
|
||||
<literal>net.sf.hibernate.expression.Criterion</literal>. The class
|
||||
<literal>net.sf.hibernate.expression.Expression</literal> defines
|
||||
factory methods for obtaining certain built-in
|
||||
<literal>Criterion</literal> types.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||
.add( Expression.like("name", "Fritz%") )
|
||||
.add( Expression.between("weight", minWeight, maxWeight) )
|
||||
.list();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Expressions may be grouped logically.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||
.add( Expression.like("name", "Fritz%") )
|
||||
.add( Expression.or(
|
||||
Expression.eq( "age", new Integer(0) ),
|
||||
Expression.isNull("age")
|
||||
) )
|
||||
.list();]]></programlisting>
|
||||
|
||||
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||
.add( Expression.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )
|
||||
.add( Expression.disjunction()
|
||||
.add( Expression.isNull("age") )
|
||||
.add( Expression.eq("age", new Integer(0) ) )
|
||||
.add( Expression.eq("age", new Integer(1) ) )
|
||||
.add( Expression.eq("age", new Integer(2) ) )
|
||||
) )
|
||||
.list();]]></programlisting>
|
||||
|
||||
<para>
|
||||
There are quite a range of built-in criterion types (<literal>Expression</literal>
|
||||
subclasses), but one that is especially useful lets you specify SQL directly.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||
.add( Expression.sql("lower({alias}.name) like lower(?)", "Fritz%", Hibernate.STRING) )
|
||||
.list();]]></programlisting>
|
||||
|
||||
<para>
|
||||
The <literal>{alias}</literal> placeholder with be replaced by the row alias
|
||||
of the queried entity.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="querycriteria-ordering">
|
||||
<title>Ordering the results</title>
|
||||
|
||||
<para>
|
||||
You may order the results using <literal>net.sf.hibernate.expression.Order</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||
.add( Expression.like("name", "F%")
|
||||
.addOrder( Order.asc("name") )
|
||||
.addOrder( Order.desc("age") )
|
||||
.setMaxResults(50)
|
||||
.list();]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="querycriteria-associations">
|
||||
<title>Associations</title>
|
||||
|
||||
<para>
|
||||
You may easily specify constraints upon related entities by navigating
|
||||
associations using <literal>createCriteria()</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||
.add( Expression.like("name", "F%")
|
||||
.createCriteria("kittens")
|
||||
.add( Expression.like("name", "F%")
|
||||
.list();]]></programlisting>
|
||||
|
||||
<para>
|
||||
note that the second <literal>createCriteria()</literal> returns a new
|
||||
instance of <literal>Criteria</literal>, which refers to the elements of
|
||||
the <literal>kittens</literal> collection.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The following, alternate form is useful in certain circumstances.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||
.createAlias("kittens", "kt")
|
||||
.createAlias("mate", "mt")
|
||||
.add( Expression.eqProperty("kt.name", "mt.name") )
|
||||
.list();]]></programlisting>
|
||||
|
||||
<para>
|
||||
(<literal>createAlias()</literal> does not create a new instance of
|
||||
<literal>Criteria</literal>.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Note that the kittens collections held by the <literal>Cat</literal> instances
|
||||
returned by the previous two queries are <emphasis>not</emphasis> pre-filtered
|
||||
by the criteria! If you wish to retrieve just the kittens that match the
|
||||
criteria, you must use <literal>returnMaps()</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||
.createCriteria("kittens", "kt")
|
||||
.add( Expression.eq("name", "F%") )
|
||||
.returnMaps()
|
||||
.list();
|
||||
Iterator iter = cats.iterator();
|
||||
while ( iter.hasNext() ) {
|
||||
Map map = (Map) iter.next();
|
||||
Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);
|
||||
Cat kitten = (Cat) map.get("kt");
|
||||
}]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="querycriteria-dynamicfetching">
|
||||
<title>Dynamic association fetching</title>
|
||||
|
||||
<para>
|
||||
You may specify association fetching semantics at runtime using
|
||||
<literal>setFetchMode()</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||
.add( Expression.like("name", "Fritz%") )
|
||||
.setFetchMode("mate", FetchMode.EAGER)
|
||||
.setFetchMode("kittens", FetchMode.EAGER)
|
||||
.list();]]></programlisting>
|
||||
|
||||
<para>
|
||||
This query will fetch both <literal>mate</literal> and <literal>kittens</literal>
|
||||
by outer join.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="querycriteria-examples">
|
||||
<title>Example queries</title>
|
||||
|
||||
<para>
|
||||
The class <literal>net.sf.hibernate.expression.Example</literal> allows
|
||||
you to construct a query criterion from a given instance.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Cat cat = new Cat();
|
||||
cat.setSex('F');
|
||||
cat.setColor(Color.BLACK);
|
||||
List results = session.createCriteria(Cat.class)
|
||||
.add( Example.create(cat) )
|
||||
.list();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Version properties, identifiers and associations are ignored. By default,
|
||||
null valued properties are excluded.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
You can adjust how the <literal>Example</literal> is applied.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Example example = Example.create(cat)
|
||||
.excludeZeroes() //exclude zero valued properties
|
||||
.excludeProperty("color") //exclude the property named "color"
|
||||
.ignoreCase() //perform case insensitive string comparisons
|
||||
.enableLike(); //use like for string comparisons
|
||||
List results = session.createCriteria(Cat.class)
|
||||
.add(example)
|
||||
.list();]]></programlisting>
|
||||
|
||||
<para>
|
||||
You can even use examples to place criteria upon associated objects.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[List results = session.createCriteria(Cat.class)
|
||||
.add( Example.create(cat) )
|
||||
.createCriteria("mate")
|
||||
.add( Example.create( cat.getMate() ) )
|
||||
.list();]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
|
@ -0,0 +1,960 @@
|
|||
<chapter id="queryhql">
|
||||
<title>HQL: The Hibernate Query Language</title>
|
||||
|
||||
<para>
|
||||
Hibernate is equiped with an extremely powerful query language that (quite intentionally)
|
||||
looks very much like SQL. But don't be fooled by the syntax; HQL is fully object-oriented,
|
||||
understanding notions like inheritence, polymorphism and association.
|
||||
</para>
|
||||
|
||||
<sect1 id="queryhql-casesensitivity">
|
||||
<title>Case Sensitivity</title>
|
||||
|
||||
<para>
|
||||
Queries are case-insensitive, except for names of Java classes and properties.
|
||||
So <literal>SeLeCT</literal> is the same as
|
||||
<literal>sELEct</literal> is the same as
|
||||
<literal>SELECT</literal> but
|
||||
<literal>net.sf.hibernate.eg.FOO</literal> is not
|
||||
<literal>net.sf.hibernate.eg.Foo</literal> and
|
||||
<literal>foo.barSet</literal> is not
|
||||
<literal>foo.BARSET</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
This manual uses lowercase HQL keywords. Some users find queries with uppercase keywords
|
||||
more readable, but we find this convention ugly when embedded in Java code.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-from">
|
||||
<title>The from clause</title>
|
||||
|
||||
<para>
|
||||
The simplest possible Hibernate query is of the form:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat]]></programlisting>
|
||||
|
||||
<para>
|
||||
which simply returns all instances of the class <literal>eg.Cat</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Most of the time, you will need to assign an <emphasis>alias</emphasis>, since
|
||||
you will want to refer to the <literal>Cat</literal> in other parts of the
|
||||
query.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat as cat]]></programlisting>
|
||||
|
||||
<para>
|
||||
This query assigns the alias <literal>cat</literal> to <literal>Cat</literal>
|
||||
instances, so we could use that alias later in the query. The <literal>as</literal>
|
||||
keyword is optional; we could also write:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat cat]]></programlisting>
|
||||
|
||||
<para>
|
||||
Multiple classes may appear, resulting in a cartesian product or "cross" join.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from Formula, Parameter]]></programlisting>
|
||||
<programlisting><![CDATA[from Formula as form, Parameter as param]]></programlisting>
|
||||
|
||||
<para>
|
||||
It is considered good practice to name query aliases using an initial lowercase,
|
||||
consistent with Java naming standards for local variables
|
||||
(eg. <literal>domesticCat</literal>).
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-joins">
|
||||
<title>Associations and joins</title>
|
||||
|
||||
<para>
|
||||
We may also assign aliases to associated entities, or even to elements of a collection of
|
||||
values, using a <literal>join</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat as cat
|
||||
inner join cat.mate as mate
|
||||
left outer join cat.kittens as kitten
|
||||
|
||||
from eg.Cat as cat left join cat.mate.kittens as kittens
|
||||
|
||||
from Formula form full join form.parameter param]]></programlisting>
|
||||
|
||||
<para>
|
||||
The supported join types are borrowed from ANSI SQL
|
||||
</para>
|
||||
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>inner join</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>left outer join</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>right outer join</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>full join</literal> (not usually useful)
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
The <literal>inner join</literal>, <literal>left outer join</literal> and
|
||||
<literal>right outer join</literal> constructs may be abbreviated.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat as cat
|
||||
join cat.mate as mate
|
||||
left join cat.kittens as kitten]]></programlisting>
|
||||
|
||||
<para>
|
||||
In addition, a "fetch" join allows associations or collections of values to be
|
||||
initialized along with their parent objects, using a single select. This is particularly
|
||||
useful in the case of a collection. It effectively overrides the outer join and
|
||||
lazy declarations of the mapping file for associations and collections.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat as cat
|
||||
inner join fetch cat.mate
|
||||
left join fetch cat.kittens]]></programlisting>
|
||||
|
||||
<para>
|
||||
A fetch join does not usually need to assign an alias, because the associated objects
|
||||
should not be used in the <literal>where</literal> clause (or any other clause). Also,
|
||||
the associated objects are not returned directly in the query results. Instead, they may
|
||||
be accessed via the parent object.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Note that, in the current implementation, only one collection role may be fetched
|
||||
in a query (everything else would be non-performant). Note also that the
|
||||
<literal>fetch</literal> construct may not be used in queries called using
|
||||
<literal>scroll()</literal> or <literal>iterate()</literal>. Finally, note that
|
||||
<literal>full join fetch</literal> and <literal>right join fetch</literal> are not meaningful.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-select">
|
||||
<title>The select clause</title>
|
||||
|
||||
<para>
|
||||
The <literal>select</literal> clause picks which objects and properties to return in
|
||||
the query result set. Consider:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select mate
|
||||
from eg.Cat as cat
|
||||
inner join cat.mate as mate]]></programlisting>
|
||||
|
||||
<para>
|
||||
The query will select <literal>mate</literal>s of other <literal>Cat</literal>s.
|
||||
Actually, you may express this query more compactly as:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select cat.mate from eg.Cat cat]]></programlisting>
|
||||
|
||||
<para>
|
||||
You may even select collection elements, using the special <literal>elements</literal>
|
||||
function. The following query returns all kittens of any cat.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select elements(cat.kittens) from eg.Cat cat]]></programlisting>
|
||||
|
||||
<para>
|
||||
Queries may return properties of any value type including properties of component type:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select cat.name from eg.DomesticCat cat
|
||||
where cat.name like 'fri%'
|
||||
|
||||
select cust.name.firstName from Customer as cust]]></programlisting>
|
||||
|
||||
<para>
|
||||
Queries may return multiple objects and/or properties as an array of type
|
||||
<literal>Object[]</literal>
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select mother, offspr, mate.name
|
||||
from eg.DomesticCat as mother
|
||||
inner join mother.mate as mate
|
||||
left outer join mother.kittens as offspr]]></programlisting>
|
||||
|
||||
<para>
|
||||
or as an actual typesafe Java object
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select new Family(mother, mate, offspr)
|
||||
from eg.DomesticCat as mother
|
||||
join mother.mate as mate
|
||||
left join mother.kittens as offspr]]></programlisting>
|
||||
|
||||
<para>
|
||||
assuming that the class <literal>Family</literal> has an appropriate constructor.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-aggregation">
|
||||
<title>Aggregate functions</title>
|
||||
|
||||
<para>
|
||||
HQL queries may even return the results of aggregate functions on properties:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)
|
||||
from eg.Cat cat]]></programlisting>
|
||||
|
||||
<para>
|
||||
Collections may also appear inside aggregate functions in the <literal>select</literal>
|
||||
clause.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select cat, count( elements(cat.kittens) )
|
||||
from eg.Cat cat group by cat]]></programlisting>
|
||||
|
||||
<para>
|
||||
The supported aggregate functions are
|
||||
</para>
|
||||
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>avg(...), sum(...), min(...), max(...)</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>count(*)</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>count(...), count(distinct ...), count(all...)</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
The <literal>distinct</literal> and <literal>all</literal> keywords may be used and have
|
||||
the same semantics as in SQL.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select distinct cat.name from eg.Cat cat
|
||||
|
||||
select count(distinct cat.name), count(cat) from eg.Cat cat]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-polymorphism">
|
||||
<title>Polymorphic queries</title>
|
||||
|
||||
<para>
|
||||
A query like:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat as cat]]></programlisting>
|
||||
|
||||
<para>
|
||||
returns instances not only of <literal>Cat</literal>, but also of subclasses like
|
||||
<literal>DomesticCat</literal>. Hibernate queries may name <emphasis>any</emphasis> Java
|
||||
class or interface in the <literal>from</literal> clause. The query will return instances
|
||||
of all persistent classes that extend that class or implement the interface. The following
|
||||
query would return all persistent objects:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from java.lang.Object o]]></programlisting>
|
||||
|
||||
<para>
|
||||
The interface <literal>Named</literal> might be implemented by various persistent
|
||||
classes:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Named n, eg.Named m where n.name = m.name]]></programlisting>
|
||||
|
||||
<para>
|
||||
Note that these last two queries will require more than one SQL <literal>SELECT</literal>. This
|
||||
means that the <literal>order by</literal> clause does not correctly order the whole result set.
|
||||
(It also means you can't call these queries using <literal>Query.scroll()</literal>.)
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-where">
|
||||
<title>The where clause</title>
|
||||
|
||||
<para>
|
||||
The <literal>where</literal> clause allows you to narrow the list of instances returned.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat as cat where cat.name='Fritz']]></programlisting>
|
||||
|
||||
<para>
|
||||
returns instances of <literal>Cat</literal> named 'Fritz'.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select foo
|
||||
from eg.Foo foo, eg.Bar bar
|
||||
where foo.startDate = bar.date]]></programlisting>
|
||||
|
||||
<para>
|
||||
will return all instances of <literal>Foo</literal> for which
|
||||
there exists an instance of <literal>bar</literal> with a
|
||||
<literal>date</literal> property equal to the
|
||||
<literal>startDate</literal> property of the
|
||||
<literal>Foo</literal>. Compound path expressions make the
|
||||
<literal>where</literal> clause extremely powerful. Consider:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat cat where cat.mate.name is not null]]></programlisting>
|
||||
|
||||
<para>
|
||||
This query translates to an SQL query with a table (inner) join. If you were to write
|
||||
something like
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Foo foo
|
||||
where foo.bar.baz.customer.address.city is not null]]></programlisting>
|
||||
|
||||
<para>
|
||||
you would end up with a query that would require four table joins in SQL.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <literal>=</literal> operator may be used to compare not only properties, but also
|
||||
instances:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat cat, eg.Cat rival where cat.mate = rival.mate
|
||||
|
||||
select cat, mate
|
||||
from eg.Cat cat, eg.Cat mate
|
||||
where cat.mate = mate]]></programlisting>
|
||||
|
||||
<para>
|
||||
The special property (lowercase) <literal>id</literal> may be used to reference the
|
||||
unique identifier of an object. (You may also use its property name.)
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat as cat where cat.id = 123
|
||||
|
||||
from eg.Cat as cat where cat.mate.id = 69]]></programlisting>
|
||||
|
||||
<para>
|
||||
The second query is efficient. No table join is required!
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Properties of composite identifiers may also be used. Suppose <literal>Person</literal>
|
||||
has a composite identifier consisting of <literal>country</literal> and
|
||||
<literal>medicareNumber</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from bank.Person person
|
||||
where person.id.country = 'AU'
|
||||
and person.id.medicareNumber = 123456
|
||||
|
||||
from bank.Account account
|
||||
where account.owner.id.country = 'AU'
|
||||
and account.owner.id.medicareNumber = 123456]]></programlisting>
|
||||
|
||||
<para>
|
||||
Once again, the second query requires no table join.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Likewise, the special property <literal>class</literal> accesses the discriminator value
|
||||
of an instance in the case of polymorphic persistence. A Java class name embedded in the
|
||||
where clause will be translated to its discriminator value.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat cat where cat.class = eg.DomesticCat]]></programlisting>
|
||||
|
||||
<para>
|
||||
You may also specify properties of components or composite user types (and of components
|
||||
of components, etc). Never try to use a path-expression that ends in a property of component
|
||||
type (as opposed to a property of a component). For example, if <literal>store.owner</literal>
|
||||
is an entity with a component <literal>address</literal>
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[store.owner.address.city // okay
|
||||
store.owner.address // error!]]></programlisting>
|
||||
|
||||
<para>
|
||||
An "any" type has the special properties <literal>id</literal> and <literal>class</literal>,
|
||||
allowing us to express a join in the following way (where <literal>AuditLog.item</literal>
|
||||
is a property mapped with <literal><any></literal>).
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.AuditLog log, eg.Payment payment
|
||||
where log.item.class = 'eg.Payment' and log.item.id = payment.id]]></programlisting>
|
||||
|
||||
<para>
|
||||
Notice that <literal>log.item.class</literal> and <literal>payment.class</literal>
|
||||
would refer to the values of completely different database columns in the above query.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-expressions">
|
||||
<title>Expressions</title>
|
||||
|
||||
<para>
|
||||
Expressions allowed in the <literal>where</literal> clause include
|
||||
most of the kind of things you could write in SQL:
|
||||
</para>
|
||||
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
mathematical operators <literal>+, -, *, /</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
binary comparison operators <literal>=, >=, <=, <>, !=, like</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
logical operations <literal>and, or, not</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
string concatenation ||
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
SQL scalar functions like <literal>upper()</literal> and
|
||||
<literal>lower()</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Parentheses <literal>( )</literal> indicate grouping
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>in</literal>,
|
||||
<literal>between</literal>,
|
||||
<literal>is null</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
JDBC IN parameters <literal>?</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
named parameters <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
SQL literals <literal>'foo'</literal>, <literal>69</literal>, <literal>'1970-01-01 10:00:01.0'</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Java <literal>public static final</literal> constants <literal>eg.Color.TABBY</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
<literal>in</literal> and <literal>between</literal> may be used as follows:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.DomesticCat cat where cat.name between 'A' and 'B'
|
||||
|
||||
from eg.DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]></programlisting>
|
||||
|
||||
<para>
|
||||
and the negated forms may be written
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.DomesticCat cat where cat.name not between 'A' and 'B'
|
||||
|
||||
from eg.DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]></programlisting>
|
||||
|
||||
<para>
|
||||
Likewise, <literal>is null</literal> and <literal>is not null</literal> may be used to test
|
||||
for null values.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Booleans may be easily used in expressions by declaring HQL query substitutions in Hibernate
|
||||
configuration:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<property name="hibernate.query.substitutions">true 1, false 0</property>]]></programlisting>
|
||||
|
||||
<para>
|
||||
This will replace the keywords <literal>true</literal> and <literal>false</literal> with the
|
||||
literals <literal>1</literal> and <literal>0</literal> in the translated SQL from this HQL:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat cat where cat.alive = true]]></programlisting>
|
||||
|
||||
<para>
|
||||
You may test the size of a collection with the special property <literal>size</literal>, or
|
||||
the special <literal>size()</literal> function.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat cat where cat.kittens.size > 0
|
||||
|
||||
from eg.Cat cat where size(cat.kittens) > 0]]></programlisting>
|
||||
|
||||
<para>
|
||||
For indexed collections, you may refer to the minimum and maximum indices using
|
||||
<literal>minIndex</literal> and <literal>maxIndex</literal>. Similarly, you may refer to the
|
||||
minimum and maximum elements of a collection of basic type using <literal>minElement</literal>
|
||||
and <literal>maxElement</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from Calendar cal where cal.holidays.maxElement > current date]]></programlisting>
|
||||
|
||||
<para>
|
||||
There are also functional forms (which, unlike the constructs above, are not case sensitive):
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from Order order where maxindex(order.items) > 100
|
||||
|
||||
from Order order where minelement(order.items) > 10000]]></programlisting>
|
||||
|
||||
<para>
|
||||
The SQL functions <literal>any, some, all, exists, in</literal> are supported when passed the element
|
||||
or index set of a collection (<literal>elements</literal> and <literal>indices</literal> functions)
|
||||
or the result of a subquery (see below).
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select mother from eg.Cat as mother, eg.Cat as kit
|
||||
where kit in elements(foo.kittens)
|
||||
|
||||
select p from eg.NameList list, eg.Person p
|
||||
where p.name = some elements(list.names)
|
||||
|
||||
from eg.Cat cat where exists elements(cat.kittens)
|
||||
|
||||
from eg.Player p where 3 > all elements(p.scores)
|
||||
|
||||
from eg.Show show where 'fizard' in indices(show.acts)]]></programlisting>
|
||||
|
||||
<para>
|
||||
Note that these constructs - <literal>size</literal>, <literal>elements</literal>,
|
||||
<literal>indices</literal>, <literal>minIndex</literal>, <literal>maxIndex</literal>,
|
||||
<literal>minElement</literal>, <literal>maxElement</literal> - have certain usage
|
||||
restrictions:
|
||||
</para>
|
||||
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
in a <literal>where</literal> clause: only for databases with subselects
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
in a <literal>select</literal> clause: only <literal>elements</literal> and
|
||||
<literal>indices</literal> make sense
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
Elements of indexed collections (arrays, lists, maps) may be referred to by
|
||||
index (in a where clause only):
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from Order order where order.items[0].id = 1234
|
||||
|
||||
select person from Person person, Calendar calendar
|
||||
where calendar.holidays['national day'] = person.birthDay
|
||||
and person.nationality.calendar = calendar
|
||||
|
||||
select item from Item item, Order order
|
||||
where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11
|
||||
|
||||
select item from Item item, Order order
|
||||
where order.items[ maxindex(order.items) ] = item and order.id = 11]]></programlisting>
|
||||
|
||||
<para>
|
||||
The expression inside <literal>[]</literal> may even be an arithmetic expression.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select item from Item item, Order order
|
||||
where order.items[ size(order.items) - 1 ] = item]]></programlisting>
|
||||
|
||||
<para>
|
||||
HQL also provides the built-in <literal>index()</literal> function, for elements of
|
||||
a one-to-many association or collection of values.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select item, index(item) from Order order
|
||||
join order.items item
|
||||
where index(item) < 5]]></programlisting>
|
||||
|
||||
<para>
|
||||
Scalar SQL functions supported by the underlying database may be used
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.DomesticCat cat where upper(cat.name) like 'FRI%']]></programlisting>
|
||||
|
||||
<para>
|
||||
If you are not yet convinced by all this, think how much longer and less readable the
|
||||
following query would be in SQL:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select cust
|
||||
from Product prod,
|
||||
Store store
|
||||
inner join store.customers cust
|
||||
where prod.name = 'widget'
|
||||
and store.location.name in ( 'Melbourne', 'Sydney' )
|
||||
and prod = all elements(cust.currentOrder.lineItems)]]></programlisting>
|
||||
|
||||
<para>
|
||||
<emphasis>Hint:</emphasis> something like
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order
|
||||
FROM customers cust,
|
||||
stores store,
|
||||
locations loc,
|
||||
store_customers sc,
|
||||
product prod
|
||||
WHERE prod.name = 'widget'
|
||||
AND store.loc_id = loc.id
|
||||
AND loc.name IN ( 'Melbourne', 'Sydney' )
|
||||
AND sc.store_id = store.id
|
||||
AND sc.cust_id = cust.id
|
||||
AND prod.id = ALL(
|
||||
SELECT item.prod_id
|
||||
FROM line_items item, orders o
|
||||
WHERE item.order_id = o.id
|
||||
AND cust.current_order = o.id
|
||||
)]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-ordering">
|
||||
<title>The order by clause</title>
|
||||
|
||||
<para>
|
||||
The list returned by a query may be ordered by any property of a returned class or components:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.DomesticCat cat
|
||||
order by cat.name asc, cat.weight desc, cat.birthdate]]></programlisting>
|
||||
|
||||
<para>
|
||||
The optional <literal>asc</literal> or <literal>desc</literal> indicate ascending or descending order
|
||||
respectively.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-grouping">
|
||||
<title>The group by clause</title>
|
||||
|
||||
<para>
|
||||
A query that returns aggregate values may be grouped by any property of a returned class or components:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select cat.color, sum(cat.weight), count(cat)
|
||||
from eg.Cat cat
|
||||
group by cat.color
|
||||
|
||||
select foo.id, avg( elements(foo.names) ), max( indices(foo.names) )
|
||||
from eg.Foo foo
|
||||
group by foo.id]]></programlisting>
|
||||
|
||||
<para>
|
||||
Note: You may use the <literal>elements</literal> and <literal>indices</literal> constructs
|
||||
inside a select clause, even on databases with no subselects.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A <literal>having</literal> clause is also allowed.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select cat.color, sum(cat.weight), count(cat)
|
||||
from eg.Cat cat
|
||||
group by cat.color
|
||||
having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]></programlisting>
|
||||
|
||||
<para>
|
||||
SQL functions and aggregate functions are allowed in the <literal>having</literal>
|
||||
and <literal>order by</literal> clauses, if supported by the underlying database (ie.
|
||||
not in MySQL).
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select cat
|
||||
from eg.Cat cat
|
||||
join cat.kittens kitten
|
||||
group by cat
|
||||
having avg(kitten.weight) > 100
|
||||
order by count(kitten) asc, sum(kitten.weight) desc]]></programlisting>
|
||||
|
||||
<para>
|
||||
Note that neither the <literal>group by</literal> clause nor the
|
||||
<literal>order by</literal> clause may contain arithmetic expressions.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-subqueries">
|
||||
<title>Subqueries</title>
|
||||
|
||||
<para>
|
||||
For databases that support subselects, Hibernate supports subqueries within queries. A subquery must
|
||||
be surrounded by parentheses (often by an SQL aggregate function call). Even correlated subqueries
|
||||
(subqueries that refer to an alias in the outer query) are allowed.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from eg.Cat as fatcat
|
||||
where fatcat.weight > (
|
||||
select avg(cat.weight) from eg.DomesticCat cat
|
||||
)
|
||||
|
||||
from eg.DomesticCat as cat
|
||||
where cat.name = some (
|
||||
select name.nickName from eg.Name as name
|
||||
)
|
||||
|
||||
from eg.Cat as cat
|
||||
where not exists (
|
||||
from eg.Cat as mate where mate.mate = cat
|
||||
)
|
||||
|
||||
from eg.DomesticCat as cat
|
||||
where cat.name not in (
|
||||
select name.nickName from eg.Name as name
|
||||
)]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-examples">
|
||||
<title>HQL examples</title>
|
||||
|
||||
<para>
|
||||
Hibernate queries can be quite powerful and complex. In fact, the power of the query language
|
||||
is one of Hibernate's main selling points. Here are some example queries very similar to queries
|
||||
that I used on a recent project. Note that most queries you will write are much simpler than these!
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The following query returns the order id, number of items and total value of the order for all
|
||||
unpaid orders for a particular customer and given minimum total value, ordering the results by
|
||||
total value. In determining the prices, it uses the current catalog. The resulting SQL query,
|
||||
against the <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>,
|
||||
<literal>CATALOG</literal> and <literal>PRICE</literal> tables has four inner joins and an
|
||||
(uncorrelated) subselect.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select order.id, sum(price.amount), count(item)
|
||||
from Order as order
|
||||
join order.lineItems as item
|
||||
join item.product as product,
|
||||
Catalog as catalog
|
||||
join catalog.prices as price
|
||||
where order.paid = false
|
||||
and order.customer = :customer
|
||||
and price.product = product
|
||||
and catalog.effectiveDate < sysdate
|
||||
and catalog.effectiveDate >= all (
|
||||
select cat.effectiveDate
|
||||
from Catalog as cat
|
||||
where cat.effectiveDate < sysdate
|
||||
)
|
||||
group by order
|
||||
having sum(price.amount) > :minAmount
|
||||
order by sum(price.amount) desc]]></programlisting>
|
||||
|
||||
<para>
|
||||
What a monster! Actually, in real life, I'm not very keen on subqueries, so my query was
|
||||
really more like this:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select order.id, sum(price.amount), count(item)
|
||||
from Order as order
|
||||
join order.lineItems as item
|
||||
join item.product as product,
|
||||
Catalog as catalog
|
||||
join catalog.prices as price
|
||||
where order.paid = false
|
||||
and order.customer = :customer
|
||||
and price.product = product
|
||||
and catalog = :currentCatalog
|
||||
group by order
|
||||
having sum(price.amount) > :minAmount
|
||||
order by sum(price.amount) desc]]></programlisting>
|
||||
|
||||
<para>
|
||||
The next query counts the number of payments in each status, excluding all payments in the
|
||||
<literal>AWAITING_APPROVAL</literal> status where the most recent status change was made by the
|
||||
current user. It translates to an SQL query with two inner joins and a correlated subselect
|
||||
against the <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> and
|
||||
<literal>PAYMENT_STATUS_CHANGE</literal> tables.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select count(payment), status.name
|
||||
from Payment as payment
|
||||
join payment.currentStatus as status
|
||||
join payment.statusChanges as statusChange
|
||||
where payment.status.name <> PaymentStatus.AWAITING_APPROVAL
|
||||
or (
|
||||
statusChange.timeStamp = (
|
||||
select max(change.timeStamp)
|
||||
from PaymentStatusChange change
|
||||
where change.payment = payment
|
||||
)
|
||||
and statusChange.user <> :currentUser
|
||||
)
|
||||
group by status.name, status.sortOrder
|
||||
order by status.sortOrder]]></programlisting>
|
||||
|
||||
<para>
|
||||
If I would have mapped the <literal>statusChanges</literal> collection as a list, instead of a set,
|
||||
the query would have been much simpler to write.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select count(payment), status.name
|
||||
from Payment as payment
|
||||
join payment.currentStatus as status
|
||||
where payment.status.name <> PaymentStatus.AWAITING_APPROVAL
|
||||
or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser
|
||||
group by status.name, status.sortOrder
|
||||
order by status.sortOrder]]></programlisting>
|
||||
|
||||
<para>
|
||||
The next query uses the MS SQL Server <literal>isNull()</literal> function to return all
|
||||
the accounts and unpaid payments for the organization to which the current user belongs.
|
||||
It translates to an SQL query with three inner joins, an outer join and a subselect against
|
||||
the <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>,
|
||||
<literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> and
|
||||
<literal>ORG_USER</literal> tables.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select account, payment
|
||||
from Account as account
|
||||
left outer join account.payments as payment
|
||||
where :currentUser in elements(account.holder.users)
|
||||
and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)
|
||||
order by account.type.sortOrder, account.accountNumber, payment.dueDate]]></programlisting>
|
||||
|
||||
<para>
|
||||
For some databases, we would need to do away with the (correlated) subselect.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select account, payment
|
||||
from Account as account
|
||||
join account.holder.users as user
|
||||
left outer join account.payments as payment
|
||||
where :currentUser = user
|
||||
and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)
|
||||
order by account.type.sortOrder, account.accountNumber, payment.dueDate]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="queryhql-tipstricks">
|
||||
<title>Tips & Tricks</title>
|
||||
|
||||
<para>
|
||||
You can count the number of query results without actually returning them:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[( (Integer) session.iterate("select count(*) from ....").next() ).intValue()]]></programlisting>
|
||||
|
||||
<para>
|
||||
To order a result by the size of a collection, use the following query:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select usr.id, usr.name
|
||||
from User as usr
|
||||
left join usr.messages as msg
|
||||
group by usr.id, usr.name
|
||||
order by count(msg)]]></programlisting>
|
||||
|
||||
<para>
|
||||
If your database supports subselects, you can place a condition upon selection
|
||||
size in the where clause of your query:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[from User usr where size(usr.messages) >= 1]]></programlisting>
|
||||
|
||||
<para>
|
||||
If your database doesn't support subselects, use the following query:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select usr.id, usr.name
|
||||
from User usr.name
|
||||
join usr.messages msg
|
||||
group by usr.id, usr.name
|
||||
having count(msg) >= 1]]></programlisting>
|
||||
|
||||
<para>
|
||||
As this solution can't return a <literal>User</literal> with zero messages
|
||||
because of the inner join, the following form is also useful:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[select usr.id, usr.name
|
||||
from User as usr
|
||||
left join usr.messages as msg
|
||||
group by usr.id, usr.name
|
||||
having count(msg) = 0]]></programlisting>
|
||||
|
||||
<para>
|
||||
Properties of a JavaBean can be bound to named query parameters:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Query q = s.createQuery("from foo in class Foo where foo.name=:name and foo.size=:size");
|
||||
q.setProperties(fooBean); // fooBean has getName() and getSize()
|
||||
List foos = q.list();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Collections are pageable by using the <literal>Query</literal> interface with a filter:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Query q = s.createFilter( collection, "" ); // the trivial filter
|
||||
q.setMaxResults(PAGE_SIZE);
|
||||
q.setFirstResult(PAGE_SIZE * pageNumber);
|
||||
List page = q.list();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Collection elements may be ordered or grouped using a query filter:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Collection orderedCollection = s.filter( collection, "order by this.amount" );
|
||||
Collection counts = s.filter( collection, "select this.type, count(this) group by this.type" );]]></programlisting>
|
||||
|
||||
<para>
|
||||
You can find the size of a collection without initializing it:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[( (Integer) session.iterate("select count(*) from ....").next() ).intValue();]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
|
@ -0,0 +1,104 @@
|
|||
<chapter id="querysql">
|
||||
<title>Native SQL Queries</title>
|
||||
|
||||
<para>
|
||||
You may also express queries in the native SQL dialect of your database. This is useful if you
|
||||
want to utilize database specific features such as the CONNECT keyword in Oracle.
|
||||
This also allows for a cleaner migration path from a direct SQL/JDBC based application to
|
||||
Hibernate.
|
||||
</para>
|
||||
|
||||
<sect1 id="querysql-creating">
|
||||
<title>Creating a SQL based <literal>Query</literal></title>
|
||||
|
||||
<para>
|
||||
SQL queries are exposed through the same <literal>Query</literal> interface, just like ordinary
|
||||
HQL queries. The only difference is the use of <literal>Session.createSQLQuery()</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Query sqlQuery = sess.createSQLQuery("select {cat.*} from cats {cat}", "cat", Cat.class);
|
||||
sqlQuery.setMaxResults(50);
|
||||
List cats = sqlQuery.list();]]></programlisting>
|
||||
|
||||
<para>
|
||||
The three parameters provided to <literal>createSQLQuery()</literal> are:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
the SQL query string
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
a table alias name
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
the persistent class returned by the query
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
The alias name is used inside the sql string to refer to the properties of the mapped class
|
||||
(in this case <literal>Cat</literal>). You may retrieve multiple objects per row by supplying
|
||||
a <literal>String</literal> array of alias names and a <literal>Class</literal> array of
|
||||
corresponding classes.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="querysql-aliasreferences">
|
||||
<title>Alias and property references</title>
|
||||
|
||||
<para>
|
||||
The <literal>{cat.*}</literal> notation used above is a shorthand for "all properties". You
|
||||
may even list the properties explicity, but you must let Hibernate provide SQL column aliases
|
||||
for each property. The placeholders for these column aliases are the property name qualified by
|
||||
the table alias. In the following example, we retrieve <literal>Cat</literal>s from a different
|
||||
table (<literal>cat_log</literal>) to the one declared in the mapping metadata. Notice that we
|
||||
may even use the property aliases in the where clause.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[String sql = "select cat.originalId as {cat.id}, "
|
||||
+ " cat.mateid as {cat.mate}, cat.sex as {cat.sex}, "
|
||||
+ " cat.weight*10 as {cat.weight}, cat.name as {cat.name}"
|
||||
+ " from cat_log cat where {cat.mate} = :catId"
|
||||
List loggedCats = sess.createSQLQuery(sql, "cat", Cat.class)
|
||||
.setLong("catId", catId)
|
||||
.list();
|
||||
]]></programlisting>
|
||||
|
||||
<para>
|
||||
<emphasis>Note:</emphasis> if you list each property explicitly, you must include all
|
||||
properties of the class <emphasis>and its subclasses</emphasis>!
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="querysql-namedqueries">
|
||||
<title>Named SQL queries</title>
|
||||
|
||||
<para>
|
||||
Named SQL queries may be defined in the mapping document and called in exactly the same way
|
||||
as a named HQL query.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[List people = sess.getNamedQuery("mySqlQuery")
|
||||
.setMaxResults(50)
|
||||
.list();]]></programlisting>
|
||||
|
||||
<programlisting><![CDATA[<sql-query name="mySqlQuery">
|
||||
<return alias="person" class="eg.Person"/>
|
||||
SELECT {person}.NAME AS {person.name},
|
||||
{person}.AGE AS {person.age},
|
||||
{person}.SEX AS {person.sex}
|
||||
FROM PERSON {person} WHERE {person}.NAME LIKE 'Hiber%'
|
||||
</sql-query>]]></programlisting>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
|
@ -0,0 +1,613 @@
|
|||
<chapter id="quickstart">
|
||||
<title>Quickstart with Tomcat</title>
|
||||
|
||||
<sect1 id="quickstart-intro">
|
||||
<title>Getting started with Hibernate</title>
|
||||
|
||||
<para>
|
||||
This tutorial explains a setup of Hibernate 2.1 with the Apache Tomcat
|
||||
servlet container for a web-based application. Hibernate works
|
||||
well in a managed environment with all major J2EE application servers, or
|
||||
even in standalone Java applications. The database system used in this
|
||||
tutorial is PostgreSQL 7.3, support for other database is only a matter
|
||||
of changing the Hibernate SQL dialect configuration.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
First, we have to copy all required libraries to the Tomcat installation.
|
||||
We use a separate web context (<literal>webapps/quickstart</literal>) for
|
||||
this tutorial, so we've to consider both the global library search path
|
||||
(<literal>TOMCAT/common/lib</literal>) and the classloader at the context level in
|
||||
<literal>webapps/quickstart/WEB-INF/lib</literal> (for JAR files) and
|
||||
<literal>webapps/quickstart/WEB-INF/classes</literal>. We refer to both classloader
|
||||
levels as the global classpath and the context classpath.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Now, copy the libraries to the two classpaths:
|
||||
</para>
|
||||
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>
|
||||
Copy the JDBC driver for the database to the global classpath. This is
|
||||
required for the DBCP connection pool software which comes bundled with Tomcat.
|
||||
Hibernate uses JDBC connections to execute SQL on the database, so you
|
||||
either have to provide pooled JDBC connections or configure Hibernate to
|
||||
use one of the directly supported pools (C3P0, Proxool). For this tutorial,
|
||||
copy the <literal>pg73jdbc3.jar</literal> library (for PostgreSQL 7.3 and JDK 1.4)
|
||||
to the global classloaders path. If you'd like to use a different database, simply
|
||||
copy its appropriate JDBC driver.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Never copy anything else into the global classloader path in Tomcat, or you
|
||||
will get problems with various tools, including Log4j, commons-logging and
|
||||
others. Always us the context classpath for each web application, that is,
|
||||
copy libraries to <literal>WEB-INF/lib</literal> and your own classes and
|
||||
configuration/property files to <literal>WEB-INF/classes</literal>. Both
|
||||
directories are in the context level classpath by default.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Hibernate is packaged as a JAR library. The <literal>hibernate2.jar</literal>
|
||||
file should be copied in the context classpath together with other classes of
|
||||
the application. Hibernate requires some 3rd party libraries at runtime, these
|
||||
come bundled with the Hibernate distribution in the <literal>lib/</literal>
|
||||
directory; see <xref linkend="3rdpartylibs"/>. Copy the required 3rd party
|
||||
libraries to the context classpath.
|
||||
</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
|
||||
<table frame="topbot" id="3rdpartylibs">
|
||||
<title>
|
||||
Hibernate 3rd party libraries
|
||||
</title>
|
||||
<tgroup cols="2" rowsep="1" colsep="1">
|
||||
<colspec colname="c1" colwidth="1*"/>
|
||||
<colspec colname="c2" colwidth="2*"/>
|
||||
<thead>
|
||||
<row>
|
||||
<entry align="center">
|
||||
Library
|
||||
</entry>
|
||||
<entry align="center">
|
||||
Description
|
||||
</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>
|
||||
dom4j (required)
|
||||
</entry>
|
||||
<entry>
|
||||
Hibernate uses dom4j to parse XML configuration and XML mapping
|
||||
metadata files.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
CGLIB (required)
|
||||
</entry>
|
||||
<entry>
|
||||
Hibernate uses the code generation library to enhance classes
|
||||
at runtime (in combination with Java reflection).
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
Commons Collections, Commons Logging (required)
|
||||
</entry>
|
||||
<entry>
|
||||
Hibernate uses various utility libraries from the Apache Jakarta
|
||||
Commons project.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
ODMG4 (required)
|
||||
</entry>
|
||||
<entry>
|
||||
Hibernate provides an optional ODMG compliant persistence manager
|
||||
interface. It is required if you like to map collections, even
|
||||
if you don't intend to use the ODMG API. We don't map collections
|
||||
in this tutorial, but it's a good idea to copy the JAR anyway.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
EHCache (required)
|
||||
</entry>
|
||||
<entry>
|
||||
Hibernate can use various cache providers for the second-level
|
||||
cache. EHCache is the default cache provider if not changed in
|
||||
the configuration.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
Log4j (optional)
|
||||
</entry>
|
||||
<entry>
|
||||
Hibernate uses the Commons Logging API, which in turn can use
|
||||
Log4j as the underlying logging mechanism. If the Log4j library is
|
||||
available in the context library directory, Commons Logging will use
|
||||
Log4j and the <literal>log4j.properties</literal> configuration in the
|
||||
context classpath. An example properties file for Log4j is bundled
|
||||
with the Hibernate distribution. So, copy log4j.jar and the configuration
|
||||
file (from <literal>src/</literal>) to your context classpath if
|
||||
you want to see whats going on behind the scenes.
|
||||
</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>
|
||||
Required or not?
|
||||
</entry>
|
||||
<entry>
|
||||
Have a look at the file <literal>lib/README.txt</literal> in the
|
||||
Hibernate distribution. This is an up-to-date list of 3rd party
|
||||
libraries distributed with Hibernate. You will find all required
|
||||
and optional libraries listed there.
|
||||
</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<para>
|
||||
We now set up the database connection pooling and sharing in both Tomcat and
|
||||
Hibernate. This means Tomcat will provide pooled JDBC connections (using its
|
||||
builtin DBCP pooling feature), Hibernate requests theses connections through
|
||||
JNDI. Tomcat binds the connection pool to JNDI, we add a resource declaration
|
||||
to Tomcats main configuration file, <literal>TOMCAT/conf/server.xml</literal>:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<Context path="/quickstart" docBase="quickstart">
|
||||
<Resource name="jdbc/quickstart" scope="Shareable" type="javax.sql.DataSource"/>
|
||||
<ResourceParams name="jdbc/quickstart">
|
||||
<parameter>
|
||||
<name>factory</name>
|
||||
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
|
||||
</parameter>
|
||||
|
||||
<!-- DBCP database connection settings -->
|
||||
<parameter>
|
||||
<name>url</name>
|
||||
<value>jdbc:postgresql://localhost/quickstart</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<name>driverClassName</name><value>org.postgresql.Driver</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<name>username</name>
|
||||
<value>quickstart</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<name>password</name>
|
||||
<value>secret</value>
|
||||
</parameter>
|
||||
|
||||
<!-- DBCP connection pooling options -->
|
||||
<parameter>
|
||||
<name>maxWait</name>
|
||||
<value>3000</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<name>maxIdle</name>
|
||||
<value>100</value>
|
||||
</parameter>
|
||||
<parameter>
|
||||
<name>maxActive</name>
|
||||
<value>10</value>
|
||||
</parameter>
|
||||
</ResourceParams>
|
||||
</Context>]]></programlisting>
|
||||
|
||||
<para>
|
||||
The context we configure in this example is named <literal>quickstart</literal>,
|
||||
its base is the <literal>TOMCAT/webapp/quickstart</literal> directory. To access
|
||||
any servlets, call the path <literal>http://localhost:8080/quickstart</literal>
|
||||
in your browser (of course, adding the name of the servlet as mapped in your
|
||||
<literal>web.xml</literal>). You may also go ahead and create a simple servlet
|
||||
now that has an empty <literal>process()</literal>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Tomcat uses the DBCP connection pool with this configuration and provides pooled
|
||||
JDBC <literal>Connection</literal>s through JNDI at
|
||||
<literal>java:comp/env/jdbc/quickstart</literal>. If you have trouble getting the
|
||||
connection pool running, refer to the Tomcat documentation. If you get JDBC driver
|
||||
exception messages, try to setup JDBC connection pool without Hibernate first.
|
||||
Tomcat & JDBC tutorials are available on the Web.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The next step is to configure Hibernate, using the connections from the JNDI bound pool.
|
||||
We use Hibernates XML based configuration. The basic approach, using properties, is
|
||||
equivalent in features, but doesn't offer any advantages. We use the XML configuration
|
||||
because it is usually more convenient. The XML configuration file is placed in the
|
||||
context classpath (<literal>WEB-INF/classes</literal>), as
|
||||
<literal>hibernate.cfg.xml</literal>:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<?xml version='1.0' encoding='utf-8'?>
|
||||
<!DOCTYPE hibernate-configuration
|
||||
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
|
||||
|
||||
<hibernate-configuration>
|
||||
|
||||
<session-factory>
|
||||
|
||||
<property name="connection.datasource">java:comp/env/jdbc/quickstart</property>
|
||||
<property name="show_sql">false</property>
|
||||
<property name="dialect">net.sf.hibernate.dialect.PostgreSQLDialect</property>
|
||||
|
||||
<!-- Mapping files -->
|
||||
<mapping resource="Cat.hbm.xml"/>
|
||||
|
||||
</session-factory>
|
||||
|
||||
</hibernate-configuration>]]></programlisting>
|
||||
|
||||
<para>
|
||||
We turn logging of SQL commands off and tell Hibernate what database SQL
|
||||
dialect is used and where to get the JDBC connections (by declaring the JNDI
|
||||
address of the Tomcat bound datasource pool). The dialect is a required setting,
|
||||
databases differ in their interpretation of the SQL "standard". Hibernate will take
|
||||
care of the differences and comes bundled with dialects for all major
|
||||
commercial and open source databases.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A <literal>SessionFactory</literal> is Hibernate's concept of a single
|
||||
datastore, multiple databases can be used by creating multiple XML
|
||||
configuration files and creating multiple <literal>Configuration</literal>
|
||||
and <literal>SessionFactory</literal> objects in your application.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The last element of the <literal>hibernate.cfg.xml</literal> declares
|
||||
<literal>Cat.hbm.xml</literal> as the name of a Hibernate XML mapping
|
||||
file for the persistent class <literal>Cat</literal>. This file contains
|
||||
the metadata for the mapping of the POJO class to a datbase table (or multiple
|
||||
tables). We'll come back to that file soon. Let's write the POJO class first
|
||||
and then declare the mapping metadata for it.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="quickstart-persistentclass">
|
||||
<title>First persistent class</title>
|
||||
|
||||
<para>
|
||||
Hibernate works best with the Plain Old Java Objects (POJOs, sometimes
|
||||
called Plain Ordinary Java Objects) programming model for persistent classes.
|
||||
A POJO is much like a JavaBean, with properties of the class accessible via getter
|
||||
and setter methods, shielding the internal representation from the publicly
|
||||
visible interface:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[package net.sf.hibernate.examples.quickstart;
|
||||
|
||||
public class Cat {
|
||||
|
||||
private String id;
|
||||
private String name;
|
||||
private char sex;
|
||||
private float weight;
|
||||
|
||||
public Cat() {
|
||||
}
|
||||
|
||||
public String getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
private void setId(String id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public char getSex() {
|
||||
return sex;
|
||||
}
|
||||
|
||||
public void setSex(char sex) {
|
||||
this.sex = sex;
|
||||
}
|
||||
|
||||
public float getWeight() {
|
||||
return weight;
|
||||
}
|
||||
|
||||
public void setWeight(float weight) {
|
||||
this.weight = weight;
|
||||
}
|
||||
|
||||
}]]></programlisting>
|
||||
|
||||
<para>
|
||||
Hibernate is not restricted in its usage of property types, all Java JDK
|
||||
types and primitives (like <literal>String</literal>, <literal>char</literal>
|
||||
and <literal>Date</literal>) can be mapped, including classes from the Java
|
||||
collections framework. You can map them as values, collections of values, or
|
||||
associations to other entities. The <literal>id</literal> is a special property
|
||||
that represents the database identifer (primary key) of that class, it is
|
||||
highly recommended for entities like a <literal>Cat</literal>. Hibernate can
|
||||
use identifiers only internally, but we would lose some of the flexibility in our
|
||||
application architecture.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
No special interface has to be implemented for persistent classes nor do we have
|
||||
to subclass from a special root persistent class. Hibernate also doesn't use any
|
||||
build time processing, such as byte-code manipulation, it relies solely on
|
||||
Java reflection and runtime class enhancement (through CGLIB). So, without any
|
||||
dependency in the POJO class on Hibernate, we can map it to a database table.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="quickstart-mapping">
|
||||
<title>Mapping the cat</title>
|
||||
|
||||
<para>
|
||||
The <literal>Cat.hbm.xml</literal> mapping file contains the metadata
|
||||
required for the object/relational mapping. The metadata includes declaration
|
||||
of persistent classes and the mapping of properties (to columns and
|
||||
foreign key relationships to other entities) to database tables.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[<?xml version="1.0"?>
|
||||
<!DOCTYPE hibernate-mapping
|
||||
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
|
||||
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
|
||||
|
||||
<hibernate-mapping>
|
||||
|
||||
<class name="net.sf.hibernate.examples.quickstart.Cat" table="CAT">
|
||||
|
||||
<!-- A 32 hex character is our surrogate key. It's automatically
|
||||
generated by Hibernate with the UUID pattern. -->
|
||||
<id name="id" type="string" unsaved-value="null" >
|
||||
<column name="CAT_ID" sql-type="char(32)" not-null="true"/>
|
||||
<generator class="uuid.hex"/>
|
||||
</id>
|
||||
|
||||
<!-- A cat has to have a name, but it shouldn' be too long. -->
|
||||
<property name="name">
|
||||
<column name="NAME" length="16" not-null="true"/>
|
||||
</property>
|
||||
|
||||
<property name="sex"/>
|
||||
|
||||
<property name="weight"/>
|
||||
|
||||
</class>
|
||||
|
||||
</hibernate-mapping>]]></programlisting>
|
||||
|
||||
<para>
|
||||
Every persistent class should have an identifer attribute (actually, only
|
||||
classes representing entities, not dependent value objects, which
|
||||
are mapped as components of an entity). This property is used to distinguish
|
||||
persistent objects: Two cats are equal if
|
||||
<literal>catA.getId().equals(catB.getId())</literal> is true, this concept is
|
||||
called <emphasis>database identity</emphasis>. Hibernate comes bundled with
|
||||
various identifer generators for different scenarios (including native generators
|
||||
for database sequences, hi/lo identifier tables, and application assigned
|
||||
identifiers). We use the UUID generator (only recommended for testing, as integer
|
||||
surrogate keys generated by the database should be prefered) and also specify the
|
||||
column <literal>CAT_ID</literal> of the table <literal>CAT</literal> for the
|
||||
Hibernate generated identifier value (as a primary key of the table).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
All other properties of <literal>Cat</literal> are mapped to the same table. In
|
||||
the case of the <literal>name</literal> property, we mapped it with an explicit
|
||||
database column declaration. This is especially useful when the database
|
||||
schema is automatically generated (as SQL DDL statements) from the mapping
|
||||
declaration with Hibernate's <emphasis>SchemaExport</emphasis> tool. All other
|
||||
properties are mapped using Hibernate's default settings, which is what you
|
||||
need most of the time. The table <literal>CAT</literal> in the database looks
|
||||
like this:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[ Column | Type | Modifiers
|
||||
--------+-----------------------+-----------
|
||||
cat_id | character(32) | not null
|
||||
name | character varying(16) | not null
|
||||
sex | character(1) |
|
||||
weight | real |
|
||||
Indexes: cat_pkey primary key btree (cat_id)]]></programlisting>
|
||||
|
||||
<para>
|
||||
You should now create this table in your database manually, and later read
|
||||
<xref linkend="toolsetguide"/> if you want to automate this step with the
|
||||
SchemaExport tool. This tool can create a full SQL DDL, including table
|
||||
definition, custom column type constraints, unique constraints and indexes.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="quickstart-playingwithcats">
|
||||
<title>Playing with cats</title>
|
||||
|
||||
<para>
|
||||
We're now ready to start Hibernate's <literal>Session</literal>. It is the
|
||||
<emphasis>persistence manager</emphasis>interface, we use it
|
||||
to store and retrieve <literal>Cat</literal>s to and from the database.
|
||||
But first, we've to get a <literal>Session</literal> (Hibernate's unit-of-work)
|
||||
from the <literal>SessionFactory</literal>:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[SessionFactory sessionFactory =
|
||||
new Configuration().configure().buildSessionFactory();]]></programlisting>
|
||||
|
||||
<para>
|
||||
A <literal>SessionFactory</literal> is responsible for one database and
|
||||
may only use one XML configuration file (<literal>hibernate.cfg.xml</literal>).
|
||||
You can set other properties (and even change the mapping metadata) by
|
||||
accessing the <literal>Configuration</literal> <emphasis>before</emphasis>
|
||||
you build the <literal>SessionFactory</literal> (it is immutable). Where
|
||||
do we create the <literal>SessionFactory</literal> and how can we access
|
||||
it in our application?
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A <literal>SessionFactory</literal> is usually only build done once,
|
||||
e.g. at startup with a <emphasis>load-on-startup</emphasis> servlet.
|
||||
This also means you should not keep it in an instance variable in your
|
||||
servlets, but in some other location. We need some kind of
|
||||
<emphasis>Singleton</emphasis>, so we can access the
|
||||
<literal>SessionFactory</literal> easily. The approach shown next
|
||||
solves both problems: configuration and easy access to a
|
||||
<literal>SessionFactory</literal>.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
We implement a <literal>HibernateUtil</literal> helper class:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[import net.sf.hibernate.*;
|
||||
import net.sf.hibernate.cfg.*;
|
||||
|
||||
public class HibernateUtil {
|
||||
|
||||
private static final SessionFactory sessionFactory;
|
||||
|
||||
static {
|
||||
try {
|
||||
// Create the SessionFactory
|
||||
sessionFactory = new Configuration().configure().buildSessionFactory();
|
||||
} catch (HibernateException ex) {
|
||||
throw new RuntimeException("Configuration problem: " + ex.getMessage(), ex);
|
||||
}
|
||||
}
|
||||
|
||||
public static final ThreadLocal session = new ThreadLocal();
|
||||
|
||||
public static Session currentSession() throws HibernateException {
|
||||
Session s = (Session) session.get();
|
||||
// Open a new Session, if this Thread has none yet
|
||||
if (s == null) {
|
||||
s = sessionFactory.openSession();
|
||||
session.set(s);
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
public static void closeSession() throws HibernateException {
|
||||
Session s = (Session) session.get();
|
||||
session.set(null);
|
||||
if (s != null)
|
||||
s.close();
|
||||
}
|
||||
}]]></programlisting>
|
||||
|
||||
<para>
|
||||
This class does not only take care of the <literal>SessionFactory</literal>
|
||||
with its static attribute, but also has a <literal>ThreadLocal</literal> to
|
||||
hold the <literal>Session</literal> for the current executing thread. Make
|
||||
sure you understand the Java concept of a thread-local variable before you
|
||||
try to use this helper.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
A <literal>SessionFactory</literal> is threadsafe, many threads can access
|
||||
it concurrently and request <literal>Session</literal>s. A <literal>Session</literal>
|
||||
is a non-threadsafe object that represents a single unit-of-work with the database.
|
||||
<literal>Session</literal>s are opened by a <literal>SessionFactory</literal> and
|
||||
are closed when all work is completed:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Session session = HibernateUtil.currentSession();
|
||||
|
||||
Transaction tx= session.beginTransaction();
|
||||
|
||||
Cat princess = new Cat();
|
||||
princess.setName("Princess");
|
||||
princess.setSex('F');
|
||||
princess.setWeight(7.4f);
|
||||
|
||||
session.save(princess);
|
||||
tx.commit();
|
||||
|
||||
HibernateUtil.closeSession();]]></programlisting>
|
||||
|
||||
<para>
|
||||
In a <literal>Session</literal>, every database operation occurs inside a
|
||||
transaction that isolates the database operations (even read-only operations).
|
||||
We use Hibernates <literal>Transaction</literal> API to abstract from the underlying
|
||||
transaction strategy (in our case, JDBC transactions). This allows our code
|
||||
to be deployed with container-managed transactions (using JTA) without any changes.
|
||||
Please note that the example above does not handle any exceptions.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Also note that you may call <literal>HibernateUtil.currentSession();</literal>
|
||||
as many times as you like, you will always get the current <literal>Session</literal>
|
||||
of this thread. You have to make sure the <literal>Session</literal> is closed
|
||||
after your unit-of-work completes, either in your servlet code or in a servlet filter
|
||||
before the HTTP response is send. The nice side effect of the latter is easy
|
||||
lazy initialization: the <literal>Session</literal> is still open when the view is
|
||||
rendered, so Hibernate can load unitialized objects while you navigate the graph.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Hibernate has various methods that can be used to retrieve objects from the
|
||||
database. The most flexible way is using the Hibernate Query Language (HQL),
|
||||
which is an easy to learn and powerful object-oriented extension to SQL:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[Transaction tx = session.beginTransaction();
|
||||
|
||||
Query query = session.createQuery("select c from Cat as c where c.sex = :sex");
|
||||
query.setCharacter("sex", 'F');
|
||||
for (Iterator it = query.iterate(); it.hasNext();) {
|
||||
Cat cat = (Cat) it.next();
|
||||
out.println("Female Cat: " + cat.getName() );
|
||||
}
|
||||
|
||||
tx.commit();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Hibernate also offers an object-oriented <emphasis>query by criteria</emphasis> API
|
||||
that can be used to formulate type-safe queries. Hibernate of course uses
|
||||
<literal>PreparedStatement</literal>s and parameter binding for all SQL communication
|
||||
with the database. You may also use Hibernate's direct SQL query feature or
|
||||
get a plain JDBC connection from a <literal>Session</literal> in rare cases.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="quickstart-summary">
|
||||
<title>Finally</title>
|
||||
|
||||
<para>
|
||||
We only scratched the surface of Hibernate in this small tutorial. Please note that
|
||||
we don't include any servlet specific code in our examples. You have to create a
|
||||
servlet yourself and insert the Hibernate code as you see fit.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Keep in mind that Hibernate, as a data access layer, is tightly integrated into
|
||||
your application. Usually, all other layers depent on the persistence mechanism.
|
||||
Make sure you understand the implications of this design.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
|
@ -0,0 +1,472 @@
|
|||
<chapter id="transactions">
|
||||
<title>Transactions And Concurrency</title>
|
||||
|
||||
<para>
|
||||
Hibernate is not itself a database. It is a lightweight object-relational
|
||||
mapping tool. Transaction management is delegated to the underlying database
|
||||
connection. If the connection is enlisted with JTA, operations performed by the
|
||||
<literal>Session</literal> are atomically part of the wider JTA
|
||||
transaction. Hibernate can be seen as a thin adapter to JDBC, adding object-
|
||||
oriented semantics.
|
||||
</para>
|
||||
|
||||
<sect1 id="transactions-basics">
|
||||
<title>Configurations, Sessions and Factories</title>
|
||||
<para>
|
||||
A <literal>SessionFactory</literal> is an expensive-to-create, threadsafe object
|
||||
intended to be shared by all application threads. A <literal>Session</literal>
|
||||
is an inexpensive, non-threadsafe object that should be used once, for a single
|
||||
business process, and then discarded. For example, when using Hibernate in a
|
||||
servlet-based application, servlets could obtain a <literal>SessionFactory</literal>
|
||||
using
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[SessionFactory sf = (SessionFactory)getServletContext().getAttribute("my.session.factory");]]></programlisting>
|
||||
|
||||
<para>
|
||||
Each call to a service method could create a new <literal>Session</literal>,
|
||||
<literal>flush()</literal> it, <literal>commit()</literal> its connection,
|
||||
<literal>close()</literal> it and finally discard it. (The <literal>SessionFactory</literal>
|
||||
may also be kept in JNDI or in a static <emphasis>Singleton</emphasis> helper variable.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
In a stateless session bean, a similar approach could be used. The bean would
|
||||
obtain a <literal>SessionFactory</literal> in <literal>setSessionContext()</literal>.
|
||||
Then each business method would create a <literal>Session</literal>,
|
||||
<literal>flush()</literal> it and <literal>close()</literal> it. Of course, the
|
||||
application should not <literal>commit()</literal> the connection. (Leave that to
|
||||
JTA, the database connection participates automatically in container-managed
|
||||
transactions.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
We use the Hibernate <literal>Transaction</literal> API as discussed previously,
|
||||
a single <literal>commit()</literal> of a Hibernate <literal>Transaction</literal>
|
||||
flushes the state and commits any underlying database connection (with special
|
||||
handling of JTA transactions).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Ensure you understand the semantics of <literal>flush()</literal>.
|
||||
Flushing synchronizes the persistent store with in-memory changes but
|
||||
<emphasis>not</emphasis> vice-versa. Note that for all Hibernate JDBC
|
||||
connections/transactions, the transaction isolation level for that connection
|
||||
applies to all operations executed by Hibernate!
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The next few sections will discuss alternative approaches that utilize versioning
|
||||
to ensure transaction atomicity. These are considered "advanced" approaches to
|
||||
be used with care.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="transactions-threads">
|
||||
<title>Threads and connections</title>
|
||||
|
||||
<para>
|
||||
You should observe the following practices when creating Hibernate Sessions:
|
||||
</para>
|
||||
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
Never create more than one concurrent <literal>Session</literal> or
|
||||
<literal>Transaction</literal> instance per database connection.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
Be extremely careful when creating more than one <literal>Session</literal>
|
||||
per database per transaction. The <literal>Session</literal> itself keeps
|
||||
track of updates made to loaded objects, so a different <literal>Session</literal>
|
||||
might see stale data.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
The <literal>Session</literal> is <emphasis>not</emphasis> threadsafe!
|
||||
Never access the same <literal>Session</literal> in two concurrent threads.
|
||||
A <literal>Session</literal> is usually only a single unit-of-work!
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="transactions-identity">
|
||||
<title>Considering object identity</title>
|
||||
|
||||
<para>
|
||||
The application may concurrently access the same persistent state in two
|
||||
different units-of-work. However, an instance of a persistent class is never shared
|
||||
between two <literal>Session</literal> instances. Hence there are
|
||||
two different notions of identity:
|
||||
</para>
|
||||
|
||||
<variablelist spacing="compact">
|
||||
<varlistentry>
|
||||
<term>Database Identity</term>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>foo.getId().equals( bar.getId() )</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>JVM Identity</term>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>foo==bar</literal>
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>
|
||||
Then for objects attached to a <emphasis>particular</emphasis> <literal>Session</literal>,
|
||||
the two notions are equivalent. However, while the application might concurrently access
|
||||
the "same" (persistent identity) business object in two different sessions, the two
|
||||
instances will actually be "different" (JVM identity).
|
||||
</para>
|
||||
<para>
|
||||
This approach leaves Hibernate and the database to worry about concurrency. The
|
||||
application never needs to synchronize on any business object, as long as it sticks to a
|
||||
single thread per <literal>Session</literal> or object identity (within a
|
||||
<literal>Session</literal> the application may safely use <literal>==</literal> to
|
||||
compare objects).
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="transactions-optimistic">
|
||||
<title>Optimistic concurrency control</title>
|
||||
|
||||
<para>
|
||||
Many business processes require a whole series of interactions with the user
|
||||
interleaved with database accesses. In web and enterprise applications it is
|
||||
not acceptable for a database transaction to span a user interaction.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Maintaining isolation of business processes becomes the partial responsibility
|
||||
of the application tier, hence we call this process a long running
|
||||
<emphasis>application transaction</emphasis>. A single application transaction
|
||||
usually spans several database transactions. It will be atomar if only one of
|
||||
these database transactions (the last one) stores the updated data, all others
|
||||
simply read data.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The only approach that is consistent with high concurrency and high
|
||||
scalability is optimistic concurrency control with versioning. Hibernate
|
||||
provides for three possible approaches to writing application code that
|
||||
uses optimistic concurrency.
|
||||
</para>
|
||||
|
||||
<sect2 id="transactions-optimistic-longsession">
|
||||
<title>Long session with automatic versioning</title>
|
||||
|
||||
<para>
|
||||
A single <literal>Session</literal> instance and its persistent instances are
|
||||
used for the whole application transaction.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <literal>Session</literal> uses optimistic locking with versioning to
|
||||
ensure that many database transactions appear to the application as a single
|
||||
logical application transaction. The <literal>Session</literal> is disconnected
|
||||
from any underlying JDBC connection when waiting for user interaction. This
|
||||
approach is the most efficient in terms of database access. The application
|
||||
need not concern itself with version checking or with reattaching detached
|
||||
instances.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[// foo is an instance loaded earlier by the Session
|
||||
session.reconnect();
|
||||
foo.setProperty("bar");
|
||||
session.flush();
|
||||
session.connection().commit();
|
||||
session.disconnect();]]></programlisting>
|
||||
|
||||
<para>
|
||||
The <literal>foo</literal> object still knows which <literal>Session</literal>
|
||||
it was loaded it. As soon as the <literal>Session</literal> has a JDBC connection,
|
||||
we commit the changes to the object.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
This pattern is problematic if our <literal>Session</literal> is too big to
|
||||
be stored during user think time, e.g. an <literal>HttpSession</literal> should
|
||||
be kept as small as possible. As the <literal>Session</literal> is also the
|
||||
(mandatory) first-level cache and contains all loaded objects, we can propably
|
||||
use this strategy only for a few request/response cycles. This is indeed
|
||||
recommended, as the <literal>Session</literal> will soon also have stale data.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="transactions-optimistic-detached">
|
||||
<title>Many sessions with automatic versioning</title>
|
||||
|
||||
<para>
|
||||
Each interaction with the persistent store occurs in a new <literal>Session</literal>.
|
||||
However, the same persistent instances are reused for each interaction with the database.
|
||||
The application manipulates the state of detached instances originally loaded in another
|
||||
<literal>Session</literal> and then "reassociates" them using
|
||||
<literal>Session.update()</literal> or <literal>Session.saveOrUpdate()</literal>.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[// foo is an instance loaded by a previous Session
|
||||
foo.setProperty("bar");
|
||||
session = factory.openSession();
|
||||
session.saveOrUpdate(foo);
|
||||
session.flush();
|
||||
session.connection().commit();
|
||||
session.close();]]></programlisting>
|
||||
|
||||
<para>
|
||||
You may also call <literal>lock()</literal> instead of <literal>update()</literal>
|
||||
and use <literal>LockMode.READ</literal> (performing a version check, bypassing all
|
||||
caches) if you are sure that the object has not been modified.
|
||||
</para>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="transactions-optimistic-manual">
|
||||
<title>Application version checking</title>
|
||||
|
||||
<para>
|
||||
Each interaction with the database occurs in a new <literal>Session</literal>
|
||||
that reloads all persistent instances from the database before manipulating them.
|
||||
This approach forces the application to carry out its own version checking to ensure
|
||||
application transaction isolation. (Of course, Hibernate will still <emphasis>update</emphasis>
|
||||
version numbers for you.) This approach is the least efficient in terms of database access.
|
||||
It is the approach most similar to entity EJBs.
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[// foo is an instance loaded by a previous Session
|
||||
session = factory.openSession();
|
||||
int oldVersion = foo.getVersion();
|
||||
session.load( foo, foo.getKey() );
|
||||
if ( oldVersion!=foo.getVersion ) throw new StaleObjectStateException();
|
||||
foo.setProperty("bar");
|
||||
session.flush();
|
||||
session.connection().commit();
|
||||
session.close();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Of course, if you are operating in a low-data-concurrency environment and don't
|
||||
require version checking, you may use this approach and just skip the version
|
||||
check.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="transactions-disconnection">
|
||||
<title>Session disconnection</title>
|
||||
|
||||
<para>
|
||||
The first approach described above is to maintain a single <literal>Session</literal>
|
||||
for a whole business process thats spans user think time. (For example, a servlet might
|
||||
keep a <literal>Session</literal> in the user's <literal>HttpSession</literal>.) For
|
||||
performance reasons you should
|
||||
</para>
|
||||
|
||||
<orderedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
commit the <literal>Transaction</literal> (or JDBC connection) and then
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
disconnect the <literal>Session</literal> from the JDBC connection
|
||||
</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
|
||||
<para>
|
||||
before waiting for user activity. The method <literal>Session.disconnect()</literal>
|
||||
will disconnect the session from the JDBC connection and return the connection to
|
||||
the pool (unless you provided the connection).
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<literal>Session.reconnect()</literal> obtains a new connection (or you may supply one)
|
||||
and restarts the session. After reconnection, to force a version check on data you aren't
|
||||
updating, you may call <literal>Session.lock()</literal> on any objects that might have
|
||||
been updated by another transaction. You don't need to lock any data that you
|
||||
<emphasis>are</emphasis> updating.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Heres an example:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[SessionFactory sessions;
|
||||
List fooList;
|
||||
Bar bar;
|
||||
....
|
||||
Session s = sessions.openSession();
|
||||
|
||||
Transaction tx = null;
|
||||
try {
|
||||
tx = s.beginTransaction();
|
||||
|
||||
fooList = s.find(
|
||||
"select foo from eg.Foo foo where foo.Date = current date"
|
||||
// uses db2 date function
|
||||
);
|
||||
bar = (Bar) s.create(Bar.class);
|
||||
|
||||
tx.commit();
|
||||
}
|
||||
catch (Exception e) {
|
||||
if (tx!=null) tx.rollback();
|
||||
s.close();
|
||||
throw e;
|
||||
}
|
||||
s.disconnect();]]></programlisting>
|
||||
|
||||
<para>
|
||||
Later on:
|
||||
</para>
|
||||
|
||||
<programlisting><![CDATA[s.reconnect();
|
||||
|
||||
try {
|
||||
tx = s.beginTransaction();
|
||||
|
||||
bar.setFooTable( new HashMap() );
|
||||
Iterator iter = fooList.iterator();
|
||||
while ( iter.hasNext() ) {
|
||||
Foo foo = (Foo) iter.next();
|
||||
s.lock(foo, LockMode.READ); //check that foo isn't stale
|
||||
bar.getFooTable().put( foo.getName(), foo );
|
||||
}
|
||||
|
||||
tx.commit();
|
||||
}
|
||||
catch (Exception e) {
|
||||
if (tx!=null) tx.rollback();
|
||||
throw e;
|
||||
}
|
||||
finally {
|
||||
s.close();
|
||||
}]]></programlisting>
|
||||
|
||||
<para>
|
||||
You can see from this how the relationship between <literal>Transaction</literal>s and
|
||||
<literal>Session</literal>s is many-to-one, A <literal>Session</literal> represents a
|
||||
conversation between the application and the database. The
|
||||
<literal>Transaction</literal> breaks that conversation up into atomic units of work
|
||||
at the database level.
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 id="transactions-locking">
|
||||
<title>Pessimistic Locking</title>
|
||||
|
||||
<para>
|
||||
It is not intended that users spend much time worring about locking strategies. Its usually
|
||||
enough to specify an isolation level for the JDBC connections and then simply let the
|
||||
database do all the work. However, advanced users may sometimes wish to obtain
|
||||
exclusive pessimistic locks, or re-obtain locks at the start of a new transaction.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Hibernate will always use the locking mechanism of the database, never lock objects
|
||||
in memory!
|
||||
</para>
|
||||
|
||||
<para>
|
||||
The <literal>LockMode</literal> class defines the different lock levels that may be acquired
|
||||
by Hibernate. A lock is obtained by the following mechanisms:
|
||||
</para>
|
||||
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>LockMode.WRITE</literal> is acquired automatically when Hibernate updates or inserts
|
||||
a row.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>LockMode.UPGRADE</literal> may be acquired upon explicit user request using
|
||||
<literal>SELECT ... FOR UPDATE</literal> on databases which support that syntax.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>LockMode.UPGRADE_NOWAIT</literal> may be acquired upon explicit user request using a
|
||||
<literal>SELECT ... FOR UPDATE NOWAIT</literal> under Oracle.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>LockMode.READ</literal> is acquired automatically when Hibernate reads data
|
||||
under Repeatable Read or Serializable isolation level. May be re-acquired by explicit user
|
||||
request.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
<literal>LockMode.NONE</literal> represents the absence of a lock. All objects switch to this
|
||||
lock mode at the end of a <literal>Transaction</literal>. Objects associated with the session
|
||||
via a call to <literal>update()</literal> or <literal>saveOrUpdate()</literal> also start out
|
||||
in this lock mode.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
The "explicit user request" is expressed in one of the following ways:
|
||||
</para>
|
||||
|
||||
<itemizedlist spacing="compact">
|
||||
<listitem>
|
||||
<para>
|
||||
A call to <literal>Session.load()</literal>, specifying a <literal>LockMode</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
A call to <literal>Session.lock()</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>
|
||||
A call to <literal>Query.setLockMode()</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<para>
|
||||
If <literal>Session.load()</literal> is called with <literal>UPGRADE</literal> or
|
||||
<literal>UPGRADE_NOWAIT</literal>, and the requested object was not yet loaded by
|
||||
the session, the object is loaded using <literal>SELECT ... FOR UPDATE</literal>.
|
||||
If <literal>load()</literal> is called for an object that is already loaded with
|
||||
a less restrictive lock than the one requested, Hibernate calls
|
||||
<literal>lock()</literal> for that object.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
<literal>Session.lock()</literal> performs a version number check if the specified lock
|
||||
mode is <literal>READ</literal>, <literal>UPGRADE</literal> or
|
||||
<literal>UPGRADE_NOWAIT</literal>. (In the case of <literal>UPGRADE</literal> or
|
||||
<literal>UPGRADE_NOWAIT</literal>, <literal>SELECT ... FOR UPDATE</literal> is used.)
|
||||
</para>
|
||||
|
||||
<para>
|
||||
If the database does not support the requested lock mode, Hibernate will use an appropriate
|
||||
alternate mode (instead of throwing an exception). This ensures that applications will
|
||||
be portable.
|
||||
</para>
|
||||
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
|
@ -0,0 +1,499 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!--
|
||||
|
||||
This is the XSL FO configuration file for the Hibernate
|
||||
Reference Documentation. It defines a custom titlepage and
|
||||
the parameters for the A4 sized PDF printable output.
|
||||
|
||||
It took me days to figure out this stuff and fix most of
|
||||
the obvious bugs in the DocBook XSL distribution. Some of
|
||||
the workarounds might not be appropriate with a newer version
|
||||
of DocBook XSL. This file is released as part of Hibernate,
|
||||
hence LGPL licensed.
|
||||
|
||||
christian@hibernate.org
|
||||
|
||||
-->
|
||||
|
||||
<!DOCTYPE xsl:stylesheet [
|
||||
<!ENTITY db_xsl_path "../../support/docbook-xsl/">
|
||||
]>
|
||||
|
||||
<xsl:stylesheet
|
||||
version="1.0"
|
||||
xmlns="http://www.w3.org/TR/xhtml1/transitional"
|
||||
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:fo="http://www.w3.org/1999/XSL/Format"
|
||||
exclude-result-prefixes="#default">
|
||||
|
||||
<xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
|
||||
|
||||
<!--###################################################
|
||||
Custom Title Page
|
||||
################################################### -->
|
||||
|
||||
<xsl:template name="book.titlepage.recto">
|
||||
<fo:block>
|
||||
<fo:table table-layout="fixed" width="175mm">
|
||||
<fo:table-column column-width="175mm"/>
|
||||
<fo:table-body>
|
||||
<fo:table-row>
|
||||
<fo:table-cell text-align="center">
|
||||
<fo:block>
|
||||
<fo:external-graphic src="file:images/hibernate_logo_a.png"/>
|
||||
</fo:block>
|
||||
<fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
|
||||
<xsl:value-of select="bookinfo/subtitle"/>
|
||||
</fo:block>
|
||||
<fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
|
||||
Version:
|
||||
<xsl:value-of select="bookinfo/releaseinfo"/>
|
||||
</fo:block>
|
||||
</fo:table-cell>
|
||||
</fo:table-row>
|
||||
</fo:table-body>
|
||||
</fo:table>
|
||||
</fo:block>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Prevent blank pages in output -->
|
||||
<xsl:template name="book.titlepage.before.verso">
|
||||
</xsl:template>
|
||||
<xsl:template name="book.titlepage.verso">
|
||||
</xsl:template>
|
||||
<xsl:template name="book.titlepage.separator">
|
||||
</xsl:template>
|
||||
|
||||
<!--###################################################
|
||||
Header
|
||||
################################################### -->
|
||||
|
||||
<!-- More space in the center header for long text -->
|
||||
<xsl:attribute-set name="header.content.properties">
|
||||
<xsl:attribute name="font-family">
|
||||
<xsl:value-of select="$body.font.family"/>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">-5em</xsl:attribute>
|
||||
<xsl:attribute name="margin-right">-5em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!--###################################################
|
||||
Custom Footer
|
||||
################################################### -->
|
||||
|
||||
<!-- This footer prints the Hibernate version number on the left side -->
|
||||
<xsl:template name="footer.content">
|
||||
<xsl:param name="pageclass" select="''"/>
|
||||
<xsl:param name="sequence" select="''"/>
|
||||
<xsl:param name="position" select="''"/>
|
||||
<xsl:param name="gentext-key" select="''"/>
|
||||
|
||||
<xsl:variable name="Version">
|
||||
<xsl:choose>
|
||||
<xsl:when test="//releaseinfo">
|
||||
<xsl:text>Hibernate </xsl:text>
|
||||
<xsl:value-of select="//releaseinfo"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<!-- nop -->
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="$sequence='blank'">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$double.sided != 0 and $position = 'left'">
|
||||
<xsl:value-of select="$Version"/>
|
||||
</xsl:when>
|
||||
|
||||
<xsl:when test="$double.sided = 0 and $position = 'center'">
|
||||
<!-- nop -->
|
||||
</xsl:when>
|
||||
|
||||
<xsl:otherwise>
|
||||
<fo:page-number/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:when>
|
||||
|
||||
<xsl:when test="$pageclass='titlepage'">
|
||||
<!-- nop: other titlepage sequences have no footer -->
|
||||
</xsl:when>
|
||||
|
||||
<xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
|
||||
<fo:page-number/>
|
||||
</xsl:when>
|
||||
|
||||
<xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
|
||||
<fo:page-number/>
|
||||
</xsl:when>
|
||||
|
||||
<xsl:when test="$double.sided = 0 and $position='right'">
|
||||
<fo:page-number/>
|
||||
</xsl:when>
|
||||
|
||||
<xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
|
||||
<xsl:value-of select="$Version"/>
|
||||
</xsl:when>
|
||||
|
||||
<xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
|
||||
<xsl:value-of select="$Version"/>
|
||||
</xsl:when>
|
||||
|
||||
<xsl:when test="$double.sided = 0 and $position='left'">
|
||||
<xsl:value-of select="$Version"/>
|
||||
</xsl:when>
|
||||
|
||||
<xsl:otherwise>
|
||||
<!-- nop -->
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!--###################################################
|
||||
Custom Toc Line
|
||||
################################################### -->
|
||||
|
||||
<!-- Improve the TOC. -->
|
||||
<xsl:template name="toc.line">
|
||||
<xsl:variable name="id">
|
||||
<xsl:call-template name="object.id"/>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="label">
|
||||
<xsl:apply-templates select="." mode="label.markup"/>
|
||||
</xsl:variable>
|
||||
|
||||
<fo:block text-align-last="justify"
|
||||
end-indent="{$toc.indent.width}pt"
|
||||
last-line-end-indent="-{$toc.indent.width}pt">
|
||||
<fo:inline keep-with-next.within-line="always">
|
||||
<fo:basic-link internal-destination="{$id}">
|
||||
|
||||
<!-- Chapter titles should be bold. -->
|
||||
<xsl:choose>
|
||||
<xsl:when test="local-name(.) = 'chapter'">
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
|
||||
<xsl:if test="$label != ''">
|
||||
<xsl:copy-of select="$label"/>
|
||||
<xsl:value-of select="$autotoc.label.separator"/>
|
||||
</xsl:if>
|
||||
<xsl:apply-templates select="." mode="titleabbrev.markup"/>
|
||||
</fo:basic-link>
|
||||
</fo:inline>
|
||||
<fo:inline keep-together.within-line="always">
|
||||
<xsl:text> </xsl:text>
|
||||
<fo:leader leader-pattern="dots"
|
||||
leader-pattern-width="3pt"
|
||||
leader-alignment="reference-area"
|
||||
keep-with-next.within-line="always"/>
|
||||
<xsl:text> </xsl:text>
|
||||
<fo:basic-link internal-destination="{$id}">
|
||||
<fo:page-number-citation ref-id="{$id}"/>
|
||||
</fo:basic-link>
|
||||
</fo:inline>
|
||||
</fo:block>
|
||||
</xsl:template>
|
||||
|
||||
<!--###################################################
|
||||
Extensions
|
||||
################################################### -->
|
||||
|
||||
<!-- These extensions are required for table printing and other stuff -->
|
||||
<xsl:param name="use.extensions">1</xsl:param>
|
||||
<xsl:param name="tablecolumns.extension">0</xsl:param>
|
||||
<!-- FOP provide only PDF Bookmarks at the moment -->
|
||||
<xsl:param name="fop.extensions">1</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Table Of Contents
|
||||
################################################### -->
|
||||
|
||||
<!-- Generate the TOCs for named components only -->
|
||||
<xsl:param name="generate.toc">
|
||||
book toc
|
||||
</xsl:param>
|
||||
|
||||
<!-- Show only Sections up to level 3 in the TOCs -->
|
||||
<xsl:param name="toc.section.depth">3</xsl:param>
|
||||
|
||||
<!-- Dot and Whitespace as separator in TOC between Label and Title-->
|
||||
<xsl:param name="autotoc.label.separator" select="'. '"/>
|
||||
|
||||
|
||||
<!--###################################################
|
||||
Paper & Page Size
|
||||
################################################### -->
|
||||
|
||||
<!-- Paper type, no headers on blank pages, no double sided printing -->
|
||||
<xsl:param name="paper.type" select="'A4'"/>
|
||||
<xsl:param name="double.sided">0</xsl:param>
|
||||
<xsl:param name="headers.on.blank.pages">0</xsl:param>
|
||||
<xsl:param name="footers.on.blank.pages">0</xsl:param>
|
||||
|
||||
<!-- Space between paper border and content (chaotic stuff, don't touch) -->
|
||||
<xsl:param name="page.margin.top">5mm</xsl:param>
|
||||
<xsl:param name="region.before.extent">10mm</xsl:param>
|
||||
<xsl:param name="body.margin.top">10mm</xsl:param>
|
||||
|
||||
<xsl:param name="body.margin.bottom">15mm</xsl:param>
|
||||
<xsl:param name="region.after.extent">10mm</xsl:param>
|
||||
<xsl:param name="page.margin.bottom">0mm</xsl:param>
|
||||
|
||||
<xsl:param name="page.margin.outer">18mm</xsl:param>
|
||||
<xsl:param name="page.margin.inner">18mm</xsl:param>
|
||||
|
||||
<!-- No intendation of Titles -->
|
||||
<xsl:param name="title.margin.left">0pc</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Fonts & Styles
|
||||
################################################### -->
|
||||
|
||||
<!-- Default Font size -->
|
||||
<xsl:param name="body.font.master">11</xsl:param>
|
||||
|
||||
<!-- Line height in body text -->
|
||||
<xsl:param name="line-height">1.4</xsl:param>
|
||||
|
||||
<!-- Monospaced fonts are smaller than regular text -->
|
||||
<xsl:attribute-set name="monospace.properties">
|
||||
<xsl:attribute name="font-family">
|
||||
<xsl:value-of select="$monospace.font.family"/>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="font-size">0.8em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!--###################################################
|
||||
Tables
|
||||
################################################### -->
|
||||
|
||||
<!-- The table width should be adapted to the paper size -->
|
||||
<xsl:param name="default.table.width">17.4cm</xsl:param>
|
||||
|
||||
<!-- Some padding inside tables -->
|
||||
<xsl:attribute-set name="table.cell.padding">
|
||||
<xsl:attribute name="padding-left">4pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">4pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">4pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">4pt</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Only hairlines as frame and cell borders in tables -->
|
||||
<xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
|
||||
<xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Labels
|
||||
################################################### -->
|
||||
|
||||
<!-- Label Chapters and Sections (numbering) -->
|
||||
<xsl:param name="chapter.autolabel">1</xsl:param>
|
||||
<xsl:param name="section.autolabel" select="1"/>
|
||||
<xsl:param name="section.label.includes.component.label" select="1"/>
|
||||
|
||||
<!--###################################################
|
||||
Titles
|
||||
################################################### -->
|
||||
|
||||
<!-- Chapter title size -->
|
||||
<xsl:attribute-set name="chapter.titlepage.recto.style">
|
||||
<xsl:attribute name="text-align">left</xsl:attribute>
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="font-size">
|
||||
<xsl:value-of select="$body.font.master * 1.8"/>
|
||||
<xsl:text>pt</xsl:text>
|
||||
</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Why is the font-size for chapters hardcoded in the XSL FO templates?
|
||||
Let's remove it, so this sucker can use our attribute-set only... -->
|
||||
<xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
|
||||
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
|
||||
xsl:use-attribute-sets="chapter.titlepage.recto.style">
|
||||
<xsl:call-template name="component.title">
|
||||
<xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
|
||||
</xsl:call-template>
|
||||
</fo:block>
|
||||
</xsl:template>
|
||||
|
||||
<!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
|
||||
<xsl:attribute-set name="section.title.level1.properties">
|
||||
<xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="font-size">
|
||||
<xsl:value-of select="$body.font.master * 1.5"/>
|
||||
<xsl:text>pt</xsl:text>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
<xsl:attribute-set name="section.title.level2.properties">
|
||||
<xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
|
||||
<xsl:attribute name="font-size">
|
||||
<xsl:value-of select="$body.font.master * 1.25"/>
|
||||
<xsl:text>pt</xsl:text>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
<xsl:attribute-set name="section.title.level3.properties">
|
||||
<xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
|
||||
<xsl:attribute name="font-size">
|
||||
<xsl:value-of select="$body.font.master * 1.0"/>
|
||||
<xsl:text>pt</xsl:text>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Titles of formal objects (tables, examples, ...) -->
|
||||
<xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
|
||||
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||
<xsl:attribute name="font-size">
|
||||
<xsl:value-of select="$body.font.master"/>
|
||||
<xsl:text>pt</xsl:text>
|
||||
</xsl:attribute>
|
||||
<xsl:attribute name="hyphenate">false</xsl:attribute>
|
||||
<xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!--###################################################
|
||||
Programlistings
|
||||
################################################### -->
|
||||
|
||||
<!-- Verbatim text formatting (programlistings) -->
|
||||
<xsl:attribute-set name="verbatim.properties">
|
||||
<xsl:attribute name="space-before.minimum">1em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.optimum">1em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.maximum">1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="border-color">#444444</xsl:attribute>
|
||||
<xsl:attribute name="border-style">solid</xsl:attribute>
|
||||
<xsl:attribute name="border-width">0.1pt</xsl:attribute>
|
||||
<xsl:attribute name="padding-top">0.5em</xsl:attribute>
|
||||
<xsl:attribute name="padding-left">0.5em</xsl:attribute>
|
||||
<xsl:attribute name="padding-right">0.5em</xsl:attribute>
|
||||
<xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
|
||||
<xsl:attribute name="margin-left">0.5em</xsl:attribute>
|
||||
<xsl:attribute name="margin-right">0.5em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Shade (background) programlistings -->
|
||||
<xsl:param name="shade.verbatim">1</xsl:param>
|
||||
<xsl:attribute-set name="shade.verbatim.style">
|
||||
<xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!--###################################################
|
||||
Callouts
|
||||
################################################### -->
|
||||
|
||||
<!-- We want to use callouts... -->
|
||||
<xsl:param name="callout.extensions">1</xsl:param>
|
||||
|
||||
<!-- Place callout bullets at this column in programmlisting.-->
|
||||
<xsl:param name="callout.defaultcolumn">90</xsl:param>
|
||||
|
||||
<!--
|
||||
No, don't use crappy graphics for the callout bullets. This setting
|
||||
enables some weird Unicode rendering for some fancy bullet points
|
||||
in callouts. By default, this can only count to 10 and produces
|
||||
strange results if you ever have more than 10 callouts for one
|
||||
programlisting. We will fix that next.
|
||||
-->
|
||||
<xsl:param name="callout.graphics">0</xsl:param>
|
||||
|
||||
<!--
|
||||
Again, fun with DocBook XSL: The callout bullets are rendered in
|
||||
two places: In the programlisting itself and in the list below
|
||||
the listing, with the actual callout text. The rendering in the
|
||||
programlisting is some XSL transformer extension (e.g. a Saxon
|
||||
extension), so we can't change that without messing with the
|
||||
extensions. We only can turn it off by setting this limit to
|
||||
zero, then, a simple bracket style like "(3)" and "(4)" will
|
||||
be used in the programlisting.
|
||||
-->
|
||||
<xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
|
||||
|
||||
<!--
|
||||
The callout bullets in the actual callout list will be rendered
|
||||
with an XSL FO template. The default template is broken: limited to 10
|
||||
nice looking Unicode bullet points and then it doesn't print anything,
|
||||
the fallback doesn't work. We implement our own template, which is not
|
||||
as complicated, more ugly, but works. As always, function is more
|
||||
important than form.
|
||||
-->
|
||||
<xsl:template name="callout-bug">
|
||||
<xsl:param name="conum" select='1'/>
|
||||
<fo:inline
|
||||
color="black"
|
||||
padding-top="0.1em"
|
||||
padding-bottom="0.1em"
|
||||
padding-start="0.2em"
|
||||
padding-end="0.2em"
|
||||
baseline-shift="0.1em"
|
||||
font-family="{$monospace.font.family}"
|
||||
font-weight="bold"
|
||||
font-size="75%">
|
||||
<xsl:text>(</xsl:text>
|
||||
<xsl:value-of select="$conum"/>
|
||||
<xsl:text>)</xsl:text>
|
||||
</fo:inline>
|
||||
|
||||
</xsl:template>
|
||||
|
||||
<!--###################################################
|
||||
Misc
|
||||
################################################### -->
|
||||
|
||||
<!-- Correct placement of titles for figures and examples. -->
|
||||
<xsl:param name="formal.title.placement">
|
||||
figure after
|
||||
example before
|
||||
equation before
|
||||
table before
|
||||
procedure before
|
||||
</xsl:param>
|
||||
|
||||
<!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
|
||||
<xsl:param name="variablelist.as.blocks">1</xsl:param>
|
||||
|
||||
<!-- The horrible list spacing problems, this is much better. -->
|
||||
<xsl:attribute-set name="list.block.spacing">
|
||||
<xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||
</xsl:attribute-set>
|
||||
|
||||
<!-- Newer DocBook XSL apparently thinks that some sections are by
|
||||
default "draft" status, and this idiotic thing is by default
|
||||
also set to "maybe", so it spits out a lot of errors with the
|
||||
latest FOP as the XSL/FO styles have references to some draft
|
||||
watermarks, which you actually don't want in the first place.
|
||||
Turn this crap off. If you have to work with the "status"
|
||||
attribute, don't.
|
||||
-->
|
||||
<xsl:param name="draft.mode" select="'no'"/>
|
||||
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,97 @@
|
|||
A {
|
||||
color: #003399;
|
||||
}
|
||||
|
||||
A:active {
|
||||
color: #003399;
|
||||
}
|
||||
|
||||
A:visited {
|
||||
color: #888888;
|
||||
}
|
||||
|
||||
P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
TD, TH, SPAN {
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
BLOCKQUOTE {
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
|
||||
H1, H2, H3, H4, H5, H6 {
|
||||
color: #000000;
|
||||
font-weight:500;
|
||||
margin-top:10px;
|
||||
padding-top:15px;
|
||||
}
|
||||
|
||||
TABLE {
|
||||
border-collapse: collapse;
|
||||
border-spacing:0;
|
||||
border: 1px thin black;
|
||||
empty-cells: hide;
|
||||
}
|
||||
|
||||
TD {
|
||||
padding: 4pt;
|
||||
}
|
||||
|
||||
H1 { font-size: 150%; }
|
||||
H2 { font-size: 140%; }
|
||||
H3 { font-size: 110%; font-weight: bold; }
|
||||
H4 { font-size: 110%; font-weight: bold;}
|
||||
H5 { font-size: 100%; font-style: italic; }
|
||||
H6 { font-size: 100%; font-style: italic; }
|
||||
|
||||
TT {
|
||||
font-size: 90%;
|
||||
font-family: "Courier New", Courier, monospace;
|
||||
color: #000000;
|
||||
}
|
||||
|
||||
PRE {
|
||||
font-size: 100%;
|
||||
padding: 5px;
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-color: #CCCCCC;
|
||||
background-color: #F4F4F4;
|
||||
}
|
||||
|
||||
UL, OL, LI {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
HR {
|
||||
width: 100%;
|
||||
height: 1px;
|
||||
background-color: #CCCCCC;
|
||||
border-width: 0px;
|
||||
padding: 0px;
|
||||
color: #CCCCCC;
|
||||
}
|
||||
|
||||
.variablelist {
|
||||
padding-top: 10;
|
||||
padding-bottom:10;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.itemizedlist, UL {
|
||||
padding-top: 0;
|
||||
padding-bottom:0;
|
||||
margin:0;
|
||||
}
|
||||
|
||||
.term {
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,84 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!--
|
||||
|
||||
This is the XSL HTML configuration file for the Hibernate
|
||||
Reference Documentation.
|
||||
|
||||
It took me days to figure out this stuff and fix most of
|
||||
the obvious bugs in the DocBook XSL distribution. Some of
|
||||
the workarounds might not be appropriate with a newer version
|
||||
of DocBook XSL. This file is released as part of Hibernate,
|
||||
hence LGPL licensed.
|
||||
|
||||
christian@hibernate.org
|
||||
-->
|
||||
|
||||
<!DOCTYPE xsl:stylesheet [
|
||||
<!ENTITY db_xsl_path "../../support/docbook-xsl/">
|
||||
]>
|
||||
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0"
|
||||
xmlns="http://www.w3.org/TR/xhtml1/transitional"
|
||||
exclude-result-prefixes="#default">
|
||||
|
||||
<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
|
||||
|
||||
<!--###################################################
|
||||
HTML Settings
|
||||
################################################### -->
|
||||
|
||||
<xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
|
||||
|
||||
<!-- These extensions are required for table printing and other stuff -->
|
||||
<xsl:param name="use.extensions">1</xsl:param>
|
||||
<xsl:param name="tablecolumns.extension">0</xsl:param>
|
||||
<xsl:param name="callout.extensions">1</xsl:param>
|
||||
<xsl:param name="graphicsize.extension">0</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Table Of Contents
|
||||
################################################### -->
|
||||
|
||||
<!-- Generate the TOCs for named components only -->
|
||||
<xsl:param name="generate.toc">
|
||||
book toc
|
||||
</xsl:param>
|
||||
|
||||
<!-- Show only Sections up to level 3 in the TOCs -->
|
||||
<xsl:param name="toc.section.depth">3</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Labels
|
||||
################################################### -->
|
||||
|
||||
<!-- Label Chapters and Sections (numbering) -->
|
||||
<xsl:param name="chapter.autolabel">1</xsl:param>
|
||||
<xsl:param name="section.autolabel" select="1"/>
|
||||
<xsl:param name="section.label.includes.component.label" select="1"/>
|
||||
|
||||
<!--###################################################
|
||||
Callouts
|
||||
################################################### -->
|
||||
|
||||
<!-- Don't use graphics, use a simple number style -->
|
||||
<xsl:param name="callout.graphics">0</xsl:param>
|
||||
|
||||
<!-- Place callout marks at this column in annotated areas -->
|
||||
<xsl:param name="callout.defaultcolumn">90</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Misc
|
||||
################################################### -->
|
||||
|
||||
<!-- Placement of titles -->
|
||||
<xsl:param name="formal.title.placement">
|
||||
figure after
|
||||
example before
|
||||
equation before
|
||||
table before
|
||||
procedure before
|
||||
</xsl:param>
|
||||
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,86 @@
|
|||
<?xml version="1.0"?>
|
||||
|
||||
<!--
|
||||
|
||||
This is the XSL HTML configuration file for the Hibernate
|
||||
Reference Documentation.
|
||||
|
||||
It took me days to figure out this stuff and fix most of
|
||||
the obvious bugs in the DocBook XSL distribution. Some of
|
||||
the workarounds might not be appropriate with a newer version
|
||||
of DocBook XSL. This file is released as part of Hibernate,
|
||||
hence LGPL licensed.
|
||||
|
||||
christian@hibernate.org
|
||||
-->
|
||||
|
||||
<!DOCTYPE xsl:stylesheet [
|
||||
<!ENTITY db_xsl_path "../../support/docbook-xsl/">
|
||||
]>
|
||||
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0"
|
||||
xmlns="http://www.w3.org/TR/xhtml1/transitional"
|
||||
exclude-result-prefixes="#default">
|
||||
|
||||
<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
|
||||
|
||||
<!--###################################################
|
||||
HTML Settings
|
||||
################################################### -->
|
||||
|
||||
<xsl:param name="chunk.section.depth">'5'</xsl:param>
|
||||
<xsl:param name="use.id.as.filename">'1'</xsl:param>
|
||||
<xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
|
||||
|
||||
<!-- These extensions are required for table printing and other stuff -->
|
||||
<xsl:param name="use.extensions">1</xsl:param>
|
||||
<xsl:param name="tablecolumns.extension">0</xsl:param>
|
||||
<xsl:param name="callout.extensions">1</xsl:param>
|
||||
<xsl:param name="graphicsize.extension">0</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Table Of Contents
|
||||
################################################### -->
|
||||
|
||||
<!-- Generate the TOCs for named components only -->
|
||||
<xsl:param name="generate.toc">
|
||||
book toc
|
||||
</xsl:param>
|
||||
|
||||
<!-- Show only Sections up to level 3 in the TOCs -->
|
||||
<xsl:param name="toc.section.depth">3</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Labels
|
||||
################################################### -->
|
||||
|
||||
<!-- Label Chapters and Sections (numbering) -->
|
||||
<xsl:param name="chapter.autolabel">1</xsl:param>
|
||||
<xsl:param name="section.autolabel" select="1"/>
|
||||
<xsl:param name="section.label.includes.component.label" select="1"/>
|
||||
|
||||
<!--###################################################
|
||||
Callouts
|
||||
################################################### -->
|
||||
|
||||
<!-- Don't use graphics, use a simple number style -->
|
||||
<xsl:param name="callout.graphics">0</xsl:param>
|
||||
|
||||
<!-- Place callout marks at this column in annotated areas -->
|
||||
<xsl:param name="callout.defaultcolumn">90</xsl:param>
|
||||
|
||||
<!--###################################################
|
||||
Misc
|
||||
################################################### -->
|
||||
|
||||
<!-- Placement of titles -->
|
||||
<xsl:param name="formal.title.placement">
|
||||
figure after
|
||||
example before
|
||||
equation before
|
||||
table before
|
||||
procedure before
|
||||
</xsl:param>
|
||||
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,363 @@
|
|||
2004-01-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, htmltblx.mod:
|
||||
Changed version number to V4.3CR2
|
||||
|
||||
* dbpoolx.mod, htmltblx.mod: Make sure floatstyle is on table and informaltable
|
||||
|
||||
2003-12-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* Makefile, freshmeat.xsl: Support freshmeat target
|
||||
|
||||
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, htmltblx.mod:
|
||||
Updated version numbers
|
||||
|
||||
* dbpoolx.mod: Refactor parameter entities for informaltable so that textobject is handled correctly; avoid duplicate ID on caption when HTML tables are allowed.
|
||||
|
||||
* docbookx.dtd: DocBook V4.3CR2 released
|
||||
|
||||
2003-12-20 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbpoolx.mod: Put HTML attributes on caption of HTML tables are allowed
|
||||
|
||||
2003-12-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* Makefile: Add doc target
|
||||
|
||||
* htmltblx.mod: Make sure textobject goes in the DocBook branch of informaltable
|
||||
|
||||
2003-12-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, htmltblx.mod:
|
||||
Updated version number
|
||||
|
||||
* docbookx.dtd: Released 4.3CR1
|
||||
|
||||
2003-10-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, htmltblx.mod:
|
||||
Released 4.3b5
|
||||
|
||||
* dbnotnx.mod: Added SWF notation
|
||||
|
||||
* dbpoolx.mod: Make firstterm isomorphic to glossterm
|
||||
|
||||
2003-09-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbpoolx.mod: RFE #573812: allow blockinfo on blockquote
|
||||
|
||||
* dbpoolx.mod: RFE #564776: added process, service, server, and daemon to the class values of systemitem
|
||||
|
||||
* dbpoolx.mod: RFE #571998: added initializer to paramdef
|
||||
|
||||
* dbpoolx.mod: RFE #518074: added a number of new values to the class attribute of database
|
||||
|
||||
* dbpoolx.mod: RFE #533734: allow void to be optional on {method|constructor|destructor}synopsis
|
||||
|
||||
* dbpoolx.mod: Added StepAlternatives
|
||||
|
||||
* dbpoolx.mod: RFE #507975: revision should allow author or authorinitials
|
||||
|
||||
* dbpoolx.mod: RFE #517604: allow optional title on glosslist
|
||||
|
||||
* dbpoolx.mod: RFE #570068: added emailmessage, webpage, and newsposting as pubwork values for citetitle
|
||||
|
||||
* dbpoolx.mod: RFE #571996: added prefix, namespace, and localname to class for sgmltag
|
||||
|
||||
2003-09-25 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, htmltblx.mod:
|
||||
Changed V4.2b2 to V4.2b3
|
||||
|
||||
* dbhierx.mod: Allow Set to be recursive
|
||||
|
||||
* dbhierx.mod, dbpoolx.mod: Added type attribute to indexterm and index
|
||||
|
||||
* dbpoolx.mod: Added xml:base
|
||||
|
||||
* dbpoolx.mod: Added code
|
||||
|
||||
* dbpoolx.mod: RFE #615473: added floatstyle to (informal)figure, (informal)example, and (informal)equation
|
||||
|
||||
* htmltblx.mod: Fixup some PEs so that we don't get duplicated attribute declarations
|
||||
|
||||
* htmltblx.mod: Put blockinfo and textobject back into the CALS table model
|
||||
|
||||
2003-08-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, htmltblx.mod:
|
||||
Changed 4.2 to 4.3b2
|
||||
|
||||
* calstblx.dtd, dbpoolx.mod, htmltblx.mod, soextblx.dtd:
|
||||
Allow HTML table models in addition to CALS or SOEx table models (2003 Apr)
|
||||
|
||||
* dbpoolx.mod: Task markup (2003 Jun)
|
||||
|
||||
2003-08-11 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbhierx.mod: Related to RFE 514435: allow multiple refnamediv elements in refentry (2003 Jul)
|
||||
|
||||
* dbnotnx.mod: RFE 698844: add PDF notation (2003 May)
|
||||
|
||||
* dbpoolx.mod: RFE 660044: support continuation and startinglinenumber on verbatims (2003 Feb)
|
||||
|
||||
* dbpoolx.mod: Related to RFE 679316: add orgname to inlines (2003 Jul)
|
||||
|
||||
* dbpoolx.mod: RFE 655526: support modifier in funcprototype (2003 Feb)
|
||||
|
||||
* dbpoolx.mod: RFE 573419: add bidirectional text override (2003 Apr)
|
||||
|
||||
* dbpoolx.mod: Added function attribute to keycap for improved semantics (2003 Jul)
|
||||
|
||||
* dbpoolx.mod: RFE 691762: add language attribute to verbatim environments (2003 May)
|
||||
|
||||
* dbpoolx.mod: RFE 705885: add namespace attribute to sgmltag (2003 May)
|
||||
|
||||
* dbpoolx.mod: RFE 565716: support for URI element (2003 Apr)
|
||||
|
||||
2003-08-09 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbpoolx.mod: RFE 582822: paramdef and varargs on funcprototype (2003 Feb)
|
||||
|
||||
* dbpoolx.mod: RFE 638456: support translators (2003 Feb)
|
||||
|
||||
* dbpoolx.mod: Added xrefstyle (2002 Dec)
|
||||
|
||||
* dbpoolx.mod: RFE 473365: choice attribute for paramdef (2003 Feb)
|
||||
|
||||
* dbpoolx.mod: RFE 570068: new values for pubwork (2003 Jan)
|
||||
|
||||
* docbookx.dtd: Fix SDATA entity for euro
|
||||
|
||||
2002-07-17 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd:
|
||||
DocBook XML V4.2 released
|
||||
|
||||
2002-05-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd:
|
||||
Updated comments to reflect CR3
|
||||
|
||||
2002-05-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbnotnx.mod: SVG notation accidentally left out of notation.class
|
||||
|
||||
* docbookx.dtd: Fix syntactic error intentionally introduced behind mutually exclusive PEs. Now make the DTD useless, but not syntactically invalid
|
||||
|
||||
2002-05-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbpoolx.mod: Add accidentally missing local.info.class to info.class
|
||||
|
||||
2002-03-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod:
|
||||
Prepare for CR1
|
||||
|
||||
* catalog.xml, docbook.cat: Prepare for CR1 and fix search-and-replace typos
|
||||
|
||||
* dbpoolx.mod: Make type other tokens in bibliorelation unique for SGML compatibility
|
||||
|
||||
* dbpoolx.mod: Make spatial/temporal other tokens unique for SGML compatibility
|
||||
|
||||
* dbpoolx.mod: Added bibliosource, bibliorelation, and bibliocoverage
|
||||
|
||||
* dbpoolx.mod: Move bibliorelation type attribute into a PE so that it can be expanded the way we want
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #480957
|
||||
|
||||
* dbpoolx.mod: Revise graphic attributes: add contentwidth, contentdepth, and valign
|
||||
|
||||
* dbpoolx.mod: Add class attribute to orgname
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #480954: add textdata element
|
||||
|
||||
* dbpoolx.mod: Added blockinfo element
|
||||
|
||||
* dbpoolx.mod: RFE #513426: Text alternative for tables
|
||||
|
||||
* dbpoolx.mod: Add consortium to the list of classes on orgname
|
||||
|
||||
* docbookx.dtd: DocBook V4.2 Candidate Release 1 released
|
||||
|
||||
2002-02-05 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbhierx.mod: Implemented RFE #501363
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #492099
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #498848
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #480955
|
||||
|
||||
2002-01-06 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbcentx.mod: Added marked sections around character set entity references
|
||||
|
||||
2001-11-20 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd:
|
||||
DocBook V4.2b1 released
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #482821
|
||||
|
||||
2001-11-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbhierx.mod, dbpoolx.mod: Implemented RFE #456460
|
||||
|
||||
2001-11-18 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbpoolx.mod: RFE #482817: Add errortext element
|
||||
|
||||
2001-11-17 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbpoolx.mod: RFE 482821: Add extension to the list of class values on filename
|
||||
|
||||
* dbpoolx.mod: RFE 482053: Add support for DOI in meta
|
||||
|
||||
* dbpoolx.mod: Removed bogus occurrence indicator in info.class; fixed typo in qandaset PEs
|
||||
|
||||
2001-11-13 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* 40chg.txt, 41chg.txt, LostLog: Removed old files
|
||||
|
||||
* Makefile: Fixed typo
|
||||
|
||||
* Makefile: Makefile
|
||||
|
||||
* README: Removed version information
|
||||
|
||||
* README, readme.txt: Renamed
|
||||
|
||||
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd:
|
||||
Removed 'XML' from public identifiers for files that will now be common to both XML and SGML
|
||||
|
||||
* catalog.xml: Fixed missing end tag
|
||||
|
||||
2001-11-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, dbcentx.mod, dbgenent.mod, dbnotnx.mod, readme.txt:
|
||||
Updated version numbers
|
||||
|
||||
* catalog.xml, docbook.cat: Added XML Catalog; updated public identifiers in catalog
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #480956
|
||||
|
||||
* dbpoolx.mod: Former RFE 133: Added newsgroup class to systemitem
|
||||
|
||||
2001-11-09 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbhierx.mod: Implemented RFE #426382
|
||||
|
||||
* dbhierx.mod: Implemented RFE #417671
|
||||
|
||||
* dbhierx.mod, dbpoolx.mod: Implemented RFE #436072
|
||||
|
||||
* dbhierx.mod, dbpoolx.mod, docbookx.dtd: Changed version number
|
||||
|
||||
* dbnotnx.mod: Implemented RFE #440597
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #435485
|
||||
|
||||
* dbpoolx.mod: Expand the content model of the following elements from smallcptr.char.mix back to cptr.char.mix: interfacename, action, database, filename, hardware, keycap, option, parameter, property, and systemitem (command, interface, and literal were never reduced).
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #431418
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #431419
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #435466
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #439136
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #431415
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #431413
|
||||
|
||||
* dbpoolx.mod: Implemented RFE #434439
|
||||
|
||||
2001-11-07 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, dbcentx.mod, dbhierx.mod, dbpoolx.mod, docbookx.dtd:
|
||||
Towards a 4.2 release: reparameterize so that the SGML DTD is just a customization of the XML DTD
|
||||
|
||||
* calstblx.dtd, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd:
|
||||
Whitespace fixes
|
||||
|
||||
2001-08-07 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* dbhierx.mod: RFE 426382: Norm to allow SimpleSect inside Section
|
||||
|
||||
* dbpoolx.mod: RFE 431419: Norm to add markup for FS type and partition
|
||||
|
||||
* dbpoolx.mod: RFE 431418: Norm to add typing to funcdef and paramdef
|
||||
|
||||
* dbpoolx.mod: Fix comments; implement proposal of the TC to expand the content model of selected inlines
|
||||
|
||||
* dbpoolx.mod: RFE 434439: Add language attribute to fieldsynopsis et al.
|
||||
|
||||
* dbpoolx.mod: RFE 431415: Norm to add markup for host identifiers
|
||||
|
||||
2001-06-18 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* 40chg.txt, 41chg.txt, LostLog, Makefile, calstblx.dtd, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.cat, docbookx.dtd, readme.txt:
|
||||
Additional work on DocBook XML V5.0; I had the wrong CVS repository for a while so there's a bunch of changes lumped together here
|
||||
|
||||
* Makefile: branches: 1.1.2;
|
||||
file Makefile was initially added on branch V50-devel.
|
||||
|
||||
2001-03-12 <ndw@users.sourceforge.net>
|
||||
|
||||
* calstblx.dtd, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, readme.txt:
|
||||
Updated version numbers
|
||||
|
||||
* dbcentx.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, soextblx.dtd:
|
||||
New file.
|
||||
|
||||
* docbook.cat: New file.
|
||||
|
||||
* docbookx.cat: branches: 1.1.2;
|
||||
file docbookx.cat was initially added on branch V50-devel.
|
||||
|
||||
* docbookx.cat: New file.
|
||||
|
||||
2001-01-14 <ndw@users.sourceforge.net>
|
||||
|
||||
* dbpoolx.mod: branches: 1.5.2;
|
||||
RFE #140: Allow multiple MsgExplan inside SimpleMsgEntry
|
||||
|
||||
2000-11-12 <ndw@users.sourceforge.net>
|
||||
|
||||
* dbhierx.mod: branches: 1.6.2;
|
||||
Add refentry; accidentally left out
|
||||
|
||||
* dbhierx.mod: Allow beginpage to be the first child of toc, lot, appendix, chapter,
|
||||
part, preface, reference, and refentry. (It can't be at the start of
|
||||
bibliography, glossary, index, or setindex because of ambiguity
|
||||
problems.)
|
||||
|
||||
2000-09-19 <ndw@users.sourceforge.net>
|
||||
|
||||
* 40chg.txt, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, readme.txt, soextblx.dtd:
|
||||
DocBook XML V4.0
|
||||
|
||||
* 40chg.txt, soextblx.dtd: branches: 1.2.2;
|
||||
DocBook XML V4.1
|
||||
|
||||
* 41chg.txt, LostLog, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, readme.txt:
|
||||
DocBook XML V4.1.1
|
||||
|
||||
* 41chg.txt, LostLog, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, readme.txt:
|
||||
DocBook XML V4.1
|
||||
|
||||
* 41chg.txt, LostLog, docbook.cat: branches: 1.3.2;
|
||||
DocBook XML V4.1.2
|
||||
|
||||
* calstblx.dtd, dbcentx.mod, dbnotnx.mod, docbookx.dtd, readme.txt:
|
||||
branches: 1.4.2;
|
||||
DocBook XML V4.1.2
|
||||
|
||||
* dbgenent.mod: branches: 1.2.2;
|
||||
DocBook XML V4.1.2
|
||||
|
||||
* dbhierx.mod, dbpoolx.mod: DocBook XML V4.1.2
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
README for the DocBook XML DTD
|
||||
|
||||
For more information about DocBook, please see
|
||||
|
||||
http://www.oasis-open.org/docbook/
|
||||
|
||||
Please send all questions, comments, concerns, and bug reports to the
|
||||
DocBook mailing list: docbook@lists.oasis-open.org
|
|
@ -0,0 +1,205 @@
|
|||
<!-- ...................................................................... -->
|
||||
<!-- DocBook CALS Table Model V4.3CR3 ........................................ -->
|
||||
<!-- File calstblx.mod .................................................... -->
|
||||
|
||||
<!-- Copyright 1992-2002 HaL Computer Systems, Inc.,
|
||||
O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
|
||||
Corporation, Norman Walsh, Sun Microsystems, Inc., and the
|
||||
Organization for the Advancement of Structured Information
|
||||
Standards (OASIS).
|
||||
|
||||
This DTD is based on the CALS Table Model
|
||||
PUBLIC "-//USA-DOD//DTD Table Model 951010//EN"
|
||||
|
||||
$Id$
|
||||
|
||||
Permission to use, copy, modify and distribute the DocBook DTD
|
||||
and its accompanying documentation for any purpose and without fee
|
||||
is hereby granted in perpetuity, provided that the above copyright
|
||||
notice and this paragraph appear in all copies. The copyright
|
||||
holders make no representation about the suitability of the DTD for
|
||||
any purpose. It is provided "as is" without expressed or implied
|
||||
warranty.
|
||||
|
||||
If you modify the DocBook DTD in any way, except for declaring and
|
||||
referencing additional sets of general entities and declaring
|
||||
additional notations, label your DTD as a variant of DocBook. See
|
||||
the maintenance documentation for more information.
|
||||
|
||||
Please direct all questions, bug reports, or suggestions for
|
||||
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||
information, see http://www.oasis-open.org/docbook/.
|
||||
-->
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
|
||||
<!-- This module contains the definitions for the CALS Table Model
|
||||
converted to XML. It has been modified slightly for use in the
|
||||
combined HTML/CALS models supported by DocBook V4.3.
|
||||
-->
|
||||
|
||||
<!-- These definitions are not directly related to the table model, but are
|
||||
used in the default CALS table model and are usually defined elsewhere
|
||||
(and prior to the inclusion of this table module) in a CALS DTD. -->
|
||||
|
||||
<!ENTITY % bodyatt "">
|
||||
<!ENTITY % secur "">
|
||||
|
||||
<!-- no if zero(s),
|
||||
yes if any other digits value -->
|
||||
|
||||
<!ENTITY % yesorno 'CDATA'>
|
||||
<!ENTITY % titles 'title?'>
|
||||
|
||||
<!-- default for use in entry content -->
|
||||
|
||||
<!ENTITY % paracon '#PCDATA'>
|
||||
|
||||
<!--
|
||||
The parameter entities as defined below provide the CALS table model
|
||||
as published (as part of the Example DTD) in MIL-HDBK-28001.
|
||||
|
||||
These following declarations provide the CALS-compliant default definitions
|
||||
for these entities. However, these entities can and should be redefined
|
||||
(by giving the appropriate parameter entity declaration(s) prior to the
|
||||
reference to this Table Model declaration set entity) to fit the needs
|
||||
of the current application.
|
||||
-->
|
||||
|
||||
<!ENTITY % tbl.table.name "(table|chart)">
|
||||
<!ENTITY % tbl.table-titles.mdl "%titles;,">
|
||||
<!ENTITY % tbl.table-main.mdl "(tgroup+|graphic+)">
|
||||
<!ENTITY % tbl.table.mdl "%tbl.table-titles.mdl; %tbl.table-main.mdl;">
|
||||
<!ENTITY % tbl.table.att '
|
||||
tabstyle CDATA #IMPLIED
|
||||
tocentry %yesorno; #IMPLIED
|
||||
shortentry %yesorno; #IMPLIED
|
||||
orient (port|land) #IMPLIED
|
||||
pgwide %yesorno; #IMPLIED '>
|
||||
<!ENTITY % tbl.tgroup.mdl "colspec*,spanspec*,thead?,tfoot?,tbody">
|
||||
<!ENTITY % tbl.tgroup.att '
|
||||
tgroupstyle CDATA #IMPLIED '>
|
||||
<!ENTITY % tbl.hdft.mdl "colspec*,row+">
|
||||
<!ENTITY % tbl.row.mdl "(entry|entrytbl)+">
|
||||
<!ENTITY % tbl.entrytbl.mdl "colspec*,spanspec*,thead?,tbody">
|
||||
<!ENTITY % tbl.entry.mdl "(para|warning|caution|note|legend|%paracon;)*">
|
||||
|
||||
<!ENTITY % tbl.frame.attval "top|bottom|topbot|all|sides|none">
|
||||
<!ENTITY % tbl.tbody.mdl "row+">
|
||||
|
||||
<!-- ===== Element and attribute declarations follow. ===== -->
|
||||
|
||||
<!ELEMENT table %ho; (%tbl.table.mdl;)>
|
||||
|
||||
<!ATTLIST table
|
||||
frame (%tbl.frame.attval;) #IMPLIED
|
||||
colsep %yesorno; #IMPLIED
|
||||
rowsep %yesorno; #IMPLIED
|
||||
%tbl.table.att;
|
||||
%bodyatt;
|
||||
%secur;
|
||||
>
|
||||
|
||||
<!ELEMENT tgroup %ho; (%tbl.tgroup.mdl;) >
|
||||
|
||||
<!ATTLIST tgroup
|
||||
cols CDATA #REQUIRED
|
||||
%tbl.tgroup.att;
|
||||
colsep %yesorno; #IMPLIED
|
||||
rowsep %yesorno; #IMPLIED
|
||||
align (left|right|center|justify|char) #IMPLIED
|
||||
char CDATA #IMPLIED
|
||||
charoff CDATA #IMPLIED
|
||||
%secur;
|
||||
>
|
||||
|
||||
<!ELEMENT colspec %ho; EMPTY >
|
||||
|
||||
<!ATTLIST colspec
|
||||
colnum CDATA #IMPLIED
|
||||
colname CDATA #IMPLIED
|
||||
colwidth CDATA #IMPLIED
|
||||
colsep %yesorno; #IMPLIED
|
||||
rowsep %yesorno; #IMPLIED
|
||||
align (left|right|center|justify|char) #IMPLIED
|
||||
char CDATA #IMPLIED
|
||||
charoff CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT spanspec %ho; EMPTY >
|
||||
|
||||
<!ATTLIST spanspec
|
||||
namest CDATA #REQUIRED
|
||||
nameend CDATA #REQUIRED
|
||||
spanname CDATA #REQUIRED
|
||||
colsep %yesorno; #IMPLIED
|
||||
rowsep %yesorno; #IMPLIED
|
||||
align (left|right|center|justify|char) #IMPLIED
|
||||
char CDATA #IMPLIED
|
||||
charoff CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ELEMENT thead %ho; (%tbl.hdft.mdl;)>
|
||||
<!ATTLIST thead
|
||||
valign (top|middle|bottom) #IMPLIED
|
||||
%secur;
|
||||
>
|
||||
|
||||
<!ELEMENT tfoot %ho; (%tbl.hdft.mdl;)>
|
||||
<!ATTLIST tfoot
|
||||
valign (top|middle|bottom) #IMPLIED
|
||||
%secur;
|
||||
>
|
||||
|
||||
<!ELEMENT tbody %ho; (%tbl.tbody.mdl;)>
|
||||
|
||||
<!ATTLIST tbody
|
||||
valign (top|middle|bottom) #IMPLIED
|
||||
%secur;
|
||||
>
|
||||
|
||||
<!ELEMENT row %ho; (%tbl.row.mdl;)>
|
||||
|
||||
<!ATTLIST row
|
||||
rowsep %yesorno; #IMPLIED
|
||||
valign (top|middle|bottom) #IMPLIED
|
||||
%secur;
|
||||
>
|
||||
|
||||
<!ELEMENT entrytbl %ho; (%tbl.entrytbl.mdl;)>
|
||||
|
||||
<!ATTLIST entrytbl
|
||||
cols CDATA #REQUIRED
|
||||
%tbl.tgroup.att;
|
||||
colname CDATA #IMPLIED
|
||||
spanname CDATA #IMPLIED
|
||||
namest CDATA #IMPLIED
|
||||
nameend CDATA #IMPLIED
|
||||
colsep %yesorno; #IMPLIED
|
||||
rowsep %yesorno; #IMPLIED
|
||||
align (left|right|center|justify|char) #IMPLIED
|
||||
char CDATA #IMPLIED
|
||||
charoff CDATA #IMPLIED
|
||||
%secur;
|
||||
>
|
||||
|
||||
<!ELEMENT entry %ho; (%tbl.entry.mdl;)*>
|
||||
|
||||
<!ATTLIST entry
|
||||
colname CDATA #IMPLIED
|
||||
namest CDATA #IMPLIED
|
||||
nameend CDATA #IMPLIED
|
||||
spanname CDATA #IMPLIED
|
||||
morerows CDATA #IMPLIED
|
||||
colsep %yesorno; #IMPLIED
|
||||
rowsep %yesorno; #IMPLIED
|
||||
align (left|right|center|justify|char) #IMPLIED
|
||||
char CDATA #IMPLIED
|
||||
charoff CDATA #IMPLIED
|
||||
rotate %yesorno; #IMPLIED
|
||||
valign (top|middle|bottom) #IMPLIED
|
||||
%secur;
|
||||
>
|
||||
|
||||
<!-- End of DocBook CALS Table Model V4.3CR3 ................................. -->
|
||||
<!-- ...................................................................... -->
|
|
@ -0,0 +1,115 @@
|
|||
<?xml version='1.0'?>
|
||||
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
<!-- XML Catalog data for DocBook XML V4.3CR3 ................................ -->
|
||||
<!-- File catalog.xml ..................................................... -->
|
||||
|
||||
<!-- Please direct all questions, bug reports, or suggestions for
|
||||
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||
information, see http://www.oasis-open.org/.
|
||||
-->
|
||||
|
||||
<!-- This is the catalog data file for DocBook V4.3CR3. It is provided as
|
||||
a convenience in building your own catalog files. You need not use
|
||||
the filenames listed here, and need not use the filename method of
|
||||
identifying storage objects at all. See the documentation for
|
||||
detailed information on the files associated with the DocBook DTD.
|
||||
See XML Catalogs at http://www.oasis-open.org/committees/entity/ for
|
||||
detailed information on supplying and using catalog data.
|
||||
-->
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
<!-- DocBook driver file .................................................. -->
|
||||
|
||||
<public publicId="-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||
uri="docbookx.dtd"/>
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
<!-- DocBook modules ...................................................... -->
|
||||
|
||||
<public publicId="-//OASIS//DTD DocBook CALS Table Model V4.3CR3//EN"
|
||||
uri="calstblx.dtd"/>
|
||||
|
||||
<public publicId="-//OASIS//DTD XML Exchange Table Model 19990315//EN"
|
||||
uri="soextblx.dtd"/>
|
||||
|
||||
<public publicId="-//OASIS//ELEMENTS DocBook Information Pool V4.3CR3//EN"
|
||||
uri="dbpoolx.mod"/>
|
||||
|
||||
<public publicId="-//OASIS//ELEMENTS DocBook Document Hierarchy V4.3CR3//EN"
|
||||
uri="dbhierx.mod"/>
|
||||
|
||||
<public publicId="-//OASIS//ENTITIES DocBook Additional General Entities V4.3CR3//EN"
|
||||
uri="dbgenent.mod"/>
|
||||
|
||||
<public publicId="-//OASIS//ENTITIES DocBook Notations V4.3CR3//EN"
|
||||
uri="dbnotnx.mod"/>
|
||||
|
||||
<public publicId="-//OASIS//ENTITIES DocBook Character Entities V4.3CR3//EN"
|
||||
uri="dbcentx.mod"/>
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
<!-- ISO entity sets ...................................................... -->
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML"
|
||||
uri="ent/iso-dia.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML"
|
||||
uri="ent/iso-num.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Publishing//EN//XML"
|
||||
uri="ent/iso-pub.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES General Technical//EN//XML"
|
||||
uri="ent/iso-tech.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
|
||||
uri="ent/iso-lat1.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Added Latin 2//EN//XML"
|
||||
uri="ent/iso-lat2.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Greek Letters//EN//XML"
|
||||
uri="ent/iso-grk1.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Monotoniko Greek//EN//XML"
|
||||
uri="ent/iso-grk2.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Greek Symbols//EN//XML"
|
||||
uri="ent/iso-grk3.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN//XML"
|
||||
uri="ent/iso-grk4.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN//XML"
|
||||
uri="ent/iso-amsa.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN//XML"
|
||||
uri="ent/iso-amsb.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN//XML"
|
||||
uri="ent/iso-amsc.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN//XML"
|
||||
uri="ent/iso-amsn.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN//XML"
|
||||
uri="ent/iso-amso.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN//XML"
|
||||
uri="ent/iso-amsr.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Box and Line Drawing//EN//XML"
|
||||
uri="ent/iso-box.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Russian Cyrillic//EN//XML"
|
||||
uri="ent/iso-cyr1.ent"/>
|
||||
|
||||
<public publicId="ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN//XML"
|
||||
uri="ent/iso-cyr2.ent"/>
|
||||
|
||||
<!-- End of catalog data for DocBook XML V4.3CR3 ............................. -->
|
||||
<!-- ...................................................................... -->
|
||||
|
||||
</catalog>
|
|
@ -0,0 +1,384 @@
|
|||
<!-- ...................................................................... -->
|
||||
<!-- DocBook character entities module V4.3CR3 ............................... -->
|
||||
<!-- File dbcentx.mod ..................................................... -->
|
||||
|
||||
<!-- Copyright 1992-2002 HaL Computer Systems, Inc.,
|
||||
O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
|
||||
Corporation, Norman Walsh, Sun Microsystems, Inc., and the
|
||||
Organization for the Advancement of Structured Information
|
||||
Standards (OASIS).
|
||||
|
||||
$Id$
|
||||
|
||||
Permission to use, copy, modify and distribute the DocBook DTD
|
||||
and its accompanying documentation for any purpose and without fee
|
||||
is hereby granted in perpetuity, provided that the above copyright
|
||||
notice and this paragraph appear in all copies. The copyright
|
||||
holders make no representation about the suitability of the DTD for
|
||||
any purpose. It is provided "as is" without expressed or implied
|
||||
warranty.
|
||||
|
||||
If you modify the DocBook DTD in any way, except for declaring and
|
||||
referencing additional sets of general entities and declaring
|
||||
additional notations, label your DTD as a variant of DocBook. See
|
||||
the maintenance documentation for more information.
|
||||
|
||||
Please direct all questions, bug reports, or suggestions for
|
||||
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||
information, see http://www.oasis-open.org/docbook/.
|
||||
-->
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
|
||||
<!-- This module contains the entity declarations for the standard ISO
|
||||
entity sets used by DocBook.
|
||||
|
||||
In DTD driver files referring to this module, please use an entity
|
||||
declaration that uses the public identifier shown below:
|
||||
|
||||
<!ENTITY % dbcent PUBLIC
|
||||
"-//OASIS//ENTITIES DocBook Character Entities V4.3CR3//EN"
|
||||
"dbcentx.mod">
|
||||
%dbcent;
|
||||
|
||||
See the documentation for detailed information on the parameter
|
||||
entity and module scheme used in DocBook, customizing DocBook and
|
||||
planning for interchange, and changes made since the last release
|
||||
of DocBook.
|
||||
-->
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
|
||||
<![%sgml.features;[
|
||||
|
||||
<!ENTITY % ISOamsa.module "INCLUDE">
|
||||
<![ %ISOamsa.module; [
|
||||
<!ENTITY % ISOamsa PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN">
|
||||
<!--end of ISOamsa.module-->]]>
|
||||
|
||||
<!ENTITY % ISOamsb.module "INCLUDE">
|
||||
<![ %ISOamsb.module; [
|
||||
<!ENTITY % ISOamsb PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN">
|
||||
<!--end of ISOamsb.module-->]]>
|
||||
|
||||
<!ENTITY % ISOamsc.module "INCLUDE">
|
||||
<![ %ISOamsc.module; [
|
||||
<!ENTITY % ISOamsc PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN">
|
||||
<!--end of ISOamsc.module-->]]>
|
||||
|
||||
<!ENTITY % ISOamsn.module "INCLUDE">
|
||||
<![ %ISOamsn.module; [
|
||||
<!ENTITY % ISOamsn PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN">
|
||||
<!--end of ISOamsn.module-->]]>
|
||||
|
||||
<!ENTITY % ISOamso.module "INCLUDE">
|
||||
<![ %ISOamso.module; [
|
||||
<!ENTITY % ISOamso PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN">
|
||||
<!--end of ISOamso.module-->]]>
|
||||
|
||||
<!ENTITY % ISOamsr.module "INCLUDE">
|
||||
<![ %ISOamsr.module; [
|
||||
<!ENTITY % ISOamsr PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN">
|
||||
<!--end of ISOamsr.module-->]]>
|
||||
|
||||
<!ENTITY % ISObox.module "INCLUDE">
|
||||
<![ %ISObox.module; [
|
||||
<!ENTITY % ISObox PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Box and Line Drawing//EN">
|
||||
<!--end of ISObox.module-->]]>
|
||||
|
||||
<!ENTITY % ISOcyr1.module "INCLUDE">
|
||||
<![ %ISOcyr1.module; [
|
||||
<!ENTITY % ISOcyr1 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Russian Cyrillic//EN">
|
||||
<!--end of ISOcyr1.module-->]]>
|
||||
|
||||
<!ENTITY % ISOcyr2.module "INCLUDE">
|
||||
<![ %ISOcyr2.module; [
|
||||
<!ENTITY % ISOcyr2 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN">
|
||||
<!--end of ISOcyr2.module-->]]>
|
||||
|
||||
<!ENTITY % ISOdia.module "INCLUDE">
|
||||
<![ %ISOdia.module; [
|
||||
<!ENTITY % ISOdia PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Diacritical Marks//EN">
|
||||
<!--end of ISOdia.module-->]]>
|
||||
|
||||
<!ENTITY % ISOgrk1.module "INCLUDE">
|
||||
<![ %ISOgrk1.module; [
|
||||
<!ENTITY % ISOgrk1 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Greek Letters//EN">
|
||||
<!--end of ISOgrk1.module-->]]>
|
||||
|
||||
<!ENTITY % ISOgrk2.module "INCLUDE">
|
||||
<![ %ISOgrk2.module; [
|
||||
<!ENTITY % ISOgrk2 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Monotoniko Greek//EN">
|
||||
<!--end of ISOgrk2.module-->]]>
|
||||
|
||||
<!ENTITY % ISOgrk3.module "INCLUDE">
|
||||
<![ %ISOgrk3.module; [
|
||||
<!ENTITY % ISOgrk3 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Greek Symbols//EN">
|
||||
<!--end of ISOgrk3.module-->]]>
|
||||
|
||||
<!ENTITY % ISOgrk4.module "INCLUDE">
|
||||
<![ %ISOgrk4.module; [
|
||||
<!ENTITY % ISOgrk4 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN">
|
||||
<!--end of ISOgrk4.module-->]]>
|
||||
|
||||
<!ENTITY % ISOlat1.module "INCLUDE">
|
||||
<![ %ISOlat1.module; [
|
||||
<!ENTITY % ISOlat1 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Latin 1//EN">
|
||||
<!--end of ISOlat1.module-->]]>
|
||||
|
||||
<!ENTITY % ISOlat2.module "INCLUDE">
|
||||
<![ %ISOlat2.module; [
|
||||
<!ENTITY % ISOlat2 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Latin 2//EN">
|
||||
<!--end of ISOlat2.module-->]]>
|
||||
|
||||
<!ENTITY % ISOnum.module "INCLUDE">
|
||||
<![ %ISOnum.module; [
|
||||
<!ENTITY % ISOnum PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN">
|
||||
<!--end of ISOnum.module-->]]>
|
||||
|
||||
<!ENTITY % ISOpub.module "INCLUDE">
|
||||
<![ %ISOpub.module; [
|
||||
<!ENTITY % ISOpub PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Publishing//EN">
|
||||
<!--end of ISOpub.module-->]]>
|
||||
|
||||
<!ENTITY % ISOtech.module "INCLUDE">
|
||||
<![ %ISOtech.module; [
|
||||
<!ENTITY % ISOtech PUBLIC
|
||||
"ISO 8879:1986//ENTITIES General Technical//EN">
|
||||
<!--end of ISOtech.module-->]]>
|
||||
|
||||
<!--end of sgml.features-->]]>
|
||||
|
||||
<![%xml.features;[
|
||||
|
||||
<!ENTITY % ISOamsa.module "INCLUDE">
|
||||
<![%ISOamsa.module;[
|
||||
<!ENTITY % ISOamsa PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN//XML"
|
||||
"ent/iso-amsa.ent">
|
||||
<!--end of ISOamsa.module-->]]>
|
||||
|
||||
<!ENTITY % ISOamsb.module "INCLUDE">
|
||||
<![%ISOamsb.module;[
|
||||
<!ENTITY % ISOamsb PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN//XML"
|
||||
"ent/iso-amsb.ent">
|
||||
<!--end of ISOamsb.module-->]]>
|
||||
|
||||
<!ENTITY % ISOamsc.module "INCLUDE">
|
||||
<![%ISOamsc.module;[
|
||||
<!ENTITY % ISOamsc PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN//XML"
|
||||
"ent/iso-amsc.ent">
|
||||
<!--end of ISOamsc.module-->]]>
|
||||
|
||||
<!ENTITY % ISOamsn.module "INCLUDE">
|
||||
<![%ISOamsn.module;[
|
||||
<!ENTITY % ISOamsn PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN//XML"
|
||||
"ent/iso-amsn.ent">
|
||||
<!--end of ISOamsn.module-->]]>
|
||||
|
||||
<!ENTITY % ISOamso.module "INCLUDE">
|
||||
<![%ISOamso.module;[
|
||||
<!ENTITY % ISOamso PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN//XML"
|
||||
"ent/iso-amso.ent">
|
||||
<!--end of ISOamso.module-->]]>
|
||||
|
||||
<!ENTITY % ISOamsr.module "INCLUDE">
|
||||
<![%ISOamsr.module;[
|
||||
<!ENTITY % ISOamsr PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN//XML"
|
||||
"ent/iso-amsr.ent">
|
||||
<!--end of ISOamsr.module-->]]>
|
||||
|
||||
<!ENTITY % ISObox.module "INCLUDE">
|
||||
<![%ISObox.module;[
|
||||
<!ENTITY % ISObox PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Box and Line Drawing//EN//XML"
|
||||
"ent/iso-box.ent">
|
||||
<!--end of ISObox.module-->]]>
|
||||
|
||||
<!ENTITY % ISOcyr1.module "INCLUDE">
|
||||
<![%ISOcyr1.module;[
|
||||
<!ENTITY % ISOcyr1 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Russian Cyrillic//EN//XML"
|
||||
"ent/iso-cyr1.ent">
|
||||
<!--end of ISOcyr1.module-->]]>
|
||||
|
||||
<!ENTITY % ISOcyr2.module "INCLUDE">
|
||||
<![%ISOcyr2.module;[
|
||||
<!ENTITY % ISOcyr2 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN//XML"
|
||||
"ent/iso-cyr2.ent">
|
||||
<!--end of ISOcyr2.module-->]]>
|
||||
|
||||
<!ENTITY % ISOdia.module "INCLUDE">
|
||||
<![%ISOdia.module;[
|
||||
<!ENTITY % ISOdia PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML"
|
||||
"ent/iso-dia.ent">
|
||||
<!--end of ISOdia.module-->]]>
|
||||
|
||||
<!ENTITY % ISOgrk1.module "INCLUDE">
|
||||
<![%ISOgrk1.module;[
|
||||
<!ENTITY % ISOgrk1 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Greek Letters//EN//XML"
|
||||
"ent/iso-grk1.ent">
|
||||
<!--end of ISOgrk1.module-->]]>
|
||||
|
||||
<!ENTITY % ISOgrk2.module "INCLUDE">
|
||||
<![%ISOgrk2.module;[
|
||||
<!ENTITY % ISOgrk2 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Monotoniko Greek//EN//XML"
|
||||
"ent/iso-grk2.ent">
|
||||
<!--end of ISOgrk2.module-->]]>
|
||||
|
||||
<!ENTITY % ISOgrk3.module "INCLUDE">
|
||||
<![%ISOgrk3.module;[
|
||||
<!ENTITY % ISOgrk3 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Greek Symbols//EN//XML"
|
||||
"ent/iso-grk3.ent">
|
||||
<!--end of ISOgrk3.module-->]]>
|
||||
|
||||
<!ENTITY % ISOgrk4.module "INCLUDE">
|
||||
<![%ISOgrk4.module;[
|
||||
<!ENTITY % ISOgrk4 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN//XML"
|
||||
"ent/iso-grk4.ent">
|
||||
<!--end of ISOgrk4.module-->]]>
|
||||
|
||||
<!ENTITY % ISOlat1.module "INCLUDE">
|
||||
<![%ISOlat1.module;[
|
||||
<!ENTITY % ISOlat1 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
|
||||
"ent/iso-lat1.ent">
|
||||
<!--end of ISOlat1.module-->]]>
|
||||
|
||||
<!ENTITY % ISOlat2.module "INCLUDE">
|
||||
<![%ISOlat2.module;[
|
||||
<!ENTITY % ISOlat2 PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Added Latin 2//EN//XML"
|
||||
"ent/iso-lat2.ent">
|
||||
<!--end of ISOlat2.module-->]]>
|
||||
|
||||
<!ENTITY % ISOnum.module "INCLUDE">
|
||||
<![%ISOnum.module;[
|
||||
<!ENTITY % ISOnum PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML"
|
||||
"ent/iso-num.ent">
|
||||
<!--end of ISOnum.module-->]]>
|
||||
|
||||
<!ENTITY % ISOpub.module "INCLUDE">
|
||||
<![%ISOpub.module;[
|
||||
<!ENTITY % ISOpub PUBLIC
|
||||
"ISO 8879:1986//ENTITIES Publishing//EN//XML"
|
||||
"ent/iso-pub.ent">
|
||||
<!--end of ISOpub.module-->]]>
|
||||
|
||||
<!ENTITY % ISOtech.module "INCLUDE">
|
||||
<![%ISOtech.module;[
|
||||
<!ENTITY % ISOtech PUBLIC
|
||||
"ISO 8879:1986//ENTITIES General Technical//EN//XML"
|
||||
"ent/iso-tech.ent">
|
||||
<!--end of ISOtech.module-->]]>
|
||||
|
||||
<!--end of xml.features-->]]>
|
||||
|
||||
<![ %ISOamsa.module; [
|
||||
%ISOamsa;
|
||||
]]>
|
||||
|
||||
<![ %ISOamsb.module; [
|
||||
%ISOamsb;
|
||||
]]>
|
||||
|
||||
<![ %ISOamsc.module; [
|
||||
%ISOamsc;
|
||||
]]>
|
||||
|
||||
<![ %ISOamsn.module; [
|
||||
%ISOamsn;
|
||||
]]>
|
||||
|
||||
<![ %ISOamso.module; [
|
||||
%ISOamso;
|
||||
]]>
|
||||
|
||||
<![ %ISOamsr.module; [
|
||||
%ISOamsr;
|
||||
]]>
|
||||
|
||||
<![ %ISObox.module; [
|
||||
%ISObox;
|
||||
]]>
|
||||
|
||||
<![ %ISOcyr1.module; [
|
||||
%ISOcyr1;
|
||||
]]>
|
||||
|
||||
<![ %ISOcyr2.module; [
|
||||
%ISOcyr2;
|
||||
]]>
|
||||
|
||||
<![ %ISOdia.module; [
|
||||
%ISOdia;
|
||||
]]>
|
||||
|
||||
<![ %ISOgrk1.module; [
|
||||
%ISOgrk1;
|
||||
]]>
|
||||
|
||||
<![ %ISOgrk2.module; [
|
||||
%ISOgrk2;
|
||||
]]>
|
||||
|
||||
<![ %ISOgrk3.module; [
|
||||
%ISOgrk3;
|
||||
]]>
|
||||
|
||||
<![ %ISOgrk4.module; [
|
||||
%ISOgrk4;
|
||||
]]>
|
||||
|
||||
<![ %ISOlat1.module; [
|
||||
%ISOlat1;
|
||||
]]>
|
||||
|
||||
<![ %ISOlat2.module; [
|
||||
%ISOlat2;
|
||||
]]>
|
||||
|
||||
<![ %ISOnum.module; [
|
||||
%ISOnum;
|
||||
]]>
|
||||
|
||||
<![ %ISOpub.module; [
|
||||
%ISOpub;
|
||||
]]>
|
||||
|
||||
<![ %ISOtech.module; [
|
||||
%ISOtech;
|
||||
]]>
|
||||
|
||||
<!-- End of DocBook character entity sets module V4.3CR3 ..................... -->
|
||||
<!-- ...................................................................... -->
|
|
@ -0,0 +1,41 @@
|
|||
<!-- ...................................................................... -->
|
||||
<!-- DocBook additional general entities V4.3CR3 ............................. -->
|
||||
|
||||
<!-- Copyright 1992-2002 HaL Computer Systems, Inc.,
|
||||
O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
|
||||
Corporation, Norman Walsh, Sun Microsystems, Inc., and the
|
||||
Organization for the Advancement of Structured Information
|
||||
Standards (OASIS).
|
||||
|
||||
In DTD driver files referring to this module, please use an entity
|
||||
declaration that uses the public identifier shown below:
|
||||
|
||||
<!ENTITY % dbgenent PUBLIC
|
||||
"-//OASIS//ENTITIES DocBook Additional General Entities V4.3CR3//EN"
|
||||
"dbgenent.mod">
|
||||
%dbgenent;
|
||||
-->
|
||||
|
||||
<!-- File dbgenent.mod .................................................... -->
|
||||
|
||||
<!-- You can edit this file to add the following:
|
||||
|
||||
o General entity declarations of any kind. For example:
|
||||
|
||||
<!ENTITY productname "WinWidget"> (small boilerplate)
|
||||
<!ENTITY legal-notice SYSTEM "notice.sgm"> (large boilerplate)
|
||||
|
||||
o Notation declarations. For example:
|
||||
|
||||
<!NOTATION chicken-scratch SYSTEM>
|
||||
|
||||
o Declarations for and references to external parameter entities
|
||||
containing collections of any of the above. For example:
|
||||
|
||||
<!ENTITY % all-titles PUBLIC "-//DocTools//ELEMENTS Book Titles//EN"
|
||||
"booktitles.ent">
|
||||
%all-titles;
|
||||
-->
|
||||
|
||||
<!-- End of DocBook additional general entities V4.3CR3 ...................... -->
|
||||
<!-- ...................................................................... -->
|
|
@ -0,0 +1,102 @@
|
|||
<!-- ...................................................................... -->
|
||||
<!-- DocBook notations module V4.3CR3 ........................................ -->
|
||||
<!-- File dbnotnx.mod ..................................................... -->
|
||||
|
||||
<!-- Copyright 1992-2002 HaL Computer Systems, Inc.,
|
||||
O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
|
||||
Corporation, Norman Walsh, Sun Microsystems, Inc., and the
|
||||
Organization for the Advancement of Structured Information
|
||||
Standards (OASIS).
|
||||
|
||||
$Id$
|
||||
|
||||
Permission to use, copy, modify and distribute the DocBook DTD
|
||||
and its accompanying documentation for any purpose and without fee
|
||||
is hereby granted in perpetuity, provided that the above copyright
|
||||
notice and this paragraph appear in all copies. The copyright
|
||||
holders make no representation about the suitability of the DTD for
|
||||
any purpose. It is provided "as is" without expressed or implied
|
||||
warranty.
|
||||
|
||||
If you modify the DocBook DTD in any way, except for declaring and
|
||||
referencing additional sets of general entities and declaring
|
||||
additional notations, label your DTD as a variant of DocBook. See
|
||||
the maintenance documentation for more information.
|
||||
|
||||
Please direct all questions, bug reports, or suggestions for
|
||||
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||
information, see http://www.oasis-open.org/docbook/.
|
||||
-->
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
|
||||
<!-- This module contains the entity declarations for the standard ISO
|
||||
entity sets used by DocBook.
|
||||
|
||||
In DTD driver files referring to this module, please use an entity
|
||||
declaration that uses the public identifier shown below:
|
||||
|
||||
<!ENTITY % dbnotn PUBLIC
|
||||
"-//OASIS//ENTITIES DocBook Notations V4.3CR3//EN"
|
||||
"dbnotnx.mod">
|
||||
%dbnotn;
|
||||
|
||||
See the documentation for detailed information on the parameter
|
||||
entity and module scheme used in DocBook, customizing DocBook and
|
||||
planning for interchange, and changes made since the last release
|
||||
of DocBook.
|
||||
-->
|
||||
|
||||
<!ENTITY % local.notation.class "">
|
||||
<!ENTITY % notation.class
|
||||
"BMP| CGM-CHAR | CGM-BINARY | CGM-CLEAR | DITROFF | DVI
|
||||
| EPS | EQN | FAX | GIF | GIF87a | GIF89a
|
||||
| JPG | JPEG | IGES | PCX
|
||||
| PIC | PNG | PS | SGML | TBL | TEX | TIFF | WMF | WPG
|
||||
| SVG | PDF | SWF
|
||||
| linespecific
|
||||
%local.notation.class;">
|
||||
|
||||
<!NOTATION BMP PUBLIC
|
||||
"+//ISBN 0-7923-94.2-1::Graphic Notation//NOTATION Microsoft Windows bitmap//EN">
|
||||
<!NOTATION CGM-CHAR PUBLIC "ISO 8632/2//NOTATION Character encoding//EN">
|
||||
<!NOTATION CGM-BINARY PUBLIC "ISO 8632/3//NOTATION Binary encoding//EN">
|
||||
<!NOTATION CGM-CLEAR PUBLIC "ISO 8632/4//NOTATION Clear text encoding//EN">
|
||||
<!NOTATION DITROFF SYSTEM "DITROFF">
|
||||
<!NOTATION DVI SYSTEM "DVI">
|
||||
<!NOTATION EPS PUBLIC
|
||||
"+//ISBN 0-201-18127-4::Adobe//NOTATION PostScript Language Ref. Manual//EN">
|
||||
<!NOTATION EQN SYSTEM "EQN">
|
||||
<!NOTATION FAX PUBLIC
|
||||
"-//USA-DOD//NOTATION CCITT Group 4 Facsimile Type 1 Untiled Raster//EN">
|
||||
<!NOTATION GIF SYSTEM "GIF">
|
||||
<!NOTATION GIF87a PUBLIC
|
||||
"-//CompuServe//NOTATION Graphics Interchange Format 87a//EN">
|
||||
|
||||
<!NOTATION GIF89a PUBLIC
|
||||
"-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">
|
||||
<!NOTATION JPG SYSTEM "JPG">
|
||||
<!NOTATION JPEG SYSTEM "JPG">
|
||||
<!NOTATION IGES PUBLIC
|
||||
"-//USA-DOD//NOTATION (ASME/ANSI Y14.26M-1987) Initial Graphics Exchange Specification//EN">
|
||||
<!NOTATION PCX PUBLIC
|
||||
"+//ISBN 0-7923-94.2-1::Graphic Notation//NOTATION ZSoft PCX bitmap//EN">
|
||||
<!NOTATION PIC SYSTEM "PIC">
|
||||
<!NOTATION PNG SYSTEM "http://www.w3.org/TR/REC-png">
|
||||
<!NOTATION PS SYSTEM "PS">
|
||||
<!NOTATION SGML PUBLIC
|
||||
"ISO 8879:1986//NOTATION Standard Generalized Markup Language//EN">
|
||||
<!NOTATION TBL SYSTEM "TBL">
|
||||
<!NOTATION TEX PUBLIC
|
||||
"+//ISBN 0-201-13448-9::Knuth//NOTATION The TeXbook//EN">
|
||||
<!NOTATION TIFF SYSTEM "TIFF">
|
||||
<!NOTATION WMF PUBLIC
|
||||
"+//ISBN 0-7923-94.2-1::Graphic Notation//NOTATION Microsoft Windows Metafile//EN">
|
||||
<!NOTATION WPG SYSTEM "WPG"> <!--WordPerfect Graphic format-->
|
||||
<!NOTATION SVG SYSTEM "http://www.w3.org/TR/SVG/">
|
||||
<!NOTATION PDF SYSTEM "http://www.adobe.com/products/acrobat/adobepdf.html">
|
||||
<!NOTATION SWF SYSTEM "http://www.macromedia.com/software/flash">
|
||||
<!NOTATION linespecific SYSTEM "linespecific">
|
||||
|
||||
<!-- End of DocBook notations module V4.3CR3 ................................. -->
|
||||
<!-- ...................................................................... -->
|
|
@ -0,0 +1,110 @@
|
|||
-- ...................................................................... --
|
||||
-- Catalog data for DocBook XML V4.3CR3 .................................... --
|
||||
-- File docbook.cat ..................................................... --
|
||||
|
||||
-- Please direct all questions, bug reports, or suggestions for
|
||||
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||
information, see http://www.oasis-open.org/.
|
||||
--
|
||||
|
||||
-- This is the catalog data file for DocBook XML V4.3CR3. It is provided as
|
||||
a convenience in building your own catalog files. You need not use
|
||||
the filenames listed here, and need not use the filename method of
|
||||
identifying storage objects at all. See the documentation for
|
||||
detailed information on the files associated with the DocBook DTD.
|
||||
See SGML Open Technical Resolution 9401 for detailed information
|
||||
on supplying and using catalog data.
|
||||
--
|
||||
|
||||
-- ...................................................................... --
|
||||
-- DocBook driver file .................................................. --
|
||||
|
||||
PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||
"docbookx.dtd"
|
||||
|
||||
-- ...................................................................... --
|
||||
-- DocBook modules ...................................................... --
|
||||
|
||||
PUBLIC "-//OASIS//DTD DocBook CALS Table Model V4.3CR3//EN"
|
||||
"calstblx.dtd"
|
||||
|
||||
PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN"
|
||||
"soextblx.dtd"
|
||||
|
||||
PUBLIC "-//OASIS//ELEMENTS DocBook Information Pool V4.3CR3//EN"
|
||||
"dbpoolx.mod"
|
||||
|
||||
PUBLIC "-//OASIS//ELEMENTS DocBook Document Hierarchy V4.3CR3//EN"
|
||||
"dbhierx.mod"
|
||||
|
||||
PUBLIC "-//OASIS//ENTITIES DocBook Additional General Entities V4.3CR3//EN"
|
||||
"dbgenent.mod"
|
||||
|
||||
PUBLIC "-//OASIS//ENTITIES DocBook Notations V4.3CR3//EN"
|
||||
"dbnotnx.mod"
|
||||
|
||||
PUBLIC "-//OASIS//ENTITIES DocBook Character Entities V4.3CR3//EN"
|
||||
"dbcentx.mod"
|
||||
|
||||
-- ...................................................................... --
|
||||
-- ISO entity sets ...................................................... --
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML"
|
||||
"ent/iso-dia.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML"
|
||||
"ent/iso-num.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Publishing//EN//XML"
|
||||
"ent/iso-pub.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES General Technical//EN//XML"
|
||||
"ent/iso-tech.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
|
||||
"ent/iso-lat1.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Added Latin 2//EN//XML"
|
||||
"ent/iso-lat2.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Greek Letters//EN//XML"
|
||||
"ent/iso-grk1.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Monotoniko Greek//EN//XML"
|
||||
"ent/iso-grk2.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Greek Symbols//EN//XML"
|
||||
"ent/iso-grk3.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN//XML"
|
||||
"ent/iso-grk4.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN//XML"
|
||||
"ent/iso-amsa.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN//XML"
|
||||
"ent/iso-amsb.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN//XML"
|
||||
"ent/iso-amsc.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN//XML"
|
||||
"ent/iso-amsn.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN//XML"
|
||||
"ent/iso-amso.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN//XML"
|
||||
"ent/iso-amsr.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Box and Line Drawing//EN//XML"
|
||||
"ent/iso-box.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Russian Cyrillic//EN//XML"
|
||||
"ent/iso-cyr1.ent"
|
||||
|
||||
PUBLIC "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN//XML"
|
||||
"ent/iso-cyr2.ent"
|
||||
|
||||
-- End of catalog data for DocBook XML V4.3CR3 ............................. --
|
||||
-- ...................................................................... --
|
|
@ -0,0 +1,165 @@
|
|||
<!-- ...................................................................... -->
|
||||
<!-- DocBook XML DTD V4.3CR3 ................................................. -->
|
||||
<!-- File docbookx.dtd .................................................... -->
|
||||
|
||||
<!-- Copyright 1992-2002 HaL Computer Systems, Inc.,
|
||||
O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
|
||||
Corporation, Norman Walsh, Sun Microsystems, Inc., and the
|
||||
Organization for the Advancement of Structured Information
|
||||
Standards (OASIS).
|
||||
|
||||
$Id$
|
||||
|
||||
Permission to use, copy, modify and distribute the DocBook XML DTD
|
||||
and its accompanying documentation for any purpose and without fee
|
||||
is hereby granted in perpetuity, provided that the above copyright
|
||||
notice and this paragraph appear in all copies. The copyright
|
||||
holders make no representation about the suitability of the DTD for
|
||||
any purpose. It is provided "as is" without expressed or implied
|
||||
warranty.
|
||||
|
||||
If you modify the DocBook DTD in any way, except for declaring and
|
||||
referencing additional sets of general entities and declaring
|
||||
additional notations, label your DTD as a variant of DocBook. See
|
||||
the maintenance documentation for more information.
|
||||
|
||||
Please direct all questions, bug reports, or suggestions for
|
||||
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||
information, see http://www.oasis-open.org/docbook/.
|
||||
-->
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
|
||||
<!-- This is the driver file for V4.3CR3 of the DocBook DTD.
|
||||
Please use the following formal public identifier to identify it:
|
||||
|
||||
"-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||
|
||||
For example, if your document's top-level element is Book, and
|
||||
you are using DocBook directly, use the FPI in the DOCTYPE
|
||||
declaration:
|
||||
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.3b2/docbookx.dtd"
|
||||
[...]>
|
||||
|
||||
Or, if you have a higher-level driver file that customizes DocBook,
|
||||
use the FPI in the parameter entity declaration:
|
||||
|
||||
<!ENTITY % DocBookDTD PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.3b2/docbookx.dtd">
|
||||
%DocBookDTD;
|
||||
|
||||
See the documentation for detailed information on the parameter
|
||||
entity and module scheme used in DocBook, customizing DocBook and
|
||||
planning for interchange, and changes made since the last release
|
||||
of DocBook.
|
||||
-->
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
<!-- Enable SGML features ................................................. -->
|
||||
|
||||
<!ENTITY % sgml.features "IGNORE">
|
||||
<![%sgml.features;[
|
||||
<!ENTITY % xml.features "IGNORE">
|
||||
]]>
|
||||
<!ENTITY % xml.features "INCLUDE">
|
||||
|
||||
<![%sgml.features;[
|
||||
<![%xml.features;[
|
||||
|
||||
<!-- ERROR: Exactly one of xml.features and sgml.features must be turned on! -->
|
||||
<!ENTITY % dbnotn SYSTEM "http://www.oasis-open.org/docbook/xml/configerror.txt">
|
||||
<!ENTITY % dbcent SYSTEM "http://www.oasis-open.org/docbook/xml/configerror.txt">
|
||||
<!ENTITY % dbpool SYSTEM "http://www.oasis-open.org/docbook/xml/configerror.txt">
|
||||
<!ENTITY % dbhier SYSTEM "http://www.oasis-open.org/docbook/xml/configerror.txt">
|
||||
<!ENTITY % dbgenent SYSTEM "http://www.oasis-open.org/docbook/xml/configerror.txt">
|
||||
|
||||
]]>
|
||||
]]>
|
||||
|
||||
<![%sgml.features;[
|
||||
<!ENTITY % ho "- O">
|
||||
<!ENTITY % hh "- -">
|
||||
]]>
|
||||
|
||||
<![%xml.features;[
|
||||
<!ENTITY % ho "">
|
||||
<!ENTITY % hh "">
|
||||
]]>
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
<!-- Notation declarations ................................................ -->
|
||||
|
||||
<!ENTITY % dbnotn.module "INCLUDE">
|
||||
<![%dbnotn.module;[
|
||||
<!ENTITY % dbnotn PUBLIC
|
||||
"-//OASIS//ENTITIES DocBook Notations V4.3CR3//EN"
|
||||
"dbnotnx.mod">
|
||||
%dbnotn;
|
||||
]]>
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
<!-- ISO character entity sets ............................................ -->
|
||||
|
||||
<!ENTITY % dbcent.module "INCLUDE">
|
||||
<![%dbcent.module;[
|
||||
|
||||
<![%sgml.features;[
|
||||
<!ENTITY euro SDATA "[euro ]"><!-- euro sign -->
|
||||
]]>
|
||||
<![%xml.features;[
|
||||
<!ENTITY euro "€"><!-- euro sign, U+20AC NEW -->
|
||||
]]>
|
||||
|
||||
<!ENTITY % dbcent PUBLIC
|
||||
"-//OASIS//ENTITIES DocBook Character Entities V4.3CR3//EN"
|
||||
"dbcentx.mod">
|
||||
%dbcent;
|
||||
]]>
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
<!-- DTD modules .......................................................... -->
|
||||
|
||||
<!-- Information pool .............. -->
|
||||
|
||||
<!ENTITY % dbpool.module "INCLUDE">
|
||||
<![ %dbpool.module; [
|
||||
<!ENTITY % dbpool PUBLIC
|
||||
"-//OASIS//ELEMENTS DocBook Information Pool V4.3CR3//EN"
|
||||
"dbpoolx.mod">
|
||||
%dbpool;
|
||||
]]>
|
||||
|
||||
<!-- Redeclaration placeholder ..... -->
|
||||
|
||||
<!ENTITY % intermod.redecl.module "IGNORE">
|
||||
<![%intermod.redecl.module;[
|
||||
<!-- Defining rdbmods here makes some buggy XML parsers happy. -->
|
||||
<!ENTITY % rdbmods "">
|
||||
%rdbmods;
|
||||
<!--end of intermod.redecl.module-->]]>
|
||||
|
||||
<!-- Document hierarchy ............ -->
|
||||
|
||||
<!ENTITY % dbhier.module "INCLUDE">
|
||||
<![ %dbhier.module; [
|
||||
<!ENTITY % dbhier PUBLIC
|
||||
"-//OASIS//ELEMENTS DocBook Document Hierarchy V4.3CR3//EN"
|
||||
"dbhierx.mod">
|
||||
%dbhier;
|
||||
]]>
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
<!-- Other general entities ............................................... -->
|
||||
|
||||
<!ENTITY % dbgenent.module "INCLUDE">
|
||||
<![ %dbgenent.module; [
|
||||
<!ENTITY % dbgenent PUBLIC
|
||||
"-//OASIS//ENTITIES DocBook Additional General Entities V4.3CR3//EN"
|
||||
"dbgenent.mod">
|
||||
%dbgenent;
|
||||
]]>
|
||||
|
||||
<!-- End of DocBook XML DTD V4.3CR3 .......................................... -->
|
||||
<!-- ...................................................................... -->
|
|
@ -0,0 +1,63 @@
|
|||
<!-- iso-amsa.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz
|
||||
With additional derivations from
|
||||
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||
|
||||
<!ENTITY cularr "↶"> <!-- ANTICLOCKWISE TOP SEMICIRCLE ARROW -->
|
||||
<!ENTITY curarr "↷"> <!-- CLOCKWISE TOP SEMICIRCLE ARROW -->
|
||||
<!ENTITY dArr "⇓"> <!-- DOWNWARDS DOUBLE ARROW -->
|
||||
<!ENTITY darr2 "⇊"> <!-- DOWNWARDS PAIRED ARROWS -->
|
||||
<!ENTITY dharl "⇃"> <!-- DOWNWARDS HARPOON WITH BARB LEFTWARDS -->
|
||||
<!ENTITY dharr "⇂"> <!-- DOWNWARDS HARPOON WITH BARB RIGHTWARDS -->
|
||||
<!ENTITY lAarr "⇚"> <!-- LEFTWARDS TRIPLE ARROW -->
|
||||
<!ENTITY Larr "↞"> <!-- LEFTWARDS TWO HEADED ARROW -->
|
||||
<!ENTITY larr2 "⇇"> <!-- LEFTWARDS PAIRED ARROWS -->
|
||||
<!ENTITY larrhk "↩"> <!-- LEFTWARDS ARROW WITH HOOK -->
|
||||
<!ENTITY larrlp "↫"> <!-- LEFTWARDS ARROW WITH LOOP -->
|
||||
<!ENTITY larrtl "↢"> <!-- LEFTWARDS ARROW WITH TAIL -->
|
||||
<!ENTITY lhard "↽"> <!-- LEFTWARDS HARPOON WITH BARB DOWNWARDS -->
|
||||
<!ENTITY lharu "↼"> <!-- LEFTWARDS HARPOON WITH BARB UPWARDS -->
|
||||
<!ENTITY hArr "⇔"> <!-- -->
|
||||
<!ENTITY harr "↔"> <!-- LEFT RIGHT ARROW -->
|
||||
<!ENTITY lrarr2 "⇆"> <!-- LEFTWARDS ARROW OVER RIGHTWARDS ARROW -->
|
||||
<!ENTITY rlarr2 "⇄"> <!-- RIGHTWARDS ARROW OVER LEFTWARDS ARROW -->
|
||||
<!ENTITY harrw "↭"> <!-- LEFT RIGHT WAVE ARROW -->
|
||||
<!ENTITY rlhar2 "⇌"> <!-- RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON -->
|
||||
<!ENTITY lrhar2 "⇋"> <!-- LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON -->
|
||||
<!ENTITY lsh "↰"> <!-- UPWARDS ARROW WITH TIP LEFTWARDS -->
|
||||
<!ENTITY map "↦"> <!-- RIGHTWARDS ARROW FROM BAR -->
|
||||
<!ENTITY mumap "⊸"> <!-- MULTIMAP -->
|
||||
<!ENTITY nearr "↗"> <!-- NORTH EAST ARROW -->
|
||||
<!ENTITY nlArr "⇍"> <!-- LEFTWARDS DOUBLE ARROW WITH STROKE -->
|
||||
<!ENTITY nlarr "↚"> <!-- LEFTWARDS ARROW WITH STROKE -->
|
||||
<!ENTITY nhArr "⇎"> <!-- LEFT RIGHT DOUBLE ARROW WITH STROKE -->
|
||||
<!ENTITY nharr "↮"> <!-- LEFT RIGHT ARROW WITH STROKE -->
|
||||
<!ENTITY nrarr "↛"> <!-- RIGHTWARDS ARROW WITH STROKE -->
|
||||
<!ENTITY nrArr "⇏"> <!-- RIGHTWARDS DOUBLE ARROW WITH STROKE -->
|
||||
<!ENTITY nwarr "↖"> <!-- NORTH WEST ARROW -->
|
||||
<!ENTITY olarr "↺"> <!-- ANTICLOCKWISE OPEN CIRCLE ARROW -->
|
||||
<!ENTITY orarr "↻"> <!-- CLOCKWISE OPEN CIRCLE ARROW -->
|
||||
<!ENTITY rAarr "⇛"> <!-- RIGHTWARDS TRIPLE ARROW -->
|
||||
<!ENTITY Rarr "↠"> <!-- RIGHTWARDS TWO HEADED ARROW -->
|
||||
<!ENTITY rarr2 "⇉"> <!-- RIGHTWARDS PAIRED ARROWS -->
|
||||
<!ENTITY rarrhk "↪"> <!-- RIGHTWARDS ARROW WITH HOOK -->
|
||||
<!ENTITY rarrlp "↬"> <!-- RIGHTWARDS ARROW WITH LOOP -->
|
||||
<!ENTITY rarrtl "↣"> <!-- RIGHTWARDS ARROW WITH TAIL -->
|
||||
<!ENTITY rarrw "↝"> <!-- RIGHTWARDS SQUIGGLE ARROW -->
|
||||
<!ENTITY rhard "⇁"> <!-- RIGHTWARDS HARPOON WITH BARB DOWNWARDS -->
|
||||
<!ENTITY rharu "⇀"> <!-- RIGHTWARDS HARPOON WITH BARB UPWARDS -->
|
||||
<!ENTITY rsh "↱"> <!-- UPWARDS ARROW WITH TIP RIGHTWARDS -->
|
||||
<!ENTITY drarr "↘"> <!-- SOUTH EAST ARROW -->
|
||||
<!ENTITY dlarr "↙"> <!-- SOUTH WEST ARROW -->
|
||||
<!ENTITY uArr "⇑"> <!-- UPWARDS DOUBLE ARROW -->
|
||||
<!ENTITY uarr2 "⇈"> <!-- UPWARDS PAIRED ARROWS -->
|
||||
<!ENTITY vArr "⇕"> <!-- UP DOWN DOUBLE ARROW -->
|
||||
<!ENTITY varr "↕"> <!-- UP DOWN ARROW -->
|
||||
<!ENTITY uharl "↿"> <!-- UPWARDS HARPOON WITH BARB LEFTWARDS -->
|
||||
<!ENTITY uharr "↾"> <!-- UPWARDS HARPOON WITH BARB RIGHTWARDS -->
|
||||
<!ENTITY xlArr "⇐"> <!-- LEFTWARDS DOUBLE ARROW -->
|
||||
<!ENTITY xhArr "↔"> <!-- LEFT RIGHT ARROW -->
|
||||
<!ENTITY xharr "↔"> <!-- LEFT RIGHT ARROW -->
|
||||
<!ENTITY xrArr "⇒"> <!-- RIGHTWARDS DOUBLE ARROW -->
|
|
@ -0,0 +1,49 @@
|
|||
<!-- iso-amsb.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz.
|
||||
With additional derivations from
|
||||
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||
|
||||
<!ENTITY amalg "∐"> <!-- N-ARY COPRODUCT -->
|
||||
<!ENTITY Barwed "⌆"> <!-- PERSPECTIVE -->
|
||||
<!ENTITY barwed "⊼"> <!-- NAND -->
|
||||
<!ENTITY Cap "⋒"> <!-- DOUBLE INTERSECTION -->
|
||||
<!ENTITY Cup "⋓"> <!-- DOUBLE UNION -->
|
||||
<!ENTITY cuvee "⋎"> <!-- CURLY LOGICAL OR -->
|
||||
<!ENTITY cuwed "⋏"> <!-- CURLY LOGICAL AND -->
|
||||
<!ENTITY diam "⋄"> <!-- DIAMOND OPERATOR -->
|
||||
<!ENTITY divonx "⋇"> <!-- DIVISION TIMES -->
|
||||
<!ENTITY intcal "⊺"> <!-- INTERCALATE -->
|
||||
<!ENTITY lthree "⋋"> <!-- LEFT SEMIDIRECT PRODUCT -->
|
||||
<!ENTITY ltimes "⋉"> <!-- LEFT NORMAL FACTOR SEMIDIRECT PRODUCT -->
|
||||
<!ENTITY minusb "⊟"> <!-- SQUARED MINUS -->
|
||||
<!ENTITY oast "⊛"> <!-- CIRCLED ASTERISK OPERATOR -->
|
||||
<!ENTITY ocir "⊚"> <!-- CIRCLED RING OPERATOR -->
|
||||
<!ENTITY odash "⊝"> <!-- CIRCLED DASH -->
|
||||
<!ENTITY odot "⊙"> <!-- CIRCLED DOT OPERATOR -->
|
||||
<!ENTITY ominus "⊖"> <!-- CIRCLED MINUS -->
|
||||
<!ENTITY oplus "⊕"> <!-- CIRCLED PLUS -->
|
||||
<!ENTITY osol "⊘"> <!-- CIRCLED DIVISION SLASH -->
|
||||
<!ENTITY otimes "⊗"> <!-- CIRCLED TIMES -->
|
||||
<!ENTITY plusb "⊞"> <!-- SQUARED PLUS -->
|
||||
<!ENTITY plusdo "∔"> <!-- DOT PLUS -->
|
||||
<!ENTITY rthree "⋌"> <!-- RIGHT SEMIDIRECT PRODUCT -->
|
||||
<!ENTITY rtimes "⋊"> <!-- RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT -->
|
||||
<!ENTITY sdot "⋅"> <!-- DOT OPERATOR -->
|
||||
<!ENTITY sdotb "⊡"> <!-- SQUARED DOT OPERATOR -->
|
||||
<!ENTITY setmn "∖"> <!-- SET MINUS -->
|
||||
<!ENTITY sqcap "⊓"> <!-- SQUARE CAP -->
|
||||
<!ENTITY sqcup "⊔"> <!-- SQUARE CUP -->
|
||||
<!ENTITY ssetmn "∖"> <!-- SET MINUS -->
|
||||
<!ENTITY sstarf "⋆"> <!-- STAR OPERATOR -->
|
||||
<!ENTITY timesb "⊠"> <!-- SQUARED TIMES -->
|
||||
<!ENTITY top "⊤"> <!-- DOWN TACK -->
|
||||
<!ENTITY uplus "⊎"> <!-- MULTISET UNION -->
|
||||
<!ENTITY wreath "≀"> <!-- WREATH PRODUCT -->
|
||||
<!ENTITY xcirc "○"> <!-- WHITE CIRCLE -->
|
||||
<!ENTITY xdtri "▽"> <!-- WHITE DOWN-POINTING TRIANGLE -->
|
||||
<!ENTITY xutri "△"> <!-- WHITE UP-POINTING TRIANGLE -->
|
||||
<!ENTITY coprod "∐"> <!-- N-ARY COPRODUCT -->
|
||||
<!ENTITY prod "∏"> <!-- N-ARY PRODUCT -->
|
||||
<!ENTITY sum "∑"> <!-- N-ARY SUMMATION -->
|
|
@ -0,0 +1,15 @@
|
|||
<!-- iso-amsc.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY rceil "⌉"> <!-- RIGHT CEILING -->
|
||||
<!ENTITY rfloor "⌋"> <!-- RIGHT FLOOR -->
|
||||
<!ENTITY rpargt ""> <!-- -->
|
||||
<!ENTITY urcorn "⌝"> <!-- TOP RIGHT CORNER -->
|
||||
<!ENTITY drcorn "⌟"> <!-- BOTTOM RIGHT CORNER -->
|
||||
<!ENTITY lceil "⌈"> <!-- LEFT CEILING -->
|
||||
<!ENTITY lfloor "⌊"> <!-- LEFT FLOOR -->
|
||||
<!-- lpargt Unknown unicode character -->
|
||||
<!ENTITY ulcorn "⌜"> <!-- TOP LEFT CORNER -->
|
||||
<!ENTITY dlcorn "⌞"> <!-- BOTTOM LEFT CORNER -->
|
|
@ -0,0 +1,66 @@
|
|||
<!-- iso-amsn.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz
|
||||
With additional derivations from
|
||||
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||
|
||||
<!ENTITY gnap ""> <!-- -->
|
||||
<!ENTITY gne "≩"> <!-- -->
|
||||
<!ENTITY gnE "≩"> <!-- -->
|
||||
<!ENTITY gnsim "⋧"> <!-- GREATER-THAN BUT NOT EQUIVALENT TO -->
|
||||
<!ENTITY gvnE "≩"> <!-- GREATER-THAN BUT NOT EQUAL TO -->
|
||||
<!ENTITY lnap ""> <!-- -->
|
||||
<!ENTITY lnE "≨"> <!-- -->
|
||||
<!ENTITY lne "≨"> <!-- -->
|
||||
<!ENTITY lnsim "⋦"> <!-- -->
|
||||
<!ENTITY lvnE "≨"> <!-- LESS-THAN BUT NOT EQUAL TO -->
|
||||
<!ENTITY nap "≉"> <!-- NOT ALMOST EQUAL TO -->
|
||||
<!ENTITY ncong "≇"> <!-- NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO -->
|
||||
<!ENTITY nequiv "≢"> <!-- NOT IDENTICAL TO -->
|
||||
<!ENTITY ngE "≱"> <!-- -->
|
||||
<!ENTITY nge "≱"> <!-- NEITHER GREATER-THAN NOR EQUAL TO -->
|
||||
<!ENTITY nges "≱"> <!-- -->
|
||||
<!ENTITY ngt "≯"> <!-- NOT GREATER-THAN -->
|
||||
<!ENTITY nle "≰"> <!-- NEITHER LESS-THAN NOR EQUAL TO -->
|
||||
<!ENTITY nlE "≰"> <!-- -->
|
||||
<!ENTITY nles "≰"> <!-- -->
|
||||
<!ENTITY nlt "≮"> <!-- NOT LESS-THAN -->
|
||||
<!ENTITY nltri "⋪"> <!-- NOT NORMAL SUBGROUP OF -->
|
||||
<!ENTITY nltrie "⋬"> <!-- NOT NORMAL SUBGROUP OF OR EQUAL TO -->
|
||||
<!ENTITY nmid "∤"> <!-- DOES NOT DIVIDE -->
|
||||
<!ENTITY npar "∦"> <!-- NOT PARALLEL TO -->
|
||||
<!ENTITY npr "⊀"> <!-- DOES NOT PRECEDE -->
|
||||
<!ENTITY npre "⋠"> <!-- DOES NOT PRECEDE OR EQUAL -->
|
||||
<!ENTITY nrtri "⋫"> <!-- DOES NOT CONTAIN AS NORMAL SUBGROUP -->
|
||||
<!ENTITY nrtrie "⋭"> <!-- DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL -->
|
||||
<!ENTITY nsc "⊁"> <!-- DOES NOT SUCCEED -->
|
||||
<!ENTITY nsce "⋡"> <!-- DOES NOT SUCCEED OR EQUAL -->
|
||||
<!ENTITY nsim "≁"> <!-- -->
|
||||
<!ENTITY nsime "≄"> <!-- -->
|
||||
<!ENTITY nsmid ""> <!-- -->
|
||||
<!ENTITY nspar "∦"> <!-- NOT PARALLEL TO -->
|
||||
<!ENTITY nsub "⊄"> <!-- NOT A SUBSET OF -->
|
||||
<!ENTITY nsube "⊈"> <!-- -->
|
||||
<!ENTITY nsubE "⊈"> <!-- -->
|
||||
<!ENTITY nsup "⊅"> <!-- NOT A SUPERSET OF -->
|
||||
<!ENTITY nsupE "⊉"> <!-- -->
|
||||
<!ENTITY nsupe "⊉"> <!-- -->
|
||||
<!ENTITY nvdash "⊬"> <!-- DOES NOT PROVE -->
|
||||
<!ENTITY nvDash "⊭"> <!-- NOT TRUE -->
|
||||
<!ENTITY nVDash "⊯"> <!-- NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE -->
|
||||
<!ENTITY nVdash "⊮"> <!-- DOES NOT FORCE -->
|
||||
<!ENTITY prnap "⋨"> <!-- -->
|
||||
<!ENTITY prnE ""> <!-- -->
|
||||
<!ENTITY prnsim "⋨"> <!-- -->
|
||||
<!ENTITY scnap "⋩"> <!-- -->
|
||||
<!ENTITY scnE ""> <!-- -->
|
||||
<!ENTITY scnsim "⋩"> <!-- -->
|
||||
<!ENTITY subne "⊊"> <!-- -->
|
||||
<!ENTITY subnE "⊊"> <!-- SUBSET OF WITH NOT EQUAL TO -->
|
||||
<!ENTITY supne "⊋"> <!-- -->
|
||||
<!ENTITY supnE "⊋"> <!-- -->
|
||||
<!ENTITY vsubnE ""> <!-- -->
|
||||
<!ENTITY vsubne "⊊"> <!-- SUBSET OF WITH NOT EQUAL TO -->
|
||||
<!ENTITY vsupne "⊋"> <!-- SUPERSET OF WITH NOT EQUAL TO -->
|
||||
<!ENTITY vsupnE "⊋"> <!-- SUPERSET OF WITH NOT EQUAL TO -->
|
|
@ -0,0 +1,26 @@
|
|||
<!-- iso-amso.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz
|
||||
With additional derivations from
|
||||
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||
|
||||
<!ENTITY ang "∠"> <!-- ANGLE -->
|
||||
<!ENTITY angmsd "∡"> <!-- MEASURED ANGLE -->
|
||||
<!ENTITY beth "ℶ"> <!-- BET SYMBOL -->
|
||||
<!ENTITY bprime "‵"> <!-- REVERSED PRIME -->
|
||||
<!ENTITY comp "∁"> <!-- COMPLEMENT -->
|
||||
<!ENTITY daleth "ℸ"> <!-- DALET SYMBOL -->
|
||||
<!ENTITY ell "ℓ"> <!-- SCRIPT SMALL L -->
|
||||
<!ENTITY empty "∅"> <!-- -->
|
||||
<!ENTITY gimel "ℷ"> <!-- GIMEL SYMBOL -->
|
||||
<!ENTITY image "ℑ"> <!-- BLACK-LETTER CAPITAL I -->
|
||||
<!ENTITY inodot "ı"> <!-- LATIN SMALL LETTER DOTLESS I -->
|
||||
<!-- jnodot Unknown unicode character -->
|
||||
<!ENTITY nexist "∄"> <!-- THERE DOES NOT EXIST -->
|
||||
<!ENTITY oS "Ⓢ"> <!-- CIRCLED LATIN CAPITAL LETTER S -->
|
||||
<!ENTITY planck "ℏ"> <!-- PLANCK CONSTANT OVER TWO PI -->
|
||||
<!ENTITY real "ℜ"> <!-- BLACK-LETTER CAPITAL R -->
|
||||
<!ENTITY sbsol "﹨"> <!-- SMALL REVERSE SOLIDUS -->
|
||||
<!ENTITY vprime "′"> <!-- PRIME -->
|
||||
<!ENTITY weierp "℘"> <!-- SCRIPT CAPITAL P -->
|
|
@ -0,0 +1,91 @@
|
|||
<!-- iso-amsr.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz.
|
||||
With additional derivations from
|
||||
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||
|
||||
<!ENTITY ape "≊"> <!-- -->
|
||||
<!ENTITY asymp "≍"> <!-- EQUIVALENT TO -->
|
||||
<!ENTITY bcong "≌"> <!-- ALL EQUAL TO -->
|
||||
<!ENTITY bepsi "∍"> <!-- SMALL CONTAINS AS MEMBER -->
|
||||
<!ENTITY bowtie "⋈"> <!-- -->
|
||||
<!ENTITY bsim "∽"> <!-- -->
|
||||
<!ENTITY bsime "⋍"> <!-- -->
|
||||
<!ENTITY bump "≎"> <!-- -->
|
||||
<!ENTITY bumpe "≏"> <!-- -->
|
||||
<!ENTITY cire "≗"> <!-- -->
|
||||
<!ENTITY colone "≔"> <!-- -->
|
||||
<!ENTITY cuepr "⋞"> <!-- -->
|
||||
<!ENTITY cuesc "⋟"> <!-- -->
|
||||
<!ENTITY cupre "≼"> <!-- -->
|
||||
<!ENTITY dashv "⊣"> <!-- -->
|
||||
<!ENTITY ecir "≖"> <!-- -->
|
||||
<!ENTITY ecolon "≕"> <!-- -->
|
||||
<!ENTITY eDot "≑"> <!-- -->
|
||||
<!ENTITY esdot "≐"> <!-- -->
|
||||
<!ENTITY efDot "≒"> <!-- -->
|
||||
<!ENTITY egs "⋝"> <!-- -->
|
||||
<!ENTITY els "⋜"> <!-- -->
|
||||
<!ENTITY erDot "≓"> <!-- -->
|
||||
<!ENTITY fork "⋔"> <!-- -->
|
||||
<!ENTITY frown "⌢"> <!-- -->
|
||||
<!ENTITY gap "≳"> <!-- GREATER-THAN OR EQUIVALENT TO -->
|
||||
<!ENTITY gsdot "⋗"> <!-- -->
|
||||
<!ENTITY gE "≧"> <!-- -->
|
||||
<!ENTITY gel "⋛"> <!-- -->
|
||||
<!ENTITY gEl "⋛"> <!-- -->
|
||||
<!ENTITY ges "≥"> <!-- GREATER-THAN OR EQUAL TO -->
|
||||
<!ENTITY Gg "⋙"> <!-- VERY MUCH GREATER-THAN -->
|
||||
<!ENTITY gl "≷"> <!-- -->
|
||||
<!ENTITY gsim "≳"> <!-- GREATER-THAN OR EQUIVALENT TO -->
|
||||
<!ENTITY Gt "≫"> <!-- MUCH GREATER-THAN -->
|
||||
<!ENTITY lap "≲"> <!-- LESS-THAN OR EQUIVALENT TO -->
|
||||
<!ENTITY ldot "⋖"> <!-- -->
|
||||
<!ENTITY lE "≦"> <!-- -->
|
||||
<!ENTITY lEg "⋚"> <!-- -->
|
||||
<!ENTITY leg "⋚"> <!-- -->
|
||||
<!ENTITY les "≤"> <!-- LESS-THAN OR EQUAL TO -->
|
||||
<!ENTITY lg "≶"> <!-- LESS-THAN OR GREATER-THAN -->
|
||||
<!ENTITY Ll "⋘"> <!-- -->
|
||||
<!ENTITY lsim "≲"> <!-- LESS-THAN OR EQUIVALENT TO -->
|
||||
<!ENTITY Lt "≪"> <!-- MUCH LESS-THAN -->
|
||||
<!ENTITY ltrie "⊴"> <!-- -->
|
||||
<!ENTITY mid "∣"> <!-- -->
|
||||
<!ENTITY models "⊧"> <!-- MODELS -->
|
||||
<!ENTITY pr "≺"> <!-- -->
|
||||
<!ENTITY prap "≾"> <!-- -->
|
||||
<!ENTITY pre "≼"> <!-- -->
|
||||
<!ENTITY prsim "≾"> <!-- -->
|
||||
<!ENTITY rtrie "⊵"> <!-- -->
|
||||
<!ENTITY samalg "∐"> <!-- -->
|
||||
<!ENTITY sc "≻"> <!-- -->
|
||||
<!ENTITY scap "≿"> <!-- -->
|
||||
<!ENTITY sccue "≽"> <!-- -->
|
||||
<!ENTITY sce "≽"> <!-- -->
|
||||
<!ENTITY scsim "≿"> <!-- -->
|
||||
<!ENTITY sfrown "⌢"> <!-- FROWN -->
|
||||
<!ENTITY smid ""> <!-- -->
|
||||
<!ENTITY smile "⌣"> <!-- -->
|
||||
<!ENTITY spar "∥"> <!-- PARALLEL TO -->
|
||||
<!ENTITY sqsub "⊏"> <!-- -->
|
||||
<!ENTITY sqsube "⊑"> <!-- -->
|
||||
<!ENTITY sqsup "⊐"> <!-- -->
|
||||
<!ENTITY sqsupe "⊒"> <!-- -->
|
||||
<!ENTITY ssmile "⌣"> <!-- SMILE -->
|
||||
<!ENTITY Sub "⋐"> <!-- -->
|
||||
<!ENTITY subE "⊆"> <!-- -->
|
||||
<!ENTITY Sup "⋑"> <!-- -->
|
||||
<!ENTITY supE "⊇"> <!-- -->
|
||||
<!ENTITY thkap "≈"> <!-- ALMOST EQUAL TO -->
|
||||
<!ENTITY thksim "∼"> <!-- TILDE OPERATOR -->
|
||||
<!ENTITY trie "≜"> <!-- -->
|
||||
<!ENTITY twixt "≬"> <!-- BETWEEN -->
|
||||
<!ENTITY vdash "⊢"> <!-- -->
|
||||
<!ENTITY Vdash "⊩"> <!-- -->
|
||||
<!ENTITY vDash "⊨"> <!-- -->
|
||||
<!ENTITY veebar "⊻"> <!-- -->
|
||||
<!ENTITY vltri "⊲"> <!-- -->
|
||||
<!ENTITY vprop "∝"> <!-- -->
|
||||
<!ENTITY vrtri "⊳"> <!-- -->
|
||||
<!ENTITY Vvdash "⊪"> <!-- -->
|
|
@ -0,0 +1,45 @@
|
|||
<!-- iso-box.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY boxh "─"> <!-- BOX DRAWINGS LIGHT HORIZONTAL -->
|
||||
<!ENTITY boxv "│"> <!-- BOX DRAWINGS LIGHT VERTICAL -->
|
||||
<!ENTITY boxur "└"> <!-- BOX DRAWINGS LIGHT UP AND RIGHT -->
|
||||
<!ENTITY boxul "┘"> <!-- BOX DRAWINGS LIGHT UP AND LEFT -->
|
||||
<!ENTITY boxdl "┐"> <!-- BOX DRAWINGS LIGHT DOWN AND LEFT -->
|
||||
<!ENTITY boxdr "┌"> <!-- BOX DRAWINGS LIGHT DOWN AND RIGHT -->
|
||||
<!ENTITY boxvr "├"> <!-- BOX DRAWINGS LIGHT VERTICAL AND RIGHT -->
|
||||
<!ENTITY boxhu "┴"> <!-- BOX DRAWINGS LIGHT UP AND HORIZONTAL -->
|
||||
<!ENTITY boxvl "┤"> <!-- BOX DRAWINGS LIGHT VERTICAL AND LEFT -->
|
||||
<!ENTITY boxhd "┬"> <!-- BOX DRAWINGS LIGHT DOWN AND HORIZONTAL -->
|
||||
<!ENTITY boxvh "┼"> <!-- BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL -->
|
||||
<!ENTITY boxvR "╞"> <!-- BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE -->
|
||||
<!ENTITY boxhU "╧"> <!-- BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE -->
|
||||
<!ENTITY boxvL "╡"> <!-- BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE -->
|
||||
<!ENTITY boxhD "╤"> <!-- BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE -->
|
||||
<!ENTITY boxvH "╪"> <!-- BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE -->
|
||||
<!ENTITY boxH "═"> <!-- BOX DRAWINGS DOUBLE HORIZONTAL -->
|
||||
<!ENTITY boxV "║"> <!-- BOX DRAWINGS DOUBLE VERTICAL -->
|
||||
<!ENTITY boxUR "╘"> <!-- BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE -->
|
||||
<!ENTITY boxUL "╛"> <!-- BOX DRAWINGS UP SINGLE AND LEFT DOUBLE -->
|
||||
<!ENTITY boxDL "╕"> <!-- BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE -->
|
||||
<!ENTITY boxDR "╒"> <!-- BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE -->
|
||||
<!ENTITY boxVR "╟"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE -->
|
||||
<!ENTITY boxHU "╨"> <!-- BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE -->
|
||||
<!ENTITY boxVL "╢"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE -->
|
||||
<!ENTITY boxHD "╥"> <!-- BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE -->
|
||||
<!ENTITY boxVH "╫"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE -->
|
||||
<!ENTITY boxVr "╠"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND RIGHT -->
|
||||
<!ENTITY boxHu "╩"> <!-- BOX DRAWINGS DOUBLE UP AND HORIZONTAL -->
|
||||
<!ENTITY boxVl "╣"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND LEFT -->
|
||||
<!ENTITY boxHd "╦"> <!-- BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL -->
|
||||
<!ENTITY boxVh "╬"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL -->
|
||||
<!ENTITY boxuR "╙"> <!-- BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE -->
|
||||
<!ENTITY boxUl "╜"> <!-- BOX DRAWINGS UP DOUBLE AND LEFT SINGLE -->
|
||||
<!ENTITY boxdL "╖"> <!-- BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE -->
|
||||
<!ENTITY boxDr "╓"> <!-- BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE -->
|
||||
<!ENTITY boxUr "╚"> <!-- BOX DRAWINGS DOUBLE UP AND RIGHT -->
|
||||
<!ENTITY boxuL "╝"> <!-- BOX DRAWINGS DOUBLE UP AND LEFT -->
|
||||
<!ENTITY boxDl "╗"> <!-- BOX DRAWINGS DOUBLE DOWN AND LEFT -->
|
||||
<!ENTITY boxdR "╔"> <!-- BOX DRAWINGS DOUBLE DOWN AND RIGHT -->
|
|
@ -0,0 +1,72 @@
|
|||
<!-- iso-cyr1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY acy "а"> <!-- CYRILLIC SMALL LETTER A -->
|
||||
<!ENTITY Acy "А"> <!-- CYRILLIC CAPITAL LETTER A -->
|
||||
<!ENTITY bcy "б"> <!-- CYRILLIC SMALL LETTER BE -->
|
||||
<!ENTITY Bcy "Б"> <!-- CYRILLIC CAPITAL LETTER BE -->
|
||||
<!ENTITY vcy "в"> <!-- CYRILLIC SMALL LETTER VE -->
|
||||
<!ENTITY Vcy "В"> <!-- CYRILLIC CAPITAL LETTER VE -->
|
||||
<!ENTITY gcy "г"> <!-- CYRILLIC SMALL LETTER GHE -->
|
||||
<!ENTITY Gcy "Г"> <!-- CYRILLIC CAPITAL LETTER GHE -->
|
||||
<!ENTITY dcy "д"> <!-- CYRILLIC SMALL LETTER DE -->
|
||||
<!ENTITY Dcy "Д"> <!-- CYRILLIC CAPITAL LETTER DE -->
|
||||
<!ENTITY iecy "е"> <!-- CYRILLIC SMALL LETTER IE -->
|
||||
<!ENTITY IEcy "Е"> <!-- CYRILLIC CAPITAL LETTER IE -->
|
||||
<!ENTITY iocy "ё"> <!-- CYRILLIC SMALL LETTER IO -->
|
||||
<!ENTITY IOcy "Ё"> <!-- CYRILLIC CAPITAL LETTER IO -->
|
||||
<!ENTITY zhcy "ж"> <!-- CYRILLIC SMALL LETTER ZHE -->
|
||||
<!ENTITY ZHcy "Ж"> <!-- CYRILLIC CAPITAL LETTER ZHE -->
|
||||
<!ENTITY zcy "з"> <!-- CYRILLIC SMALL LETTER ZE -->
|
||||
<!ENTITY Zcy "З"> <!-- CYRILLIC CAPITAL LETTER ZE -->
|
||||
<!ENTITY icy "и"> <!-- CYRILLIC SMALL LETTER I -->
|
||||
<!ENTITY Icy "И"> <!-- CYRILLIC CAPITAL LETTER I -->
|
||||
<!ENTITY jcy "й"> <!-- CYRILLIC SMALL LETTER SHORT I -->
|
||||
<!ENTITY Jcy "Й"> <!-- CYRILLIC CAPITAL LETTER SHORT I -->
|
||||
<!ENTITY kcy "к"> <!-- CYRILLIC SMALL LETTER KA -->
|
||||
<!ENTITY Kcy "К"> <!-- CYRILLIC CAPITAL LETTER KA -->
|
||||
<!ENTITY lcy "л"> <!-- CYRILLIC SMALL LETTER EL -->
|
||||
<!ENTITY Lcy "Л"> <!-- CYRILLIC CAPITAL LETTER EL -->
|
||||
<!ENTITY mcy "м"> <!-- CYRILLIC SMALL LETTER EM -->
|
||||
<!ENTITY Mcy "М"> <!-- CYRILLIC CAPITAL LETTER EM -->
|
||||
<!ENTITY ncy "н"> <!-- CYRILLIC SMALL LETTER EN -->
|
||||
<!ENTITY Ncy "Н"> <!-- CYRILLIC CAPITAL LETTER EN -->
|
||||
<!ENTITY ocy "о"> <!-- CYRILLIC SMALL LETTER O -->
|
||||
<!ENTITY Ocy "О"> <!-- CYRILLIC CAPITAL LETTER O -->
|
||||
<!ENTITY pcy "п"> <!-- CYRILLIC SMALL LETTER PE -->
|
||||
<!ENTITY Pcy "П"> <!-- CYRILLIC CAPITAL LETTER PE -->
|
||||
<!ENTITY rcy "р"> <!-- CYRILLIC SMALL LETTER ER -->
|
||||
<!ENTITY Rcy "Р"> <!-- CYRILLIC CAPITAL LETTER ER -->
|
||||
<!ENTITY scy "с"> <!-- CYRILLIC SMALL LETTER ES -->
|
||||
<!ENTITY Scy "С"> <!-- CYRILLIC CAPITAL LETTER ES -->
|
||||
<!ENTITY tcy "т"> <!-- CYRILLIC SMALL LETTER TE -->
|
||||
<!ENTITY Tcy "Т"> <!-- CYRILLIC CAPITAL LETTER TE -->
|
||||
<!ENTITY ucy "у"> <!-- CYRILLIC SMALL LETTER U -->
|
||||
<!ENTITY Ucy "У"> <!-- CYRILLIC CAPITAL LETTER U -->
|
||||
<!ENTITY fcy "ф"> <!-- CYRILLIC SMALL LETTER EF -->
|
||||
<!ENTITY Fcy "Ф"> <!-- CYRILLIC CAPITAL LETTER EF -->
|
||||
<!ENTITY khcy "х"> <!-- CYRILLIC SMALL LETTER HA -->
|
||||
<!ENTITY KHcy "Х"> <!-- CYRILLIC CAPITAL LETTER HA -->
|
||||
<!ENTITY tscy "ц"> <!-- CYRILLIC SMALL LETTER TSE -->
|
||||
<!ENTITY TScy "Ц"> <!-- CYRILLIC CAPITAL LETTER TSE -->
|
||||
<!ENTITY chcy "ч"> <!-- CYRILLIC SMALL LETTER CHE -->
|
||||
<!ENTITY CHcy "Ч"> <!-- CYRILLIC CAPITAL LETTER CHE -->
|
||||
<!ENTITY shcy "ш"> <!-- CYRILLIC SMALL LETTER SHA -->
|
||||
<!ENTITY SHcy "Ш"> <!-- CYRILLIC CAPITAL LETTER SHA -->
|
||||
<!ENTITY shchcy "щ"> <!-- CYRILLIC SMALL LETTER SHCHA -->
|
||||
<!ENTITY SHCHcy "Щ"> <!-- CYRILLIC CAPITAL LETTER SHCHA -->
|
||||
<!ENTITY hardcy "ъ"> <!-- CYRILLIC SMALL LETTER HARD SIGN -->
|
||||
<!ENTITY HARDcy "Ъ"> <!-- CYRILLIC CAPITAL LETTER HARD SIGN -->
|
||||
<!ENTITY ycy "ы"> <!-- CYRILLIC SMALL LETTER YERU -->
|
||||
<!ENTITY Ycy "Ы"> <!-- CYRILLIC CAPITAL LETTER YERU -->
|
||||
<!ENTITY softcy "ь"> <!-- CYRILLIC SMALL LETTER SOFT SIGN -->
|
||||
<!ENTITY SOFTcy "Ь"> <!-- CYRILLIC CAPITAL LETTER SOFT SIGN -->
|
||||
<!ENTITY ecy "э"> <!-- CYRILLIC SMALL LETTER E -->
|
||||
<!ENTITY Ecy "Э"> <!-- CYRILLIC CAPITAL LETTER E -->
|
||||
<!ENTITY yucy "ю"> <!-- CYRILLIC SMALL LETTER YU -->
|
||||
<!ENTITY YUcy "Ю"> <!-- CYRILLIC CAPITAL LETTER YU -->
|
||||
<!ENTITY yacy "я"> <!-- CYRILLIC SMALL LETTER YA -->
|
||||
<!ENTITY YAcy "Я"> <!-- CYRILLIC CAPITAL LETTER YA -->
|
||||
<!ENTITY numero "№"> <!-- NUMERO SIGN -->
|
|
@ -0,0 +1,31 @@
|
|||
<!-- iso-cyr2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY djcy "ђ"> <!-- CYRILLIC SMALL LETTER DJE -->
|
||||
<!ENTITY DJcy "Ђ"> <!-- CYRILLIC CAPITAL LETTER DJE -->
|
||||
<!ENTITY gjcy "ѓ"> <!-- CYRILLIC SMALL LETTER GJE -->
|
||||
<!ENTITY GJcy "Ѓ"> <!-- CYRILLIC CAPITAL LETTER GJE -->
|
||||
<!ENTITY jukcy "є"> <!-- CYRILLIC SMALL LETTER UKRAINIAN IE -->
|
||||
<!ENTITY Jukcy "Є"> <!-- CYRILLIC CAPITAL LETTER UKRAINIAN IE -->
|
||||
<!ENTITY dscy "ѕ"> <!-- CYRILLIC SMALL LETTER DZE -->
|
||||
<!ENTITY DScy "Ѕ"> <!-- CYRILLIC CAPITAL LETTER DZE -->
|
||||
<!ENTITY iukcy "і"> <!-- CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -->
|
||||
<!ENTITY Iukcy "І"> <!-- CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -->
|
||||
<!ENTITY yicy "ї"> <!-- CYRILLIC SMALL LETTER YI -->
|
||||
<!ENTITY YIcy "Ї"> <!-- CYRILLIC CAPITAL LETTER YI -->
|
||||
<!ENTITY jsercy "ј"> <!-- CYRILLIC SMALL LETTER JE -->
|
||||
<!ENTITY Jsercy "Ј"> <!-- CYRILLIC CAPITAL LETTER JE -->
|
||||
<!ENTITY ljcy "љ"> <!-- CYRILLIC SMALL LETTER LJE -->
|
||||
<!ENTITY LJcy "Љ"> <!-- CYRILLIC CAPITAL LETTER LJE -->
|
||||
<!ENTITY njcy "њ"> <!-- CYRILLIC SMALL LETTER NJE -->
|
||||
<!ENTITY NJcy "Њ"> <!-- CYRILLIC CAPITAL LETTER NJE -->
|
||||
<!ENTITY tshcy "ћ"> <!-- CYRILLIC SMALL LETTER TSHE -->
|
||||
<!ENTITY TSHcy "Ћ"> <!-- CYRILLIC CAPITAL LETTER TSHE -->
|
||||
<!ENTITY kjcy "ќ"> <!-- CYRILLIC SMALL LETTER KJE -->
|
||||
<!ENTITY KJcy "Ќ"> <!-- CYRILLIC CAPITAL LETTER KJE -->
|
||||
<!ENTITY ubrcy "ў"> <!-- CYRILLIC SMALL LETTER SHORT U -->
|
||||
<!ENTITY Ubrcy "Ў"> <!-- CYRILLIC CAPITAL LETTER SHORT U -->
|
||||
<!ENTITY dzcy "џ"> <!-- CYRILLIC SMALL LETTER DZHE -->
|
||||
<!ENTITY DZcy "Џ"> <!-- CYRILLIC CAPITAL LETTER DZHE -->
|
|
@ -0,0 +1,19 @@
|
|||
<!-- iso-dia.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY acute "´"> <!-- ACUTE ACCENT -->
|
||||
<!ENTITY breve "˘"> <!-- BREVE -->
|
||||
<!ENTITY caron "ˇ"> <!-- CARON -->
|
||||
<!ENTITY cedil "¸"> <!-- CEDILLA -->
|
||||
<!ENTITY circ "^"> <!-- RING OPERATOR -->
|
||||
<!ENTITY dblac "˝"> <!-- DOUBLE ACUTE ACCENT -->
|
||||
<!ENTITY die "¨"> <!-- -->
|
||||
<!ENTITY dot "˙"> <!-- DOT ABOVE -->
|
||||
<!ENTITY grave "`"> <!-- GRAVE ACCENT -->
|
||||
<!ENTITY macr "¯"> <!-- MACRON -->
|
||||
<!ENTITY ogon "˛"> <!-- OGONEK -->
|
||||
<!ENTITY ring "˚"> <!-- RING ABOVE -->
|
||||
<!ENTITY tilde "˜"> <!-- TILDE -->
|
||||
<!ENTITY uml "¨"> <!-- -->
|
|
@ -0,0 +1,54 @@
|
|||
<!-- iso-grk1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY agr "α"> <!-- -->
|
||||
<!ENTITY Agr "Α"> <!-- GREEK CAPITAL LETTER ALPHA -->
|
||||
<!ENTITY bgr "β"> <!-- GREEK SMALL LETTER BETA -->
|
||||
<!ENTITY Bgr "Β"> <!-- GREEK CAPITAL LETTER BETA -->
|
||||
<!ENTITY ggr "γ"> <!-- GREEK SMALL LETTER GAMMA -->
|
||||
<!ENTITY Ggr "Γ"> <!-- GREEK CAPITAL LETTER GAMMA -->
|
||||
<!ENTITY dgr "δ"> <!-- GREEK SMALL LETTER DELTA -->
|
||||
<!ENTITY Dgr "Δ"> <!-- GREEK CAPITAL LETTER DELTA -->
|
||||
<!ENTITY egr "ε"> <!-- -->
|
||||
<!ENTITY Egr "Ε"> <!-- GREEK CAPITAL LETTER EPSILON -->
|
||||
<!ENTITY zgr "ζ"> <!-- GREEK SMALL LETTER ZETA -->
|
||||
<!ENTITY Zgr "Ζ"> <!-- GREEK CAPITAL LETTER ZETA -->
|
||||
<!ENTITY eegr "η"> <!-- GREEK SMALL LETTER ETA -->
|
||||
<!ENTITY EEgr "Η"> <!-- GREEK CAPITAL LETTER ETA -->
|
||||
<!ENTITY thgr "θ"> <!-- -->
|
||||
<!ENTITY THgr "Θ"> <!-- GREEK CAPITAL LETTER THETA -->
|
||||
<!ENTITY igr "ι"> <!-- GREEK SMALL LETTER IOTA -->
|
||||
<!ENTITY Igr "Ι"> <!-- GREEK CAPITAL LETTER IOTA -->
|
||||
<!ENTITY kgr "κ"> <!-- GREEK SMALL LETTER KAPPA -->
|
||||
<!ENTITY Kgr "Κ"> <!-- GREEK CAPITAL LETTER KAPPA -->
|
||||
<!ENTITY lgr "λ"> <!-- GREEK SMALL LETTER LAMDA -->
|
||||
<!ENTITY Lgr "Λ"> <!-- GREEK CAPITAL LETTER LAMDA -->
|
||||
<!ENTITY mgr "μ"> <!-- GREEK SMALL LETTER MU -->
|
||||
<!ENTITY Mgr "Μ"> <!-- GREEK CAPITAL LETTER MU -->
|
||||
<!ENTITY ngr "ν"> <!-- GREEK SMALL LETTER NU -->
|
||||
<!ENTITY Ngr "Ν"> <!-- GREEK CAPITAL LETTER NU -->
|
||||
<!ENTITY xgr "ξ"> <!-- GREEK SMALL LETTER XI -->
|
||||
<!ENTITY Xgr "Ξ"> <!-- GREEK CAPITAL LETTER XI -->
|
||||
<!ENTITY ogr "ο"> <!-- GREEK SMALL LETTER OMICRON -->
|
||||
<!ENTITY Ogr "Ο"> <!-- GREEK CAPITAL LETTER OMICRON -->
|
||||
<!ENTITY pgr "π"> <!-- GREEK SMALL LETTER PI -->
|
||||
<!ENTITY Pgr "Π"> <!-- GREEK CAPITAL LETTER PI -->
|
||||
<!ENTITY rgr "ρ"> <!-- GREEK SMALL LETTER RHO -->
|
||||
<!ENTITY Rgr "Ρ"> <!-- GREEK CAPITAL LETTER RHO -->
|
||||
<!ENTITY sgr "σ"> <!-- GREEK SMALL LETTER SIGMA -->
|
||||
<!ENTITY Sgr "Σ"> <!-- GREEK CAPITAL LETTER SIGMA -->
|
||||
<!ENTITY sfgr "ς"> <!-- -->
|
||||
<!ENTITY tgr "τ"> <!-- GREEK SMALL LETTER TAU -->
|
||||
<!ENTITY Tgr "Τ"> <!-- GREEK CAPITAL LETTER TAU -->
|
||||
<!ENTITY ugr "υ"> <!-- GREEK SMALL LETTER UPSILON -->
|
||||
<!ENTITY Ugr "Υ"> <!-- -->
|
||||
<!ENTITY phgr "φ"> <!-- GREEK SMALL LETTER PHI -->
|
||||
<!ENTITY PHgr "Φ"> <!-- GREEK CAPITAL LETTER PHI -->
|
||||
<!ENTITY khgr "χ"> <!-- GREEK SMALL LETTER CHI -->
|
||||
<!ENTITY KHgr "Χ"> <!-- GREEK CAPITAL LETTER CHI -->
|
||||
<!ENTITY psgr "ψ"> <!-- GREEK SMALL LETTER PSI -->
|
||||
<!ENTITY PSgr "Ψ"> <!-- GREEK CAPITAL LETTER PSI -->
|
||||
<!ENTITY ohgr "ω"> <!-- GREEK SMALL LETTER OMEGA -->
|
||||
<!ENTITY OHgr "Ω"> <!-- GREEK CAPITAL LETTER OMEGA -->
|
|
@ -0,0 +1,25 @@
|
|||
<!-- iso-grk2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY aacgr "ά"> <!-- GREEK SMALL LETTER ALPHA WITH TONOS -->
|
||||
<!ENTITY Aacgr "Ά"> <!-- GREEK CAPITAL LETTER ALPHA WITH TONOS -->
|
||||
<!ENTITY eacgr "έ"> <!-- GREEK SMALL LETTER EPSILON WITH TONOS -->
|
||||
<!ENTITY Eacgr "Έ"> <!-- GREEK CAPITAL LETTER EPSILON WITH TONOS -->
|
||||
<!ENTITY eeacgr "ή"> <!-- GREEK SMALL LETTER ETA WITH TONOS -->
|
||||
<!ENTITY EEacgr "Ή"> <!-- GREEK CAPITAL LETTER ETA WITH TONOS -->
|
||||
<!ENTITY idigr "ϊ"> <!-- GREEK SMALL LETTER IOTA WITH DIALYTIKA -->
|
||||
<!ENTITY Idigr "Ϊ"> <!-- GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -->
|
||||
<!ENTITY iacgr "ί"> <!-- GREEK SMALL LETTER IOTA WITH TONOS -->
|
||||
<!ENTITY Iacgr "Ί"> <!-- GREEK CAPITAL LETTER IOTA WITH TONOS -->
|
||||
<!ENTITY idiagr "ΐ"> <!-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -->
|
||||
<!ENTITY oacgr "ό"> <!-- GREEK SMALL LETTER OMICRON WITH TONOS -->
|
||||
<!ENTITY Oacgr "Ό"> <!-- GREEK CAPITAL LETTER OMICRON WITH TONOS -->
|
||||
<!ENTITY udigr "ϋ"> <!-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA -->
|
||||
<!ENTITY Udigr "Ϋ"> <!-- GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -->
|
||||
<!ENTITY uacgr "ύ"> <!-- GREEK SMALL LETTER UPSILON WITH TONOS -->
|
||||
<!ENTITY Uacgr "Ύ"> <!-- GREEK CAPITAL LETTER UPSILON WITH TONOS -->
|
||||
<!ENTITY udiagr "ΰ"> <!-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -->
|
||||
<!ENTITY ohacgr "ώ"> <!-- GREEK SMALL LETTER OMEGA WITH TONOS -->
|
||||
<!ENTITY OHacgr "Ώ"> <!-- GREEK CAPITAL LETTER OMEGA WITH TONOS -->
|
|
@ -0,0 +1,48 @@
|
|||
<!-- iso-grk3.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY alpha "α"> <!-- -->
|
||||
<!ENTITY beta "β"> <!-- GREEK SMALL LETTER BETA -->
|
||||
<!ENTITY gamma "γ"> <!-- GREEK SMALL LETTER GAMMA -->
|
||||
<!ENTITY Gamma "Γ"> <!-- GREEK CAPITAL LETTER GAMMA -->
|
||||
<!ENTITY gammad "Ϝ"> <!-- GREEK LETTER DIGAMMA -->
|
||||
<!ENTITY delta "δ"> <!-- GREEK SMALL LETTER DELTA -->
|
||||
<!ENTITY Delta "Δ"> <!-- GREEK CAPITAL LETTER DELTA -->
|
||||
<!ENTITY epsi "∊"> <!-- -->
|
||||
<!ENTITY epsiv "ε"> <!-- -->
|
||||
<!ENTITY epsis "∊"> <!-- -->
|
||||
<!ENTITY zeta "ζ"> <!-- GREEK SMALL LETTER ZETA -->
|
||||
<!ENTITY eta "η"> <!-- GREEK SMALL LETTER ETA -->
|
||||
<!ENTITY thetas "θ"> <!-- -->
|
||||
<!ENTITY Theta "Θ"> <!-- GREEK CAPITAL LETTER THETA -->
|
||||
<!ENTITY thetav "ϑ"> <!-- -->
|
||||
<!ENTITY iota "ι"> <!-- GREEK SMALL LETTER IOTA -->
|
||||
<!ENTITY kappa "κ"> <!-- GREEK SMALL LETTER KAPPA -->
|
||||
<!ENTITY kappav "ϰ"> <!-- GREEK KAPPA SYMBOL -->
|
||||
<!ENTITY lambda "λ"> <!-- GREEK SMALL LETTER LAMDA -->
|
||||
<!ENTITY Lambda "Λ"> <!-- GREEK CAPITAL LETTER LAMDA -->
|
||||
<!ENTITY mu "μ"> <!-- GREEK SMALL LETTER MU -->
|
||||
<!ENTITY nu "ν"> <!-- GREEK SMALL LETTER NU -->
|
||||
<!ENTITY xi "ξ"> <!-- GREEK SMALL LETTER XI -->
|
||||
<!ENTITY Xi "Ξ"> <!-- GREEK CAPITAL LETTER XI -->
|
||||
<!ENTITY pi "π"> <!-- GREEK SMALL LETTER PI -->
|
||||
<!ENTITY piv "ϖ"> <!-- GREEK PI SYMBOL -->
|
||||
<!ENTITY Pi "Π"> <!-- GREEK CAPITAL LETTER PI -->
|
||||
<!ENTITY rho "ρ"> <!-- GREEK SMALL LETTER RHO -->
|
||||
<!ENTITY rhov "ϱ"> <!-- GREEK RHO SYMBOL -->
|
||||
<!ENTITY sigma "σ"> <!-- GREEK SMALL LETTER SIGMA -->
|
||||
<!ENTITY Sigma "Σ"> <!-- GREEK CAPITAL LETTER SIGMA -->
|
||||
<!ENTITY sigmav "ς"> <!-- -->
|
||||
<!ENTITY tau "τ"> <!-- GREEK SMALL LETTER TAU -->
|
||||
<!ENTITY upsi "υ"> <!-- GREEK SMALL LETTER UPSILON -->
|
||||
<!ENTITY Upsi "ϒ"> <!-- -->
|
||||
<!ENTITY phis "φ"> <!-- GREEK SMALL LETTER PHI -->
|
||||
<!ENTITY Phi "Φ"> <!-- GREEK CAPITAL LETTER PHI -->
|
||||
<!ENTITY phiv "ϕ"> <!-- GREEK PHI SYMBOL -->
|
||||
<!ENTITY chi "χ"> <!-- GREEK SMALL LETTER CHI -->
|
||||
<!ENTITY psi "ψ"> <!-- GREEK SMALL LETTER PSI -->
|
||||
<!ENTITY Psi "Ψ"> <!-- GREEK CAPITAL LETTER PSI -->
|
||||
<!ENTITY omega "ω"> <!-- GREEK SMALL LETTER OMEGA -->
|
||||
<!ENTITY Omega "Ω"> <!-- GREEK CAPITAL LETTER OMEGA -->
|
|
@ -0,0 +1,48 @@
|
|||
<!-- iso-grk4.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY b.alpha "α"> <!-- -->
|
||||
<!ENTITY b.beta "β"> <!-- GREEK SMALL LETTER BETA -->
|
||||
<!ENTITY b.gamma "γ"> <!-- GREEK SMALL LETTER GAMMA -->
|
||||
<!ENTITY b.Gamma "Γ"> <!-- GREEK CAPITAL LETTER GAMMA -->
|
||||
<!ENTITY b.gammad "Ϝ"> <!-- GREEK LETTER DIGAMMA -->
|
||||
<!ENTITY b.delta "δ"> <!-- GREEK SMALL LETTER DELTA -->
|
||||
<!ENTITY b.Delta "Δ"> <!-- GREEK CAPITAL LETTER DELTA -->
|
||||
<!ENTITY b.epsi "ε"> <!-- -->
|
||||
<!ENTITY b.epsiv "ε"> <!-- -->
|
||||
<!ENTITY b.epsis "ε"> <!-- -->
|
||||
<!ENTITY b.zeta "ζ"> <!-- GREEK SMALL LETTER ZETA -->
|
||||
<!ENTITY b.eta "η"> <!-- GREEK SMALL LETTER ETA -->
|
||||
<!ENTITY b.thetas "θ"> <!-- -->
|
||||
<!ENTITY b.Theta "Θ"> <!-- GREEK CAPITAL LETTER THETA -->
|
||||
<!ENTITY b.thetav "ϑ"> <!-- -->
|
||||
<!ENTITY b.iota "ι"> <!-- GREEK SMALL LETTER IOTA -->
|
||||
<!ENTITY b.kappa "κ"> <!-- GREEK SMALL LETTER KAPPA -->
|
||||
<!ENTITY b.kappav "ϰ"> <!-- GREEK KAPPA SYMBOL -->
|
||||
<!ENTITY b.lambda "λ"> <!-- GREEK SMALL LETTER LAMDA -->
|
||||
<!ENTITY b.Lambda "Λ"> <!-- GREEK CAPITAL LETTER LAMDA -->
|
||||
<!ENTITY b.mu "μ"> <!-- GREEK SMALL LETTER MU -->
|
||||
<!ENTITY b.nu "ν"> <!-- GREEK SMALL LETTER NU -->
|
||||
<!ENTITY b.xi "ξ"> <!-- GREEK SMALL LETTER XI -->
|
||||
<!ENTITY b.Xi "Ξ"> <!-- GREEK CAPITAL LETTER XI -->
|
||||
<!ENTITY b.pi "π"> <!-- GREEK SMALL LETTER PI -->
|
||||
<!ENTITY b.Pi "Π"> <!-- GREEK CAPITAL LETTER PI -->
|
||||
<!ENTITY b.piv "ϖ"> <!-- GREEK PI SYMBOL -->
|
||||
<!ENTITY b.rho "ρ"> <!-- GREEK SMALL LETTER RHO -->
|
||||
<!ENTITY b.rhov "ϱ"> <!-- GREEK RHO SYMBOL -->
|
||||
<!ENTITY b.sigma "σ"> <!-- GREEK SMALL LETTER SIGMA -->
|
||||
<!ENTITY b.Sigma "Σ"> <!-- GREEK CAPITAL LETTER SIGMA -->
|
||||
<!ENTITY b.sigmav "ς"> <!-- -->
|
||||
<!ENTITY b.tau "τ"> <!-- GREEK SMALL LETTER TAU -->
|
||||
<!ENTITY b.upsi "υ"> <!-- GREEK SMALL LETTER UPSILON -->
|
||||
<!ENTITY b.Upsi "ϒ"> <!-- -->
|
||||
<!ENTITY b.phis "φ"> <!-- GREEK SMALL LETTER PHI -->
|
||||
<!ENTITY b.Phi "Φ"> <!-- GREEK CAPITAL LETTER PHI -->
|
||||
<!ENTITY b.phiv "ϕ"> <!-- GREEK PHI SYMBOL -->
|
||||
<!ENTITY b.chi "χ"> <!-- GREEK SMALL LETTER CHI -->
|
||||
<!ENTITY b.psi "ψ"> <!-- GREEK SMALL LETTER PSI -->
|
||||
<!ENTITY b.Psi "Ψ"> <!-- GREEK CAPITAL LETTER PSI -->
|
||||
<!ENTITY b.omega "ω"> <!-- GREEK SMALL LETTER OMEGA -->
|
||||
<!ENTITY b.Omega "Ω"> <!-- GREEK CAPITAL LETTER OMEGA -->
|
|
@ -0,0 +1,67 @@
|
|||
<!-- iso-lat1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY aacute "á"> <!-- LATIN SMALL LETTER A WITH ACUTE -->
|
||||
<!ENTITY Aacute "Á"> <!-- LATIN CAPITAL LETTER A WITH ACUTE -->
|
||||
<!ENTITY acirc "â"> <!-- LATIN SMALL LETTER A WITH CIRCUMFLEX -->
|
||||
<!ENTITY Acirc "Â"> <!-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX -->
|
||||
<!ENTITY agrave "à"> <!-- LATIN SMALL LETTER A WITH GRAVE -->
|
||||
<!ENTITY Agrave "À"> <!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||
<!ENTITY aring "å"> <!-- LATIN SMALL LETTER A WITH RING ABOVE -->
|
||||
<!ENTITY Aring "Å"> <!-- LATIN CAPITAL LETTER A WITH RING ABOVE -->
|
||||
<!ENTITY atilde "ã"> <!-- LATIN SMALL LETTER A WITH TILDE -->
|
||||
<!ENTITY Atilde "Ã"> <!-- LATIN CAPITAL LETTER A WITH TILDE -->
|
||||
<!ENTITY auml "ä"> <!-- LATIN SMALL LETTER A WITH DIAERESIS -->
|
||||
<!ENTITY Auml "Ä"> <!-- LATIN CAPITAL LETTER A WITH DIAERESIS -->
|
||||
<!ENTITY aelig "æ"> <!-- LATIN SMALL LETTER AE -->
|
||||
<!ENTITY AElig "Æ"> <!-- LATIN CAPITAL LETTER AE -->
|
||||
<!ENTITY ccedil "ç"> <!-- LATIN SMALL LETTER C WITH CEDILLA -->
|
||||
<!ENTITY Ccedil "Ç"> <!-- LATIN CAPITAL LETTER C WITH CEDILLA -->
|
||||
<!ENTITY eth "ð"> <!-- LATIN SMALL LETTER ETH -->
|
||||
<!ENTITY ETH "Ð"> <!-- LATIN CAPITAL LETTER ETH -->
|
||||
<!ENTITY eacute "é"> <!-- LATIN SMALL LETTER E WITH ACUTE -->
|
||||
<!ENTITY Eacute "É"> <!-- LATIN CAPITAL LETTER E WITH ACUTE -->
|
||||
<!ENTITY ecirc "ê"> <!-- LATIN SMALL LETTER E WITH CIRCUMFLEX -->
|
||||
<!ENTITY Ecirc "Ê"> <!-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX -->
|
||||
<!ENTITY egrave "è"> <!-- LATIN SMALL LETTER E WITH GRAVE -->
|
||||
<!ENTITY Egrave "È"> <!-- LATIN CAPITAL LETTER E WITH GRAVE -->
|
||||
<!ENTITY euml "ë"> <!-- LATIN SMALL LETTER E WITH DIAERESIS -->
|
||||
<!ENTITY Euml "Ë"> <!-- LATIN CAPITAL LETTER E WITH DIAERESIS -->
|
||||
<!ENTITY iacute "í"> <!-- LATIN SMALL LETTER I WITH ACUTE -->
|
||||
<!ENTITY Iacute "Í"> <!-- LATIN CAPITAL LETTER I WITH ACUTE -->
|
||||
<!ENTITY icirc "î"> <!-- LATIN SMALL LETTER I WITH CIRCUMFLEX -->
|
||||
<!ENTITY Icirc "Î"> <!-- LATIN CAPITAL LETTER I WITH CIRCUMFLEX -->
|
||||
<!ENTITY igrave "ì"> <!-- LATIN SMALL LETTER I WITH GRAVE -->
|
||||
<!ENTITY Igrave "Ì"> <!-- LATIN CAPITAL LETTER I WITH GRAVE -->
|
||||
<!ENTITY iuml "ï"> <!-- LATIN SMALL LETTER I WITH DIAERESIS -->
|
||||
<!ENTITY Iuml "Ï"> <!-- LATIN CAPITAL LETTER I WITH DIAERESIS -->
|
||||
<!ENTITY ntilde "ñ"> <!-- LATIN SMALL LETTER N WITH TILDE -->
|
||||
<!ENTITY Ntilde "Ñ"> <!-- LATIN CAPITAL LETTER N WITH TILDE -->
|
||||
<!ENTITY oacute "ó"> <!-- LATIN SMALL LETTER O WITH ACUTE -->
|
||||
<!ENTITY Oacute "Ó"> <!-- LATIN CAPITAL LETTER O WITH ACUTE -->
|
||||
<!ENTITY ocirc "ô"> <!-- LATIN SMALL LETTER O WITH CIRCUMFLEX -->
|
||||
<!ENTITY Ocirc "Ô"> <!-- LATIN CAPITAL LETTER O WITH CIRCUMFLEX -->
|
||||
<!ENTITY ograve "ò"> <!-- LATIN SMALL LETTER O WITH GRAVE -->
|
||||
<!ENTITY Ograve "Ò"> <!-- LATIN CAPITAL LETTER O WITH GRAVE -->
|
||||
<!ENTITY oslash "ø"> <!-- CIRCLED DIVISION SLASH -->
|
||||
<!ENTITY Oslash "Ø"> <!-- LATIN CAPITAL LETTER O WITH STROKE -->
|
||||
<!ENTITY otilde "õ"> <!-- LATIN SMALL LETTER O WITH TILDE -->
|
||||
<!ENTITY Otilde "Õ"> <!-- LATIN CAPITAL LETTER O WITH TILDE -->
|
||||
<!ENTITY ouml "ö"> <!-- LATIN SMALL LETTER O WITH DIAERESIS -->
|
||||
<!ENTITY Ouml "Ö"> <!-- LATIN CAPITAL LETTER O WITH DIAERESIS -->
|
||||
<!ENTITY szlig "ß"> <!-- LATIN SMALL LETTER SHARP S -->
|
||||
<!ENTITY thorn "þ"> <!-- LATIN SMALL LETTER THORN -->
|
||||
<!ENTITY THORN "Þ"> <!-- LATIN CAPITAL LETTER THORN -->
|
||||
<!ENTITY uacute "ú"> <!-- LATIN SMALL LETTER U WITH ACUTE -->
|
||||
<!ENTITY Uacute "Ú"> <!-- LATIN CAPITAL LETTER U WITH ACUTE -->
|
||||
<!ENTITY ucirc "û"> <!-- LATIN SMALL LETTER U WITH CIRCUMFLEX -->
|
||||
<!ENTITY Ucirc "Û"> <!-- LATIN CAPITAL LETTER U WITH CIRCUMFLEX -->
|
||||
<!ENTITY ugrave "ù"> <!-- LATIN SMALL LETTER U WITH GRAVE -->
|
||||
<!ENTITY Ugrave "Ù"> <!-- LATIN CAPITAL LETTER U WITH GRAVE -->
|
||||
<!ENTITY uuml "ü"> <!-- LATIN SMALL LETTER U WITH DIAERESIS -->
|
||||
<!ENTITY Uuml "Ü"> <!-- LATIN CAPITAL LETTER U WITH DIAERESIS -->
|
||||
<!ENTITY yacute "ý"> <!-- LATIN SMALL LETTER Y WITH ACUTE -->
|
||||
<!ENTITY Yacute "Ý"> <!-- LATIN CAPITAL LETTER Y WITH ACUTE -->
|
||||
<!ENTITY yuml "ÿ"> <!-- LATIN SMALL LETTER Y WITH DIAERESIS -->
|
|
@ -0,0 +1,126 @@
|
|||
<!-- iso-lat2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY abreve "ă"> <!-- LATIN SMALL LETTER A WITH BREVE -->
|
||||
<!ENTITY Abreve "Ă"> <!-- LATIN CAPITAL LETTER A WITH BREVE -->
|
||||
<!ENTITY amacr "ā"> <!-- LATIN SMALL LETTER A WITH MACRON -->
|
||||
<!ENTITY Amacr "Ā"> <!-- LATIN CAPITAL LETTER A WITH MACRON -->
|
||||
<!ENTITY aogon "ą"> <!-- LATIN SMALL LETTER A WITH OGONEK -->
|
||||
<!ENTITY Aogon "Ą"> <!-- LATIN CAPITAL LETTER A WITH OGONEK -->
|
||||
<!ENTITY cacute "ć"> <!-- LATIN SMALL LETTER C WITH ACUTE -->
|
||||
<!ENTITY Cacute "Ć"> <!-- LATIN CAPITAL LETTER C WITH ACUTE -->
|
||||
<!ENTITY ccaron "č"> <!-- LATIN SMALL LETTER C WITH CARON -->
|
||||
<!ENTITY Ccaron "Č"> <!-- LATIN CAPITAL LETTER C WITH CARON -->
|
||||
<!ENTITY ccirc "ĉ"> <!-- LATIN SMALL LETTER C WITH CIRCUMFLEX -->
|
||||
<!ENTITY Ccirc "Ĉ"> <!-- LATIN CAPITAL LETTER C WITH CIRCUMFLEX -->
|
||||
<!ENTITY cdot "ċ"> <!-- DOT OPERATOR -->
|
||||
<!ENTITY Cdot "Ċ"> <!-- LATIN CAPITAL LETTER C WITH DOT ABOVE -->
|
||||
<!ENTITY dcaron "ď"> <!-- LATIN SMALL LETTER D WITH CARON -->
|
||||
<!ENTITY Dcaron "Ď"> <!-- LATIN CAPITAL LETTER D WITH CARON -->
|
||||
<!ENTITY dstrok "đ"> <!-- LATIN SMALL LETTER D WITH STROKE -->
|
||||
<!ENTITY Dstrok "Đ"> <!-- LATIN CAPITAL LETTER D WITH STROKE -->
|
||||
<!ENTITY ecaron "ě"> <!-- LATIN SMALL LETTER E WITH CARON -->
|
||||
<!ENTITY Ecaron "Ě"> <!-- LATIN CAPITAL LETTER E WITH CARON -->
|
||||
<!ENTITY edot "ė"> <!-- LATIN SMALL LETTER E WITH DOT ABOVE -->
|
||||
<!ENTITY Edot "Ė"> <!-- LATIN CAPITAL LETTER E WITH DOT ABOVE -->
|
||||
<!ENTITY emacr "ē"> <!-- LATIN SMALL LETTER E WITH MACRON -->
|
||||
<!ENTITY Emacr "Ē"> <!-- LATIN CAPITAL LETTER E WITH MACRON -->
|
||||
<!ENTITY eogon "ę"> <!-- LATIN SMALL LETTER E WITH OGONEK -->
|
||||
<!ENTITY Eogon "Ę"> <!-- LATIN CAPITAL LETTER E WITH OGONEK -->
|
||||
<!ENTITY gacute "ǵ"> <!-- LATIN SMALL LETTER G WITH ACUTE -->
|
||||
<!ENTITY gbreve "ğ"> <!-- LATIN SMALL LETTER G WITH BREVE -->
|
||||
<!ENTITY Gbreve "Ğ"> <!-- LATIN CAPITAL LETTER G WITH BREVE -->
|
||||
<!ENTITY Gcedil "Ģ"> <!-- LATIN CAPITAL LETTER G WITH CEDILLA -->
|
||||
<!ENTITY gcirc "ĝ"> <!-- LATIN SMALL LETTER G WITH CIRCUMFLEX -->
|
||||
<!ENTITY Gcirc "Ĝ"> <!-- LATIN CAPITAL LETTER G WITH CIRCUMFLEX -->
|
||||
<!ENTITY gdot "ġ"> <!-- LATIN SMALL LETTER G WITH DOT ABOVE -->
|
||||
<!ENTITY Gdot "Ġ"> <!-- LATIN CAPITAL LETTER G WITH DOT ABOVE -->
|
||||
<!ENTITY hcirc "ĥ"> <!-- LATIN SMALL LETTER H WITH CIRCUMFLEX -->
|
||||
<!ENTITY Hcirc "Ĥ"> <!-- LATIN CAPITAL LETTER H WITH CIRCUMFLEX -->
|
||||
<!ENTITY hstrok "ħ"> <!-- LATIN SMALL LETTER H WITH STROKE -->
|
||||
<!ENTITY Hstrok "Ħ"> <!-- LATIN CAPITAL LETTER H WITH STROKE -->
|
||||
<!ENTITY Idot "İ"> <!-- LATIN CAPITAL LETTER I WITH DOT ABOVE -->
|
||||
<!ENTITY Imacr "Ī"> <!-- LATIN CAPITAL LETTER I WITH MACRON -->
|
||||
<!ENTITY imacr "ī"> <!-- LATIN SMALL LETTER I WITH MACRON -->
|
||||
<!ENTITY ijlig "ij"> <!-- LATIN SMALL LIGATURE IJ -->
|
||||
<!ENTITY IJlig "IJ"> <!-- LATIN CAPITAL LIGATURE IJ -->
|
||||
<!ENTITY inodot "ı"> <!-- LATIN SMALL LETTER DOTLESS I -->
|
||||
<!ENTITY iogon "į"> <!-- LATIN SMALL LETTER I WITH OGONEK -->
|
||||
<!ENTITY Iogon "Į"> <!-- LATIN CAPITAL LETTER I WITH OGONEK -->
|
||||
<!ENTITY itilde "ĩ"> <!-- LATIN SMALL LETTER I WITH TILDE -->
|
||||
<!ENTITY Itilde "Ĩ"> <!-- LATIN CAPITAL LETTER I WITH TILDE -->
|
||||
<!ENTITY jcirc "ĵ"> <!-- LATIN SMALL LETTER J WITH CIRCUMFLEX -->
|
||||
<!ENTITY Jcirc "Ĵ"> <!-- LATIN CAPITAL LETTER J WITH CIRCUMFLEX -->
|
||||
<!ENTITY kcedil "ķ"> <!-- LATIN SMALL LETTER K WITH CEDILLA -->
|
||||
<!ENTITY Kcedil "Ķ"> <!-- LATIN CAPITAL LETTER K WITH CEDILLA -->
|
||||
<!ENTITY kgreen "ĸ"> <!-- LATIN SMALL LETTER KRA -->
|
||||
<!ENTITY lacute "ĺ"> <!-- LATIN SMALL LETTER L WITH ACUTE -->
|
||||
<!ENTITY Lacute "Ĺ"> <!-- LATIN CAPITAL LETTER L WITH ACUTE -->
|
||||
<!ENTITY lcaron "ľ"> <!-- LATIN SMALL LETTER L WITH CARON -->
|
||||
<!ENTITY Lcaron "Ľ"> <!-- LATIN CAPITAL LETTER L WITH CARON -->
|
||||
<!ENTITY lcedil "ļ"> <!-- LATIN SMALL LETTER L WITH CEDILLA -->
|
||||
<!ENTITY Lcedil "Ļ"> <!-- LATIN CAPITAL LETTER L WITH CEDILLA -->
|
||||
<!ENTITY lmidot "ŀ"> <!-- LATIN SMALL LETTER L WITH MIDDLE DOT -->
|
||||
<!ENTITY Lmidot "Ŀ"> <!-- LATIN CAPITAL LETTER L WITH MIDDLE DOT -->
|
||||
<!ENTITY lstrok "ł"> <!-- LATIN SMALL LETTER L WITH STROKE -->
|
||||
<!ENTITY Lstrok "Ł"> <!-- LATIN CAPITAL LETTER L WITH STROKE -->
|
||||
<!ENTITY nacute "ń"> <!-- LATIN SMALL LETTER N WITH ACUTE -->
|
||||
<!ENTITY Nacute "Ń"> <!-- LATIN CAPITAL LETTER N WITH ACUTE -->
|
||||
<!ENTITY eng "ŋ"> <!-- LATIN SMALL LETTER ENG -->
|
||||
<!ENTITY ENG "Ŋ"> <!-- LATIN CAPITAL LETTER ENG -->
|
||||
<!ENTITY napos "ʼn"> <!-- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE -->
|
||||
<!ENTITY ncaron "ň"> <!-- LATIN SMALL LETTER N WITH CARON -->
|
||||
<!ENTITY Ncaron "Ň"> <!-- LATIN CAPITAL LETTER N WITH CARON -->
|
||||
<!ENTITY ncedil "ņ"> <!-- LATIN SMALL LETTER N WITH CEDILLA -->
|
||||
<!ENTITY Ncedil "Ņ"> <!-- LATIN CAPITAL LETTER N WITH CEDILLA -->
|
||||
<!ENTITY odblac "ő"> <!-- LATIN SMALL LETTER O WITH DOUBLE ACUTE -->
|
||||
<!ENTITY Odblac "Ő"> <!-- LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -->
|
||||
<!ENTITY Omacr "Ō"> <!-- LATIN CAPITAL LETTER O WITH MACRON -->
|
||||
<!ENTITY omacr "ō"> <!-- LATIN SMALL LETTER O WITH MACRON -->
|
||||
<!ENTITY oelig "œ"> <!-- LATIN SMALL LIGATURE OE -->
|
||||
<!ENTITY OElig "Œ"> <!-- LATIN CAPITAL LIGATURE OE -->
|
||||
<!ENTITY racute "ŕ"> <!-- LATIN SMALL LETTER R WITH ACUTE -->
|
||||
<!ENTITY Racute "Ŕ"> <!-- LATIN CAPITAL LETTER R WITH ACUTE -->
|
||||
<!ENTITY rcaron "ř"> <!-- LATIN SMALL LETTER R WITH CARON -->
|
||||
<!ENTITY Rcaron "Ř"> <!-- LATIN CAPITAL LETTER R WITH CARON -->
|
||||
<!ENTITY rcedil "ŗ"> <!-- LATIN SMALL LETTER R WITH CEDILLA -->
|
||||
<!ENTITY Rcedil "Ŗ"> <!-- LATIN CAPITAL LETTER R WITH CEDILLA -->
|
||||
<!ENTITY sacute "ś"> <!-- LATIN SMALL LETTER S WITH ACUTE -->
|
||||
<!ENTITY Sacute "Ś"> <!-- LATIN CAPITAL LETTER S WITH ACUTE -->
|
||||
<!ENTITY scaron "š"> <!-- LATIN SMALL LETTER S WITH CARON -->
|
||||
<!ENTITY Scaron "Š"> <!-- LATIN CAPITAL LETTER S WITH CARON -->
|
||||
<!ENTITY scedil "ş"> <!-- LATIN SMALL LETTER S WITH CEDILLA -->
|
||||
<!ENTITY Scedil "Ş"> <!-- LATIN CAPITAL LETTER S WITH CEDILLA -->
|
||||
<!ENTITY scirc "ŝ"> <!-- LATIN SMALL LETTER S WITH CIRCUMFLEX -->
|
||||
<!ENTITY Scirc "Ŝ"> <!-- LATIN CAPITAL LETTER S WITH CIRCUMFLEX -->
|
||||
<!ENTITY tcaron "ť"> <!-- LATIN SMALL LETTER T WITH CARON -->
|
||||
<!ENTITY Tcaron "Ť"> <!-- LATIN CAPITAL LETTER T WITH CARON -->
|
||||
<!ENTITY tcedil "ţ"> <!-- LATIN SMALL LETTER T WITH CEDILLA -->
|
||||
<!ENTITY Tcedil "Ţ"> <!-- LATIN CAPITAL LETTER T WITH CEDILLA -->
|
||||
<!ENTITY tstrok "ŧ"> <!-- LATIN SMALL LETTER T WITH STROKE -->
|
||||
<!ENTITY Tstrok "Ŧ"> <!-- LATIN CAPITAL LETTER T WITH STROKE -->
|
||||
<!ENTITY ubreve "ŭ"> <!-- LATIN SMALL LETTER U WITH BREVE -->
|
||||
<!ENTITY Ubreve "Ŭ"> <!-- LATIN CAPITAL LETTER U WITH BREVE -->
|
||||
<!ENTITY udblac "ű"> <!-- LATIN SMALL LETTER U WITH DOUBLE ACUTE -->
|
||||
<!ENTITY Udblac "Ű"> <!-- LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -->
|
||||
<!ENTITY umacr "ū"> <!-- LATIN SMALL LETTER U WITH MACRON -->
|
||||
<!ENTITY Umacr "Ū"> <!-- LATIN CAPITAL LETTER U WITH MACRON -->
|
||||
<!ENTITY uogon "ų"> <!-- LATIN SMALL LETTER U WITH OGONEK -->
|
||||
<!ENTITY Uogon "Ų"> <!-- LATIN CAPITAL LETTER U WITH OGONEK -->
|
||||
<!ENTITY uring "ů"> <!-- LATIN SMALL LETTER U WITH RING ABOVE -->
|
||||
<!ENTITY Uring "Ů"> <!-- LATIN CAPITAL LETTER U WITH RING ABOVE -->
|
||||
<!ENTITY utilde "ũ"> <!-- LATIN SMALL LETTER U WITH TILDE -->
|
||||
<!ENTITY Utilde "Ũ"> <!-- LATIN CAPITAL LETTER U WITH TILDE -->
|
||||
<!ENTITY wcirc "ŵ"> <!-- LATIN SMALL LETTER W WITH CIRCUMFLEX -->
|
||||
<!ENTITY Wcirc "Ŵ"> <!-- LATIN CAPITAL LETTER W WITH CIRCUMFLEX -->
|
||||
<!ENTITY ycirc "ŷ"> <!-- LATIN SMALL LETTER Y WITH CIRCUMFLEX -->
|
||||
<!ENTITY Ycirc "Ŷ"> <!-- LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -->
|
||||
<!ENTITY Yuml "Ÿ"> <!-- LATIN CAPITAL LETTER Y WITH DIAERESIS -->
|
||||
<!ENTITY zacute "ź"> <!-- LATIN SMALL LETTER Z WITH ACUTE -->
|
||||
<!ENTITY Zacute "Ź"> <!-- LATIN CAPITAL LETTER Z WITH ACUTE -->
|
||||
<!ENTITY zcaron "ž"> <!-- LATIN SMALL LETTER Z WITH CARON -->
|
||||
<!ENTITY Zcaron "Ž"> <!-- LATIN CAPITAL LETTER Z WITH CARON -->
|
||||
<!ENTITY zdot "ż"> <!-- LATIN SMALL LETTER Z WITH DOT ABOVE -->
|
||||
<!ENTITY Zdot "Ż"> <!-- LATIN CAPITAL LETTER Z WITH DOT ABOVE -->
|
|
@ -0,0 +1,81 @@
|
|||
<!-- iso-num.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY half "½"> <!-- VULGAR FRACTION ONE HALF -->
|
||||
<!ENTITY frac12 "½"> <!-- VULGAR FRACTION ONE HALF -->
|
||||
<!ENTITY frac14 "¼"> <!-- VULGAR FRACTION ONE QUARTER -->
|
||||
<!ENTITY frac34 "¾"> <!-- VULGAR FRACTION THREE QUARTERS -->
|
||||
<!ENTITY frac18 "⅛"> <!-- -->
|
||||
<!ENTITY frac38 "⅜"> <!-- -->
|
||||
<!ENTITY frac58 "⅝"> <!-- -->
|
||||
<!ENTITY frac78 "⅞"> <!-- -->
|
||||
<!ENTITY sup1 "¹"> <!-- SUPERSCRIPT ONE -->
|
||||
<!ENTITY sup2 "²"> <!-- SUPERSCRIPT TWO -->
|
||||
<!ENTITY sup3 "³"> <!-- SUPERSCRIPT THREE -->
|
||||
<!ENTITY plus "+"> <!-- PLUS SIGN -->
|
||||
<!ENTITY plusmn "±"> <!-- PLUS-MINUS SIGN -->
|
||||
<!ENTITY lt "&#60;"> <!-- LESS-THAN SIGN -->
|
||||
<!ENTITY equals "="> <!-- EQUALS SIGN -->
|
||||
<!ENTITY gt ">"> <!-- GREATER-THAN SIGN -->
|
||||
<!ENTITY divide "÷"> <!-- DIVISION SIGN -->
|
||||
<!ENTITY times "×"> <!-- MULTIPLICATION SIGN -->
|
||||
<!ENTITY curren "¤"> <!-- CURRENCY SIGN -->
|
||||
<!ENTITY pound "£"> <!-- POUND SIGN -->
|
||||
<!ENTITY dollar "$"> <!-- DOLLAR SIGN -->
|
||||
<!ENTITY cent "¢"> <!-- CENT SIGN -->
|
||||
<!ENTITY yen "¥"> <!-- YEN SIGN -->
|
||||
<!ENTITY num "#"> <!-- NUMBER SIGN -->
|
||||
<!ENTITY percnt "%"> <!-- PERCENT SIGN -->
|
||||
<!ENTITY amp "&#38;"> <!-- AMPERSAND -->
|
||||
<!ENTITY ast "*"> <!-- ASTERISK OPERATOR -->
|
||||
<!ENTITY commat "@"> <!-- COMMERCIAL AT -->
|
||||
<!ENTITY lsqb "["> <!-- LEFT SQUARE BRACKET -->
|
||||
<!ENTITY bsol "\"> <!-- REVERSE SOLIDUS -->
|
||||
<!ENTITY rsqb "]"> <!-- RIGHT SQUARE BRACKET -->
|
||||
<!ENTITY lcub "{"> <!-- LEFT CURLY BRACKET -->
|
||||
<!ENTITY horbar "―"> <!-- HORIZONTAL BAR -->
|
||||
<!ENTITY verbar "|"> <!-- VERTICAL LINE -->
|
||||
<!ENTITY rcub "}"> <!-- RIGHT CURLY BRACKET -->
|
||||
<!ENTITY micro "µ"> <!-- MICRO SIGN -->
|
||||
<!ENTITY ohm "Ω"> <!-- OHM SIGN -->
|
||||
<!ENTITY deg "°"> <!-- DEGREE SIGN -->
|
||||
<!ENTITY ordm "º"> <!-- MASCULINE ORDINAL INDICATOR -->
|
||||
<!ENTITY ordf "ª"> <!-- FEMININE ORDINAL INDICATOR -->
|
||||
<!ENTITY sect "§"> <!-- SECTION SIGN -->
|
||||
<!ENTITY para "¶"> <!-- PILCROW SIGN -->
|
||||
<!ENTITY middot "·"> <!-- MIDDLE DOT -->
|
||||
<!ENTITY larr "←"> <!-- LEFTWARDS DOUBLE ARROW -->
|
||||
<!ENTITY rarr "→"> <!-- RIGHTWARDS DOUBLE ARROW -->
|
||||
<!ENTITY uarr "↑"> <!-- UPWARDS ARROW -->
|
||||
<!ENTITY darr "↓"> <!-- DOWNWARDS ARROW -->
|
||||
<!ENTITY copy "©"> <!-- COPYRIGHT SIGN -->
|
||||
<!ENTITY reg "®"> <!-- REG TRADE MARK SIGN -->
|
||||
<!ENTITY trade "™"> <!-- TRADE MARK SIGN -->
|
||||
<!ENTITY brvbar "¦"> <!-- BROKEN BAR -->
|
||||
<!ENTITY not "¬"> <!-- NOT SIGN -->
|
||||
<!ENTITY sung "♩"> <!-- -->
|
||||
<!ENTITY excl "!"> <!-- EXCLAMATION MARK -->
|
||||
<!ENTITY iexcl "¡"> <!-- INVERTED EXCLAMATION MARK -->
|
||||
<!ENTITY quot """> <!-- QUOTATION MARK -->
|
||||
<!ENTITY apos "'"> <!-- APOSTROPHE -->
|
||||
<!ENTITY lpar "("> <!-- LEFT PARENTHESIS -->
|
||||
<!ENTITY rpar ")"> <!-- RIGHT PARENTHESIS -->
|
||||
<!ENTITY comma ","> <!-- COMMA -->
|
||||
<!ENTITY lowbar "_"> <!-- LOW LINE -->
|
||||
<!ENTITY hyphen "-"> <!-- HYPHEN-MINUS -->
|
||||
<!ENTITY period "."> <!-- FULL STOP -->
|
||||
<!ENTITY sol "/"> <!-- SOLIDUS -->
|
||||
<!ENTITY colon ":"> <!-- COLON -->
|
||||
<!ENTITY semi ";"> <!-- SEMICOLON -->
|
||||
<!ENTITY quest "?"> <!-- QUESTION MARK -->
|
||||
<!ENTITY iquest "¿"> <!-- INVERTED QUESTION MARK -->
|
||||
<!ENTITY laquo "«"> <!-- LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -->
|
||||
<!ENTITY raquo "»"> <!-- RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
|
||||
<!ENTITY lsquo "‘"> <!-- -->
|
||||
<!ENTITY rsquo "’"> <!-- RIGHT SINGLE QUOTATION MARK -->
|
||||
<!ENTITY ldquo "“"> <!-- -->
|
||||
<!ENTITY rdquo "”"> <!-- RIGHT DOUBLE QUOTATION MARK -->
|
||||
<!ENTITY nbsp " "> <!-- NO-BREAK SPACE -->
|
||||
<!ENTITY shy "­"> <!-- SOFT HYPHEN -->
|
|
@ -0,0 +1,90 @@
|
|||
<!-- iso-pub.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||
|
||||
<!ENTITY emsp " "> <!-- EM SPACE -->
|
||||
<!ENTITY ensp " "> <!-- EN SPACE -->
|
||||
<!ENTITY emsp13 " "> <!-- THREE-PER-EM SPACE -->
|
||||
<!ENTITY emsp14 " "> <!-- FOUR-PER-EM SPACE -->
|
||||
<!ENTITY numsp " "> <!-- FIGURE SPACE -->
|
||||
<!ENTITY puncsp " "> <!-- PUNCTUATION SPACE -->
|
||||
<!ENTITY thinsp " "> <!-- THIN SPACE -->
|
||||
<!ENTITY hairsp " "> <!-- HAIR SPACE -->
|
||||
<!ENTITY mdash "—"> <!-- EM DASH -->
|
||||
<!ENTITY ndash "–"> <!-- EN DASH -->
|
||||
<!ENTITY dash "‐"> <!-- HYPHEN -->
|
||||
<!ENTITY blank "␣"> <!-- OPEN BOX -->
|
||||
<!ENTITY hellip "…"> <!-- HORIZONTAL ELLIPSIS -->
|
||||
<!ENTITY nldr "‥"> <!-- TWO DOT LEADER -->
|
||||
<!ENTITY frac13 "⅓"> <!-- VULGAR FRACTION ONE THIRD -->
|
||||
<!ENTITY frac23 "⅔"> <!-- VULGAR FRACTION TWO THIRDS -->
|
||||
<!ENTITY frac15 "⅕"> <!-- VULGAR FRACTION ONE FIFTH -->
|
||||
<!ENTITY frac25 "⅖"> <!-- VULGAR FRACTION TWO FIFTHS -->
|
||||
<!ENTITY frac35 "⅗"> <!-- VULGAR FRACTION THREE FIFTHS -->
|
||||
<!ENTITY frac45 "⅘"> <!-- VULGAR FRACTION FOUR FIFTHS -->
|
||||
<!ENTITY frac16 "⅙"> <!-- VULGAR FRACTION ONE SIXTH -->
|
||||
<!ENTITY frac56 "⅚"> <!-- VULGAR FRACTION FIVE SIXTHS -->
|
||||
<!ENTITY incare "℅"> <!-- CARE OF -->
|
||||
<!ENTITY block "█"> <!-- FULL BLOCK -->
|
||||
<!ENTITY uhblk "▀"> <!-- UPPER HALF BLOCK -->
|
||||
<!ENTITY lhblk "▄"> <!-- LOWER HALF BLOCK -->
|
||||
<!ENTITY blk14 "░"> <!-- LIGHT SHADE -->
|
||||
<!ENTITY blk12 "▒"> <!-- MEDIUM SHADE -->
|
||||
<!ENTITY blk34 "▓"> <!-- DARK SHADE -->
|
||||
<!ENTITY marker "▮"> <!-- BLACK VERTICAL RECTANGLE -->
|
||||
<!ENTITY cir "○"> <!-- WHITE CIRCLE -->
|
||||
<!ENTITY squ "□"> <!-- WHITE SQUARE -->
|
||||
<!ENTITY rect "▭"> <!-- WHITE RECTANGLE -->
|
||||
<!ENTITY utri "▵"> <!-- WHITE UP-POINTING TRIANGLE -->
|
||||
<!ENTITY dtri "▿"> <!-- WHITE DOWN-POINTING TRIANGLE -->
|
||||
<!ENTITY star "⋆"> <!-- STAR OPERATOR -->
|
||||
<!ENTITY bull "•"> <!-- BULLET -->
|
||||
<!ENTITY squf "▪"> <!-- -->
|
||||
<!ENTITY utrif "▴"> <!-- BLACK UP-POINTING TRIANGLE -->
|
||||
<!ENTITY dtrif "▾"> <!-- BLACK DOWN-POINTING TRIANGLE -->
|
||||
<!ENTITY ltrif "◂"> <!-- BLACK LEFT-POINTING TRIANGLE -->
|
||||
<!ENTITY rtrif "▸"> <!-- BLACK RIGHT-POINTING TRIANGLE -->
|
||||
<!ENTITY clubs "♣"> <!-- BLACK CLUB SUIT -->
|
||||
<!ENTITY diams "♦"> <!-- BLACK DIAMOND SUIT -->
|
||||
<!ENTITY hearts "♥"> <!-- BLACK HEART SUIT -->
|
||||
<!ENTITY spades "♠"> <!-- BLACK SPADE SUIT -->
|
||||
<!ENTITY malt "✠"> <!-- MALTESE CROSS -->
|
||||
<!ENTITY dagger "†"> <!-- DAGGER -->
|
||||
<!ENTITY Dagger "‡"> <!-- DOUBLE DAGGER -->
|
||||
<!ENTITY check "✓"> <!-- CHECK MARK -->
|
||||
<!ENTITY cross "✗"> <!-- BALLOT X -->
|
||||
<!ENTITY sharp "♯"> <!-- MUSIC SHARP SIGN -->
|
||||
<!ENTITY flat "♭"> <!-- MUSIC FLAT SIGN -->
|
||||
<!ENTITY male "♂"> <!-- MALE SIGN -->
|
||||
<!ENTITY female "♀"> <!-- -->
|
||||
<!ENTITY phone "☎"> <!-- TELEPHONE SIGN -->
|
||||
<!ENTITY telrec "⌕"> <!-- TELEPHONE RECORDER -->
|
||||
<!ENTITY copysr "℗"> <!-- SOUND RECORDING COPYRIGHT -->
|
||||
<!ENTITY caret "⁁"> <!-- CARET -->
|
||||
<!ENTITY lsquor "‚"> <!-- SINGLE LOW-9 QUOTATION MARK -->
|
||||
<!ENTITY ldquor "„"> <!-- DOUBLE LOW-9 QUOTATION MARK -->
|
||||
<!ENTITY fflig "ff"> <!-- -->
|
||||
<!ENTITY filig "fi"> <!-- -->
|
||||
<!-- fjlig Unknown unicode character -->
|
||||
<!ENTITY ffilig "ffi"> <!-- -->
|
||||
<!ENTITY ffllig "ffl"> <!-- -->
|
||||
<!ENTITY fllig "fl"> <!-- -->
|
||||
<!ENTITY mldr "…"> <!-- HORIZONTAL ELLIPSIS -->
|
||||
<!ENTITY rdquor "“"> <!-- -->
|
||||
<!ENTITY rsquor "‘"> <!-- -->
|
||||
<!ENTITY vellip "⋮"> <!-- -->
|
||||
<!ENTITY hybull "⁃"> <!-- HYPHEN BULLET -->
|
||||
<!ENTITY loz "◊"> <!-- LOZENGE -->
|
||||
<!ENTITY lozf "✦"> <!-- -->
|
||||
<!ENTITY ltri "◃"> <!-- WHITE LEFT-POINTING TRIANGLE -->
|
||||
<!ENTITY rtri "▹"> <!-- WHITE RIGHT-POINTING TRIANGLE -->
|
||||
<!ENTITY starf "★"> <!-- BLACK STAR -->
|
||||
<!ENTITY natur "♮"> <!-- MUSIC NATURAL SIGN -->
|
||||
<!ENTITY rx "℞"> <!-- PRESCRIPTION TAKE -->
|
||||
<!ENTITY sext "✶"> <!-- SIX POINTED BLACK STAR -->
|
||||
<!ENTITY target "⌖"> <!-- POSITION INDICATOR -->
|
||||
<!ENTITY dlcrop "⌍"> <!-- BOTTOM LEFT CROP -->
|
||||
<!ENTITY drcrop "⌌"> <!-- BOTTOM RIGHT CROP -->
|
||||
<!ENTITY ulcrop "⌏"> <!-- TOP LEFT CROP -->
|
||||
<!ENTITY urcrop "⌎"> <!-- TOP RIGHT CROP -->
|
|
@ -0,0 +1,69 @@
|
|||
<!-- iso-tech.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||
|
||||
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||
and the Unicode character mappings provided by Sebastian Rahtz.
|
||||
With additional derivations from
|
||||
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||
|
||||
<!ENTITY aleph "ℵ"> <!-- ALEF SYMBOL -->
|
||||
<!ENTITY and "∧"> <!-- -->
|
||||
<!ENTITY ang90 "∟"> <!-- RIGHT ANGLE -->
|
||||
<!ENTITY angsph "∢"> <!-- -->
|
||||
<!ENTITY ap "≈"> <!-- -->
|
||||
<!ENTITY becaus "∵"> <!-- BECAUSE -->
|
||||
<!ENTITY bottom "⊥"> <!-- -->
|
||||
<!ENTITY cap "∩"> <!-- -->
|
||||
<!ENTITY cong "≅"> <!-- -->
|
||||
<!ENTITY conint "∮"> <!-- -->
|
||||
<!ENTITY cup "∪"> <!-- -->
|
||||
<!ENTITY equiv "≡"> <!-- -->
|
||||
<!ENTITY exist "∃"> <!-- -->
|
||||
<!ENTITY forall "∀"> <!-- -->
|
||||
<!ENTITY fnof "ƒ"> <!-- LATIN SMALL LETTER F WITH HOOK -->
|
||||
<!ENTITY ge "≥"> <!-- GREATER-THAN OR EQUAL TO -->
|
||||
<!ENTITY iff "⇔"> <!-- LEFT RIGHT DOUBLE ARROW -->
|
||||
<!ENTITY infin "∞"> <!-- -->
|
||||
<!ENTITY int "∫"> <!-- -->
|
||||
<!ENTITY isin "∊"> <!-- -->
|
||||
<!ENTITY lang "〈"> <!-- -->
|
||||
<!ENTITY lArr "⇐"> <!-- LEFTWARDS ARROW -->
|
||||
<!ENTITY le "≤"> <!-- -->
|
||||
<!ENTITY minus "−"> <!-- MINUS SIGN -->
|
||||
<!ENTITY mnplus "∓"> <!-- -->
|
||||
<!ENTITY nabla "∇"> <!-- NABLA -->
|
||||
<!ENTITY ne "≠"> <!-- -->
|
||||
<!ENTITY ni "∍"> <!-- -->
|
||||
<!ENTITY or "∨"> <!-- -->
|
||||
<!ENTITY par "∥"> <!-- PARALLEL TO -->
|
||||
<!ENTITY part "∂"> <!-- -->
|
||||
<!ENTITY permil "‰"> <!-- PER MILLE SIGN -->
|
||||
<!ENTITY perp "⊥"> <!-- -->
|
||||
<!ENTITY prime "′"> <!-- PRIME -->
|
||||
<!ENTITY Prime "″"> <!-- DOUBLE PRIME -->
|
||||
<!ENTITY prop "∝"> <!-- -->
|
||||
<!ENTITY radic "√"> <!-- -->
|
||||
<!ENTITY rang "〉"> <!-- -->
|
||||
<!ENTITY rArr "⇒"> <!-- RIGHTWARDS ARROW -->
|
||||
<!ENTITY sim "∼"> <!-- -->
|
||||
<!ENTITY sime "≃"> <!-- -->
|
||||
<!ENTITY square "□"> <!-- WHITE SQUARE -->
|
||||
<!ENTITY sub "⊂"> <!-- -->
|
||||
<!ENTITY sube "⊆"> <!-- -->
|
||||
<!ENTITY sup "⊃"> <!-- -->
|
||||
<!ENTITY supe "⊇"> <!-- -->
|
||||
<!ENTITY there4 "∴"> <!-- -->
|
||||
<!ENTITY Verbar "‖"> <!-- DOUBLE VERTICAL LINE -->
|
||||
<!ENTITY angst "Å"> <!-- ANGSTROM SIGN -->
|
||||
<!ENTITY bernou "ℬ"> <!-- SCRIPT CAPITAL B -->
|
||||
<!ENTITY compfn "∘"> <!-- RING OPERATOR -->
|
||||
<!ENTITY Dot "¨"> <!-- -->
|
||||
<!ENTITY DotDot "⃜"> <!-- COMBINING FOUR DOTS ABOVE -->
|
||||
<!ENTITY hamilt "ℋ"> <!-- SCRIPT CAPITAL H -->
|
||||
<!ENTITY lagran "ℒ"> <!-- SCRIPT CAPITAL L -->
|
||||
<!ENTITY lowast "∗"> <!-- ASTERISK OPERATOR -->
|
||||
<!ENTITY notin "∉"> <!-- -->
|
||||
<!ENTITY order "ℴ"> <!-- SCRIPT SMALL O -->
|
||||
<!ENTITY phmmat "ℳ"> <!-- SCRIPT CAPITAL M -->
|
||||
<!ENTITY tdot "⃛"> <!-- COMBINING THREE DOTS ABOVE -->
|
||||
<!ENTITY tprime "‴"> <!-- TRIPLE PRIME -->
|
||||
<!ENTITY wedgeq "≙"> <!-- ESTIMATES -->
|
|
@ -0,0 +1,228 @@
|
|||
<!-- ...................................................................... -->
|
||||
<!-- DocBook XML HTML Table Module V4.3CR3 ................................... -->
|
||||
<!-- File htmltblx.mod .................................................... -->
|
||||
|
||||
<!-- Copyright 2003 ArborText, Inc., Norman Walsh, Sun Microsystems, Inc.,
|
||||
and the Organization for the Advancement of Structured Information
|
||||
Standards (OASIS).
|
||||
|
||||
$Id$
|
||||
|
||||
Permission to use, copy, modify and distribute the DocBook XML DTD
|
||||
and its accompanying documentation for any purpose and without fee
|
||||
is hereby granted in perpetuity, provided that the above copyright
|
||||
notice and this paragraph appear in all copies. The copyright
|
||||
holders make no representation about the suitability of the DTD for
|
||||
any purpose. It is provided "as is" without expressed or implied
|
||||
warranty.
|
||||
|
||||
If you modify the DocBook XML DTD in any way, except for declaring and
|
||||
referencing additional sets of general entities and declaring
|
||||
additional notations, label your DTD as a variant of DocBook. See
|
||||
the maintenance documentation for more information.
|
||||
|
||||
Please direct all questions, bug reports, or suggestions for
|
||||
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||
information, see http://www.oasis-open.org/docbook/.
|
||||
-->
|
||||
|
||||
<!-- ...................................................................... -->
|
||||
|
||||
<!-- This module contains the definitions for elements that are
|
||||
isomorphic to the HTML elements. One could argue we should
|
||||
instead have based ourselves on the XHTML Table Module, but the
|
||||
HTML one is more like what browsers are likely to accept today
|
||||
and users are likely to use.
|
||||
|
||||
This module has been developed for use with the DocBook V4.3
|
||||
"union table model" in which elements and attlists common to both
|
||||
models are defined (as the union) in the CALS table module by
|
||||
setting various parameter entities appropriately in this file.
|
||||
|
||||
In DTD driver files referring to this module, please use an entity
|
||||
declaration that uses the public identifier shown below:
|
||||
|
||||
<!ENTITY % htmltbl PUBLIC
|
||||
"-//OASIS//ELEMENTS DocBook XML HTML Tables V4.3CR3//EN"
|
||||
"htmltblx.mod">
|
||||
%htmltbl;
|
||||
|
||||
See the documentation for detailed information on the parameter
|
||||
entity and module scheme used in DocBook, customizing DocBook and
|
||||
planning for interchange, and changes made since the last release
|
||||
of DocBook.
|
||||
-->
|
||||
|
||||
<!--======================= XHTML Tables =======================================-->
|
||||
|
||||
<!ENTITY % html.coreattrs
|
||||
"id ID #IMPLIED
|
||||
class CDATA #IMPLIED
|
||||
style CDATA #IMPLIED
|
||||
title CDATA #IMPLIED"
|
||||
>
|
||||
|
||||
<!-- Does not contain lang or dir because they are in %common.attribs -->
|
||||
<!ENTITY % i18n
|
||||
"xml:lang NMTOKEN #IMPLIED"
|
||||
>
|
||||
|
||||
<!ENTITY % events
|
||||
"onclick CDATA #IMPLIED
|
||||
ondblclick CDATA #IMPLIED
|
||||
onmousedown CDATA #IMPLIED
|
||||
onmouseup CDATA #IMPLIED
|
||||
onmouseover CDATA #IMPLIED
|
||||
onmousemove CDATA #IMPLIED
|
||||
onmouseout CDATA #IMPLIED
|
||||
onkeypress CDATA #IMPLIED
|
||||
onkeydown CDATA #IMPLIED
|
||||
onkeyup CDATA #IMPLIED"
|
||||
>
|
||||
|
||||
<!ENTITY % attrs "%html.coreattrs; %i18n; %events;">
|
||||
|
||||
<!ENTITY % cellhalign
|
||||
"align (left|center|right|justify|char) #IMPLIED
|
||||
char CDATA #IMPLIED
|
||||
charoff CDATA #IMPLIED"
|
||||
>
|
||||
|
||||
<!ENTITY % cellvalign
|
||||
"valign (top|middle|bottom|baseline) #IMPLIED"
|
||||
>
|
||||
|
||||
<!ELEMENT colgroup (col)*>
|
||||
<!ELEMENT col EMPTY>
|
||||
<!ELEMENT tr (th|td)+>
|
||||
<!ELEMENT th (%para.char.mix; | %tabentry.mix;)*>
|
||||
<!ELEMENT td (%para.char.mix; | %tabentry.mix;)*>
|
||||
|
||||
<!ATTLIST colgroup
|
||||
%attrs;
|
||||
span CDATA "1"
|
||||
width CDATA #IMPLIED
|
||||
%cellhalign;
|
||||
%cellvalign;
|
||||
>
|
||||
|
||||
<!ATTLIST col
|
||||
%attrs;
|
||||
span CDATA "1"
|
||||
width CDATA #IMPLIED
|
||||
%cellhalign;
|
||||
%cellvalign;
|
||||
>
|
||||
|
||||
<!ATTLIST tr
|
||||
%attrs;
|
||||
%cellhalign;
|
||||
%cellvalign;
|
||||
bgcolor CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ATTLIST th
|
||||
%attrs;
|
||||
abbr CDATA #IMPLIED
|
||||
axis CDATA #IMPLIED
|
||||
headers IDREFS #IMPLIED
|
||||
scope (row|col|rowgroup|colgroup) #IMPLIED
|
||||
rowspan CDATA "1"
|
||||
colspan CDATA "1"
|
||||
%cellhalign;
|
||||
%cellvalign;
|
||||
nowrap (nowrap) #IMPLIED
|
||||
bgcolor CDATA #IMPLIED
|
||||
width CDATA #IMPLIED
|
||||
height CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!ATTLIST td
|
||||
%attrs;
|
||||
abbr CDATA #IMPLIED
|
||||
axis CDATA #IMPLIED
|
||||
headers IDREFS #IMPLIED
|
||||
scope (row|col|rowgroup|colgroup) #IMPLIED
|
||||
rowspan CDATA "1"
|
||||
colspan CDATA "1"
|
||||
%cellhalign;
|
||||
%cellvalign;
|
||||
nowrap (nowrap) #IMPLIED
|
||||
bgcolor CDATA #IMPLIED
|
||||
width CDATA #IMPLIED
|
||||
height CDATA #IMPLIED
|
||||
>
|
||||
|
||||
<!-- ====================================================== -->
|
||||
<!-- Set up to read in the CALS model configured to
|
||||
merge with the XHTML table model -->
|
||||
<!-- ====================================================== -->
|
||||
|
||||
<!ENTITY % tables.role.attrib "%role.attrib;">
|
||||
|
||||
<!-- Add label and role attributes to table and informaltable -->
|
||||
<!ENTITY % bodyatt "
|
||||
floatstyle CDATA #IMPLIED
|
||||
%label.attrib;"
|
||||
>
|
||||
|
||||
<!-- Add common attributes to Table, TGroup, TBody, THead, TFoot, Row,
|
||||
EntryTbl, and Entry (and InformalTable element). -->
|
||||
|
||||
<!ENTITY % secur "
|
||||
%common.attrib;
|
||||
class CDATA #IMPLIED
|
||||
style CDATA #IMPLIED
|
||||
title CDATA #IMPLIED
|
||||
%i18n;
|
||||
%events;
|
||||
%tables.role.attrib;">
|
||||
|
||||
<!ENTITY % common.table.attribs
|
||||
"%bodyatt;
|
||||
%secur;">
|
||||
|
||||
<!-- Content model for Table (that also allows HTML tables) -->
|
||||
<!ENTITY % tbl.table.mdl
|
||||
"((blockinfo?,
|
||||
(%formalobject.title.content;),
|
||||
(%ndxterm.class;)*,
|
||||
textobject*,
|
||||
(graphic+|mediaobject+|tgroup+))
|
||||
|(caption, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+)))">
|
||||
|
||||
<!ENTITY % informal.tbl.table.mdl
|
||||
"(textobject*,
|
||||
(graphic+|mediaobject+|tgroup+))
|
||||
| ((col*|colgroup*), thead?, tfoot?, (tbody+|tr+))">
|
||||
|
||||
<!-- Attributes for Table (including HTML ones) -->
|
||||
<!ENTITY % tbl.table.att '
|
||||
tabstyle CDATA #IMPLIED
|
||||
tocentry %yesorno.attvals; #IMPLIED
|
||||
shortentry %yesorno.attvals; #IMPLIED
|
||||
orient (port|land) #IMPLIED
|
||||
pgwide %yesorno.attvals; #IMPLIED
|
||||
summary CDATA #IMPLIED
|
||||
width CDATA #IMPLIED
|
||||
border CDATA #IMPLIED
|
||||
rules (none | groups | rows | cols | all) #IMPLIED
|
||||
cellspacing CDATA #IMPLIED
|
||||
cellpadding CDATA #IMPLIED
|
||||
align (left|center|right) #IMPLIED
|
||||
bgcolor CDATA #IMPLIED
|
||||
'>
|
||||
|
||||
<!ENTITY % tbl.frame.attval "void|above|below|hsides|lhs|rhs|vsides|box|border|
|
||||
top|bottom|topbot|all|sides|none">
|
||||
|
||||
<!-- Allow either objects or inlines; beware of REs between elements. -->
|
||||
<!ENTITY % tbl.entry.mdl "%para.char.mix; | %tabentry.mix;">
|
||||
|
||||
<!-- thead, tfoot, and tbody are defined in both table models,
|
||||
so we set up parameter entities to define union models for them
|
||||
-->
|
||||
|
||||
<!ENTITY % tbl.hdft.mdl "(tr+|(colspec*,row+))">
|
||||
<!ENTITY % tbl.tbody.mdl "(tr+|row+)">
|
||||
<!ENTITY % tbl.valign.attval "top|middle|bottom|baseline">
|
|
@ -0,0 +1,314 @@
|
|||
<!-- XML EXCHANGE TABLE MODEL DECLARATION MODULE -->
|
||||
|
||||
<!-- This set of declarations defines the XML version of the Exchange
|
||||
Table Model as of the date shown in the Formal Public Identifier
|
||||
(FPI) for this entity.
|
||||
|
||||
This set of declarations may be referred to using a public external
|
||||
entity declaration and reference as shown in the following three
|
||||
lines:
|
||||
|
||||
<!ENTITY % calstblx
|
||||
PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN">
|
||||
%calstblx;
|
||||
|
||||
If various parameter entities used within this set of declarations
|
||||
are to be given non-default values, the appropriate declarations
|
||||
should be given before calling in this package (i.e., before the
|
||||
"%calstblx;" reference).
|
||||
-->
|
||||
|
||||
<!-- The motivation for this XML version of the Exchange Table Model
|
||||
is simply to create an XML version of the SGML Exchange Table
|
||||
Model. By design, no effort has been made to "improve" the model.
|
||||
|
||||
This XML version incorporates the logical bare minimum changes
|
||||
necessary to make the Exchange Table Model a valid XML DTD.
|
||||
|
||||
It has been modified slightly for use in the combined HTML/CALS models
|
||||
supported by DocBook V4.3.
|
||||
-->
|
||||
|
||||
<!-- The XML version of the Exchange Table Model differs from
|
||||
the SGML version in the following ways:
|
||||
|
||||
The following parameter entities have been removed:
|
||||
|
||||
- tbl.table.excep, tbl.hdft.excep, tbl.row.excep, tbl.entry.excep
|
||||
There are no exceptions in XML. The following normative statement
|
||||
is made in lieu of exceptions: the exchange table model explicitly
|
||||
forbids a table from occurring within another table. If the
|
||||
content model of an entry includes a table element, then this
|
||||
cannot be enforced by the DTD, but it is a deviation from the
|
||||
exchange table model to include a table within a table.
|
||||
|
||||
- tbl.hdft.name, tbl.hdft.mdl, tbl.hdft.excep, tbl.hdft.att
|
||||
The motivation for these elements was to change the table
|
||||
header/footer elements. Since XML does not allow element declarations
|
||||
to contain name groups, and the exchange table model does not
|
||||
allow a table to contain footers, the continued presence of these
|
||||
attributes seems unnecessary.
|
||||
|
||||
The following parameter entity has been added:
|
||||
|
||||
- tbl.thead.att
|
||||
This entity parameterizes the attributes on thead. It replaces
|
||||
the tbl.hdft.att parameter entity.
|
||||
|
||||
Other miscellaneous changes:
|
||||
|
||||
- Tag ommission indicators have been removed
|
||||
- Comments have been removed from declarations
|
||||
- NUMBER attributes have been changed to NMTOKEN
|
||||
- NUTOKEN attributes have been to changed to NMTOKEN
|
||||
- Removed the grouping characters around the content model
|
||||
parameter entry for the 'entry' element. This is necessary
|
||||
so that an entry can contain #PCDATA and be defined as an
|
||||
optional, repeatable OR group beginning with #PCDATA.
|
||||
-->
|
||||
|
||||
<!-- This entity includes a set of element and attribute declarations
|
||||
that partially defines the Exchange table model. However, the model
|
||||
is not well-defined without the accompanying natural language
|
||||
description of the semantics (meanings) of these various elements,
|
||||
attributes, and attribute values. The semantic writeup, also available
|
||||
from SGML Open, should be used in conjunction with this entity.
|
||||
-->
|
||||
|
||||
<!-- In order to use the Exchange table model, various parameter entity
|
||||
declarations are required. A brief description is as follows:
|
||||
|
||||
ENTITY NAME WHERE USED WHAT IT IS
|
||||
|
||||
%yesorno In ATTLIST of: An attribute declared value
|
||||
almost all elements for a "boolean" attribute
|
||||
|
||||
%paracon In content model of: The "text" (logical content)
|
||||
<entry> of the model group for <entry>
|
||||
|
||||
%titles In content model of: The "title" part of the model
|
||||
table element group for the table element
|
||||
|
||||
%tbl.table.name In declaration of: The name of the "table"
|
||||
table element element
|
||||
|
||||
%tbl.table-titles.mdl In content model of: The model group for the title
|
||||
table elements part of the content model for
|
||||
table element
|
||||
|
||||
%tbl.table.mdl In content model of: The model group for the content
|
||||
table elements model for table element,
|
||||
often (and by default) defined
|
||||
in terms of %tbl.table-titles.mdl
|
||||
and tgroup
|
||||
|
||||
%tbl.table.att In ATTLIST of: Additional attributes on the
|
||||
table element table element
|
||||
|
||||
%bodyatt In ATTLIST of: Additional attributes on the
|
||||
table element table element (for backward
|
||||
compatibility with the SGML
|
||||
model)
|
||||
|
||||
%tbl.tgroup.mdl In content model of: The model group for the content
|
||||
<tgroup> model for <tgroup>
|
||||
|
||||
%tbl.tgroup.att In ATTLIST of: Additional attributes on the
|
||||
<tgroup> <tgroup> element
|
||||
|
||||
%tbl.thead.att In ATTLIST of: Additional attributes on the
|
||||
<thead> <thead> element
|
||||
|
||||
%tbl.tbody.att In ATTLIST of: Additional attributes on the
|
||||
<tbody> <tbody> element
|
||||
|
||||
%tbl.colspec.att In ATTLIST of: Additional attributes on the
|
||||
<colspec> <colspec> element
|
||||
|
||||
%tbl.row.mdl In content model of: The model group for the content
|
||||
<row> model for <row>
|
||||
|
||||
%tbl.row.att In ATTLIST of: Additional attributes on the
|
||||
<row> <row> element
|
||||
|
||||
%tbl.entry.mdl In content model of: The model group for the content
|
||||
<entry> model for <entry>
|
||||
|
||||
%tbl.entry.att In ATTLIST of: Additional attributes on the
|
||||
<entry> <entry> element
|
||||
|
||||
This set of declarations will use the default definitions shown below
|
||||
for any of these parameter entities that are not declared before this
|
||||
set of declarations is referenced.
|
||||
-->
|
||||
|
||||
<!-- These definitions are not directly related to the table model, but are
|
||||
used in the default CALS table model and may be defined elsewhere (and
|
||||
prior to the inclusion of this table module) in the referencing DTD. -->
|
||||
|
||||
<!ENTITY % yesorno 'NMTOKEN'> <!-- no if zero(s), yes if any other value -->
|
||||
<!ENTITY % titles 'title?'>
|
||||
<!ENTITY % pcd "#PCDATA">
|
||||
<!ENTITY % paracon '%pcd;'> <!-- default for use in entry content -->
|
||||
|
||||
<!--
|
||||
The parameter entities as defined below change and simplify the CALS table
|
||||
model as published (as part of the Example DTD) in MIL-HDBK-28001. The
|
||||
resulting simplified DTD has support from the SGML Open vendors and is
|
||||
therefore more interoperable among different systems.
|
||||
|
||||
These following declarations provide the Exchange default definitions
|
||||
for these entities. However, these entities can be redefined (by giving
|
||||
the appropriate parameter entity declaration(s) prior to the reference
|
||||
to this Table Model declaration set entity) to fit the needs of the
|
||||
current application.
|
||||
|
||||
Note, however, that changes may have significant effect on the ability to
|
||||
interchange table information. These changes may manifest themselves
|
||||
in useability, presentation, and possible structure information degradation.
|
||||
-->
|
||||
|
||||
<!ENTITY % tbl.table.name "table">
|
||||
<!ENTITY % tbl.table-titles.mdl "%titles;,">
|
||||
<!ENTITY % tbl.table-main.mdl "tgroup+">
|
||||
<!ENTITY % tbl.table.mdl "%tbl.table-titles.mdl; %tbl.table-main.mdl;">
|
||||
<!ENTITY % tbl.table.att "
|
||||
pgwide %yesorno; #IMPLIED ">
|
||||
<!ENTITY % bodyatt "">
|
||||
<!ENTITY % tbl.tgroup.mdl "colspec*,thead?,tbody">
|
||||
<!ENTITY % tbl.tgroup.att "">
|
||||
<!ENTITY % tbl.thead.att "">
|
||||
<!ENTITY % tbl.tbody.att "">
|
||||
<!ENTITY % tbl.colspec.att "">
|
||||
<!ENTITY % tbl.row.mdl "entry+">
|
||||
<!ENTITY % tbl.row.att "">
|
||||
<!ENTITY % tbl.entry.mdl "(%paracon;)*">
|
||||
<!ENTITY % tbl.entry.att "">
|
||||
|
||||
<!ENTITY % tbl.frame.attval "top|bottom|topbot|all|sides|none">
|
||||
<!ENTITY % tbl.tbody.mdl "row+">
|
||||
|
||||
<!-- ===== Element and attribute declarations follow. ===== -->
|
||||
|
||||
<!--
|
||||
Default declarations previously defined in this entity and
|
||||
referenced below include:
|
||||
ENTITY % tbl.table.name "table"
|
||||
ENTITY % tbl.table-titles.mdl "%titles;,"
|
||||
ENTITY % tbl.table.mdl "%tbl.table-titles; tgroup+"
|
||||
ENTITY % tbl.table.att "
|
||||
pgwide %yesorno; #IMPLIED "
|
||||
-->
|
||||
|
||||
<!ELEMENT %tbl.table.name; (%tbl.table.mdl;)>
|
||||
|
||||
<!ATTLIST %tbl.table.name;
|
||||
frame (%tbl.frame.attval;) #IMPLIED
|
||||
colsep %yesorno; #IMPLIED
|
||||
rowsep %yesorno; #IMPLIED
|
||||
%tbl.table.att;
|
||||
%bodyatt;
|
||||
>
|
||||
|
||||
<!--
|
||||
Default declarations previously defined in this entity and
|
||||
referenced below include:
|
||||
ENTITY % tbl.tgroup.mdl "colspec*,thead?,tbody"
|
||||
ENTITY % tbl.tgroup.att ""
|
||||
-->
|
||||
|
||||
<!ELEMENT tgroup (%tbl.tgroup.mdl;) >
|
||||
|
||||
<!ATTLIST tgroup
|
||||
cols NMTOKEN #REQUIRED
|
||||
colsep %yesorno; #IMPLIED
|
||||
rowsep %yesorno; #IMPLIED
|
||||
align (left|right|center|justify|char) #IMPLIED
|
||||
%tbl.tgroup.att;
|
||||
>
|
||||
|
||||
<!--
|
||||
Default declarations previously defined in this entity and
|
||||
referenced below include:
|
||||
ENTITY % tbl.colspec.att ""
|
||||
-->
|
||||
|
||||
<!ELEMENT colspec EMPTY >
|
||||
|
||||
<!ATTLIST colspec
|
||||
colnum NMTOKEN #IMPLIED
|
||||
colname NMTOKEN #IMPLIED
|
||||
colwidth CDATA #IMPLIED
|
||||
colsep %yesorno; #IMPLIED
|
||||
rowsep %yesorno; #IMPLIED
|
||||
align (left|right|center|justify|char) #IMPLIED
|
||||
char CDATA #IMPLIED
|
||||
charoff NMTOKEN #IMPLIED
|
||||
%tbl.colspec.att;
|
||||
>
|
||||
|
||||
<!--
|
||||
Default declarations previously defined in this entity and
|
||||
referenced below include:
|
||||
ENTITY % tbl.thead.att ""
|
||||
-->
|
||||
|
||||
<!ELEMENT thead (row+)>
|
||||
|
||||
<!ATTLIST thead
|
||||
valign (top|middle|bottom) #IMPLIED
|
||||
%tbl.thead.att;
|
||||
>
|
||||
|
||||
<!--
|
||||
Default declarations previously defined in this entity and
|
||||
referenced below include:
|
||||
ENTITY % tbl.tbody.att ""
|
||||
-->
|
||||
|
||||
<!ELEMENT tbody (%tbl.tbody.mdl;)>
|
||||
|
||||
<!ATTLIST tbody
|
||||
valign (top|middle|bottom) #IMPLIED
|
||||
%tbl.tbody.att;
|
||||
>
|
||||
|
||||
<!--
|
||||
Default declarations previously defined in this entity and
|
||||
referenced below include:
|
||||
ENTITY % tbl.row.mdl "entry+"
|
||||
ENTITY % tbl.row.att ""
|
||||
-->
|
||||
|
||||
<!ELEMENT row (%tbl.row.mdl;)>
|
||||
|
||||
<!ATTLIST row
|
||||
rowsep %yesorno; #IMPLIED
|
||||
valign (top|middle|bottom) #IMPLIED
|
||||
%tbl.row.att;
|
||||
>
|
||||
|
||||
|
||||
<!--
|
||||
Default declarations previously defined in this entity and
|
||||
referenced below include:
|
||||
ENTITY % paracon "#PCDATA"
|
||||
ENTITY % tbl.entry.mdl "(%paracon;)*"
|
||||
ENTITY % tbl.entry.att ""
|
||||
-->
|
||||
|
||||
<!ELEMENT entry (%tbl.entry.mdl;)*>
|
||||
|
||||
<!ATTLIST entry
|
||||
colname NMTOKEN #IMPLIED
|
||||
namest NMTOKEN #IMPLIED
|
||||
nameend NMTOKEN #IMPLIED
|
||||
morerows NMTOKEN #IMPLIED
|
||||
colsep %yesorno; #IMPLIED
|
||||
rowsep %yesorno; #IMPLIED
|
||||
align (left|right|center|justify|char) #IMPLIED
|
||||
char CDATA #IMPLIED
|
||||
charoff NMTOKEN #IMPLIED
|
||||
valign (top|middle|bottom) #IMPLIED
|
||||
%tbl.entry.att;
|
||||
>
|
|
@ -0,0 +1,107 @@
|
|||
README for the DocBook Stylesheets
|
||||
|
||||
These are XSL stylesheets for the DocBook XML DTD. (They would
|
||||
also work for the DocBook DTD, modulo certain namecase problems
|
||||
and the fact that there aren't (yet) any XSL implementations
|
||||
that work with SGML source documents.)
|
||||
|
||||
As of version 1.0, most of the elements in DocBook are handled
|
||||
in some way or another, usually reasonably, but there's still
|
||||
lots of work to be done.
|
||||
|
||||
For more information, see http://docbook.sourceforge.net/
|
||||
|
||||
Manifest
|
||||
--------
|
||||
|
||||
README this file
|
||||
TODO planned features not yet implemented (may be incomplete :-)
|
||||
BUGS known problems (may also be incomplete :-)
|
||||
VERSION the current version number (note that this is an XSL stylesheet,
|
||||
included by both fo/docbook.xsl and html/docbook.xsl)
|
||||
WhatsNew changes since the last public release (for a complete list
|
||||
of changes, see the ChangeLog file(s))
|
||||
common/ contains code common to both stylesheets
|
||||
doc/ documentation
|
||||
docsrc/ documentation sources
|
||||
extensions/ Java extensions
|
||||
fo/ stylesheets that produce XSL FO
|
||||
html/ stylesheets that produce HTML
|
||||
htmlhelp/ stylesheets that produce HTML Help
|
||||
images/ images
|
||||
javahelp/ stylesheets that produce Java Help
|
||||
lib/ contains schema-independent functions
|
||||
template/ contains templates for building stylesheet customization layers
|
||||
xhtml/ stylesheets that produce XHTML
|
||||
|
||||
Changes
|
||||
-------
|
||||
|
||||
See the ChangeLog in each directory for additional information
|
||||
about the specific changes.
|
||||
|
||||
See WhatsNew for changes since the last release.
|
||||
|
||||
Installation
|
||||
------------
|
||||
|
||||
Unpack the distribution somewhere.
|
||||
|
||||
Use
|
||||
---
|
||||
|
||||
Process your DocBook documents with one of the following stylesheets
|
||||
using your favorite XSLT processor:
|
||||
|
||||
xhtml/docbook.xsl - for XHTML
|
||||
html/docbook.xsl - for HTML (as a single file)
|
||||
html/chunk.xsl - for HTML (multiple files)
|
||||
fo/docbook.xsl - for XSL FO
|
||||
htmlhelp/htmlhelp.xsl - for HTML Help
|
||||
javahelp/javahelp.xsl - for JavaHelp
|
||||
|
||||
Copyright
|
||||
---------
|
||||
|
||||
Copyright (C) 1999, 2000, 2001, 2002 Norman Walsh
|
||||
|
||||
Permission is hereby granted, free of charge, to any person
|
||||
obtaining a copy of this software and associated documentation
|
||||
files (the ``Software''), to deal in the Software without
|
||||
restriction, including without limitation the rights to use,
|
||||
copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following
|
||||
conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
Except as contained in this notice, the names of individuals
|
||||
credited with contribution to this software shall not be used in
|
||||
advertising or otherwise to promote the sale, use or other
|
||||
dealings in this Software without prior written authorization
|
||||
from the individuals in question.
|
||||
|
||||
Any stylesheet derived from this Software that is publically
|
||||
distributed will be identified with a different name and the
|
||||
version strings in any derived Software will be changed so that
|
||||
no possibility of confusion between the derived package and this
|
||||
Software will exist.
|
||||
|
||||
Warranty
|
||||
--------
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL NORMAN WALSH OR ANY OTHER
|
||||
CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
Contacting the Author
|
||||
---------------------
|
||||
|
||||
These stylesheets are maintained by Norman Walsh, <ndw@nwalsh.com>.
|
|
@ -0,0 +1,84 @@
|
|||
<?xml version='1.0'?> <!-- -*- nxml -*- -->
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:fm="http://freshmeat.net/projects/freshmeat-submit/"
|
||||
xmlns:sf="http://sourceforge.net/"
|
||||
exclude-result-prefixes="fm sf"
|
||||
version='1.0'>
|
||||
|
||||
<xsl:param name="VERSION" select="string(document('')//fm:Version[1])"/>
|
||||
<xsl:param name="sf-relid" select="0"/>
|
||||
<xsl:strip-space elements="fm:*"/>
|
||||
|
||||
<fm:project>
|
||||
<fm:Project>DocBook</fm:Project>
|
||||
<fm:Branch>XSL Stylesheets</fm:Branch>
|
||||
<fm:Version>1.65.1</fm:Version>
|
||||
<!--
|
||||
<fm:License>MIT/X Consortium License</fm:License>
|
||||
-->
|
||||
<fm:Release-Focus>
|
||||
<!-- initial freshmeat announcement -->
|
||||
<!-- documentation -->
|
||||
<!-- code cleanup -->
|
||||
<!-- Minor feature enhancements -->
|
||||
<!-- major feature enhancements -->
|
||||
Minor bugfixes
|
||||
<!-- major bugfixes -->
|
||||
<!-- minor security fixes -->
|
||||
<!-- major security fixes -->
|
||||
</fm:Release-Focus>
|
||||
<fm:Home-Page-URL>http://sourceforge.net/projects/docbook/</fm:Home-Page-URL>
|
||||
<fm:Gzipped-Tar-URL>http://prdownloads.sourceforge.net/docbook/docbook-xsl-{VERSION}.tar.gz?download</fm:Gzipped-Tar-URL>
|
||||
<fm:Zipped-Tar-URL>http://prdownloads.sourceforge.net/docbook/docbook-xsl-{VERSION}.zip?download</fm:Zipped-Tar-URL>
|
||||
<fm:Changelog-URL>http://sourceforge.net/project/shownotes.php?release_id={SFRELID}</fm:Changelog-URL>
|
||||
<fm:CVS-URL>http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/xsl/</fm:CVS-URL>
|
||||
<fm:Mailing-List-URL>http://lists.oasis-open.org/archives/docbook-apps/</fm:Mailing-List-URL>
|
||||
<fm:Changes>Small bug fixes. Fixed CA localization.
|
||||
</fm:Changes>
|
||||
</fm:project>
|
||||
|
||||
<xsl:template match="/" priority="-100">
|
||||
<xsl:if test="$sf-relid = 0">
|
||||
<xsl:message terminate="yes">
|
||||
<xsl:text>You must specify the sf-relid as a parameter.</xsl:text>
|
||||
</xsl:message>
|
||||
</xsl:if>
|
||||
|
||||
<xsl:apply-templates select="//fm:project"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="fm:project">
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:apply-templates/>
|
||||
<xsl:text> </xsl:text>
|
||||
<xsl:apply-templates select="fm:Changes" mode="text"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="fm:Changes"/>
|
||||
|
||||
<xsl:template match="fm:Gzipped-Tar-URL|fm:Zipped-Tar-URL">
|
||||
<xsl:value-of select="local-name(.)"/>
|
||||
<xsl:text>: </xsl:text>
|
||||
<xsl:value-of select="substring-before(., '{VERSION}')"/>
|
||||
<xsl:value-of select="$VERSION"/>
|
||||
<xsl:value-of select="substring-after(., '{VERSION}')"/>
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="fm:Changelog-URL">
|
||||
<xsl:value-of select="local-name(.)"/>
|
||||
<xsl:text>: </xsl:text>
|
||||
<xsl:value-of select="substring-before(., '{SFRELID}')"/>
|
||||
<xsl:value-of select="$sf-relid"/>
|
||||
<xsl:value-of select="substring-after(., '{SFRELID}')"/>
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="fm:*">
|
||||
<xsl:value-of select="local-name(.)"/>
|
||||
<xsl:text>: </xsl:text>
|
||||
<xsl:value-of select="normalize-space(.)"/>
|
||||
<xsl:text> </xsl:text>
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,624 @@
|
|||
2004-02-18 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* labels.xsl: Turn off procedure number when formal.procedures = 0.
|
||||
|
||||
2004-01-29 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* subtitles.xsl, titles.xsl: Support 'info'
|
||||
|
||||
2004-01-26 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* targets.xsl: Pass empty doctype parameters to write.chunk so the
|
||||
output can be used as an entity without DOCTYPE.
|
||||
|
||||
2003-12-31 Jirka Kosek <kosek@users.sourceforge.net>
|
||||
|
||||
* autoidx-ng.xsl, l10n.dtd: Added support for new i18n friendly indexing method
|
||||
|
||||
2003-12-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile: Support sr_Latn locale
|
||||
|
||||
2003-12-13 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* l10n.xml: Added sr_Latn.xml for Serbian in Latin script.
|
||||
|
||||
2003-12-06 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Fixed bug #851603 infinite recursion in copyright.year when
|
||||
no <year> elements at all.
|
||||
|
||||
2003-12-05 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* common.xsl: section.level now computes refentry sections relative to container element.
|
||||
|
||||
2003-11-30 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl, labels.xsl, subtitles.xsl, table.xsl, targets.xsl, titles.xsl:
|
||||
Added CVS $Id$ comment.
|
||||
|
||||
2003-11-17 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* labels.xsl: Fixed bug where sect1 generated infinite loop when root element
|
||||
and $section.label.includes.component.label is non zero.
|
||||
|
||||
2003-10-12 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl: Fixed cut-and-paste typo in substitute.markup template.
|
||||
|
||||
2003-09-23 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* pi.xsl: Fixed dbdatetime PI, which was using context
|
||||
datetime-abbrev for format "B" rather than datetime-full.
|
||||
|
||||
2003-08-27 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* titles.xsl: Support HTML tables
|
||||
|
||||
2003-08-18 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore: Ignore generate XML documents for Latin and Bangla
|
||||
|
||||
* Makefile, l10n.xml: Add support for Latin
|
||||
|
||||
2003-07-31 Jirka Kosek <kosek@users.sourceforge.net>
|
||||
|
||||
* Makefile: Update Makefile to new gentext mechanism
|
||||
|
||||
2003-07-31 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl: Added template for question in object.xref.markup mode
|
||||
to handle case of defaultlabel = qanda.
|
||||
|
||||
* labels.xsl: Removed processing of @label on qandadiv since that is
|
||||
not an allowed attribute of qandadiv.
|
||||
|
||||
2003-07-25 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* Makefile, l10n.xml: Added bn.xml Bangla language.
|
||||
|
||||
* gentext.xsl: Handles new xref contexts and the new xrefstyle attribute
|
||||
on xref elements.
|
||||
|
||||
* pi.xsl: Now uses new datetime-full and datetime-abbrev gentext
|
||||
contexts for certain date components.
|
||||
|
||||
2003-07-08 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* l10n.xsl: Removed extraneous variable l10n.name which is not used.
|
||||
|
||||
2003-06-24 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* l10n.xsl: Fixed bug in l10n.language template where $target parameter
|
||||
was missing from xpath expression.
|
||||
|
||||
2003-06-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile: Added Croatian
|
||||
|
||||
2003-05-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile: Added Arabic
|
||||
|
||||
2003-05-08 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* titles.xsl: Support 'title.markup' on glossentry
|
||||
|
||||
2003-04-29 Jirka Kosek <kosek@users.sourceforge.net>
|
||||
|
||||
* pi.xsl: Added localization support for datetime PI
|
||||
|
||||
2003-04-27 <dcramer@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Added level 6 to test for section depth in section.level template so that section.title.level6.properties will be used for sections that are 6 deep or deeper. This should also cause a h6 to be created in html output.
|
||||
|
||||
2003-04-16 Jirka Kosek <kosek@users.sourceforge.net>
|
||||
|
||||
* pi.xsl: Changed PI name from <?timestamp?> to <?dbtimestamp?>
|
||||
|
||||
2003-04-14 Jirka Kosek <kosek@users.sourceforge.net>
|
||||
|
||||
* pi.xsl: New file.
|
||||
|
||||
2003-04-13 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* table.xsl: A few bug fixes for the colsep/rowsep code
|
||||
|
||||
2003-04-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Don't use SVG graphics if use.svg=0
|
||||
|
||||
* table.xsl: Support template to find out if there are more columns in the current row of a table
|
||||
|
||||
2003-04-05 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl: Now uses number-and-title-template for sections only
|
||||
if $section.autolabel is not zero.
|
||||
|
||||
2003-03-02 Jirka Kosek <kosek@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Fixed several errors related to TeX math processing
|
||||
|
||||
2003-02-25 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* l10n.dtd: Added missing 'english-language-name' attribute to the l10n
|
||||
element, and the missing 'style' attribute to the template
|
||||
element so the current gentext documents will validate.
|
||||
|
||||
2003-01-30 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Corrected several references to parameter $qanda.defaultlabel
|
||||
that were missing the "$".
|
||||
|
||||
2003-01-23 Adam Di Carlo <adicarlo@users.sourceforge.net>
|
||||
|
||||
* Makefile: make use of cvstools/Makefile.incl
|
||||
|
||||
2003-01-20 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl: Support experimental parameter to specify that number-and-title xrefs should be used even when things are numbered
|
||||
|
||||
* gentext.xsl: Added object.titleabbrev.markup for consistency
|
||||
|
||||
* l10n.xsl: Added gentext.template.exists to test if a gentext template exists. Clever name, huh?
|
||||
|
||||
* titles.xsl: Expanded support for obtaining titleabbrevs
|
||||
|
||||
2003-01-10 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, l10n.xml: Added bg.xml
|
||||
|
||||
* Makefile: Add Bulgarian
|
||||
|
||||
2003-01-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* labels.xsl, titles.xsl: Support setindex (there were all sorts of things wrong with it)
|
||||
|
||||
2003-01-01 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* table.xsl: CALS says the default for colsep and rowsep is 1.
|
||||
|
||||
* table.xsl: Fix variable scoping problem
|
||||
|
||||
* titles.xsl: Support titleabbrev (outside of info elements anyway)
|
||||
|
||||
2002-12-18 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* common.xsl: The select.mediaobject.index template now uses the
|
||||
$stylesheet.result.type parameter to choose the role
|
||||
value, with xhtml falling back to html if needed.
|
||||
|
||||
2002-12-17 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Changed selection of mediaobject to be more consistent using
|
||||
a separate select.mediaobject.index template. Also added
|
||||
text-align to block containing external-graphic in fo output.
|
||||
|
||||
2002-11-23 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Fixed bug in orderedlist-starting-number test when
|
||||
@continuation not set.
|
||||
|
||||
2002-11-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Handle nested refsections in section.level
|
||||
|
||||
* gentext.xsl: Pass full xpath name to gentext.template instead of just the local-name
|
||||
|
||||
* l10n.xsl: Make gentext.template search through /-separated names
|
||||
|
||||
2002-10-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* l10n.xsl: Support output of language attribute
|
||||
|
||||
2002-10-09 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* l10n.xsl: Make 3166 language codes work in upper or lowercase
|
||||
|
||||
2002-10-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Added orderedlist-starting-number and orderedlist-item-number templates
|
||||
|
||||
2002-10-01 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Changed the section.level template to return a number that matches
|
||||
the section level (sect1 = 1, etc.).
|
||||
|
||||
2002-09-27 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* l10n.xml: Add Thai
|
||||
|
||||
2002-09-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile, l10n.xml: Added LT and VI localizations
|
||||
|
||||
2002-09-04 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Refactor person.name templates so that it's easy to override them
|
||||
|
||||
* l10n.xsl: Move l10n.* parameters into ../params so they can be properly documented; made l10n.gentext.use.xref.language a numeric boolean parameter instead of a proper boolean
|
||||
|
||||
2002-09-03 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Remove spurious character on line 432
|
||||
|
||||
* table.xsl: Make sure row-level colsep and rowsep values are 'inherited' onto missing cells
|
||||
|
||||
2002-09-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Support person-name style from localization data in personal names
|
||||
|
||||
2002-08-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* table.xsl: Make inherited attributes work for 'missing' table cells
|
||||
|
||||
2002-07-29 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* targetdatabase.dtd: Forgot to fix the attribute on the <obj> element
|
||||
as well.
|
||||
|
||||
* targetdatabase.dtd: Changed the targetptr attribute from #REQUIRED to #IMPLIED
|
||||
since it is not required on all objects.
|
||||
|
||||
* targetdatabase.dtd: Replaced targetid attribute on document with targetptr
|
||||
per the decision of the DocBook Technical Committee.
|
||||
|
||||
2002-07-17 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* labels.xsl: Fixed thinko
|
||||
|
||||
* labels.xsl: Don't count equations without titles when labelling equations
|
||||
|
||||
2002-07-13 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* targets.xsl: Fixed output encoding to utf-8 so a targets database
|
||||
can handle mixed languages.
|
||||
Added omit-xml-declaration to get around the standalone
|
||||
attribute in the XML declaration not being permitted
|
||||
in system entities.
|
||||
|
||||
2002-07-09 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* labels.xsl: Bug #558333: use containing section for the label of a bridgehead if section.autolabel is non-zero
|
||||
|
||||
2002-07-07 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Changed the name of the second-order itemizedlist mark
|
||||
from 'round' (not supported in browsers' <ul> 'type' attribute)
|
||||
to 'circle', which is supported.
|
||||
Both are already supported in FO stylesheet.
|
||||
|
||||
2002-07-06 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* targets.xsl: The default.encoding parameter has been renamed chunker.output.encoding
|
||||
|
||||
2002-07-05 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* labels.xsl, titles.xsl: Added 'verbose' parameter to default templates in
|
||||
title.markup mode and label.markup mode, and made
|
||||
the error message conditional on that parameter. The
|
||||
default value is 1, so the message will still be
|
||||
there for normal usage. But the targets.xsl
|
||||
stylesheet sets verbose to 0 when trolling for
|
||||
cross reference targets to eliminate useless noise
|
||||
on elements that have an id attribute but no title or label.
|
||||
|
||||
* targetdatabase.dtd: New file.
|
||||
|
||||
* targets.xsl: New file.
|
||||
|
||||
2002-06-11 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Augmented debugging message (commented out)
|
||||
|
||||
* gentext.xsl: Experimental support for xrefstyle; support for %d in templates
|
||||
|
||||
* l10n.xsl: Experimental support for xrefstyle
|
||||
|
||||
* titles.xsl: Support refsynopsisdiv in title.markup mode
|
||||
|
||||
2002-05-23 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Support for SVG in HTML
|
||||
|
||||
2002-05-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl: Whitespace
|
||||
|
||||
* labels.xsl: Don't generate '. ' after QandA labels
|
||||
|
||||
2002-05-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Fix bugs in extension checking in mediaobject.filename
|
||||
|
||||
* l10n.xsl: Reworked test in gentext.template; should have no user-visible changes
|
||||
|
||||
* table.xsl: Removed some obsolete templates; reworked inheritance for improved border support (still implements old DocBook semantics which aren't quite CALS)
|
||||
|
||||
* titles.xsl: Improved error message
|
||||
|
||||
2002-04-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile, l10n.xml: Add support for Hebrew localization
|
||||
|
||||
2002-03-24 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Change comment: personname is no longer experimental
|
||||
|
||||
2002-03-18 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Replace generate.*.toc and generate.*.lot with single generate.toc parameter.
|
||||
|
||||
2002-03-18 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl: Replaced the substitute-markup template with one
|
||||
using simpler logic. Added params for the content
|
||||
to be substituted so it can be used with olinks
|
||||
where the content is supplied from a data file.
|
||||
|
||||
2002-03-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Handle revisionflag a little better on copyrights
|
||||
|
||||
* common.xsl, gentext.xsl, l10n.xsl, labels.xsl, subtitles.xsl, table.xsl, titles.xsl:
|
||||
Whitespace only: change CR/LF back to LF. Norm was a total moron.
|
||||
|
||||
* common.xsl, gentext.xsl, l10n.xsl, labels.xsl, subtitles.xsl, table.xsl, titles.xsl:
|
||||
Whitespace changes only: use PC-style CR/LF because Unix clients choke on this far less often than PC clients choke on the reverse. Grrr.
|
||||
|
||||
2002-03-07 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* titles.xsl: refentry title in title.markup mode now follows $allow-anchors setting
|
||||
to prevent index entries from appearing in the TOC.
|
||||
|
||||
2002-01-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* l10n.dtd, l10n.xml: Tweaks to the l10n.dtd to make it as namespace aware as DTDs can be
|
||||
|
||||
2002-01-25 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* table.xsl: Fix bug that caused rowsep and colsep to be ignored on empty cells
|
||||
|
||||
2002-01-10 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* l10n.xsl: Don't rely on the order of attribute nodes cause they don't have one
|
||||
|
||||
2002-01-03 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile: Added Thai localization
|
||||
|
||||
* common.xsl: Calculate itemized list symbol based on depth analagous to orderedlist numeration
|
||||
|
||||
* gentext.xsl: Use unnumbered gentext keys appropriately
|
||||
|
||||
2001-12-15 Jirka Kosek <kosek@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Improved support for TeX math inside equations.
|
||||
|
||||
2001-12-04 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* labels.xsl: Bug #435320: Poor enumeration of LoTs and LoFs
|
||||
|
||||
* titles.xsl: Bug! Can't put HTML here. But what does this break?
|
||||
|
||||
2001-12-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* titles.xsl: Make no.anchor.mode 'sticky'. This is really necessary because otherwise title inlines effectively turn it off
|
||||
|
||||
2001-12-01 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* labels.xsl: Improve FAQ labeling
|
||||
|
||||
2001-11-29 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* l10n.xsl: Fixed error message for missing localization so that if
|
||||
missing in en.xml, it doesn't say 'using en'.
|
||||
|
||||
2001-11-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Added punct.honorific parameter
|
||||
|
||||
* l10n.xsl: Removed crufty gentext.xref.text template
|
||||
|
||||
2001-11-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Support experimental personname wrapper
|
||||
|
||||
2001-11-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile, l10n.xml: Added Basque
|
||||
|
||||
2001-11-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Support well-formed documents, use key() instead of id()
|
||||
|
||||
2001-11-09 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile, l10n.xml: Added Nynorsk
|
||||
|
||||
2001-11-06 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* labels.xsl: Why did I assume sections should always be labelled in articles?
|
||||
|
||||
2001-11-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Support FAMILY Given style personal names
|
||||
|
||||
2001-10-30 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile, l10n.xml: Added Xhosa
|
||||
|
||||
2001-10-16 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* table.xsl: Table support improvements
|
||||
|
||||
2001-10-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile, l10n.xml: Added Ukranian
|
||||
|
||||
* table.xsl: Fix calculation of rowsep and colsep; added experimental support for table.borders.with.css in HTML; calculation of alignments needs to be added along the same lines
|
||||
|
||||
2001-10-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* table.xsl: New file.
|
||||
|
||||
2001-09-25 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Support automatic collation of year ranges in copyright
|
||||
|
||||
* l10n.xsl: Fix gentext.nav.* templates
|
||||
|
||||
2001-09-22 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl: Rewrote substitute-markup to support %p
|
||||
|
||||
* gentext.xsl, labels.xsl: Bug #463033: allow xref to list items (in orderedlists) and varlistentrys
|
||||
|
||||
* titles.xsl: Support title.markup for legal notices
|
||||
|
||||
2001-08-29 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Fix orderedlist numerations
|
||||
|
||||
2001-08-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* l10n.xsl: Calculation of the dingbat nodeset was simply broken
|
||||
|
||||
2001-08-13 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* Makefile: Added stylesheet as a dependency
|
||||
|
||||
2001-08-04 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* l10n.dtd: Rename internationalization to i18n, localization to l10n
|
||||
|
||||
* l10n.xml: Rename internationalization to i18n, localization to l10n, add namespace declaration
|
||||
|
||||
* l10n.xsl: Support a local i18n override, rename internationalization to i18n, localization to l10n, add namespace declaration
|
||||
|
||||
* labels.xsl: PartIntros never get a label
|
||||
|
||||
2001-08-01 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl: Pass allow-anchors through properly
|
||||
|
||||
* labels.xsl: Fix question labelling
|
||||
|
||||
* titles.xsl: Output anchors for titles if the titles have ids
|
||||
|
||||
2001-07-31 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||
|
||||
* l10n.xsl: Reverted the change from [last()] to [1] back to [last()]
|
||||
because that is the correct code.
|
||||
|
||||
* l10n.xsl: Added code to the "l10n.language" template to fall
|
||||
back to the two-letter lang code if a longer lang
|
||||
does not have a <lang>.xml localization file.
|
||||
And it falls back to the default lang if it can't
|
||||
find that either.
|
||||
|
||||
Also fixed a bug for finding the lang attribute.
|
||||
It was using the last() function, but in an
|
||||
ancestor-or-self node set you want the first ancestor
|
||||
(closest) with a lang value.
|
||||
|
||||
49c49
|
||||
< |ancestor-or-self::*/@xml:lang)[last()]"/>
|
||||
---
|
||||
> |ancestor-or-self::*/@xml:lang)[1]"/>
|
||||
|
||||
2001-07-17 Jirka Kosek <kosek@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Fixed bug #442160. Parameter graphic.default.extension is now used also for <graphic> and <inlinegraphic> not only for <imagedata>.
|
||||
|
||||
2001-07-08 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl, titles.xsl: Support xref to bridgehead
|
||||
|
||||
2001-07-04 <uid48421@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile, l10n.xml: Added support for Turkish
|
||||
|
||||
* .cvsignore, Makefile, l10n.xml: Added Afrikaans
|
||||
|
||||
* common.xsl, titles.xsl: Bug #429011, fix xref to qandset elements
|
||||
|
||||
* labels.xsl: Bug #426188, fix question/answer labels
|
||||
|
||||
2001-06-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl, gentext.xsl, labels.xsl, titles.xsl: Use common code to calculate step numbers; support xref to procedures and steps; added formal.procedures parameter
|
||||
|
||||
2001-06-20 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* l10n.xsl: Xalan debugging; harmless changes
|
||||
|
||||
2001-06-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* subtitles.xsl: Support subtitle on article
|
||||
|
||||
2001-05-23 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Fix dup. template bug with is.graphic.*
|
||||
|
||||
* gentext.xsl: Workaround article/appendix formatting bug (HACK)
|
||||
|
||||
* labels.xsl: Label appendixes correctly in books and articles
|
||||
|
||||
2001-05-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* labels.xsl: Tweak for section labels in articles
|
||||
|
||||
2001-05-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: Added refsect* to the section.level template
|
||||
|
||||
2001-05-04 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile, l10n.xml: Add Serbian localization
|
||||
|
||||
2001-04-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* common.xsl: My first crude attempts at support for qandaset
|
||||
|
||||
2001-04-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl, titles.xsl: Fix bug #417193, make sure allow-anchors is properly propagated through substitute-markup
|
||||
|
||||
2001-04-18 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* titles.xsl: Suppress indexterms in no.anchor.mode
|
||||
|
||||
2001-04-17 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* labels.xsl: Move label.from.part parameter into param.xsl; default it to 0 so that chapters and appendixes are numbered monotonically throughout a book by default. Moved param.xsl up in the include list, just for good measure
|
||||
|
||||
2001-04-16 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl: Fix bug in processing of subtitle content
|
||||
|
||||
* labels.xsl: Only label.from.part if there actually is a part
|
||||
|
||||
* titles.xsl: Don't put ulink, link, olink, or xref in titles if anchor's aren't allowed
|
||||
|
||||
2001-04-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl: Localize the textonly calculations by creating a object.title.markup.textonly mode
|
||||
|
||||
2001-04-03 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* gentext.xsl, labels.xsl, titles.xsl: Fix bug 412487, make XSL-generated callout marks honor callout mark parameters
|
||||
|
||||
* titles.xsl: Restore no.anchor.mode and suppress footnotes in no.anchor.mode
|
||||
|
||||
2001-04-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||
|
||||
* .cvsignore, Makefile: New file.
|
||||
|
||||
* common.xsl, gentext.xsl, l10n.xml, l10n.xsl, labels.xsl, subtitles.xsl, titles.xsl:
|
||||
New file.
|
||||
|
||||
* gentext.xsl: Commented out debugging messages
|
||||
|
||||
* l10n.dtd: New file.
|
||||
|
|
@ -0,0 +1,135 @@
|
|||
<?xml version="1.0"?>
|
||||
<!DOCTYPE xsl:stylesheet [
|
||||
<!ENTITY primary 'normalize-space(concat(primary/@sortas, primary[not(@sortas)]))'>
|
||||
]>
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
version="1.0"
|
||||
xmlns:func="http://exslt.org/functions"
|
||||
xmlns:exslt="http://exslt.org/common"
|
||||
xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"
|
||||
extension-element-prefixes="func exslt"
|
||||
exclude-result-prefixes="func exslt i l"
|
||||
xmlns:i="urn:cz-kosek:functions:index">
|
||||
|
||||
<!-- ********************************************************************
|
||||
$Id$
|
||||
********************************************************************
|
||||
|
||||
This file is part of the DocBook XSL Stylesheet distribution.
|
||||
See ../README or http://docbook.sf.net/ for copyright
|
||||
and other information.
|
||||
|
||||
******************************************************************** -->
|
||||
|
||||
<!-- Returns index group code for given term -->
|
||||
<func:function name="i:group-index">
|
||||
<xsl:param name="term"/>
|
||||
|
||||
<xsl:variable name="letters-rtf">
|
||||
<xsl:variable name="lang">
|
||||
<xsl:call-template name="l10n.language"/>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="local.l10n.letters"
|
||||
select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/>
|
||||
|
||||
<xsl:variable name="l10n.letters"
|
||||
select="($l10n.xml/l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="count($local.l10n.letters) > 0">
|
||||
<xsl:copy-of select="$local.l10n.letters"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="count($l10n.letters) > 0">
|
||||
<xsl:copy-of select="$l10n.letters"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:message>
|
||||
<xsl:text>No "</xsl:text>
|
||||
<xsl:value-of select="$lang"/>
|
||||
<xsl:text>" localization of index grouping letters exists</xsl:text>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$lang = 'en'">
|
||||
<xsl:text>.</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>; using "en".</xsl:text>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:message>
|
||||
|
||||
<xsl:copy-of select="($l10n.xml/l:i18n/l:l10n[@language='en']/l:letters)[1]"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="letters" select="exslt:node-set($letters-rtf)/*"/>
|
||||
|
||||
<xsl:variable name="long-letter-index" select="$letters/l:l[. = substring($term,1,2)]/@i"/>
|
||||
<xsl:variable name="short-letter-index" select="$letters/l:l[. = substring($term,1,1)]/@i"/>
|
||||
<xsl:variable name="letter-index">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$long-letter-index">
|
||||
<xsl:value-of select="$long-letter-index"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="$short-letter-index">
|
||||
<xsl:value-of select="$short-letter-index"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>0</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
<func:result select="number($letter-index)"/>
|
||||
</func:function>
|
||||
|
||||
<!-- Return index group letter for given group code -->
|
||||
<func:function name="i:group-letter">
|
||||
<xsl:param name="index"/>
|
||||
|
||||
<xsl:variable name="letters-rtf">
|
||||
<xsl:variable name="lang">
|
||||
<xsl:call-template name="l10n.language"/>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="local.l10n.letters"
|
||||
select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/>
|
||||
|
||||
<xsl:variable name="l10n.letters"
|
||||
select="($l10n.xml/l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="count($local.l10n.letters) > 0">
|
||||
<xsl:copy-of select="$local.l10n.letters"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="count($l10n.letters) > 0">
|
||||
<xsl:copy-of select="$l10n.letters"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:message>
|
||||
<xsl:text>No "</xsl:text>
|
||||
<xsl:value-of select="$lang"/>
|
||||
<xsl:text>" localization of index grouping letters exists</xsl:text>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$lang = 'en'">
|
||||
<xsl:text>.</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>; using "en".</xsl:text>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:message>
|
||||
|
||||
<xsl:copy-of select="($l10n.xml/l:i18n/l:l10n[@language='en']/l:letters)[1]"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="letters" select="exslt:node-set($letters-rtf)/*"/>
|
||||
|
||||
<func:result select="$letters/l:l[@i=$index][1]"/>
|
||||
</func:function>
|
||||
|
||||
<xsl:key name="group-code"
|
||||
match="indexterm"
|
||||
use="i:group-index(&primary;)"/>
|
||||
|
||||
</xsl:stylesheet>
|
|
@ -0,0 +1,624 @@
|
|||
<?xml version="1.0" encoding="US-ASCII"?>
|
||||
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="cs" english-language-name="Czech">
|
||||
|
||||
<!-- This file is generated automatically. -->
|
||||
<!-- Do not edit this file by hand! -->
|
||||
<!-- See http://docbook.sourceforge.net/ -->
|
||||
<!-- To update this file: edit the corresponding document at -->
|
||||
<!-- http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/gentext/locale/ -->
|
||||
|
||||
<l:gentext key="Abstract" text="Abstrakt"/>
|
||||
<l:gentext key="abstract" text="Abstrakt"/>
|
||||
<l:gentext key="Answer" text="Odpověď:"/>
|
||||
<l:gentext key="answer" text="Odpověď:"/>
|
||||
<l:gentext key="Appendix" text="Příloha"/>
|
||||
<l:gentext key="appendix" text="Příloha"/>
|
||||
<l:gentext key="Article" text="Článek"/>
|
||||
<l:gentext key="article" text="Článek"/>
|
||||
<l:gentext key="Bibliography" text="Bibliografie"/>
|
||||
<l:gentext key="bibliography" text="Bibliografie"/>
|
||||
<l:gentext key="Book" text="Kniha"/>
|
||||
<l:gentext key="book" text="Kniha"/>
|
||||
<l:gentext key="CAUTION" text="Výstraha"/>
|
||||
<l:gentext key="Caution" text="Výstraha"/>
|
||||
<l:gentext key="caution" text="Výstraha"/>
|
||||
<l:gentext key="Chapter" text="Kapitola"/>
|
||||
<l:gentext key="chapter" text="Kapitola"/>
|
||||
<l:gentext key="Colophon" text="Tiráž"/>
|
||||
<l:gentext key="colophon" text="Tiráž"/>
|
||||
<l:gentext key="Copyright" text="Copyright"/>
|
||||
<l:gentext key="copyright" text="Copyright"/>
|
||||
<l:gentext key="Dedication" text="Věnování"/>
|
||||
<l:gentext key="dedication" text="Věnování"/>
|
||||
<l:gentext key="Edition" text="Vydání"/>
|
||||
<l:gentext key="edition" text="Vydání"/>
|
||||
<l:gentext key="Equation" text="Rovnice"/>
|
||||
<l:gentext key="equation" text="Rovnice"/>
|
||||
<l:gentext key="Example" text="Příklad"/>
|
||||
<l:gentext key="example" text="Příklad"/>
|
||||
<l:gentext key="Figure" text="Obrázek"/>
|
||||
<l:gentext key="figure" text="Obrázek"/>
|
||||
<l:gentext key="Glossary" text="Slovník"/>
|
||||
<l:gentext key="glossary" text="Slovník"/>
|
||||
<l:gentext key="GlossSee" text="Viz"/>
|
||||
<l:gentext key="glosssee" text="Viz"/>
|
||||
<l:gentext key="GlossSeeAlso" text="Viz též"/>
|
||||
<l:gentext key="glossseealso" text="Viz též"/>
|
||||
<l:gentext key="IMPORTANT" text="Důležité"/>
|
||||
<l:gentext key="important" text="Důležité"/>
|
||||
<l:gentext key="Important" text="Důležité"/>
|
||||
<l:gentext key="Index" text="Rejstřík"/>
|
||||
<l:gentext key="index" text="Rejstřík"/>
|
||||
<l:gentext key="ISBN" text="ISBN"/>
|
||||
<l:gentext key="isbn" text="ISBN"/>
|
||||
<l:gentext key="LegalNotice" text="Právní doložka"/>
|
||||
<l:gentext key="legalnotice" text="Právní doložka"/>
|
||||
<l:gentext key="MsgAud" text="Publikum"/>
|
||||
<l:gentext key="msgaud" text="Publikum"/>
|
||||
<l:gentext key="MsgLevel" text="Úroveň"/>
|
||||
<l:gentext key="msglevel" text="Úroveň"/>
|
||||
<l:gentext key="MsgOrig" text="Původ"/>
|
||||
<l:gentext key="msgorig" text="Původ"/>
|
||||
<l:gentext key="NOTE" text="Poznámka"/>
|
||||
<l:gentext key="Note" text="Poznámka"/>
|
||||
<l:gentext key="note" text="Poznámka"/>
|
||||
<l:gentext key="Part" text="Část"/>
|
||||
<l:gentext key="part" text="Část"/>
|
||||
<l:gentext key="Preface" text="Předmluva"/>
|
||||
<l:gentext key="preface" text="Předmluva"/>
|
||||
<l:gentext key="Procedure" text="Postup"/>
|
||||
<l:gentext key="procedure" text="Postup"/>
|
||||
<l:gentext key="ProductionSet" text="Produkce"/>
|
||||
<l:gentext key="PubDate" text="Publication Date" lang="en"/>
|
||||
<l:gentext key="pubdate" text="Publication date" lang="en"/>
|
||||
<l:gentext key="Published" text="Vydáno"/>
|
||||
<l:gentext key="published" text="Vydáno"/>
|
||||
<l:gentext key="Qandadiv" text="Q & A" lang="en"/>
|
||||
<l:gentext key="qandadiv" text="Q & A" lang="en"/>
|
||||
<l:gentext key="Question" text="Otázka:"/>
|
||||
<l:gentext key="question" text="Otázka:"/>
|
||||
<l:gentext key="RefEntry" text=""/>
|
||||
<l:gentext key="refentry" text=""/>
|
||||
<l:gentext key="Reference" text="Odkaz"/>
|
||||
<l:gentext key="reference" text="Odkaz"/>
|
||||
<l:gentext key="RefName" text="Jméno"/>
|
||||
<l:gentext key="refname" text="Jméno"/>
|
||||
<l:gentext key="RefSection" text=""/>
|
||||
<l:gentext key="refsection" text=""/>
|
||||
<l:gentext key="RefSynopsisDiv" text="Přehled"/>
|
||||
<l:gentext key="refsynopsisdiv" text="Přehled"/>
|
||||
<l:gentext key="RevHistory" text="Přehled revizí"/>
|
||||
<l:gentext key="revhistory" text="Přehled revizí"/>
|
||||
<l:gentext key="revision" text="Revize"/>
|
||||
<l:gentext key="Revision" text="Revize"/>
|
||||
<l:gentext key="sect1" text="Oddíl"/>
|
||||
<l:gentext key="sect2" text="Oddíl"/>
|
||||
<l:gentext key="sect3" text="Oddíl"/>
|
||||
<l:gentext key="sect4" text="Oddíl"/>
|
||||
<l:gentext key="sect5" text="Oddíl"/>
|
||||
<l:gentext key="section" text="Oddíl"/>
|
||||
<l:gentext key="Section" text="Oddíl"/>
|
||||
<l:gentext key="see" text="Viz"/>
|
||||
<l:gentext key="See" text="Viz"/>
|
||||
<l:gentext key="seealso" text="Viz též"/>
|
||||
<l:gentext key="Seealso" text="Viz též"/>
|
||||
<l:gentext key="SeeAlso" text="Viz též"/>
|
||||
<l:gentext key="set" text="Sada"/>
|
||||
<l:gentext key="Set" text="Sada"/>
|
||||
<l:gentext key="setindex" text="Rejstřík sady"/>
|
||||
<l:gentext key="SetIndex" text="Rejstřík sady"/>
|
||||
<l:gentext key="Sidebar" text="Marginálie"/>
|
||||
<l:gentext key="sidebar" text="Marginálie"/>
|
||||
<l:gentext key="step" text="krok"/>
|
||||
<l:gentext key="Step" text="Krok"/>
|
||||
<l:gentext key="Table" text="Tabulka"/>
|
||||
<l:gentext key="table" text="Tabulka"/>
|
||||
<l:gentext key="tip" text="Tip"/>
|
||||
<l:gentext key="TIP" text="Tip"/>
|
||||
<l:gentext key="Tip" text="Tip"/>
|
||||
<l:gentext key="Warning" text="Varování"/>
|
||||
<l:gentext key="warning" text="Varování"/>
|
||||
<l:gentext key="WARNING" text="Varování"/>
|
||||
<l:gentext key="and" text="a"/>
|
||||
<l:gentext key="by" text="by"/>
|
||||
<l:gentext key="called" text="called" lang="en"/>
|
||||
<l:gentext key="Edited" text="Vydáno"/>
|
||||
<l:gentext key="edited" text="Vydáno"/>
|
||||
<l:gentext key="Editedby" text="Sestavil"/>
|
||||
<l:gentext key="editedby" text="Sestavil"/>
|
||||
<l:gentext key="in" text="v"/>
|
||||
<l:gentext key="lastlistcomma" text=","/>
|
||||
<l:gentext key="listcomma" text=","/>
|
||||
<l:gentext key="nonexistantelement" text="neexistující prvek"/>
|
||||
<l:gentext key="notes" text="Poznámky"/>
|
||||
<l:gentext key="Notes" text="Poznámky"/>
|
||||
<l:gentext key="Pgs" text="Str."/>
|
||||
<l:gentext key="pgs" text="Str."/>
|
||||
<l:gentext key="Revisedby" text="Revidoval: "/>
|
||||
<l:gentext key="revisedby" text="Revidoval: "/>
|
||||
<l:gentext key="TableNotes" text="Poznámky"/>
|
||||
<l:gentext key="tablenotes" text="Poznámky"/>
|
||||
<l:gentext key="TableofContents" text="Obsah"/>
|
||||
<l:gentext key="tableofcontents" text="Obsah"/>
|
||||
<l:gentext key="the" text="" lang="en"/>
|
||||
<l:gentext key="unexpectedelementname" text="Neočekávané jméno prvku"/>
|
||||
<l:gentext key="unsupported" text="nepodporovaný"/>
|
||||
<l:gentext key="xrefto" text="xref k"/>
|
||||
<l:gentext key="listofequations" text="Seznam rovnic"/>
|
||||
<l:gentext key="ListofEquations" text="Seznam rovnic"/>
|
||||
<l:gentext key="ListofExamples" text="Seznam příkladů"/>
|
||||
<l:gentext key="listofexamples" text="Seznam příkladů"/>
|
||||
<l:gentext key="ListofFigures" text="Seznam obrázků"/>
|
||||
<l:gentext key="listoffigures" text="Seznam obrázků"/>
|
||||
<l:gentext key="ListofProcedures" text="List of Procedures" lang="en"/>
|
||||
<l:gentext key="listofprocedures" text="List of Procedures" lang="en"/>
|
||||
<l:gentext key="listoftables" text="Seznam tabulek"/>
|
||||
<l:gentext key="ListofTables" text="Seznam tabulek"/>
|
||||
<l:gentext key="ListofUnknown" text="Seznam neznámého"/>
|
||||
<l:gentext key="listofunknown" text="Seznam neznámého"/>
|
||||
<l:gentext key="nav-home" text="Domů"/>
|
||||
<l:gentext key="nav-next" text="Další"/>
|
||||
<l:gentext key="nav-next-sibling" text="Rychle dopředu"/>
|
||||
<l:gentext key="nav-prev" text="Předcházející"/>
|
||||
<l:gentext key="nav-prev-sibling" text="Rychle zpět"/>
|
||||
<l:gentext key="nav-up" text="Nahoru"/>
|
||||
<l:gentext key="nav-toc" text="ToC" lang="en"/>
|
||||
<l:gentext key="Draft" text="Návrh"/>
|
||||
<l:gentext key="above" text="nad"/>
|
||||
<l:gentext key="below" text="pod"/>
|
||||
<l:gentext key="sectioncalled" text="oddíl nazvaný"/>
|
||||
<l:gentext key="index symbols" text="Symboly"/>
|
||||
<l:gentext key="lowercase.alpha" text="aábcčdďeéěfghiíjklmnoópqrřsštťuúůvwxyýzž"/>
|
||||
<l:gentext key="uppercase.alpha" text="AÁBCČDĎEÉĚFGHIÍJKLMNOÓPQRŘSŠTŤUÚŮVWXYÝZŽ"/>
|
||||
<l:dingbat key="startquote" text="„"/>
|
||||
<l:dingbat key="endquote" text="“"/>
|
||||
<l:dingbat key="nestedstartquote" text="‚"/>
|
||||
<l:dingbat key="nestedendquote" text="‘"/>
|
||||
<l:dingbat key="singlestartquote" text="‘" lang="en"/>
|
||||
<l:dingbat key="singleendquote" text="’" lang="en"/>
|
||||
<l:dingbat key="bullet" text="•"/>
|
||||
<l:gentext key="hyphenation-character" text="-" lang="en"/>
|
||||
<l:gentext key="hyphenation-push-character-count" text="2" lang="en"/>
|
||||
<l:gentext key="hyphenation-remain-character-count" text="2" lang="en"/>
|
||||
|
||||
<l:context name="styles">
|
||||
<l:template name="person-name" text="first-last"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title">
|
||||
<l:template name="abstract" text="%t"/>
|
||||
<l:template name="answer" text="%t"/>
|
||||
<l:template name="appendix" text="Příloha %n. %t"/>
|
||||
<l:template name="article" text="%t"/>
|
||||
<l:template name="authorblurb" text="%t"/>
|
||||
<l:template name="bibliodiv" text="%t"/>
|
||||
<l:template name="biblioentry" text="%t"/>
|
||||
<l:template name="bibliography" text="%t"/>
|
||||
<l:template name="bibliolist" text="%t" lang="en"/>
|
||||
<l:template name="bibliomixed" text="%t"/>
|
||||
<l:template name="bibliomset" text="%t"/>
|
||||
<l:template name="biblioset" text="%t"/>
|
||||
<l:template name="blockquote" text="%t"/>
|
||||
<l:template name="book" text="%t"/>
|
||||
<l:template name="calloutlist" text="%t"/>
|
||||
<l:template name="caution" text="%t"/>
|
||||
<l:template name="chapter" text="Kapitola %n. %t"/>
|
||||
<l:template name="colophon" text="%t"/>
|
||||
<l:template name="dedication" text="%t"/>
|
||||
<l:template name="equation" text="Rovnice %n. %t"/>
|
||||
<l:template name="example" text="Příklad %n. %t"/>
|
||||
<l:template name="figure" text="Obrázek %n. %t"/>
|
||||
<l:template name="formalpara" text="%t"/>
|
||||
<l:template name="glossary" text="%t"/>
|
||||
<l:template name="glossdiv" text="%t"/>
|
||||
<l:template name="glosslist" text="%t" lang="en"/>
|
||||
<l:template name="glossentry" text="%t" lang="en"/>
|
||||
<l:template name="important" text="%t"/>
|
||||
<l:template name="index" text="%t"/>
|
||||
<l:template name="indexdiv" text="%t"/>
|
||||
<l:template name="itemizedlist" text="%t"/>
|
||||
<l:template name="legalnotice" text="%t"/>
|
||||
<l:template name="listitem" text=""/>
|
||||
<l:template name="lot" text="%t"/>
|
||||
<l:template name="msg" text="%t"/>
|
||||
<l:template name="msgexplan" text="%t"/>
|
||||
<l:template name="msgmain" text="%t"/>
|
||||
<l:template name="msgrel" text="%t"/>
|
||||
<l:template name="msgset" text="%t"/>
|
||||
<l:template name="msgsub" text="%t"/>
|
||||
<l:template name="note" text="%t"/>
|
||||
<l:template name="orderedlist" text="%t"/>
|
||||
<l:template name="part" text="Část %n. %t"/>
|
||||
<l:template name="partintro" text="%t"/>
|
||||
<l:template name="preface" text="%t"/>
|
||||
<l:template name="procedure" text="%t"/>
|
||||
<l:template name="procedure.formal" text="Postup %n. %t"/>
|
||||
<l:template name="productionset" text="%t"/>
|
||||
<l:template name="productionset.formal" text="Produkce %n"/>
|
||||
<l:template name="qandadiv" text="%t"/>
|
||||
<l:template name="qandaentry" text="%t"/>
|
||||
<l:template name="qandaset" text="%t"/>
|
||||
<l:template name="question" text="%t"/>
|
||||
<l:template name="refentry" text="%t"/>
|
||||
<l:template name="reference" text="%t"/>
|
||||
<l:template name="refsection" text="%t"/>
|
||||
<l:template name="refsect1" text="%t"/>
|
||||
<l:template name="refsect2" text="%t"/>
|
||||
<l:template name="refsect3" text="%t"/>
|
||||
<l:template name="refsynopsisdiv" text="%t"/>
|
||||
<l:template name="refsynopsisdivinfo" text="%t"/>
|
||||
<l:template name="segmentedlist" text="%t"/>
|
||||
<l:template name="set" text="%t"/>
|
||||
<l:template name="setindex" text="%t"/>
|
||||
<l:template name="sidebar" text="%t"/>
|
||||
<l:template name="step" text="%t"/>
|
||||
<l:template name="table" text="Tabulka %n. %t"/>
|
||||
<l:template name="task" text="%t" lang="en"/>
|
||||
<l:template name="tip" text="%t"/>
|
||||
<l:template name="toc" text="%t"/>
|
||||
<l:template name="variablelist" text="%t"/>
|
||||
<l:template name="varlistentry" text=""/>
|
||||
<l:template name="warning" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title-unnumbered">
|
||||
<l:template name="appendix" text="%t"/>
|
||||
<l:template name="article/appendix" text="%t" lang="en"/>
|
||||
<l:template name="bridgehead" text="%t"/>
|
||||
<l:template name="chapter" text="%t"/>
|
||||
<l:template name="sect1" text="%t"/>
|
||||
<l:template name="sect2" text="%t"/>
|
||||
<l:template name="sect3" text="%t"/>
|
||||
<l:template name="sect4" text="%t"/>
|
||||
<l:template name="sect5" text="%t"/>
|
||||
<l:template name="section" text="%t"/>
|
||||
<l:template name="simplesect" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title-numbered">
|
||||
<l:template name="appendix" text="Příloha %n. %t"/>
|
||||
<l:template name="article/appendix" text="%n. %t" lang="en"/>
|
||||
<l:template name="bridgehead" text="%n. %t"/>
|
||||
<l:template name="chapter" text="Kapitola %n. %t"/>
|
||||
<l:template name="sect1" text="%n. %t"/>
|
||||
<l:template name="sect2" text="%n. %t"/>
|
||||
<l:template name="sect3" text="%n. %t"/>
|
||||
<l:template name="sect4" text="%n. %t"/>
|
||||
<l:template name="sect5" text="%n. %t"/>
|
||||
<l:template name="section" text="%n. %t"/>
|
||||
<l:template name="simplesect" text="%n. %t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="subtitle">
|
||||
<l:template name="appendix" text="%s"/>
|
||||
<l:template name="article" text="%s"/>
|
||||
<l:template name="bibliodiv" text="%s"/>
|
||||
<l:template name="biblioentry" text="%s"/>
|
||||
<l:template name="bibliography" text="%s"/>
|
||||
<l:template name="bibliomixed" text="%s"/>
|
||||
<l:template name="bibliomset" text="%s"/>
|
||||
<l:template name="biblioset" text="%s"/>
|
||||
<l:template name="book" text="%s"/>
|
||||
<l:template name="chapter" text="%s"/>
|
||||
<l:template name="colophon" text="%s"/>
|
||||
<l:template name="dedication" text="%s"/>
|
||||
<l:template name="glossary" text="%s"/>
|
||||
<l:template name="glossdiv" text="%s"/>
|
||||
<l:template name="index" text="%s"/>
|
||||
<l:template name="indexdiv" text="%s"/>
|
||||
<l:template name="lot" text="%s"/>
|
||||
<l:template name="part" text="%s"/>
|
||||
<l:template name="partintro" text="%s"/>
|
||||
<l:template name="preface" text="%s"/>
|
||||
<l:template name="refentry" text="%s"/>
|
||||
<l:template name="reference" text="%s"/>
|
||||
<l:template name="refsection" text="%s"/>
|
||||
<l:template name="refsect1" text="%s"/>
|
||||
<l:template name="refsect2" text="%s"/>
|
||||
<l:template name="refsect3" text="%s"/>
|
||||
<l:template name="refsynopsisdiv" text="%s"/>
|
||||
<l:template name="sect1" text="%s"/>
|
||||
<l:template name="sect2" text="%s"/>
|
||||
<l:template name="sect3" text="%s"/>
|
||||
<l:template name="sect4" text="%s"/>
|
||||
<l:template name="sect5" text="%s"/>
|
||||
<l:template name="section" text="%s"/>
|
||||
<l:template name="set" text="%s"/>
|
||||
<l:template name="setindex" text="%s"/>
|
||||
<l:template name="sidebar" text="%s"/>
|
||||
<l:template name="simplesect" text="%s"/>
|
||||
<l:template name="toc" text="%s"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref">
|
||||
<l:template name="abstract" text="%t"/>
|
||||
<l:template name="answer" text="%n"/>
|
||||
<l:template name="appendix" text="%t"/>
|
||||
<l:template name="article" text="%t"/>
|
||||
<l:template name="authorblurb" text="%t"/>
|
||||
<l:template name="bibliodiv" text="%t"/>
|
||||
<l:template name="bibliography" text="%t"/>
|
||||
<l:template name="bibliomset" text="%t"/>
|
||||
<l:template name="biblioset" text="%t"/>
|
||||
<l:template name="blockquote" text="%t"/>
|
||||
<l:template name="book" text="%t"/>
|
||||
<l:template name="calloutlist" text="%t"/>
|
||||
<l:template name="caution" text="%t"/>
|
||||
<l:template name="chapter" text="%t"/>
|
||||
<l:template name="colophon" text="%t"/>
|
||||
<l:template name="constraintdef" text="%t"/>
|
||||
<l:template name="dedication" text="%t"/>
|
||||
<l:template name="equation" text="%t"/>
|
||||
<l:template name="example" text="%t"/>
|
||||
<l:template name="figure" text="%t"/>
|
||||
<l:template name="formalpara" text="%t"/>
|
||||
<l:template name="glossary" text="%t"/>
|
||||
<l:template name="glossdiv" text="%t"/>
|
||||
<l:template name="important" text="%t"/>
|
||||
<l:template name="index" text="%t"/>
|
||||
<l:template name="indexdiv" text="%t"/>
|
||||
<l:template name="itemizedlist" text="%t"/>
|
||||
<l:template name="legalnotice" text="%t"/>
|
||||
<l:template name="listitem" text="%n"/>
|
||||
<l:template name="lot" text="%t"/>
|
||||
<l:template name="msg" text="%t"/>
|
||||
<l:template name="msgexplan" text="%t"/>
|
||||
<l:template name="msgmain" text="%t"/>
|
||||
<l:template name="msgrel" text="%t"/>
|
||||
<l:template name="msgset" text="%t"/>
|
||||
<l:template name="msgsub" text="%t"/>
|
||||
<l:template name="note" text="%t"/>
|
||||
<l:template name="orderedlist" text="%t"/>
|
||||
<l:template name="part" text="%t"/>
|
||||
<l:template name="partintro" text="%t"/>
|
||||
<l:template name="preface" text="%t"/>
|
||||
<l:template name="procedure" text="%t"/>
|
||||
<l:template name="productionset" text="%t"/>
|
||||
<l:template name="qandadiv" text="%t"/>
|
||||
<l:template name="qandaentry" text="%n"/>
|
||||
<l:template name="qandaset" text="%t"/>
|
||||
<l:template name="question" text="%n"/>
|
||||
<l:template name="reference" text="%t"/>
|
||||
<l:template name="refsynopsisdiv" text="%t"/>
|
||||
<l:template name="segmentedlist" text="%t"/>
|
||||
<l:template name="set" text="%t"/>
|
||||
<l:template name="setindex" text="%t"/>
|
||||
<l:template name="sidebar" text="%t"/>
|
||||
<l:template name="table" text="%t"/>
|
||||
<l:template name="tip" text="%t"/>
|
||||
<l:template name="toc" text="%t"/>
|
||||
<l:template name="variablelist" text="%t"/>
|
||||
<l:template name="varlistentry" text="%n"/>
|
||||
<l:template name="warning" text="%t"/>
|
||||
<l:template name="page.citation" text=" [%p]"/>
|
||||
<l:template name="page" text="(page %p)" lang="en"/>
|
||||
<l:template name="pageabbrev" text="(p. %p)" lang="en"/>
|
||||
<l:template name="Page" text="Page %p" lang="en"/>
|
||||
<l:template name="bridgehead" text="„%t“"/>
|
||||
<l:template name="refsection" text="„%t“"/>
|
||||
<l:template name="refsect1" text="„%t“"/>
|
||||
<l:template name="refsect2" text="„%t“"/>
|
||||
<l:template name="refsect3" text="„%t“"/>
|
||||
<l:template name="sect1" text="„%t“"/>
|
||||
<l:template name="sect2" text="„%t“"/>
|
||||
<l:template name="sect3" text="„%t“"/>
|
||||
<l:template name="sect4" text="„%t“"/>
|
||||
<l:template name="sect5" text="„%t“"/>
|
||||
<l:template name="section" text="„%t“"/>
|
||||
<l:template name="simplesect" text="„%t“"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref-number">
|
||||
<l:template name="answer" text="%n"/>
|
||||
<l:template name="appendix" text="%n"/>
|
||||
<l:template name="bridgehead" text="%n"/>
|
||||
<l:template name="chapter" text="%n"/>
|
||||
<l:template name="equation" text="%n"/>
|
||||
<l:template name="example" text="%n"/>
|
||||
<l:template name="figure" text="%n"/>
|
||||
<l:template name="part" text="%n"/>
|
||||
<l:template name="procedure" text="%n"/>
|
||||
<l:template name="productionset" text="%n"/>
|
||||
<l:template name="qandadiv" text="%n"/>
|
||||
<l:template name="qandaentry" text="%n"/>
|
||||
<l:template name="question" text="%n"/>
|
||||
<l:template name="sect1" text="%n"/>
|
||||
<l:template name="sect2" text="%n"/>
|
||||
<l:template name="sect3" text="%n"/>
|
||||
<l:template name="sect4" text="%n"/>
|
||||
<l:template name="sect5" text="%n"/>
|
||||
<l:template name="section" text="%n"/>
|
||||
<l:template name="table" text="%n"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref-number-and-title">
|
||||
<l:template name="appendix" text="%n – „%t“"/>
|
||||
<l:template name="bridgehead" text="%n – „%t“"/>
|
||||
<l:template name="chapter" text="%n – „%t“"/>
|
||||
<l:template name="equation" text="%n – „%t“"/>
|
||||
<l:template name="example" text="%n – „%t“"/>
|
||||
<l:template name="figure" text="%n – „%t“"/>
|
||||
<l:template name="part" text="%n – „%t“"/>
|
||||
<l:template name="procedure" text="%n – „%t“"/>
|
||||
<l:template name="productionset" text="%n – „%t“"/>
|
||||
<l:template name="qandadiv" text="%n – „%t“"/>
|
||||
<l:template name="refsect1" text="„%t“"/>
|
||||
<l:template name="refsect2" text="„%t“"/>
|
||||
<l:template name="refsect3" text="„%t“"/>
|
||||
<l:template name="refsection" text="„%t“"/>
|
||||
<l:template name="sect1" text="%n – „%t“"/>
|
||||
<l:template name="sect2" text="%n – „%t“"/>
|
||||
<l:template name="sect3" text="%n – „%t“"/>
|
||||
<l:template name="sect4" text="%n – „%t“"/>
|
||||
<l:template name="sect5" text="%n – „%t“"/>
|
||||
<l:template name="section" text="%n – „%t“"/>
|
||||
<l:template name="simplesect" text="%n – „%t“"/>
|
||||
<l:template name="table" text="%n – „%t“"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="authorgroup">
|
||||
<l:template name="sep" text=", "/>
|
||||
<l:template name="sep2" text=" a "/>
|
||||
<l:template name="seplast" text=" a "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="glossary">
|
||||
<l:template name="see" text="Viz "/>
|
||||
<l:template name="seealso" text="Viz též "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="msgset">
|
||||
<l:template name="MsgAud" text="Publikum: "/>
|
||||
<l:template name="MsgLevel" text="Úroveň: "/>
|
||||
<l:template name="MsgOrig" text="Původ: "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime">
|
||||
<l:template name="format" text="d. B Y"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime-full">
|
||||
<l:template name="January" text="ledna"/>
|
||||
<l:template name="February" text="února"/>
|
||||
<l:template name="March" text="března"/>
|
||||
<l:template name="April" text="dubna"/>
|
||||
<l:template name="May" text="května"/>
|
||||
<l:template name="June" text="června"/>
|
||||
<l:template name="July" text="července"/>
|
||||
<l:template name="August" text="srpna"/>
|
||||
<l:template name="September" text="září"/>
|
||||
<l:template name="October" text="října"/>
|
||||
<l:template name="November" text="listopadu"/>
|
||||
<l:template name="December" text="prosince"/>
|
||||
<l:template name="Monday" text="pondělí"/>
|
||||
<l:template name="Tuesday" text="úterý"/>
|
||||
<l:template name="Wednesday" text="středa"/>
|
||||
<l:template name="Thursday" text="čtvrtek"/>
|
||||
<l:template name="Friday" text="pátek"/>
|
||||
<l:template name="Saturday" text="sobota"/>
|
||||
<l:template name="Sunday" text="neděle"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime-abbrev">
|
||||
<l:template name="Jan" text="led"/>
|
||||
<l:template name="Feb" text="úno"/>
|
||||
<l:template name="Mar" text="bře"/>
|
||||
<l:template name="Apr" text="dub"/>
|
||||
<l:template name="May" text="kvě"/>
|
||||
<l:template name="Jun" text="čer"/>
|
||||
<l:template name="Jul" text="čnc"/>
|
||||
<l:template name="Aug" text="srp"/>
|
||||
<l:template name="Sep" text="zář"/>
|
||||
<l:template name="Oct" text="řij"/>
|
||||
<l:template name="Nov" text="lis"/>
|
||||
<l:template name="Dec" text="pro"/>
|
||||
<l:template name="Mon" text="po"/>
|
||||
<l:template name="Tue" text="út"/>
|
||||
<l:template name="Wed" text="st"/>
|
||||
<l:template name="Thu" text="čt"/>
|
||||
<l:template name="Fri" text="pá"/>
|
||||
<l:template name="Sat" text="so"/>
|
||||
<l:template name="Sun" text="ne"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="htmlhelp">
|
||||
<l:template name="langcode" text="0x0405 Czech"/>
|
||||
</l:context>
|
||||
|
||||
<l:letters>
|
||||
<l:l i="-1"/>
|
||||
<l:l i="0">Symboly</l:l>
|
||||
<l:l i="1">A</l:l>
|
||||
<l:l i="1">a</l:l>
|
||||
<l:l i="1">Á</l:l>
|
||||
<l:l i="1">á</l:l>
|
||||
<l:l i="2">B</l:l>
|
||||
<l:l i="2">b</l:l>
|
||||
<l:l i="3">C</l:l>
|
||||
<l:l i="3">c</l:l>
|
||||
<l:l i="4">Č</l:l>
|
||||
<l:l i="4">č</l:l>
|
||||
<l:l i="5">D</l:l>
|
||||
<l:l i="5">d</l:l>
|
||||
<l:l i="5">Ď</l:l>
|
||||
<l:l i="5">ď</l:l>
|
||||
<l:l i="7">E</l:l>
|
||||
<l:l i="7">e</l:l>
|
||||
<l:l i="7">É</l:l>
|
||||
<l:l i="7">é</l:l>
|
||||
<l:l i="7">Ě</l:l>
|
||||
<l:l i="7">ě</l:l>
|
||||
<l:l i="7">Ë</l:l>
|
||||
<l:l i="7">ë</l:l>
|
||||
<l:l i="8">F</l:l>
|
||||
<l:l i="8">f</l:l>
|
||||
<l:l i="9">G</l:l>
|
||||
<l:l i="9">g</l:l>
|
||||
<l:l i="10">H</l:l>
|
||||
<l:l i="10">h</l:l>
|
||||
<l:l i="11">Ch</l:l>
|
||||
<l:l i="11">ch</l:l>
|
||||
<l:l i="11">cH</l:l>
|
||||
<l:l i="11">CH</l:l>
|
||||
<l:l i="12">I</l:l>
|
||||
<l:l i="12">i</l:l>
|
||||
<l:l i="12">Í</l:l>
|
||||
<l:l i="12">í</l:l>
|
||||
<l:l i="13">J</l:l>
|
||||
<l:l i="13">j</l:l>
|
||||
<l:l i="14">K</l:l>
|
||||
<l:l i="14">k</l:l>
|
||||
<l:l i="15">L</l:l>
|
||||
<l:l i="15">l</l:l>
|
||||
<l:l i="16">M</l:l>
|
||||
<l:l i="16">m</l:l>
|
||||
<l:l i="17">N</l:l>
|
||||
<l:l i="17">n</l:l>
|
||||
<l:l i="17">Ň</l:l>
|
||||
<l:l i="17">ň</l:l>
|
||||
<l:l i="19">O</l:l>
|
||||
<l:l i="19">o</l:l>
|
||||
<l:l i="19">Ó</l:l>
|
||||
<l:l i="19">ó</l:l>
|
||||
<l:l i="19">Ö</l:l>
|
||||
<l:l i="19">ö</l:l>
|
||||
<l:l i="20">P</l:l>
|
||||
<l:l i="20">p</l:l>
|
||||
<l:l i="21">Q</l:l>
|
||||
<l:l i="21">q</l:l>
|
||||
<l:l i="22">R</l:l>
|
||||
<l:l i="22">r</l:l>
|
||||
<l:l i="23">Ř</l:l>
|
||||
<l:l i="23">ř</l:l>
|
||||
<l:l i="24">S</l:l>
|
||||
<l:l i="24">s</l:l>
|
||||
<l:l i="25">Š</l:l>
|
||||
<l:l i="25">š</l:l>
|
||||
<l:l i="26">T</l:l>
|
||||
<l:l i="26">t</l:l>
|
||||
<l:l i="26">Ť</l:l>
|
||||
<l:l i="26">ť</l:l>
|
||||
<l:l i="28">U</l:l>
|
||||
<l:l i="28">u</l:l>
|
||||
<l:l i="28">Ú</l:l>
|
||||
<l:l i="28">ú</l:l>
|
||||
<l:l i="28">Ů</l:l>
|
||||
<l:l i="28">ů</l:l>
|
||||
<l:l i="28">Ü</l:l>
|
||||
<l:l i="28">ü</l:l>
|
||||
<l:l i="29">V</l:l>
|
||||
<l:l i="29">v</l:l>
|
||||
<l:l i="30">W</l:l>
|
||||
<l:l i="30">w</l:l>
|
||||
<l:l i="31">X</l:l>
|
||||
<l:l i="31">x</l:l>
|
||||
<l:l i="32">Y</l:l>
|
||||
<l:l i="32">y</l:l>
|
||||
<l:l i="32">Ý</l:l>
|
||||
<l:l i="32">ý</l:l>
|
||||
<l:l i="33">Z</l:l>
|
||||
<l:l i="33">z</l:l>
|
||||
<l:l i="34">Ž</l:l>
|
||||
<l:l i="34">ž</l:l>
|
||||
</l:letters>
|
||||
</l:l10n>
|
|
@ -0,0 +1,588 @@
|
|||
<?xml version="1.0" encoding="US-ASCII"?>
|
||||
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="da" english-language-name="Danish">
|
||||
|
||||
<!-- This file is generated automatically. -->
|
||||
<!-- Do not edit this file by hand! -->
|
||||
<!-- See http://docbook.sourceforge.net/ -->
|
||||
<!-- To update this file: edit the corresponding document at -->
|
||||
<!-- http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/gentext/locale/ -->
|
||||
|
||||
<l:gentext key="Abstract" text="Resumé"/>
|
||||
<l:gentext key="abstract" text="resumé"/>
|
||||
<l:gentext key="Answer" text="Svar"/>
|
||||
<l:gentext key="answer" text="svar"/>
|
||||
<l:gentext key="Appendix" text="Appendiks"/>
|
||||
<l:gentext key="appendix" text="appendiks"/>
|
||||
<l:gentext key="Article" text="Artikel"/>
|
||||
<l:gentext key="article" text="artikel"/>
|
||||
<l:gentext key="Bibliography" text="Litteraturliste"/>
|
||||
<l:gentext key="bibliography" text="litteraturliste"/>
|
||||
<l:gentext key="Book" text="Bog"/>
|
||||
<l:gentext key="book" text="bog"/>
|
||||
<l:gentext key="CAUTION" text="PAS PÅ"/>
|
||||
<l:gentext key="Caution" text="Pas på"/>
|
||||
<l:gentext key="caution" text="pas på"/>
|
||||
<l:gentext key="Chapter" text="Kapitel"/>
|
||||
<l:gentext key="chapter" text="kapitel"/>
|
||||
<l:gentext key="Colophon" text="Kolofon"/>
|
||||
<l:gentext key="colophon" text="kolofon"/>
|
||||
<l:gentext key="Copyright" text="Ophavsret"/>
|
||||
<l:gentext key="copyright" text="ophavsret"/>
|
||||
<l:gentext key="Dedication" text="Tilegnet"/>
|
||||
<l:gentext key="dedication" text="tilegnet"/>
|
||||
<l:gentext key="Edition" text="Udgave"/>
|
||||
<l:gentext key="edition" text="udgave"/>
|
||||
<l:gentext key="Equation" text="Ligning"/>
|
||||
<l:gentext key="equation" text="ligning"/>
|
||||
<l:gentext key="Example" text="Eksempel"/>
|
||||
<l:gentext key="example" text="eksempel"/>
|
||||
<l:gentext key="Figure" text="Figur"/>
|
||||
<l:gentext key="figure" text="figur"/>
|
||||
<l:gentext key="Glossary" text="Ordliste"/>
|
||||
<l:gentext key="glossary" text="ordliste"/>
|
||||
<l:gentext key="GlossSee" text="Se"/>
|
||||
<l:gentext key="glosssee" text="se"/>
|
||||
<l:gentext key="GlossSeeAlso" text="Se også"/>
|
||||
<l:gentext key="glossseealso" text="se også"/>
|
||||
<l:gentext key="IMPORTANT" text="VIGTIGT"/>
|
||||
<l:gentext key="important" text="vigtigt"/>
|
||||
<l:gentext key="Important" text="Vigtigt"/>
|
||||
<l:gentext key="Index" text="Stikordsregister"/>
|
||||
<l:gentext key="index" text="stikordsregister"/>
|
||||
<l:gentext key="ISBN" text="ISBN"/>
|
||||
<l:gentext key="isbn" text="ISBN"/>
|
||||
<l:gentext key="LegalNotice" text="Retslig note"/>
|
||||
<l:gentext key="legalnotice" text="retslig note"/>
|
||||
<l:gentext key="MsgAud" text="Målgruppe"/>
|
||||
<l:gentext key="msgaud" text="målgruppe"/>
|
||||
<l:gentext key="MsgLevel" text="Niveau"/>
|
||||
<l:gentext key="msglevel" text="niveau"/>
|
||||
<l:gentext key="MsgOrig" text="Grundlag"/>
|
||||
<l:gentext key="msgorig" text="grundlag"/>
|
||||
<l:gentext key="NOTE" text="BEMÆRK"/>
|
||||
<l:gentext key="Note" text="Bemærk"/>
|
||||
<l:gentext key="note" text="bemærk"/>
|
||||
<l:gentext key="Part" text="Del"/>
|
||||
<l:gentext key="part" text="del"/>
|
||||
<l:gentext key="Preface" text="Forord"/>
|
||||
<l:gentext key="preface" text="forord"/>
|
||||
<l:gentext key="Procedure" text="Procedure"/>
|
||||
<l:gentext key="procedure" text="procedure"/>
|
||||
<l:gentext key="ProductionSet" text="Produktion"/>
|
||||
<l:gentext key="PubDate" text="Publication Date" lang="en"/>
|
||||
<l:gentext key="pubdate" text="Publication date" lang="en"/>
|
||||
<l:gentext key="Published" text="Udgivet"/>
|
||||
<l:gentext key="published" text="udgivet"/>
|
||||
<l:gentext key="Qandadiv" text="Q & A" lang="en"/>
|
||||
<l:gentext key="qandadiv" text="Q & A" lang="en"/>
|
||||
<l:gentext key="Question" text="Spørgsmål"/>
|
||||
<l:gentext key="question" text="spørgsmål"/>
|
||||
<l:gentext key="RefEntry" text="Punkt"/>
|
||||
<l:gentext key="refentry" text="punkt"/>
|
||||
<l:gentext key="Reference" text="Henvisning"/>
|
||||
<l:gentext key="reference" text="henvisning"/>
|
||||
<l:gentext key="RefName" text="Navn"/>
|
||||
<l:gentext key="refname" text="navn"/>
|
||||
<l:gentext key="RefSection" text="Afsnit"/>
|
||||
<l:gentext key="refsection" text="afsnit"/>
|
||||
<l:gentext key="RefSynopsisDiv" text="Synopsis"/>
|
||||
<l:gentext key="refsynopsisdiv" text="synopsis"/>
|
||||
<l:gentext key="RevHistory" text="Revisionshistorie"/>
|
||||
<l:gentext key="revhistory" text="revisionshistorie"/>
|
||||
<l:gentext key="revision" text="revision"/>
|
||||
<l:gentext key="Revision" text="Revision"/>
|
||||
<l:gentext key="sect1" text="Afsnit"/>
|
||||
<l:gentext key="sect2" text="Afsnit"/>
|
||||
<l:gentext key="sect3" text="Afsnit"/>
|
||||
<l:gentext key="sect4" text="Afsnit"/>
|
||||
<l:gentext key="sect5" text="Afsnit"/>
|
||||
<l:gentext key="section" text="afsnit"/>
|
||||
<l:gentext key="Section" text="Afsnit"/>
|
||||
<l:gentext key="see" text="se"/>
|
||||
<l:gentext key="See" text="Se"/>
|
||||
<l:gentext key="seealso" text="se også"/>
|
||||
<l:gentext key="Seealso" text="Se også"/>
|
||||
<l:gentext key="SeeAlso" text="Se også"/>
|
||||
<l:gentext key="set" text="sæt"/>
|
||||
<l:gentext key="Set" text="Sæt"/>
|
||||
<l:gentext key="setindex" text="sæt indeks"/>
|
||||
<l:gentext key="SetIndex" text="Sæt indeks"/>
|
||||
<l:gentext key="Sidebar" text="Sidebjælke"/>
|
||||
<l:gentext key="sidebar" text="sidebjælke"/>
|
||||
<l:gentext key="step" text="trin"/>
|
||||
<l:gentext key="Step" text="Trin"/>
|
||||
<l:gentext key="Table" text="Tabel"/>
|
||||
<l:gentext key="table" text="tabel"/>
|
||||
<l:gentext key="tip" text="vink"/>
|
||||
<l:gentext key="TIP" text="VINK"/>
|
||||
<l:gentext key="Tip" text="Vink"/>
|
||||
<l:gentext key="Warning" text="Advarsel"/>
|
||||
<l:gentext key="warning" text="advarsel"/>
|
||||
<l:gentext key="WARNING" text="ADVARSEL"/>
|
||||
<l:gentext key="and" text="og"/>
|
||||
<l:gentext key="by" text="af"/>
|
||||
<l:gentext key="called" text="called" lang="en"/>
|
||||
<l:gentext key="Edited" text="Redigeret"/>
|
||||
<l:gentext key="edited" text="redigeret"/>
|
||||
<l:gentext key="Editedby" text="Redigeret af"/>
|
||||
<l:gentext key="editedby" text="redigeret af"/>
|
||||
<l:gentext key="in" text="i"/>
|
||||
<l:gentext key="lastlistcomma" text=" og "/>
|
||||
<l:gentext key="listcomma" text=", "/>
|
||||
<l:gentext key="nonexistantelement" text="ikke-eksisterende element"/>
|
||||
<l:gentext key="notes" text="slutbemærkning:"/>
|
||||
<l:gentext key="Notes" text="Slutbemærkning:"/>
|
||||
<l:gentext key="Pgs" text="Siderne"/>
|
||||
<l:gentext key="pgs" text="siderne"/>
|
||||
<l:gentext key="Revisedby" text="Revideret af: "/>
|
||||
<l:gentext key="revisedby" text="revideret af: "/>
|
||||
<l:gentext key="TableNotes" text="Noter:"/>
|
||||
<l:gentext key="tablenotes" text="noter:"/>
|
||||
<l:gentext key="TableofContents" text="Indholdsfortegnelse"/>
|
||||
<l:gentext key="tableofcontents" text="indholdsfortegnelse"/>
|
||||
<l:gentext key="the" text="" lang="en"/>
|
||||
<l:gentext key="unexpectedelementname" text="uventet elementnavn"/>
|
||||
<l:gentext key="unsupported" text="ikke understøttet"/>
|
||||
<l:gentext key="xrefto" text="krydshenvisning til"/>
|
||||
<l:gentext key="listofequations" text="ligningsliste"/>
|
||||
<l:gentext key="ListofEquations" text="Ligningsliste"/>
|
||||
<l:gentext key="ListofExamples" text="Eksempelliste"/>
|
||||
<l:gentext key="listofexamples" text="eksempelliste"/>
|
||||
<l:gentext key="ListofFigures" text="Figurliste"/>
|
||||
<l:gentext key="listoffigures" text="figurliste"/>
|
||||
<l:gentext key="ListofProcedures" text="List of Procedures" lang="en"/>
|
||||
<l:gentext key="listofprocedures" text="List of Procedures" lang="en"/>
|
||||
<l:gentext key="listoftables" text="tabelliste"/>
|
||||
<l:gentext key="ListofTables" text="Tabelliste"/>
|
||||
<l:gentext key="ListofUnknown" text="Liste over ukendte"/>
|
||||
<l:gentext key="listofunknown" text="liste over ukendte"/>
|
||||
<l:gentext key="nav-home" text="hjem"/>
|
||||
<l:gentext key="nav-next" text="næste"/>
|
||||
<l:gentext key="nav-next-sibling" text="hurtigt fremad"/>
|
||||
<l:gentext key="nav-prev" text="forrige"/>
|
||||
<l:gentext key="nav-prev-sibling" text="hurtigt tilbage"/>
|
||||
<l:gentext key="nav-up" text="op"/>
|
||||
<l:gentext key="nav-toc" text="ToC" lang="en"/>
|
||||
<l:gentext key="Draft" text="Kladde"/>
|
||||
<l:gentext key="above" text="over"/>
|
||||
<l:gentext key="below" text="under"/>
|
||||
<l:gentext key="sectioncalled" text="afsnittet der hedder"/>
|
||||
<l:gentext key="index symbols" text="symboler"/>
|
||||
<l:gentext key="lowercase.alpha" text="abcdefghijklmnopqrstuvwxyzæøå"/>
|
||||
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"/>
|
||||
<l:dingbat key="startquote" text="“"/>
|
||||
<l:dingbat key="endquote" text="”"/>
|
||||
<l:dingbat key="nestedstartquote" text="‘"/>
|
||||
<l:dingbat key="nestedendquote" text="’"/>
|
||||
<l:dingbat key="singlestartquote" text="‘" lang="en"/>
|
||||
<l:dingbat key="singleendquote" text="’" lang="en"/>
|
||||
<l:dingbat key="bullet" text="•"/>
|
||||
<l:gentext key="hyphenation-character" text="-"/>
|
||||
<l:gentext key="hyphenation-push-character-count" text="2"/>
|
||||
<l:gentext key="hyphenation-remain-character-count" text="2"/>
|
||||
|
||||
<l:context name="styles">
|
||||
<l:template name="person-name" text="first-last"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title">
|
||||
<l:template name="abstract" text="%t"/>
|
||||
<l:template name="answer" text="%t"/>
|
||||
<l:template name="appendix" text="Appendiks %n. %t"/>
|
||||
<l:template name="article" text="%t"/>
|
||||
<l:template name="authorblurb" text="%t"/>
|
||||
<l:template name="bibliodiv" text="%t"/>
|
||||
<l:template name="biblioentry" text="%t"/>
|
||||
<l:template name="bibliography" text="%t"/>
|
||||
<l:template name="bibliolist" text="%t" lang="en"/>
|
||||
<l:template name="bibliomixed" text="%t"/>
|
||||
<l:template name="bibliomset" text="%t"/>
|
||||
<l:template name="biblioset" text="%t"/>
|
||||
<l:template name="blockquote" text="%t"/>
|
||||
<l:template name="book" text="%t"/>
|
||||
<l:template name="calloutlist" text="%t"/>
|
||||
<l:template name="caution" text="%t"/>
|
||||
<l:template name="chapter" text="Kapitel %n. %t"/>
|
||||
<l:template name="colophon" text="%t"/>
|
||||
<l:template name="dedication" text="%t"/>
|
||||
<l:template name="equation" text="Ligning %n. %t"/>
|
||||
<l:template name="example" text="Eksempel %n. %t"/>
|
||||
<l:template name="figure" text="Figur %n. %t"/>
|
||||
<l:template name="formalpara" text="%t"/>
|
||||
<l:template name="glossary" text="%t"/>
|
||||
<l:template name="glossdiv" text="%t"/>
|
||||
<l:template name="glosslist" text="%t" lang="en"/>
|
||||
<l:template name="glossentry" text="%t" lang="en"/>
|
||||
<l:template name="important" text="%t"/>
|
||||
<l:template name="index" text="%t"/>
|
||||
<l:template name="indexdiv" text="%t"/>
|
||||
<l:template name="itemizedlist" text="%t"/>
|
||||
<l:template name="legalnotice" text="%t"/>
|
||||
<l:template name="listitem" text=""/>
|
||||
<l:template name="lot" text="%t"/>
|
||||
<l:template name="msg" text="%t"/>
|
||||
<l:template name="msgexplan" text="%t"/>
|
||||
<l:template name="msgmain" text="%t"/>
|
||||
<l:template name="msgrel" text="%t"/>
|
||||
<l:template name="msgset" text="%t"/>
|
||||
<l:template name="msgsub" text="%t"/>
|
||||
<l:template name="note" text="%t"/>
|
||||
<l:template name="orderedlist" text="%t"/>
|
||||
<l:template name="part" text="Del %n. %t"/>
|
||||
<l:template name="partintro" text="%t"/>
|
||||
<l:template name="preface" text="%t"/>
|
||||
<l:template name="procedure" text="%t"/>
|
||||
<l:template name="procedure.formal" text="Procedure %n. %t"/>
|
||||
<l:template name="productionset" text="%t"/>
|
||||
<l:template name="productionset.formal" text="Produktion %n"/>
|
||||
<l:template name="qandadiv" text="%t"/>
|
||||
<l:template name="qandaentry" text="%t"/>
|
||||
<l:template name="qandaset" text="%t"/>
|
||||
<l:template name="question" text="Spørgsmål %n"/>
|
||||
<l:template name="refentry" text="%t"/>
|
||||
<l:template name="reference" text="%t"/>
|
||||
<l:template name="refsection" text="%t"/>
|
||||
<l:template name="refsect1" text="%t"/>
|
||||
<l:template name="refsect2" text="%t"/>
|
||||
<l:template name="refsect3" text="%t"/>
|
||||
<l:template name="refsynopsisdiv" text="%t"/>
|
||||
<l:template name="refsynopsisdivinfo" text="%t"/>
|
||||
<l:template name="segmentedlist" text="%t"/>
|
||||
<l:template name="set" text="%t"/>
|
||||
<l:template name="setindex" text="%t"/>
|
||||
<l:template name="sidebar" text="%t"/>
|
||||
<l:template name="step" text="%t"/>
|
||||
<l:template name="table" text="Tabel %n. %t"/>
|
||||
<l:template name="task" text="%t" lang="en"/>
|
||||
<l:template name="tip" text="%t"/>
|
||||
<l:template name="toc" text="%t"/>
|
||||
<l:template name="variablelist" text="%t"/>
|
||||
<l:template name="varlistentry" text=""/>
|
||||
<l:template name="warning" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title-unnumbered">
|
||||
<l:template name="appendix" text="%t"/>
|
||||
<l:template name="article/appendix" text="%t" lang="en"/>
|
||||
<l:template name="bridgehead" text="%t"/>
|
||||
<l:template name="chapter" text="%t"/>
|
||||
<l:template name="sect1" text="%t"/>
|
||||
<l:template name="sect2" text="%t"/>
|
||||
<l:template name="sect3" text="%t"/>
|
||||
<l:template name="sect4" text="%t"/>
|
||||
<l:template name="sect5" text="%t"/>
|
||||
<l:template name="section" text="%t"/>
|
||||
<l:template name="simplesect" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title-numbered">
|
||||
<l:template name="appendix" text="Appendiks %n. %t"/>
|
||||
<l:template name="article/appendix" text="%n. %t" lang="en"/>
|
||||
<l:template name="bridgehead" text="%n. %t"/>
|
||||
<l:template name="chapter" text="Kapitel %n. %t"/>
|
||||
<l:template name="sect1" text="%n. %t"/>
|
||||
<l:template name="sect2" text="%n. %t"/>
|
||||
<l:template name="sect3" text="%n. %t"/>
|
||||
<l:template name="sect4" text="%n. %t"/>
|
||||
<l:template name="sect5" text="%n. %t"/>
|
||||
<l:template name="section" text="%n. %t"/>
|
||||
<l:template name="simplesect" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="subtitle">
|
||||
<l:template name="appendix" text="%s"/>
|
||||
<l:template name="article" text="%s"/>
|
||||
<l:template name="bibliodiv" text="%s"/>
|
||||
<l:template name="biblioentry" text="%s"/>
|
||||
<l:template name="bibliography" text="%s"/>
|
||||
<l:template name="bibliomixed" text="%s"/>
|
||||
<l:template name="bibliomset" text="%s"/>
|
||||
<l:template name="biblioset" text="%s"/>
|
||||
<l:template name="book" text="%s"/>
|
||||
<l:template name="chapter" text="%s"/>
|
||||
<l:template name="colophon" text="%s"/>
|
||||
<l:template name="dedication" text="%s"/>
|
||||
<l:template name="glossary" text="%s"/>
|
||||
<l:template name="glossdiv" text="%s"/>
|
||||
<l:template name="index" text="%s"/>
|
||||
<l:template name="indexdiv" text="%s"/>
|
||||
<l:template name="lot" text="%s"/>
|
||||
<l:template name="part" text="%s"/>
|
||||
<l:template name="partintro" text="%s"/>
|
||||
<l:template name="preface" text="%s"/>
|
||||
<l:template name="refentry" text="%s"/>
|
||||
<l:template name="reference" text="%s"/>
|
||||
<l:template name="refsection" text="%s"/>
|
||||
<l:template name="refsect1" text="%s"/>
|
||||
<l:template name="refsect2" text="%s"/>
|
||||
<l:template name="refsect3" text="%s"/>
|
||||
<l:template name="refsynopsisdiv" text="%s"/>
|
||||
<l:template name="sect1" text="%s"/>
|
||||
<l:template name="sect2" text="%s"/>
|
||||
<l:template name="sect3" text="%s"/>
|
||||
<l:template name="sect4" text="%s"/>
|
||||
<l:template name="sect5" text="%s"/>
|
||||
<l:template name="section" text="%s"/>
|
||||
<l:template name="set" text="%s"/>
|
||||
<l:template name="setindex" text="%s"/>
|
||||
<l:template name="sidebar" text="%s"/>
|
||||
<l:template name="simplesect" text="%s"/>
|
||||
<l:template name="toc" text="%s"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref">
|
||||
<l:template name="abstract" text="%t"/>
|
||||
<l:template name="answer" text="Svar %n"/>
|
||||
<l:template name="appendix" text="%t"/>
|
||||
<l:template name="article" text="%t"/>
|
||||
<l:template name="authorblurb" text="%t"/>
|
||||
<l:template name="bibliodiv" text="%t"/>
|
||||
<l:template name="bibliography" text="%t"/>
|
||||
<l:template name="bibliomset" text="%t"/>
|
||||
<l:template name="biblioset" text="%t"/>
|
||||
<l:template name="blockquote" text="%t"/>
|
||||
<l:template name="book" text="%t"/>
|
||||
<l:template name="calloutlist" text="%t"/>
|
||||
<l:template name="caution" text="%t"/>
|
||||
<l:template name="chapter" text="%t"/>
|
||||
<l:template name="colophon" text="%t"/>
|
||||
<l:template name="constraintdef" text="%t"/>
|
||||
<l:template name="dedication" text="%t"/>
|
||||
<l:template name="equation" text="%t"/>
|
||||
<l:template name="example" text="%t"/>
|
||||
<l:template name="figure" text="%t"/>
|
||||
<l:template name="formalpara" text="%t"/>
|
||||
<l:template name="glossary" text="%t"/>
|
||||
<l:template name="glossdiv" text="%t"/>
|
||||
<l:template name="important" text="%t"/>
|
||||
<l:template name="index" text="%t"/>
|
||||
<l:template name="indexdiv" text="%t"/>
|
||||
<l:template name="itemizedlist" text="%t"/>
|
||||
<l:template name="legalnotice" text="%t"/>
|
||||
<l:template name="listitem" text="%n"/>
|
||||
<l:template name="lot" text="%t"/>
|
||||
<l:template name="msg" text="%t"/>
|
||||
<l:template name="msgexplan" text="%t"/>
|
||||
<l:template name="msgmain" text="%t"/>
|
||||
<l:template name="msgrel" text="%t"/>
|
||||
<l:template name="msgset" text="%t"/>
|
||||
<l:template name="msgsub" text="%t"/>
|
||||
<l:template name="note" text="%t"/>
|
||||
<l:template name="orderedlist" text="%t"/>
|
||||
<l:template name="part" text="%t"/>
|
||||
<l:template name="partintro" text="%t"/>
|
||||
<l:template name="preface" text="%t"/>
|
||||
<l:template name="procedure" text="%t"/>
|
||||
<l:template name="productionset" text="%t"/>
|
||||
<l:template name="qandadiv" text="%t"/>
|
||||
<l:template name="qandaentry" text="Spørgsmål %n"/>
|
||||
<l:template name="qandaset" text="%t"/>
|
||||
<l:template name="question" text="Spørgsmål %n"/>
|
||||
<l:template name="reference" text="%t"/>
|
||||
<l:template name="refsynopsisdiv" text="%t"/>
|
||||
<l:template name="segmentedlist" text="%t"/>
|
||||
<l:template name="set" text="%t"/>
|
||||
<l:template name="setindex" text="%t"/>
|
||||
<l:template name="sidebar" text="%t"/>
|
||||
<l:template name="table" text="%t"/>
|
||||
<l:template name="tip" text="%t"/>
|
||||
<l:template name="toc" text="%t"/>
|
||||
<l:template name="variablelist" text="%t"/>
|
||||
<l:template name="varlistentry" text="%n"/>
|
||||
<l:template name="warning" text="%t"/>
|
||||
<l:template name="page.citation" text=" [%p]"/>
|
||||
<l:template name="page" text="(page %p)" lang="en"/>
|
||||
<l:template name="pageabbrev" text="(p. %p)" lang="en"/>
|
||||
<l:template name="Page" text="Page %p" lang="en"/>
|
||||
<l:template name="bridgehead" text="afsnittet der hedder “%t”"/>
|
||||
<l:template name="refsection" text="“%t”"/>
|
||||
<l:template name="refsect1" text="“%t”"/>
|
||||
<l:template name="refsect2" text="“%t”"/>
|
||||
<l:template name="refsect3" text="“%t”"/>
|
||||
<l:template name="sect1" text="“%t”"/>
|
||||
<l:template name="sect2" text="“%t”"/>
|
||||
<l:template name="sect3" text="“%t”"/>
|
||||
<l:template name="sect4" text="“%t”"/>
|
||||
<l:template name="sect5" text="“%t”"/>
|
||||
<l:template name="section" text="“%t”"/>
|
||||
<l:template name="simplesect" text="“%t”"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref-number">
|
||||
<l:template name="answer" text="Svar %n"/>
|
||||
<l:template name="appendix" text="Appendiks %n"/>
|
||||
<l:template name="bridgehead" text="Afsnit %n"/>
|
||||
<l:template name="chapter" text="Kapitel %n"/>
|
||||
<l:template name="equation" text="Ligning %n"/>
|
||||
<l:template name="example" text="Eksempel %n"/>
|
||||
<l:template name="figure" text="Figur %n"/>
|
||||
<l:template name="part" text="Del %n"/>
|
||||
<l:template name="procedure" text="Procedure %n"/>
|
||||
<l:template name="productionset" text="Produktion %n"/>
|
||||
<l:template name="qandadiv" text="Q & A %n"/>
|
||||
<l:template name="qandaentry" text="Spørgsmål %n"/>
|
||||
<l:template name="question" text="Spørgsmål %n"/>
|
||||
<l:template name="sect1" text="Afsnit %n"/>
|
||||
<l:template name="sect2" text="Afsnit %n"/>
|
||||
<l:template name="sect3" text="Afsnit %n"/>
|
||||
<l:template name="sect4" text="Afsnit %n"/>
|
||||
<l:template name="sect5" text="Afsnit %n"/>
|
||||
<l:template name="section" text="Afsnit %n"/>
|
||||
<l:template name="table" text="Tabel %n"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref-number-and-title">
|
||||
<l:template name="appendix" text="Appendiks %n, %t"/>
|
||||
<l:template name="bridgehead" text="Afsnit %n, “%t”"/>
|
||||
<l:template name="chapter" text="Kapitel %n, %t"/>
|
||||
<l:template name="equation" text="Ligning %n, “%t”"/>
|
||||
<l:template name="example" text="Eksempel %n, “%t”"/>
|
||||
<l:template name="figure" text="Figur %n, “%t”"/>
|
||||
<l:template name="part" text="Del %n, “%t”"/>
|
||||
<l:template name="procedure" text="Procedure %n, “%t”"/>
|
||||
<l:template name="productionset" text="Produktion %n, “%t”"/>
|
||||
<l:template name="qandadiv" text="Q & A %n, “%t”"/>
|
||||
<l:template name="refsect1" text="afsnittet der hedder “%t”"/>
|
||||
<l:template name="refsect2" text="afsnittet der hedder “%t”"/>
|
||||
<l:template name="refsect3" text="afsnittet der hedder “%t”"/>
|
||||
<l:template name="refsection" text="afsnittet der hedder “%t”"/>
|
||||
<l:template name="sect1" text="Afsnit %n, “%t”"/>
|
||||
<l:template name="sect2" text="Afsnit %n, “%t”"/>
|
||||
<l:template name="sect3" text="Afsnit %n, “%t”"/>
|
||||
<l:template name="sect4" text="Afsnit %n, “%t”"/>
|
||||
<l:template name="sect5" text="Afsnit %n, “%t”"/>
|
||||
<l:template name="section" text="Afsnit %n, “%t”"/>
|
||||
<l:template name="simplesect" text="afsnittet der hedder “%t”"/>
|
||||
<l:template name="table" text="Tabel %n, “%t”"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="authorgroup">
|
||||
<l:template name="sep" text=", "/>
|
||||
<l:template name="sep2" text=" og "/>
|
||||
<l:template name="seplast" text=" og og "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="glossary">
|
||||
<l:template name="see" text="Se "/>
|
||||
<l:template name="seealso" text="Se også "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="msgset">
|
||||
<l:template name="MsgAud" text="Målgruppe: "/>
|
||||
<l:template name="MsgLevel" text="Niveau: "/>
|
||||
<l:template name="MsgOrig" text="Grundlag: "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime">
|
||||
<l:template name="format" text="d/m/Y"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime-full">
|
||||
<l:template name="January" text="Januar"/>
|
||||
<l:template name="February" text="Februar"/>
|
||||
<l:template name="March" text="Marts"/>
|
||||
<l:template name="April" text="April"/>
|
||||
<l:template name="May" text="Maj"/>
|
||||
<l:template name="June" text="Juni"/>
|
||||
<l:template name="July" text="July"/>
|
||||
<l:template name="August" text="August"/>
|
||||
<l:template name="September" text="September"/>
|
||||
<l:template name="October" text="Oktober"/>
|
||||
<l:template name="November" text="November"/>
|
||||
<l:template name="December" text="December"/>
|
||||
<l:template name="Monday" text="Mandag"/>
|
||||
<l:template name="Tuesday" text="Tirsdag"/>
|
||||
<l:template name="Wednesday" text="Onsdag"/>
|
||||
<l:template name="Thursday" text="Torsdag"/>
|
||||
<l:template name="Friday" text="Fredag"/>
|
||||
<l:template name="Saturday" text="Lørdag"/>
|
||||
<l:template name="Sunday" text="Søndag"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime-abbrev">
|
||||
<l:template name="Jan" text="Jan"/>
|
||||
<l:template name="Feb" text="Feb"/>
|
||||
<l:template name="Mar" text="Mar"/>
|
||||
<l:template name="Apr" text="Apr"/>
|
||||
<l:template name="May" text="Maj"/>
|
||||
<l:template name="Jun" text="Jun"/>
|
||||
<l:template name="Jul" text="Jul"/>
|
||||
<l:template name="Aug" text="Aug"/>
|
||||
<l:template name="Sep" text="Sep"/>
|
||||
<l:template name="Oct" text="Okt"/>
|
||||
<l:template name="Nov" text="Nov"/>
|
||||
<l:template name="Dec" text="Dec"/>
|
||||
<l:template name="Mon" text="Man"/>
|
||||
<l:template name="Tue" text="Tir"/>
|
||||
<l:template name="Wed" text="ins"/>
|
||||
<l:template name="Thu" text="Tor"/>
|
||||
<l:template name="Fri" text="Fre"/>
|
||||
<l:template name="Sat" text="Lør"/>
|
||||
<l:template name="Sun" text="Søn"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="htmlhelp">
|
||||
<l:template name="langcode" text="0x0406 Danish"/>
|
||||
</l:context>
|
||||
|
||||
<l:letters>
|
||||
<l:l i="1">A</l:l>
|
||||
<l:l i="1">a</l:l>
|
||||
<l:l i="2">B</l:l>
|
||||
<l:l i="2">b</l:l>
|
||||
<l:l i="3">C</l:l>
|
||||
<l:l i="3">c</l:l>
|
||||
<l:l i="4">D</l:l>
|
||||
<l:l i="4">d</l:l>
|
||||
<l:l i="5">E</l:l>
|
||||
<l:l i="5">e</l:l>
|
||||
<l:l i="6">F</l:l>
|
||||
<l:l i="6">f</l:l>
|
||||
<l:l i="7">G</l:l>
|
||||
<l:l i="7">g</l:l>
|
||||
<l:l i="8">H</l:l>
|
||||
<l:l i="8">h</l:l>
|
||||
<l:l i="9">I</l:l>
|
||||
<l:l i="9">i</l:l>
|
||||
<l:l i="10">J</l:l>
|
||||
<l:l i="10">j</l:l>
|
||||
<l:l i="11">K</l:l>
|
||||
<l:l i="11">k</l:l>
|
||||
<l:l i="12">L</l:l>
|
||||
<l:l i="12">l</l:l>
|
||||
<l:l i="13">M</l:l>
|
||||
<l:l i="13">m</l:l>
|
||||
<l:l i="14">N</l:l>
|
||||
<l:l i="14">n</l:l>
|
||||
<l:l i="15">O</l:l>
|
||||
<l:l i="15">o</l:l>
|
||||
<l:l i="16">P</l:l>
|
||||
<l:l i="16">p</l:l>
|
||||
<l:l i="17">Q</l:l>
|
||||
<l:l i="17">q</l:l>
|
||||
<l:l i="18">R</l:l>
|
||||
<l:l i="18">r</l:l>
|
||||
<l:l i="19">S</l:l>
|
||||
<l:l i="19">s</l:l>
|
||||
<l:l i="20">T</l:l>
|
||||
<l:l i="20">t</l:l>
|
||||
<l:l i="21">U</l:l>
|
||||
<l:l i="21">u</l:l>
|
||||
<l:l i="22">V</l:l>
|
||||
<l:l i="22">v</l:l>
|
||||
<l:l i="23">W</l:l>
|
||||
<l:l i="23">w</l:l>
|
||||
<l:l i="24">X</l:l>
|
||||
<l:l i="24">x</l:l>
|
||||
<l:l i="25">Y</l:l>
|
||||
<l:l i="25">y</l:l>
|
||||
<l:l i="26">Z</l:l>
|
||||
<l:l i="26">z</l:l>
|
||||
<l:l i="27">Æ</l:l>
|
||||
<l:l i="27">æ</l:l>
|
||||
<l:l i="28">Ø</l:l>
|
||||
<l:l i="28">ø</l:l>
|
||||
<l:l i="29">Å</l:l>
|
||||
<l:l i="29">å</l:l>
|
||||
</l:letters>
|
||||
</l:l10n>
|
|
@ -0,0 +1,590 @@
|
|||
<?xml version="1.0" encoding="US-ASCII"?>
|
||||
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="de" english-language-name="German">
|
||||
|
||||
<!-- This file is generated automatically. -->
|
||||
<!-- Do not edit this file by hand! -->
|
||||
<!-- See http://docbook.sourceforge.net/ -->
|
||||
<!-- To update this file: edit the corresponding document at -->
|
||||
<!-- http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/gentext/locale/ -->
|
||||
|
||||
<l:gentext key="Abstract" text="Zusammenfassung"/>
|
||||
<l:gentext key="abstract" text="Zusammenfassung"/>
|
||||
<l:gentext key="Answer" text="A:"/>
|
||||
<l:gentext key="answer" text="A:"/>
|
||||
<l:gentext key="Appendix" text="Anhang"/>
|
||||
<l:gentext key="appendix" text="Anhang"/>
|
||||
<l:gentext key="Article" text="Artikel"/>
|
||||
<l:gentext key="article" text="Artikel"/>
|
||||
<l:gentext key="Bibliography" text="Literaturverzeichnis"/>
|
||||
<l:gentext key="bibliography" text="Literaturverzeichnis"/>
|
||||
<l:gentext key="Book" text="Buch"/>
|
||||
<l:gentext key="book" text="Buch"/>
|
||||
<l:gentext key="CAUTION" text="ACHTUNG"/>
|
||||
<l:gentext key="Caution" text="Achtung"/>
|
||||
<l:gentext key="caution" text="Achtung"/>
|
||||
<l:gentext key="Chapter" text="Kapitel"/>
|
||||
<l:gentext key="chapter" text="Kapitel"/>
|
||||
<l:gentext key="Colophon" text="Kolophon"/>
|
||||
<l:gentext key="colophon" text="Kolophon"/>
|
||||
<l:gentext key="Copyright" text="Copyright"/>
|
||||
<l:gentext key="copyright" text="Copyright"/>
|
||||
<l:gentext key="Dedication" text="Widmung"/>
|
||||
<l:gentext key="dedication" text="Widmung"/>
|
||||
<l:gentext key="Edition" text="Ausgabe"/>
|
||||
<l:gentext key="edition" text="Ausgabe"/>
|
||||
<l:gentext key="Equation" text="Gleichung"/>
|
||||
<l:gentext key="equation" text="Gleichung"/>
|
||||
<l:gentext key="Example" text="Beispiel"/>
|
||||
<l:gentext key="example" text="Beispiel"/>
|
||||
<l:gentext key="Figure" text="Abbildung"/>
|
||||
<l:gentext key="figure" text="Abbildung"/>
|
||||
<l:gentext key="Glossary" text="Glossar"/>
|
||||
<l:gentext key="glossary" text="Glossar"/>
|
||||
<l:gentext key="GlossSee" text="Siehe"/>
|
||||
<l:gentext key="glosssee" text="Siehe"/>
|
||||
<l:gentext key="GlossSeeAlso" text="Siehe auch"/>
|
||||
<l:gentext key="glossseealso" text="Siehe auch"/>
|
||||
<l:gentext key="IMPORTANT" text="WICHTIG"/>
|
||||
<l:gentext key="important" text="Wichtig"/>
|
||||
<l:gentext key="Important" text="Wichtig"/>
|
||||
<l:gentext key="Index" text="Stichwortverzeichnis"/>
|
||||
<l:gentext key="index" text="Stichwortverzeichnis"/>
|
||||
<l:gentext key="ISBN" text="ISBN"/>
|
||||
<l:gentext key="isbn" text="ISBN"/>
|
||||
<l:gentext key="LegalNotice" text="Rechtlicher Hinweis"/>
|
||||
<l:gentext key="legalnotice" text="Rechtlicher Hinweis"/>
|
||||
<l:gentext key="MsgAud" text="Zielgruppe"/>
|
||||
<l:gentext key="msgaud" text="Zielgruppe"/>
|
||||
<l:gentext key="MsgLevel" text="Dringlichkeit"/>
|
||||
<l:gentext key="msglevel" text="Dringlichkeit"/>
|
||||
<l:gentext key="MsgOrig" text="Ursprung"/>
|
||||
<l:gentext key="msgorig" text="Ursprung"/>
|
||||
<l:gentext key="NOTE" text="ANMERKUNG"/>
|
||||
<l:gentext key="Note" text="Anmerkung"/>
|
||||
<l:gentext key="note" text="Anmerkung"/>
|
||||
<l:gentext key="Part" text="Teil"/>
|
||||
<l:gentext key="part" text="Teil"/>
|
||||
<l:gentext key="Preface" text="Vorwort"/>
|
||||
<l:gentext key="preface" text="Vorwort"/>
|
||||
<l:gentext key="Procedure" text="Prozedur"/>
|
||||
<l:gentext key="procedure" text="Prozedur"/>
|
||||
<l:gentext key="ProductionSet" text="Produktion"/>
|
||||
<l:gentext key="PubDate" text="Veröffentlicht"/>
|
||||
<l:gentext key="pubdate" text="Veröffentlicht"/>
|
||||
<l:gentext key="Published" text="Veröffentlicht"/>
|
||||
<l:gentext key="published" text="Veröffentlicht"/>
|
||||
<l:gentext key="Qandadiv" text="F & A"/>
|
||||
<l:gentext key="qandadiv" text="F & A"/>
|
||||
<l:gentext key="Question" text="F:"/>
|
||||
<l:gentext key="question" text="F:"/>
|
||||
<l:gentext key="RefEntry" text=""/>
|
||||
<l:gentext key="refentry" text=""/>
|
||||
<l:gentext key="Reference" text="Verweis"/>
|
||||
<l:gentext key="reference" text="Verweis"/>
|
||||
<l:gentext key="RefName" text="Name"/>
|
||||
<l:gentext key="refname" text="Name"/>
|
||||
<l:gentext key="RefSection" text="Abschnitt"/>
|
||||
<l:gentext key="refsection" text="Abschnitt"/>
|
||||
<l:gentext key="RefSynopsisDiv" text="Synopsis"/>
|
||||
<l:gentext key="refsynopsisdiv" text="Synopsis"/>
|
||||
<l:gentext key="RevHistory" text="Versionsgeschichte"/>
|
||||
<l:gentext key="revhistory" text="Versionsgeschichte"/>
|
||||
<l:gentext key="revision" text="Version"/>
|
||||
<l:gentext key="Revision" text="Version"/>
|
||||
<l:gentext key="sect1" text="Abschnitt"/>
|
||||
<l:gentext key="sect2" text="Abschnitt"/>
|
||||
<l:gentext key="sect3" text="Abschnitt"/>
|
||||
<l:gentext key="sect4" text="Abschnitt"/>
|
||||
<l:gentext key="sect5" text="Abschnitt"/>
|
||||
<l:gentext key="section" text="Abschnitt"/>
|
||||
<l:gentext key="Section" text="Abschnitt"/>
|
||||
<l:gentext key="see" text="Siehe"/>
|
||||
<l:gentext key="See" text="Siehe"/>
|
||||
<l:gentext key="seealso" text="Siehe auch"/>
|
||||
<l:gentext key="Seealso" text="Siehe auch"/>
|
||||
<l:gentext key="SeeAlso" text="Siehe auch"/>
|
||||
<l:gentext key="set" text="Satz"/>
|
||||
<l:gentext key="Set" text="Satz"/>
|
||||
<l:gentext key="setindex" text="Stichwortverzeichnis"/>
|
||||
<l:gentext key="SetIndex" text="Stichwortverzeichnis"/>
|
||||
<l:gentext key="Sidebar" text="Randnotiz"/>
|
||||
<l:gentext key="sidebar" text="randnotiz"/>
|
||||
<l:gentext key="step" text="Schritt"/>
|
||||
<l:gentext key="Step" text="Schritt"/>
|
||||
<l:gentext key="Table" text="Tabelle"/>
|
||||
<l:gentext key="table" text="Tabelle"/>
|
||||
<l:gentext key="tip" text="Tipp"/>
|
||||
<l:gentext key="TIP" text="TIPP"/>
|
||||
<l:gentext key="Tip" text="Tipp"/>
|
||||
<l:gentext key="Warning" text="Warnung"/>
|
||||
<l:gentext key="warning" text="Warnung"/>
|
||||
<l:gentext key="WARNING" text="WARNUNG"/>
|
||||
<l:gentext key="and" text="und"/>
|
||||
<l:gentext key="by" text="von"/>
|
||||
<l:gentext key="called" text="called" lang="en"/>
|
||||
<l:gentext key="Edited" text="Herausgegeben"/>
|
||||
<l:gentext key="edited" text="Herausgegeben"/>
|
||||
<l:gentext key="Editedby" text="Herausgegeben von"/>
|
||||
<l:gentext key="editedby" text="Herausgegeben von"/>
|
||||
<l:gentext key="in" text="in"/>
|
||||
<l:gentext key="lastlistcomma" text=","/>
|
||||
<l:gentext key="listcomma" text=","/>
|
||||
<l:gentext key="nonexistantelement" text="nicht existierendes Element"/>
|
||||
<l:gentext key="notes" text="Fußnoten"/>
|
||||
<l:gentext key="Notes" text="Fußnoten"/>
|
||||
<l:gentext key="Pgs" text="Seiten"/>
|
||||
<l:gentext key="pgs" text="Seiten"/>
|
||||
<l:gentext key="Revisedby" text="Geändert durch: "/>
|
||||
<l:gentext key="revisedby" text="Geändert durch: "/>
|
||||
<l:gentext key="TableNotes" text="Bemerkungen"/>
|
||||
<l:gentext key="tablenotes" text="Bemerkungen"/>
|
||||
<l:gentext key="TableofContents" text="Inhaltsverzeichnis"/>
|
||||
<l:gentext key="tableofcontents" text="Inhaltsverzeichnis"/>
|
||||
<l:gentext key="the" text=""/>
|
||||
<l:gentext key="unexpectedelementname" text="Unerwarteter Elementname"/>
|
||||
<l:gentext key="unsupported" text="wird nicht unterstützt"/>
|
||||
<l:gentext key="xrefto" text="xref auf"/>
|
||||
<l:gentext key="listofequations" text="Gleichungen"/>
|
||||
<l:gentext key="ListofEquations" text="Gleichungen"/>
|
||||
<l:gentext key="ListofExamples" text="Beispiele"/>
|
||||
<l:gentext key="listofexamples" text="Beispiele"/>
|
||||
<l:gentext key="ListofFigures" text="Abbildungsverzeichnis"/>
|
||||
<l:gentext key="listoffigures" text="Abbildungsverzeichnis"/>
|
||||
<l:gentext key="ListofProcedures" text="List of Procedures" lang="en"/>
|
||||
<l:gentext key="listofprocedures" text="List of Procedures" lang="en"/>
|
||||
<l:gentext key="listoftables" text="Tabellenverzeichnis"/>
|
||||
<l:gentext key="ListofTables" text="Tabellenverzeichnis"/>
|
||||
<l:gentext key="ListofUnknown" text="???-Verzeichnis"/>
|
||||
<l:gentext key="listofunknown" text="???-Verzeichnis"/>
|
||||
<l:gentext key="nav-home" text="Zum Anfang"/>
|
||||
<l:gentext key="nav-next" text="Weiter"/>
|
||||
<l:gentext key="nav-next-sibling" text="Schnell weiter"/>
|
||||
<l:gentext key="nav-prev" text="Zurück"/>
|
||||
<l:gentext key="nav-prev-sibling" text="Schnell zurück"/>
|
||||
<l:gentext key="nav-up" text="Nach oben"/>
|
||||
<l:gentext key="nav-toc" text="InhV"/>
|
||||
<l:gentext key="Draft" text="Entwurf"/>
|
||||
<l:gentext key="above" text="oben"/>
|
||||
<l:gentext key="below" text="unten"/>
|
||||
<l:gentext key="sectioncalled" text="der Abschnitt namens"/>
|
||||
<l:gentext key="index symbols" text="Symbole"/>
|
||||
<l:gentext key="lowercase.alpha" text="abcdefghijklmnopqrstuvwxyzäöüß"/>
|
||||
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜß"/>
|
||||
<l:dingbat key="startquote" text="„"/>
|
||||
<l:dingbat key="endquote" text="“"/>
|
||||
<l:dingbat key="nestedstartquote" text="‚"/>
|
||||
<l:dingbat key="nestedendquote" text="‘"/>
|
||||
<l:dingbat key="singlestartquote" text="‚"/>
|
||||
<l:dingbat key="singleendquote" text="‘"/>
|
||||
<l:dingbat key="bullet" text="•"/>
|
||||
<l:gentext key="hyphenation-character" text="-"/>
|
||||
<l:gentext key="hyphenation-push-character-count" text="2"/>
|
||||
<l:gentext key="hyphenation-remain-character-count" text="3"/>
|
||||
|
||||
<l:context name="styles">
|
||||
<l:template name="person-name" text="first-last"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title">
|
||||
<l:template name="abstract" text="%t"/>
|
||||
<l:template name="answer" text="%t"/>
|
||||
<l:template name="appendix" text="Anhang %n. %t"/>
|
||||
<l:template name="article" text="%t"/>
|
||||
<l:template name="authorblurb" text="%t"/>
|
||||
<l:template name="bibliodiv" text="%t"/>
|
||||
<l:template name="biblioentry" text="%t"/>
|
||||
<l:template name="bibliography" text="%t"/>
|
||||
<l:template name="bibliolist" text="%t" lang="en"/>
|
||||
<l:template name="bibliomixed" text="%t"/>
|
||||
<l:template name="bibliomset" text="%t"/>
|
||||
<l:template name="biblioset" text="%t"/>
|
||||
<l:template name="blockquote" text="%t"/>
|
||||
<l:template name="book" text="%t"/>
|
||||
<l:template name="calloutlist" text="%t"/>
|
||||
<l:template name="caution" text="%t"/>
|
||||
<l:template name="chapter" text="Kapitel %n. %t"/>
|
||||
<l:template name="colophon" text="%t"/>
|
||||
<l:template name="dedication" text="%t"/>
|
||||
<l:template name="equation" text="Gleichung %n. %t"/>
|
||||
<l:template name="example" text="Beispiel %n. %t"/>
|
||||
<l:template name="figure" text="Abbildung %n. %t"/>
|
||||
<l:template name="formalpara" text="%t"/>
|
||||
<l:template name="glossary" text="%t"/>
|
||||
<l:template name="glossdiv" text="%t"/>
|
||||
<l:template name="glosslist" text="%t" lang="en"/>
|
||||
<l:template name="glossentry" text="%t"/>
|
||||
<l:template name="important" text="%t"/>
|
||||
<l:template name="index" text="%t"/>
|
||||
<l:template name="indexdiv" text="%t"/>
|
||||
<l:template name="itemizedlist" text="%t"/>
|
||||
<l:template name="legalnotice" text="%t"/>
|
||||
<l:template name="listitem" text=""/>
|
||||
<l:template name="lot" text="%t"/>
|
||||
<l:template name="msg" text="%t"/>
|
||||
<l:template name="msgexplan" text="%t"/>
|
||||
<l:template name="msgmain" text="%t"/>
|
||||
<l:template name="msgrel" text="%t"/>
|
||||
<l:template name="msgset" text="%t"/>
|
||||
<l:template name="msgsub" text="%t"/>
|
||||
<l:template name="note" text="%t"/>
|
||||
<l:template name="orderedlist" text="%t"/>
|
||||
<l:template name="part" text="Teil %n. %t"/>
|
||||
<l:template name="partintro" text="%t"/>
|
||||
<l:template name="preface" text="%t"/>
|
||||
<l:template name="procedure" text="%t"/>
|
||||
<l:template name="procedure.formal" text="Prozedur %n. %t"/>
|
||||
<l:template name="productionset" text="%t"/>
|
||||
<l:template name="productionset.formal" text="Produktion %n"/>
|
||||
<l:template name="qandadiv" text="%t"/>
|
||||
<l:template name="qandaentry" text="%t"/>
|
||||
<l:template name="qandaset" text="%t"/>
|
||||
<l:template name="question" text="F: %n"/>
|
||||
<l:template name="refentry" text="%t"/>
|
||||
<l:template name="reference" text="%t"/>
|
||||
<l:template name="refsection" text="%t"/>
|
||||
<l:template name="refsect1" text="%t"/>
|
||||
<l:template name="refsect2" text="%t"/>
|
||||
<l:template name="refsect3" text="%t"/>
|
||||
<l:template name="refsynopsisdiv" text="%t"/>
|
||||
<l:template name="refsynopsisdivinfo" text="%t"/>
|
||||
<l:template name="segmentedlist" text="%t"/>
|
||||
<l:template name="set" text="%t"/>
|
||||
<l:template name="setindex" text="%t"/>
|
||||
<l:template name="sidebar" text="%t"/>
|
||||
<l:template name="step" text="%t"/>
|
||||
<l:template name="table" text="Tabelle %n. %t"/>
|
||||
<l:template name="task" text="%t"/>
|
||||
<l:template name="tip" text="%t"/>
|
||||
<l:template name="toc" text="%t"/>
|
||||
<l:template name="variablelist" text="%t"/>
|
||||
<l:template name="varlistentry" text="" lang="en"/>
|
||||
<l:template name="warning" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title-unnumbered">
|
||||
<l:template name="appendix" text="%t"/>
|
||||
<l:template name="article/appendix" text="%t"/>
|
||||
<l:template name="bridgehead" text="%t"/>
|
||||
<l:template name="chapter" text="%t"/>
|
||||
<l:template name="sect1" text="%t"/>
|
||||
<l:template name="sect2" text="%t"/>
|
||||
<l:template name="sect3" text="%t"/>
|
||||
<l:template name="sect4" text="%t"/>
|
||||
<l:template name="sect5" text="%t"/>
|
||||
<l:template name="section" text="%t"/>
|
||||
<l:template name="simplesect" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title-numbered">
|
||||
<l:template name="appendix" text="Anhang %n. %t"/>
|
||||
<l:template name="article/appendix" text="%n. %t"/>
|
||||
<l:template name="bridgehead" text="%n. %t"/>
|
||||
<l:template name="chapter" text="Kapitel %n. %t"/>
|
||||
<l:template name="sect1" text="%n. %t"/>
|
||||
<l:template name="sect2" text="%n. %t"/>
|
||||
<l:template name="sect3" text="%n. %t"/>
|
||||
<l:template name="sect4" text="%n. %t"/>
|
||||
<l:template name="sect5" text="%n. %t"/>
|
||||
<l:template name="section" text="%n. %t"/>
|
||||
<l:template name="simplesect" text="%n. %t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="subtitle">
|
||||
<l:template name="appendix" text="%s"/>
|
||||
<l:template name="article" text="%s"/>
|
||||
<l:template name="bibliodiv" text="%s"/>
|
||||
<l:template name="biblioentry" text="%s"/>
|
||||
<l:template name="bibliography" text="%s"/>
|
||||
<l:template name="bibliomixed" text="%s"/>
|
||||
<l:template name="bibliomset" text="%s"/>
|
||||
<l:template name="biblioset" text="%s"/>
|
||||
<l:template name="book" text="%s"/>
|
||||
<l:template name="chapter" text="%s"/>
|
||||
<l:template name="colophon" text="%s"/>
|
||||
<l:template name="dedication" text="%s"/>
|
||||
<l:template name="glossary" text="%s"/>
|
||||
<l:template name="glossdiv" text="%s"/>
|
||||
<l:template name="index" text="%s"/>
|
||||
<l:template name="indexdiv" text="%s"/>
|
||||
<l:template name="lot" text="%s"/>
|
||||
<l:template name="part" text="%s"/>
|
||||
<l:template name="partintro" text="%s"/>
|
||||
<l:template name="preface" text="%s"/>
|
||||
<l:template name="refentry" text="%s"/>
|
||||
<l:template name="reference" text="%s"/>
|
||||
<l:template name="refsection" text="%s"/>
|
||||
<l:template name="refsect1" text="%s"/>
|
||||
<l:template name="refsect2" text="%s"/>
|
||||
<l:template name="refsect3" text="%s"/>
|
||||
<l:template name="refsynopsisdiv" text="%s"/>
|
||||
<l:template name="sect1" text="%s"/>
|
||||
<l:template name="sect2" text="%s"/>
|
||||
<l:template name="sect3" text="%s"/>
|
||||
<l:template name="sect4" text="%s"/>
|
||||
<l:template name="sect5" text="%s"/>
|
||||
<l:template name="section" text="%s"/>
|
||||
<l:template name="set" text="%s"/>
|
||||
<l:template name="setindex" text="%s"/>
|
||||
<l:template name="sidebar" text="%s"/>
|
||||
<l:template name="simplesect" text="%s"/>
|
||||
<l:template name="toc" text="%s"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref">
|
||||
<l:template name="abstract" text="%t"/>
|
||||
<l:template name="answer" text="A: %n"/>
|
||||
<l:template name="appendix" text="%t"/>
|
||||
<l:template name="article" text="%t"/>
|
||||
<l:template name="authorblurb" text="%t"/>
|
||||
<l:template name="bibliodiv" text="%t"/>
|
||||
<l:template name="bibliography" text="%t"/>
|
||||
<l:template name="bibliomset" text="%t"/>
|
||||
<l:template name="biblioset" text="%t"/>
|
||||
<l:template name="blockquote" text="%t"/>
|
||||
<l:template name="book" text="%t"/>
|
||||
<l:template name="calloutlist" text="%t"/>
|
||||
<l:template name="caution" text="%t"/>
|
||||
<l:template name="chapter" text="%t"/>
|
||||
<l:template name="colophon" text="%t"/>
|
||||
<l:template name="constraintdef" text="%t"/>
|
||||
<l:template name="dedication" text="%t"/>
|
||||
<l:template name="equation" text="%t"/>
|
||||
<l:template name="example" text="%t"/>
|
||||
<l:template name="figure" text="%t"/>
|
||||
<l:template name="formalpara" text="%t"/>
|
||||
<l:template name="glossary" text="%t"/>
|
||||
<l:template name="glossdiv" text="%t"/>
|
||||
<l:template name="important" text="%t"/>
|
||||
<l:template name="index" text="%t"/>
|
||||
<l:template name="indexdiv" text="%t"/>
|
||||
<l:template name="itemizedlist" text="%t"/>
|
||||
<l:template name="legalnotice" text="%t"/>
|
||||
<l:template name="listitem" text="%n"/>
|
||||
<l:template name="lot" text="%t"/>
|
||||
<l:template name="msg" text="%t"/>
|
||||
<l:template name="msgexplan" text="%t"/>
|
||||
<l:template name="msgmain" text="%t"/>
|
||||
<l:template name="msgrel" text="%t"/>
|
||||
<l:template name="msgset" text="%t"/>
|
||||
<l:template name="msgsub" text="%t"/>
|
||||
<l:template name="note" text="%t"/>
|
||||
<l:template name="orderedlist" text="%t"/>
|
||||
<l:template name="part" text="%t"/>
|
||||
<l:template name="partintro" text="%t"/>
|
||||
<l:template name="preface" text="%t"/>
|
||||
<l:template name="procedure" text="%t"/>
|
||||
<l:template name="productionset" text="%t"/>
|
||||
<l:template name="qandadiv" text="%t"/>
|
||||
<l:template name="qandaentry" text="F: %n"/>
|
||||
<l:template name="qandaset" text="%t"/>
|
||||
<l:template name="question" text="F: %n"/>
|
||||
<l:template name="reference" text="%t"/>
|
||||
<l:template name="refsynopsisdiv" text="%t"/>
|
||||
<l:template name="segmentedlist" text="%t"/>
|
||||
<l:template name="set" text="%t"/>
|
||||
<l:template name="setindex" text="%t"/>
|
||||
<l:template name="sidebar" text="%t"/>
|
||||
<l:template name="table" text="%t"/>
|
||||
<l:template name="tip" text="%t"/>
|
||||
<l:template name="toc" text="%t"/>
|
||||
<l:template name="variablelist" text="%t"/>
|
||||
<l:template name="varlistentry" text="%n"/>
|
||||
<l:template name="warning" text="%t"/>
|
||||
<l:template name="page.citation" text=" [%p]"/>
|
||||
<l:template name="page" text="(Seite %p)"/>
|
||||
<l:template name="pageabbrev" text="(S. %p)"/>
|
||||
<l:template name="Page" text="Seite %p"/>
|
||||
<l:template name="bridgehead" text="„%t“"/>
|
||||
<l:template name="refsection" text="„%t“"/>
|
||||
<l:template name="refsect1" text="„%t“"/>
|
||||
<l:template name="refsect2" text="„%t“"/>
|
||||
<l:template name="refsect3" text="„%t“"/>
|
||||
<l:template name="sect1" text="„%t“"/>
|
||||
<l:template name="sect2" text="„%t“"/>
|
||||
<l:template name="sect3" text="„%t“"/>
|
||||
<l:template name="sect4" text="„%t“"/>
|
||||
<l:template name="sect5" text="„%t“"/>
|
||||
<l:template name="section" text="„%t“"/>
|
||||
<l:template name="simplesect" text="„%t“"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref-number">
|
||||
<l:template name="answer" text="A: %n"/>
|
||||
<l:template name="appendix" text="Anhang %n"/>
|
||||
<l:template name="bridgehead" text="Abschnitt %n"/>
|
||||
<l:template name="chapter" text="Kapitel %n"/>
|
||||
<l:template name="equation" text="Gleichung %n"/>
|
||||
<l:template name="example" text="Beispiel %n"/>
|
||||
<l:template name="figure" text="Abbildung %n"/>
|
||||
<l:template name="part" text="Teil %n"/>
|
||||
<l:template name="procedure" text="Prozedur %n"/>
|
||||
<l:template name="productionset" text="Produktion %n"/>
|
||||
<l:template name="qandadiv" text="F & A %n"/>
|
||||
<l:template name="qandaentry" text="F: %n"/>
|
||||
<l:template name="question" text="F: %n"/>
|
||||
<l:template name="sect1" text="Abschnitt %n"/>
|
||||
<l:template name="sect2" text="Abschnitt %n"/>
|
||||
<l:template name="sect3" text="Abschnitt %n"/>
|
||||
<l:template name="sect4" text="Abschnitt %n"/>
|
||||
<l:template name="sect5" text="Abschnitt %n"/>
|
||||
<l:template name="section" text="Abschnitt %n"/>
|
||||
<l:template name="table" text="Tabelle %n"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref-number-and-title">
|
||||
<l:template name="appendix" text="Anhang %n, %t"/>
|
||||
<l:template name="bridgehead" text="Abschnitt %n, „%t“"/>
|
||||
<l:template name="chapter" text="Kapitel %n, %t"/>
|
||||
<l:template name="equation" text="Gleichung %n, „%t“"/>
|
||||
<l:template name="example" text="Beispiel %n, „%t“"/>
|
||||
<l:template name="figure" text="Abbildung %n, „%t“"/>
|
||||
<l:template name="part" text="Teil %n, „%t“"/>
|
||||
<l:template name="procedure" text="Prozedur %n, „%t“"/>
|
||||
<l:template name="productionset" text="Produktion %n, „%t“"/>
|
||||
<l:template name="qandadiv" text="F & A %n, „%t“"/>
|
||||
<l:template name="refsect1" text="der Abschnitt namens „%t“"/>
|
||||
<l:template name="refsect2" text="der Abschnitt namens „%t“"/>
|
||||
<l:template name="refsect3" text="der Abschnitt namens „%t“"/>
|
||||
<l:template name="refsection" text="der Abschnitt namens „%t“"/>
|
||||
<l:template name="sect1" text="Abschnitt %n, „%t“"/>
|
||||
<l:template name="sect2" text="Abschnitt %n, „%t“"/>
|
||||
<l:template name="sect3" text="Abschnitt %n, „%t“"/>
|
||||
<l:template name="sect4" text="Abschnitt %n, „%t“"/>
|
||||
<l:template name="sect5" text="Abschnitt %n, „%t“"/>
|
||||
<l:template name="section" text="Abschnitt %n, „%t“"/>
|
||||
<l:template name="simplesect" text="der Abschnitt namens „%t“"/>
|
||||
<l:template name="table" text="Tabelle %n, „%t“"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="authorgroup">
|
||||
<l:template name="sep" text=", "/>
|
||||
<l:template name="sep2" text=" und "/>
|
||||
<l:template name="seplast" text=" und "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="glossary">
|
||||
<l:template name="see" text="Siehe "/>
|
||||
<l:template name="seealso" text="Siehe auch "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="msgset">
|
||||
<l:template name="MsgAud" text="Zielgruppe: "/>
|
||||
<l:template name="MsgLevel" text="Dringlichkeit: "/>
|
||||
<l:template name="MsgOrig" text="Ursprung: "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime">
|
||||
<l:template name="format" text="d.M.Y"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime-full">
|
||||
<l:template name="January" text="Januar"/>
|
||||
<l:template name="February" text="Februar"/>
|
||||
<l:template name="March" text="März"/>
|
||||
<l:template name="April" text="April"/>
|
||||
<l:template name="May" text="Mai"/>
|
||||
<l:template name="June" text="Juni"/>
|
||||
<l:template name="July" text="Juli"/>
|
||||
<l:template name="August" text="August"/>
|
||||
<l:template name="September" text="September"/>
|
||||
<l:template name="October" text="Oktober"/>
|
||||
<l:template name="November" text="November"/>
|
||||
<l:template name="December" text="Dezember"/>
|
||||
<l:template name="Monday" text="Montag"/>
|
||||
<l:template name="Tuesday" text="Dienstag"/>
|
||||
<l:template name="Wednesday" text="Mittwoch"/>
|
||||
<l:template name="Thursday" text="Donnerstag"/>
|
||||
<l:template name="Friday" text="Freitag"/>
|
||||
<l:template name="Saturday" text="Samstag"/>
|
||||
<l:template name="Sunday" text="Sonntag"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime-abbrev">
|
||||
<l:template name="Jan" text="Jan"/>
|
||||
<l:template name="Feb" text="Feb"/>
|
||||
<l:template name="Mar" text="Mar"/>
|
||||
<l:template name="Apr" text="Apr"/>
|
||||
<l:template name="May" text="Mai"/>
|
||||
<l:template name="Jun" text="Jun"/>
|
||||
<l:template name="Jul" text="Jul"/>
|
||||
<l:template name="Aug" text="Aug"/>
|
||||
<l:template name="Sep" text="Sep"/>
|
||||
<l:template name="Oct" text="Okt"/>
|
||||
<l:template name="Nov" text="Nov"/>
|
||||
<l:template name="Dec" text="Dez"/>
|
||||
<l:template name="Mon" text="Mo"/>
|
||||
<l:template name="Tue" text="Di"/>
|
||||
<l:template name="Wed" text="Mi"/>
|
||||
<l:template name="Thu" text="Do"/>
|
||||
<l:template name="Fri" text="Fr"/>
|
||||
<l:template name="Sat" text="Sa"/>
|
||||
<l:template name="Sun" text="So"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="htmlhelp">
|
||||
<l:template name="langcode" text="0x0407 German (GERMANY)"/>
|
||||
</l:context>
|
||||
|
||||
<l:letters>
|
||||
<l:l i="-1"/>
|
||||
<l:l i="0">Symbole</l:l>
|
||||
<l:l i="1">A</l:l>
|
||||
<l:l i="1">a</l:l>
|
||||
<l:l i="1">Ä</l:l>
|
||||
<l:l i="1">ä</l:l>
|
||||
<l:l i="2">B</l:l>
|
||||
<l:l i="2">b</l:l>
|
||||
<l:l i="3">C</l:l>
|
||||
<l:l i="3">c</l:l>
|
||||
<l:l i="4">D</l:l>
|
||||
<l:l i="4">d</l:l>
|
||||
<l:l i="5">E</l:l>
|
||||
<l:l i="5">e</l:l>
|
||||
<l:l i="6">F</l:l>
|
||||
<l:l i="6">f</l:l>
|
||||
<l:l i="7">G</l:l>
|
||||
<l:l i="7">g</l:l>
|
||||
<l:l i="8">H</l:l>
|
||||
<l:l i="8">h</l:l>
|
||||
<l:l i="9">I</l:l>
|
||||
<l:l i="9">i</l:l>
|
||||
<l:l i="10">J</l:l>
|
||||
<l:l i="10">j</l:l>
|
||||
<l:l i="11">K</l:l>
|
||||
<l:l i="11">k</l:l>
|
||||
<l:l i="12">L</l:l>
|
||||
<l:l i="12">l</l:l>
|
||||
<l:l i="13">M</l:l>
|
||||
<l:l i="13">m</l:l>
|
||||
<l:l i="14">N</l:l>
|
||||
<l:l i="14">n</l:l>
|
||||
<l:l i="15">O</l:l>
|
||||
<l:l i="15">o</l:l>
|
||||
<l:l i="15">Ö</l:l>
|
||||
<l:l i="15">ö</l:l>
|
||||
<l:l i="16">P</l:l>
|
||||
<l:l i="16">p</l:l>
|
||||
<l:l i="17">Q</l:l>
|
||||
<l:l i="17">q</l:l>
|
||||
<l:l i="18">R</l:l>
|
||||
<l:l i="18">r</l:l>
|
||||
<l:l i="19">S</l:l>
|
||||
<l:l i="19">s</l:l>
|
||||
<l:l i="20">T</l:l>
|
||||
<l:l i="20">t</l:l>
|
||||
<l:l i="21">U</l:l>
|
||||
<l:l i="21">u</l:l>
|
||||
<l:l i="21">Ü</l:l>
|
||||
<l:l i="21">ü</l:l>
|
||||
<l:l i="22">V</l:l>
|
||||
<l:l i="22">v</l:l>
|
||||
<l:l i="23">W</l:l>
|
||||
<l:l i="23">w</l:l>
|
||||
<l:l i="24">X</l:l>
|
||||
<l:l i="24">x</l:l>
|
||||
<l:l i="25">Y</l:l>
|
||||
<l:l i="25">y</l:l>
|
||||
<l:l i="26">Z</l:l>
|
||||
<l:l i="26">z</l:l>
|
||||
</l:letters>
|
||||
</l:l10n>
|
|
@ -0,0 +1,600 @@
|
|||
<?xml version="1.0" encoding="US-ASCII"?>
|
||||
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="es" english-language-name="Spanish">
|
||||
|
||||
<!-- This file is generated automatically. -->
|
||||
<!-- Do not edit this file by hand! -->
|
||||
<!-- See http://docbook.sourceforge.net/ -->
|
||||
<!-- To update this file: edit the corresponding document at -->
|
||||
<!-- http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/gentext/locale/ -->
|
||||
|
||||
<l:gentext key="Abstract" text="Resumen"/>
|
||||
<l:gentext key="abstract" text="resumen"/>
|
||||
<l:gentext key="Answer" text="R:"/>
|
||||
<l:gentext key="answer" text="r:"/>
|
||||
<l:gentext key="Appendix" text="Apéndice"/>
|
||||
<l:gentext key="appendix" text="apéndice"/>
|
||||
<l:gentext key="Article" text="Artículo"/>
|
||||
<l:gentext key="article" text="artículo"/>
|
||||
<l:gentext key="Bibliography" text="Bibliografía"/>
|
||||
<l:gentext key="bibliography" text="bibliografía"/>
|
||||
<l:gentext key="Book" text="Libro"/>
|
||||
<l:gentext key="book" text="libro"/>
|
||||
<l:gentext key="CAUTION" text="ATENCIÓN"/>
|
||||
<l:gentext key="Caution" text="Atención"/>
|
||||
<l:gentext key="caution" text="atención"/>
|
||||
<l:gentext key="Chapter" text="Capítulo"/>
|
||||
<l:gentext key="chapter" text="capítulo"/>
|
||||
<l:gentext key="Colophon" text="Colofón"/>
|
||||
<l:gentext key="colophon" text="colofón"/>
|
||||
<l:gentext key="Copyright" text="Copyright"/>
|
||||
<l:gentext key="copyright" text="copyright"/>
|
||||
<l:gentext key="Dedication" text="Dedicatoria"/>
|
||||
<l:gentext key="dedication" text="dedicatoria"/>
|
||||
<l:gentext key="Edition" text="Edición"/>
|
||||
<l:gentext key="edition" text="edición"/>
|
||||
<l:gentext key="Equation" text="Ecuación"/>
|
||||
<l:gentext key="equation" text="ecuación"/>
|
||||
<l:gentext key="Example" text="Ejemplo"/>
|
||||
<l:gentext key="example" text="ejemplo"/>
|
||||
<l:gentext key="Figure" text="Figura"/>
|
||||
<l:gentext key="figure" text="figura"/>
|
||||
<l:gentext key="Glossary" text="Glosario"/>
|
||||
<l:gentext key="glossary" text="glosario"/>
|
||||
<l:gentext key="GlossSee" text="Ver"/>
|
||||
<l:gentext key="glosssee" text="ver"/>
|
||||
<l:gentext key="GlossSeeAlso" text="Ver también"/>
|
||||
<l:gentext key="glossseealso" text="ver también"/>
|
||||
<l:gentext key="IMPORTANT" text="IMPORTANTE"/>
|
||||
<l:gentext key="important" text="importante"/>
|
||||
<l:gentext key="Important" text="Importante"/>
|
||||
<l:gentext key="Index" text="Índice"/>
|
||||
<l:gentext key="index" text="índice"/>
|
||||
<l:gentext key="ISBN" text="ISBN"/>
|
||||
<l:gentext key="isbn" text="isbn"/>
|
||||
<l:gentext key="LegalNotice" text="Aviso Legal"/>
|
||||
<l:gentext key="legalnotice" text="aviso legal"/>
|
||||
<l:gentext key="MsgAud" text="Audiencia"/>
|
||||
<l:gentext key="msgaud" text="audiencia"/>
|
||||
<l:gentext key="MsgLevel" text="Nivel"/>
|
||||
<l:gentext key="msglevel" text="nivel"/>
|
||||
<l:gentext key="MsgOrig" text="Origen"/>
|
||||
<l:gentext key="msgorig" text="origen"/>
|
||||
<l:gentext key="NOTE" text="NOTA"/>
|
||||
<l:gentext key="Note" text="Nota"/>
|
||||
<l:gentext key="note" text="nota"/>
|
||||
<l:gentext key="Part" text="Parte"/>
|
||||
<l:gentext key="part" text="parte"/>
|
||||
<l:gentext key="Preface" text="Prefacio"/>
|
||||
<l:gentext key="preface" text="prefacio"/>
|
||||
<l:gentext key="Procedure" text="Procedimiento"/>
|
||||
<l:gentext key="procedure" text="procedimiento"/>
|
||||
<l:gentext key="ProductionSet" text="Producción"/>
|
||||
<l:gentext key="PubDate" text="Fecha de publicación"/>
|
||||
<l:gentext key="pubdate" text="fecha de publicación"/>
|
||||
<l:gentext key="Published" text="Publicado"/>
|
||||
<l:gentext key="published" text="publicado"/>
|
||||
<l:gentext key="Qandadiv" text="Q & A" lang="en"/>
|
||||
<l:gentext key="qandadiv" text="Q & A" lang="en"/>
|
||||
<l:gentext key="Question" text="P:"/>
|
||||
<l:gentext key="question" text="p:"/>
|
||||
<l:gentext key="RefEntry" text="Entrada de referencia"/>
|
||||
<l:gentext key="refentry" text="entrada de referencia"/>
|
||||
<l:gentext key="Reference" text="Referencia"/>
|
||||
<l:gentext key="reference" text="referencia"/>
|
||||
<l:gentext key="RefName" text="Nombre de referencia"/>
|
||||
<l:gentext key="refname" text="nombre de referencia"/>
|
||||
<l:gentext key="RefSection" text="Sección de referencia"/>
|
||||
<l:gentext key="refsection" text="sección de referencia"/>
|
||||
<l:gentext key="RefSynopsisDiv" text="Sinopsis"/>
|
||||
<l:gentext key="refsynopsisdiv" text="sinopsis"/>
|
||||
<l:gentext key="RevHistory" text="Historial de revisiones"/>
|
||||
<l:gentext key="revhistory" text="Historial de revisiones"/>
|
||||
<l:gentext key="revision" text="revisión"/>
|
||||
<l:gentext key="Revision" text="Revisión"/>
|
||||
<l:gentext key="sect1" text="Sección"/>
|
||||
<l:gentext key="sect2" text="Sección"/>
|
||||
<l:gentext key="sect3" text="Sección"/>
|
||||
<l:gentext key="sect4" text="Sección"/>
|
||||
<l:gentext key="sect5" text="Sección"/>
|
||||
<l:gentext key="section" text="sección"/>
|
||||
<l:gentext key="Section" text="Sección"/>
|
||||
<l:gentext key="see" text="ver"/>
|
||||
<l:gentext key="See" text="Ver"/>
|
||||
<l:gentext key="seealso" text="ver también"/>
|
||||
<l:gentext key="Seealso" text="Ver también"/>
|
||||
<l:gentext key="SeeAlso" text="Ver También"/>
|
||||
<l:gentext key="set" text="conjunto"/>
|
||||
<l:gentext key="Set" text="Conjunto"/>
|
||||
<l:gentext key="setindex" text="índice del conjunto"/>
|
||||
<l:gentext key="SetIndex" text="Índice del Conjunto"/>
|
||||
<l:gentext key="Sidebar" text="Barra lateral"/>
|
||||
<l:gentext key="sidebar" text="barra lateral"/>
|
||||
<l:gentext key="step" text="paso"/>
|
||||
<l:gentext key="Step" text="Paso"/>
|
||||
<l:gentext key="Table" text="Tabla"/>
|
||||
<l:gentext key="table" text="tabla"/>
|
||||
<l:gentext key="tip" text="sugerencia"/>
|
||||
<l:gentext key="TIP" text="SUGERENCIA"/>
|
||||
<l:gentext key="Tip" text="Sugerencia"/>
|
||||
<l:gentext key="Warning" text="Aviso"/>
|
||||
<l:gentext key="warning" text="aviso"/>
|
||||
<l:gentext key="WARNING" text="AVISO"/>
|
||||
<l:gentext key="and" text="y"/>
|
||||
<l:gentext key="by" text="por"/>
|
||||
<l:gentext key="called" text="called" lang="en"/>
|
||||
<l:gentext key="Edited" text="Editado"/>
|
||||
<l:gentext key="edited" text="editado"/>
|
||||
<l:gentext key="Editedby" text="Editado por"/>
|
||||
<l:gentext key="editedby" text="editado por"/>
|
||||
<l:gentext key="in" text="en"/>
|
||||
<l:gentext key="lastlistcomma" text=","/>
|
||||
<l:gentext key="listcomma" text=","/>
|
||||
<l:gentext key="nonexistantelement" text="elemento inexistente"/>
|
||||
<l:gentext key="notes" text="notas"/>
|
||||
<l:gentext key="Notes" text="Notas"/>
|
||||
<l:gentext key="Pgs" text="Pags."/>
|
||||
<l:gentext key="pgs" text="pags."/>
|
||||
<l:gentext key="Revisedby" text="Revisado por: "/>
|
||||
<l:gentext key="revisedby" text="revisado por: "/>
|
||||
<l:gentext key="TableNotes" text="Notas de Tabla"/>
|
||||
<l:gentext key="tablenotes" text="notas de tabla"/>
|
||||
<l:gentext key="TableofContents" text="Tabla de contenidos"/>
|
||||
<l:gentext key="tableofcontents" text="tabla de contenidos"/>
|
||||
<l:gentext key="the" text="" lang="en"/>
|
||||
<l:gentext key="unexpectedelementname" text="nombre de elemento inesperado"/>
|
||||
<l:gentext key="unsupported" text="no soportado"/>
|
||||
<l:gentext key="xrefto" text="referencia a"/>
|
||||
<l:gentext key="listofequations" text="lista de ecuaciones"/>
|
||||
<l:gentext key="ListofEquations" text="Lista de ecuaciones"/>
|
||||
<l:gentext key="ListofExamples" text="Lista de ejemplos"/>
|
||||
<l:gentext key="listofexamples" text="lista de ejemplos"/>
|
||||
<l:gentext key="ListofFigures" text="Lista de figuras"/>
|
||||
<l:gentext key="listoffigures" text="lista de figuras"/>
|
||||
<l:gentext key="ListofProcedures" text="List of Procedures" lang="en"/>
|
||||
<l:gentext key="listofprocedures" text="List of Procedures" lang="en"/>
|
||||
<l:gentext key="listoftables" text="lista de tablas"/>
|
||||
<l:gentext key="ListofTables" text="Lista de tablas"/>
|
||||
<l:gentext key="ListofUnknown" text="Lista de desconocido"/>
|
||||
<l:gentext key="listofunknown" text="lista de desconocido"/>
|
||||
<l:gentext key="nav-home" text="Inicio"/>
|
||||
<l:gentext key="nav-next" text="Siguiente"/>
|
||||
<l:gentext key="nav-next-sibling" text="Avanzar"/>
|
||||
<l:gentext key="nav-prev" text="Anterior"/>
|
||||
<l:gentext key="nav-prev-sibling" text="Retroceder"/>
|
||||
<l:gentext key="nav-up" text="Subir"/>
|
||||
<l:gentext key="nav-toc" text="ToC" lang="en"/>
|
||||
<l:gentext key="Draft" text="Borrador"/>
|
||||
<l:gentext key="above" text="arriba"/>
|
||||
<l:gentext key="below" text="abajo"/>
|
||||
<l:gentext key="sectioncalled" text="sección llamada"/>
|
||||
<l:gentext key="index symbols" text="Símbolos"/>
|
||||
<l:gentext key="lowercase.alpha" text="abcdefghijklmnopqrstuvwxyzáéíóúñ"/>
|
||||
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"/>
|
||||
<l:dingbat key="startquote" text="“"/>
|
||||
<l:dingbat key="endquote" text="”"/>
|
||||
<l:dingbat key="nestedstartquote" text="‘"/>
|
||||
<l:dingbat key="nestedendquote" text="’"/>
|
||||
<l:dingbat key="singlestartquote" text="‘" lang="en"/>
|
||||
<l:dingbat key="singleendquote" text="’" lang="en"/>
|
||||
<l:dingbat key="bullet" text="•"/>
|
||||
<l:gentext key="hyphenation-character" text="-" lang="en"/>
|
||||
<l:gentext key="hyphenation-push-character-count" text="2" lang="en"/>
|
||||
<l:gentext key="hyphenation-remain-character-count" text="2" lang="en"/>
|
||||
|
||||
<l:context name="styles">
|
||||
<l:template name="person-name" text="first-last"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title">
|
||||
<l:template name="abstract" text="%t"/>
|
||||
<l:template name="answer" text="%t"/>
|
||||
<l:template name="appendix" text="Apéndice %n. %t"/>
|
||||
<l:template name="article" text="%t"/>
|
||||
<l:template name="authorblurb" text="%t"/>
|
||||
<l:template name="bibliodiv" text="%t"/>
|
||||
<l:template name="biblioentry" text="%t"/>
|
||||
<l:template name="bibliography" text="%t"/>
|
||||
<l:template name="bibliolist" text="%t" lang="en"/>
|
||||
<l:template name="bibliomixed" text="%t"/>
|
||||
<l:template name="bibliomset" text="%t"/>
|
||||
<l:template name="biblioset" text="%t"/>
|
||||
<l:template name="blockquote" text="%t"/>
|
||||
<l:template name="book" text="%t"/>
|
||||
<l:template name="calloutlist" text="%t"/>
|
||||
<l:template name="caution" text="%t"/>
|
||||
<l:template name="chapter" text="Capítulo %n. %t"/>
|
||||
<l:template name="colophon" text="%t"/>
|
||||
<l:template name="dedication" text="%t"/>
|
||||
<l:template name="equation" text="Ecuación %n. %t"/>
|
||||
<l:template name="example" text="Ejemplo %n. %t"/>
|
||||
<l:template name="figure" text="Figura %n. %t"/>
|
||||
<l:template name="formalpara" text="%t"/>
|
||||
<l:template name="glossary" text="%t"/>
|
||||
<l:template name="glossdiv" text="%t"/>
|
||||
<l:template name="glosslist" text="%t" lang="en"/>
|
||||
<l:template name="glossentry" text="%t" lang="en"/>
|
||||
<l:template name="important" text="%t"/>
|
||||
<l:template name="index" text="%t"/>
|
||||
<l:template name="indexdiv" text="%t"/>
|
||||
<l:template name="itemizedlist" text="%t"/>
|
||||
<l:template name="legalnotice" text="%t"/>
|
||||
<l:template name="listitem" text=""/>
|
||||
<l:template name="lot" text="%t"/>
|
||||
<l:template name="msg" text="%t"/>
|
||||
<l:template name="msgexplan" text="%t"/>
|
||||
<l:template name="msgmain" text="%t"/>
|
||||
<l:template name="msgrel" text="%t"/>
|
||||
<l:template name="msgset" text="%t"/>
|
||||
<l:template name="msgsub" text="%t"/>
|
||||
<l:template name="note" text="%t"/>
|
||||
<l:template name="orderedlist" text="%t"/>
|
||||
<l:template name="part" text="Parte %n. %t"/>
|
||||
<l:template name="partintro" text="%t"/>
|
||||
<l:template name="preface" text="%t"/>
|
||||
<l:template name="procedure" text="%t"/>
|
||||
<l:template name="procedure.formal" text="Procedimiento %n. %t"/>
|
||||
<l:template name="productionset" text="%t"/>
|
||||
<l:template name="productionset.formal" text="Producción %n"/>
|
||||
<l:template name="qandadiv" text="%t"/>
|
||||
<l:template name="qandaentry" text="%t"/>
|
||||
<l:template name="qandaset" text="%t"/>
|
||||
<l:template name="question" text="%t"/>
|
||||
<l:template name="refentry" text="%t"/>
|
||||
<l:template name="reference" text="%t"/>
|
||||
<l:template name="refsection" text="%t"/>
|
||||
<l:template name="refsect1" text="%t"/>
|
||||
<l:template name="refsect2" text="%t"/>
|
||||
<l:template name="refsect3" text="%t"/>
|
||||
<l:template name="refsynopsisdiv" text="%t"/>
|
||||
<l:template name="refsynopsisdivinfo" text="%t"/>
|
||||
<l:template name="segmentedlist" text="%t"/>
|
||||
<l:template name="set" text="%t"/>
|
||||
<l:template name="setindex" text="%t"/>
|
||||
<l:template name="sidebar" text="%t"/>
|
||||
<l:template name="step" text="%t"/>
|
||||
<l:template name="table" text="Tabla %n. %t"/>
|
||||
<l:template name="task" text="%t" lang="en"/>
|
||||
<l:template name="tip" text="%t"/>
|
||||
<l:template name="toc" text="%t"/>
|
||||
<l:template name="variablelist" text="%t"/>
|
||||
<l:template name="varlistentry" text="" lang="en"/>
|
||||
<l:template name="warning" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title-unnumbered">
|
||||
<l:template name="appendix" text="%t"/>
|
||||
<l:template name="article/appendix" text="%t" lang="en"/>
|
||||
<l:template name="bridgehead" text="%t"/>
|
||||
<l:template name="chapter" text="%t"/>
|
||||
<l:template name="sect1" text="%t"/>
|
||||
<l:template name="sect2" text="%t"/>
|
||||
<l:template name="sect3" text="%t"/>
|
||||
<l:template name="sect4" text="%t"/>
|
||||
<l:template name="sect5" text="%t"/>
|
||||
<l:template name="section" text="%t"/>
|
||||
<l:template name="simplesect" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title-numbered">
|
||||
<l:template name="appendix" text="Apéndice %n. %t"/>
|
||||
<l:template name="article/appendix" text="%n. %t" lang="en"/>
|
||||
<l:template name="bridgehead" text="%n. %t"/>
|
||||
<l:template name="chapter" text="Capítulo %n. %t"/>
|
||||
<l:template name="sect1" text="%n. %t"/>
|
||||
<l:template name="sect2" text="%n. %t"/>
|
||||
<l:template name="sect3" text="%n. %t"/>
|
||||
<l:template name="sect4" text="%n. %t"/>
|
||||
<l:template name="sect5" text="%n. %t"/>
|
||||
<l:template name="section" text="%n. %t"/>
|
||||
<l:template name="simplesect" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="subtitle">
|
||||
<l:template name="appendix" text="%s"/>
|
||||
<l:template name="article" text="%s"/>
|
||||
<l:template name="bibliodiv" text="%s"/>
|
||||
<l:template name="biblioentry" text="%s"/>
|
||||
<l:template name="bibliography" text="%s"/>
|
||||
<l:template name="bibliomixed" text="%s"/>
|
||||
<l:template name="bibliomset" text="%s"/>
|
||||
<l:template name="biblioset" text="%s"/>
|
||||
<l:template name="book" text="%s"/>
|
||||
<l:template name="chapter" text="%s"/>
|
||||
<l:template name="colophon" text="%s"/>
|
||||
<l:template name="dedication" text="%s"/>
|
||||
<l:template name="glossary" text="%s"/>
|
||||
<l:template name="glossdiv" text="%s"/>
|
||||
<l:template name="index" text="%s"/>
|
||||
<l:template name="indexdiv" text="%s"/>
|
||||
<l:template name="lot" text="%s"/>
|
||||
<l:template name="part" text="%s"/>
|
||||
<l:template name="partintro" text="%s"/>
|
||||
<l:template name="preface" text="%s"/>
|
||||
<l:template name="refentry" text="%s"/>
|
||||
<l:template name="reference" text="%s"/>
|
||||
<l:template name="refsection" text="%s"/>
|
||||
<l:template name="refsect1" text="%s"/>
|
||||
<l:template name="refsect2" text="%s"/>
|
||||
<l:template name="refsect3" text="%s"/>
|
||||
<l:template name="refsynopsisdiv" text="%s"/>
|
||||
<l:template name="sect1" text="%s"/>
|
||||
<l:template name="sect2" text="%s"/>
|
||||
<l:template name="sect3" text="%s"/>
|
||||
<l:template name="sect4" text="%s"/>
|
||||
<l:template name="sect5" text="%s"/>
|
||||
<l:template name="section" text="%s"/>
|
||||
<l:template name="set" text="%s"/>
|
||||
<l:template name="setindex" text="%s"/>
|
||||
<l:template name="sidebar" text="%s"/>
|
||||
<l:template name="simplesect" text="%s"/>
|
||||
<l:template name="toc" text="%s"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref">
|
||||
<l:template name="abstract" text="%t"/>
|
||||
<l:template name="answer" text="R: %n"/>
|
||||
<l:template name="appendix" text="%t"/>
|
||||
<l:template name="article" text="%t"/>
|
||||
<l:template name="authorblurb" text="%t"/>
|
||||
<l:template name="bibliodiv" text="%t"/>
|
||||
<l:template name="bibliography" text="%t"/>
|
||||
<l:template name="bibliomset" text="%t"/>
|
||||
<l:template name="biblioset" text="%t"/>
|
||||
<l:template name="blockquote" text="%t"/>
|
||||
<l:template name="book" text="%t"/>
|
||||
<l:template name="calloutlist" text="%t"/>
|
||||
<l:template name="caution" text="%t"/>
|
||||
<l:template name="chapter" text="%t"/>
|
||||
<l:template name="colophon" text="%t"/>
|
||||
<l:template name="constraintdef" text="%t"/>
|
||||
<l:template name="dedication" text="%t"/>
|
||||
<l:template name="equation" text="%t"/>
|
||||
<l:template name="example" text="%t"/>
|
||||
<l:template name="figure" text="%t"/>
|
||||
<l:template name="formalpara" text="%t"/>
|
||||
<l:template name="glossary" text="%t"/>
|
||||
<l:template name="glossdiv" text="%t"/>
|
||||
<l:template name="important" text="%t"/>
|
||||
<l:template name="index" text="%t"/>
|
||||
<l:template name="indexdiv" text="%t"/>
|
||||
<l:template name="itemizedlist" text="%t"/>
|
||||
<l:template name="legalnotice" text="%t"/>
|
||||
<l:template name="listitem" text="%n"/>
|
||||
<l:template name="lot" text="%t"/>
|
||||
<l:template name="msg" text="%t"/>
|
||||
<l:template name="msgexplan" text="%t"/>
|
||||
<l:template name="msgmain" text="%t"/>
|
||||
<l:template name="msgrel" text="%t"/>
|
||||
<l:template name="msgset" text="%t"/>
|
||||
<l:template name="msgsub" text="%t"/>
|
||||
<l:template name="note" text="%t"/>
|
||||
<l:template name="orderedlist" text="%t"/>
|
||||
<l:template name="part" text="%t"/>
|
||||
<l:template name="partintro" text="%t"/>
|
||||
<l:template name="preface" text="%t"/>
|
||||
<l:template name="procedure" text="%t"/>
|
||||
<l:template name="productionset" text="%t"/>
|
||||
<l:template name="qandadiv" text="%t"/>
|
||||
<l:template name="qandaentry" text="P: %n"/>
|
||||
<l:template name="qandaset" text="%t"/>
|
||||
<l:template name="question" text="P: %n"/>
|
||||
<l:template name="reference" text="%t"/>
|
||||
<l:template name="refsynopsisdiv" text="%t"/>
|
||||
<l:template name="segmentedlist" text="%t"/>
|
||||
<l:template name="set" text="%t"/>
|
||||
<l:template name="setindex" text="%t"/>
|
||||
<l:template name="sidebar" text="%t"/>
|
||||
<l:template name="table" text="%t"/>
|
||||
<l:template name="tip" text="%t"/>
|
||||
<l:template name="toc" text="%t"/>
|
||||
<l:template name="variablelist" text="%t"/>
|
||||
<l:template name="varlistentry" text="%n"/>
|
||||
<l:template name="warning" text="%t"/>
|
||||
<l:template name="page.citation" text=" [%p]"/>
|
||||
<l:template name="page" text="(page %p)" lang="en"/>
|
||||
<l:template name="pageabbrev" text="(p. %p)" lang="en"/>
|
||||
<l:template name="Page" text="Page %p" lang="en"/>
|
||||
<l:template name="bridgehead" text="“%t”"/>
|
||||
<l:template name="refsection" text="“%t”"/>
|
||||
<l:template name="refsect1" text="“%t”"/>
|
||||
<l:template name="refsect2" text="“%t”"/>
|
||||
<l:template name="refsect3" text="“%t”"/>
|
||||
<l:template name="sect1" text="“%t”"/>
|
||||
<l:template name="sect2" text="“%t”"/>
|
||||
<l:template name="sect3" text="“%t”"/>
|
||||
<l:template name="sect4" text="“%t”"/>
|
||||
<l:template name="sect5" text="“%t”"/>
|
||||
<l:template name="section" text="“%t”"/>
|
||||
<l:template name="simplesect" text="“%t”"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref-number">
|
||||
<l:template name="answer" text="R: %n"/>
|
||||
<l:template name="appendix" text="Apéndice %n"/>
|
||||
<l:template name="bridgehead" text="Sección %n"/>
|
||||
<l:template name="chapter" text="Capítulo %n"/>
|
||||
<l:template name="equation" text="Ecuación %n"/>
|
||||
<l:template name="example" text="Ejemplo %n"/>
|
||||
<l:template name="figure" text="Figura %n"/>
|
||||
<l:template name="part" text="Parte %n"/>
|
||||
<l:template name="procedure" text="Procedimiento %n"/>
|
||||
<l:template name="productionset" text="Producción %n"/>
|
||||
<l:template name="qandadiv" text="Q & A %n"/>
|
||||
<l:template name="qandaentry" text="P: %n"/>
|
||||
<l:template name="question" text="P: %n"/>
|
||||
<l:template name="sect1" text="Sección %n"/>
|
||||
<l:template name="sect2" text="Sección %n"/>
|
||||
<l:template name="sect3" text="Sección %n"/>
|
||||
<l:template name="sect4" text="Sección %n"/>
|
||||
<l:template name="sect5" text="Sección %n"/>
|
||||
<l:template name="section" text="Sección %n"/>
|
||||
<l:template name="table" text="Tabla %n"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref-number-and-title">
|
||||
<l:template name="appendix" text="Apéndice %n, %t"/>
|
||||
<l:template name="bridgehead" text="Sección %n, “%t”"/>
|
||||
<l:template name="chapter" text="Capítulo %n, %t"/>
|
||||
<l:template name="equation" text="Ecuación %n, “%t”"/>
|
||||
<l:template name="example" text="Ejemplo %n, “%t”"/>
|
||||
<l:template name="figure" text="Figura %n, “%t”"/>
|
||||
<l:template name="part" text="Parte %n, “%t”"/>
|
||||
<l:template name="procedure" text="Procedimiento %n, “%t”"/>
|
||||
<l:template name="productionset" text="Producción %n, “%t”"/>
|
||||
<l:template name="qandadiv" text="Q & A %n, “%t”"/>
|
||||
<l:template name="refsect1" text="sección llamada “%t”"/>
|
||||
<l:template name="refsect2" text="sección llamada “%t”"/>
|
||||
<l:template name="refsect3" text="sección llamada “%t”"/>
|
||||
<l:template name="refsection" text="sección llamada “%t”"/>
|
||||
<l:template name="sect1" text="Sección %n, “%t”"/>
|
||||
<l:template name="sect2" text="Sección %n, “%t”"/>
|
||||
<l:template name="sect3" text="Sección %n, “%t”"/>
|
||||
<l:template name="sect4" text="Sección %n, “%t”"/>
|
||||
<l:template name="sect5" text="Sección %n, “%t”"/>
|
||||
<l:template name="section" text="Sección %n, “%t”"/>
|
||||
<l:template name="simplesect" text="sección llamada “%t”"/>
|
||||
<l:template name="table" text="Tabla %n, “%t”"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="authorgroup">
|
||||
<l:template name="sep" text=", "/>
|
||||
<l:template name="sep2" text=" y "/>
|
||||
<l:template name="seplast" text=", y "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="glossary">
|
||||
<l:template name="see" text="Ver "/>
|
||||
<l:template name="seealso" text="Ver también "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="msgset">
|
||||
<l:template name="MsgAud" text="Audiencia: "/>
|
||||
<l:template name="MsgLevel" text="Nivel: "/>
|
||||
<l:template name="MsgOrig" text="Origen: "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime">
|
||||
<l:template name="format" text="m/d/Y" lang="en"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime-full">
|
||||
<l:template name="January" text="January" lang="en"/>
|
||||
<l:template name="February" text="February" lang="en"/>
|
||||
<l:template name="March" text="March" lang="en"/>
|
||||
<l:template name="April" text="April" lang="en"/>
|
||||
<l:template name="May" text="May" lang="en"/>
|
||||
<l:template name="June" text="June" lang="en"/>
|
||||
<l:template name="July" text="July" lang="en"/>
|
||||
<l:template name="August" text="August" lang="en"/>
|
||||
<l:template name="September" text="September" lang="en"/>
|
||||
<l:template name="October" text="October" lang="en"/>
|
||||
<l:template name="November" text="November" lang="en"/>
|
||||
<l:template name="December" text="December" lang="en"/>
|
||||
<l:template name="Monday" text="Monday" lang="en"/>
|
||||
<l:template name="Tuesday" text="Tuesday" lang="en"/>
|
||||
<l:template name="Wednesday" text="Wednesday" lang="en"/>
|
||||
<l:template name="Thursday" text="Thursday" lang="en"/>
|
||||
<l:template name="Friday" text="Friday" lang="en"/>
|
||||
<l:template name="Saturday" text="Saturday" lang="en"/>
|
||||
<l:template name="Sunday" text="Sunday" lang="en"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime-abbrev">
|
||||
<l:template name="Jan" text="Jan" lang="en"/>
|
||||
<l:template name="Feb" text="Feb" lang="en"/>
|
||||
<l:template name="Mar" text="Mar" lang="en"/>
|
||||
<l:template name="Apr" text="Apr" lang="en"/>
|
||||
<l:template name="May" text="May" lang="en"/>
|
||||
<l:template name="Jun" text="Jun" lang="en"/>
|
||||
<l:template name="Jul" text="Jul" lang="en"/>
|
||||
<l:template name="Aug" text="Aug" lang="en"/>
|
||||
<l:template name="Sep" text="Sep" lang="en"/>
|
||||
<l:template name="Oct" text="Oct" lang="en"/>
|
||||
<l:template name="Nov" text="Nov" lang="en"/>
|
||||
<l:template name="Dec" text="Dec" lang="en"/>
|
||||
<l:template name="Mon" text="Mon" lang="en"/>
|
||||
<l:template name="Tue" text="Tue" lang="en"/>
|
||||
<l:template name="Wed" text="Wed" lang="en"/>
|
||||
<l:template name="Thu" text="Thu" lang="en"/>
|
||||
<l:template name="Fri" text="Fri" lang="en"/>
|
||||
<l:template name="Sat" text="Sat" lang="en"/>
|
||||
<l:template name="Sun" text="Sun" lang="en"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="htmlhelp">
|
||||
<l:template name="langcode" text="0x040a Spanish (Traditional Sort)"/>
|
||||
</l:context>
|
||||
|
||||
<l:letters>
|
||||
<l:l i="-1"/>
|
||||
<l:l i="0">Símbolos</l:l>
|
||||
<l:l i="1">A</l:l>
|
||||
<l:l i="1">a</l:l>
|
||||
<l:l i="1">á</l:l>
|
||||
<l:l i="1">Á</l:l>
|
||||
<l:l i="2">B</l:l>
|
||||
<l:l i="2">b</l:l>
|
||||
<l:l i="3">C</l:l>
|
||||
<l:l i="3">c</l:l>
|
||||
<l:l i="4">CH</l:l>
|
||||
<l:l i="4">ch</l:l>
|
||||
<l:l i="5">D</l:l>
|
||||
<l:l i="5">d</l:l>
|
||||
<l:l i="6">E</l:l>
|
||||
<l:l i="6">e</l:l>
|
||||
<l:l i="6">É</l:l>
|
||||
<l:l i="6">é</l:l>
|
||||
<l:l i="7">F</l:l>
|
||||
<l:l i="7">f</l:l>
|
||||
<l:l i="8">G</l:l>
|
||||
<l:l i="8">g</l:l>
|
||||
<l:l i="9">H</l:l>
|
||||
<l:l i="9">h</l:l>
|
||||
<l:l i="10">I</l:l>
|
||||
<l:l i="10">i</l:l>
|
||||
<l:l i="10">Í</l:l>
|
||||
<l:l i="10">í</l:l>
|
||||
<l:l i="11">J</l:l>
|
||||
<l:l i="11">j</l:l>
|
||||
<l:l i="12">K</l:l>
|
||||
<l:l i="12">k</l:l>
|
||||
<l:l i="13">L</l:l>
|
||||
<l:l i="13">l</l:l>
|
||||
<l:l i="14">LL</l:l>
|
||||
<l:l i="14">ll</l:l>
|
||||
<l:l i="15">M</l:l>
|
||||
<l:l i="15">m</l:l>
|
||||
<l:l i="16">N</l:l>
|
||||
<l:l i="16">n</l:l>
|
||||
<l:l i="17">Ñ</l:l>
|
||||
<l:l i="17">ñ</l:l>
|
||||
<l:l i="18">O</l:l>
|
||||
<l:l i="18">o</l:l>
|
||||
<l:l i="18">Ó</l:l>
|
||||
<l:l i="18">ó</l:l>
|
||||
<l:l i="19">P</l:l>
|
||||
<l:l i="19">p</l:l>
|
||||
<l:l i="20">Q</l:l>
|
||||
<l:l i="20">q</l:l>
|
||||
<l:l i="21">R</l:l>
|
||||
<l:l i="21">r</l:l>
|
||||
<l:l i="22">S</l:l>
|
||||
<l:l i="22">s</l:l>
|
||||
<l:l i="23">T</l:l>
|
||||
<l:l i="23">t</l:l>
|
||||
<l:l i="24">U</l:l>
|
||||
<l:l i="24">u</l:l>
|
||||
<l:l i="24">Ú</l:l>
|
||||
<l:l i="24">ú</l:l>
|
||||
<l:l i="25">V</l:l>
|
||||
<l:l i="25">v</l:l>
|
||||
<l:l i="26">W</l:l>
|
||||
<l:l i="26">w</l:l>
|
||||
<l:l i="27">X</l:l>
|
||||
<l:l i="27">x</l:l>
|
||||
<l:l i="28">Y</l:l>
|
||||
<l:l i="28">y</l:l>
|
||||
<l:l i="29">Z</l:l>
|
||||
<l:l i="29">z</l:l>
|
||||
</l:letters>
|
||||
</l:l10n>
|
|
@ -0,0 +1,614 @@
|
|||
<?xml version="1.0" encoding="US-ASCII"?>
|
||||
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="fr" english-language-name="French">
|
||||
|
||||
<!-- This file is generated automatically. -->
|
||||
<!-- Do not edit this file by hand! -->
|
||||
<!-- See http://docbook.sourceforge.net/ -->
|
||||
<!-- To update this file: edit the corresponding document at -->
|
||||
<!-- http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/gentext/locale/ -->
|
||||
|
||||
<l:gentext key="Abstract" text="Résumé"/>
|
||||
<l:gentext key="abstract" text="Résumé"/>
|
||||
<l:gentext key="Answer" text="R :"/>
|
||||
<l:gentext key="answer" text="R :"/>
|
||||
<l:gentext key="Appendix" text="Annexe"/>
|
||||
<l:gentext key="appendix" text="annexe"/>
|
||||
<l:gentext key="Article" text="Article"/>
|
||||
<l:gentext key="article" text="Article"/>
|
||||
<l:gentext key="Bibliography" text="Bibliographie"/>
|
||||
<l:gentext key="bibliography" text="Bibliographie"/>
|
||||
<l:gentext key="Book" text="Livre"/>
|
||||
<l:gentext key="book" text="Livre"/>
|
||||
<l:gentext key="CAUTION" text="ATTENTION"/>
|
||||
<l:gentext key="Caution" text="Attention"/>
|
||||
<l:gentext key="caution" text="Attention"/>
|
||||
<l:gentext key="Chapter" text="Chapitre"/>
|
||||
<l:gentext key="chapter" text="chapitre"/>
|
||||
<l:gentext key="Colophon" text="Colophon"/>
|
||||
<l:gentext key="colophon" text="Colophon"/>
|
||||
<l:gentext key="Copyright" text="Copyright"/>
|
||||
<l:gentext key="copyright" text="Copyright"/>
|
||||
<l:gentext key="Dedication" text="Dédicace"/>
|
||||
<l:gentext key="dedication" text="Dédicace"/>
|
||||
<l:gentext key="Edition" text="Édition"/>
|
||||
<l:gentext key="edition" text="Édition"/>
|
||||
<l:gentext key="Equation" text="Équation"/>
|
||||
<l:gentext key="equation" text="Équation"/>
|
||||
<l:gentext key="Example" text="Exemple"/>
|
||||
<l:gentext key="example" text="Exemple"/>
|
||||
<l:gentext key="Figure" text="Figure"/>
|
||||
<l:gentext key="figure" text="Figure"/>
|
||||
<l:gentext key="Glossary" text="Glossaire"/>
|
||||
<l:gentext key="glossary" text="Glossaire"/>
|
||||
<l:gentext key="GlossSee" text="Voir"/>
|
||||
<l:gentext key="glosssee" text="Voir"/>
|
||||
<l:gentext key="GlossSeeAlso" text="Voir aussi"/>
|
||||
<l:gentext key="glossseealso" text="Voir aussi"/>
|
||||
<l:gentext key="IMPORTANT" text="IMPORTANT"/>
|
||||
<l:gentext key="important" text="Important"/>
|
||||
<l:gentext key="Important" text="Important"/>
|
||||
<l:gentext key="Index" text="Index"/>
|
||||
<l:gentext key="index" text="Index"/>
|
||||
<l:gentext key="ISBN" text="ISBN"/>
|
||||
<l:gentext key="isbn" text="ISBN"/>
|
||||
<l:gentext key="LegalNotice" text="Note légale"/>
|
||||
<l:gentext key="legalnotice" text="Note légale"/>
|
||||
<l:gentext key="MsgAud" text="Public visé"/>
|
||||
<l:gentext key="msgaud" text="Public visé"/>
|
||||
<l:gentext key="MsgLevel" text="Niveau"/>
|
||||
<l:gentext key="msglevel" text="Niveau"/>
|
||||
<l:gentext key="MsgOrig" text="Origine"/>
|
||||
<l:gentext key="msgorig" text="Origine"/>
|
||||
<l:gentext key="NOTE" text="NOTE"/>
|
||||
<l:gentext key="Note" text="Note"/>
|
||||
<l:gentext key="note" text="Note"/>
|
||||
<l:gentext key="Part" text="Partie"/>
|
||||
<l:gentext key="part" text="Partie"/>
|
||||
<l:gentext key="Preface" text="Préface"/>
|
||||
<l:gentext key="preface" text="Préface"/>
|
||||
<l:gentext key="Procedure" text="Procédure"/>
|
||||
<l:gentext key="procedure" text="Procédure"/>
|
||||
<l:gentext key="ProductionSet" text="Production"/>
|
||||
<l:gentext key="PubDate" text="Date de publication"/>
|
||||
<l:gentext key="pubdate" text="Date de publication"/>
|
||||
<l:gentext key="Published" text="Publié"/>
|
||||
<l:gentext key="published" text="Publié"/>
|
||||
<l:gentext key="Qandadiv" text="Q & R"/>
|
||||
<l:gentext key="qandadiv" text="Q & R"/>
|
||||
<l:gentext key="Question" text="Q :"/>
|
||||
<l:gentext key="question" text="Q :"/>
|
||||
<l:gentext key="RefEntry" text=""/>
|
||||
<l:gentext key="refentry" text=""/>
|
||||
<l:gentext key="Reference" text="Référence"/>
|
||||
<l:gentext key="reference" text="Référence"/>
|
||||
<l:gentext key="RefName" text="Nom"/>
|
||||
<l:gentext key="refname" text="Nom"/>
|
||||
<l:gentext key="RefSection" text=""/>
|
||||
<l:gentext key="refsection" text=""/>
|
||||
<l:gentext key="RefSynopsisDiv" text="Synopsis"/>
|
||||
<l:gentext key="refsynopsisdiv" text="Synopsis"/>
|
||||
<l:gentext key="RevHistory" text="Historique des versions"/>
|
||||
<l:gentext key="revhistory" text="Historique des versions"/>
|
||||
<l:gentext key="revision" text="Version"/>
|
||||
<l:gentext key="Revision" text="Version"/>
|
||||
<l:gentext key="sect1" text="Section"/>
|
||||
<l:gentext key="sect2" text="Section"/>
|
||||
<l:gentext key="sect3" text="Section"/>
|
||||
<l:gentext key="sect4" text="Section"/>
|
||||
<l:gentext key="sect5" text="Section"/>
|
||||
<l:gentext key="section" text="section"/>
|
||||
<l:gentext key="Section" text="Section"/>
|
||||
<l:gentext key="see" text="voir"/>
|
||||
<l:gentext key="See" text="Voir"/>
|
||||
<l:gentext key="seealso" text="voir aussi"/>
|
||||
<l:gentext key="Seealso" text="Voir aussi"/>
|
||||
<l:gentext key="SeeAlso" text="Voir Aussi"/>
|
||||
<l:gentext key="set" text="Ensemble"/>
|
||||
<l:gentext key="Set" text="Ensemble"/>
|
||||
<l:gentext key="setindex" text="Index"/>
|
||||
<l:gentext key="SetIndex" text="Index"/>
|
||||
<l:gentext key="Sidebar" text=""/>
|
||||
<l:gentext key="sidebar" text="sidebar"/>
|
||||
<l:gentext key="step" text="étape"/>
|
||||
<l:gentext key="Step" text="Étape"/>
|
||||
<l:gentext key="Table" text="Tableau"/>
|
||||
<l:gentext key="table" text="Tableau"/>
|
||||
<l:gentext key="tip" text="ASTUCE"/>
|
||||
<l:gentext key="TIP" text="ASTUCE"/>
|
||||
<l:gentext key="Tip" text="Astuce"/>
|
||||
<l:gentext key="Warning" text="Avertissement"/>
|
||||
<l:gentext key="warning" text="AVERTISSEMENT"/>
|
||||
<l:gentext key="WARNING" text="AVERTISSEMENT"/>
|
||||
<l:gentext key="and" text="et"/>
|
||||
<l:gentext key="by" text="par"/>
|
||||
<l:gentext key="called" text="intitulé"/>
|
||||
<l:gentext key="Edited" text="Publié"/>
|
||||
<l:gentext key="edited" text="Publié"/>
|
||||
<l:gentext key="Editedby" text="Publié par"/>
|
||||
<l:gentext key="editedby" text="Publié par"/>
|
||||
<l:gentext key="in" text="dans"/>
|
||||
<l:gentext key="lastlistcomma" text=","/>
|
||||
<l:gentext key="listcomma" text=","/>
|
||||
<l:gentext key="nonexistantelement" text="Cet élément n'existe pas"/>
|
||||
<l:gentext key="notes" text="Notes"/>
|
||||
<l:gentext key="Notes" text="Notes"/>
|
||||
<l:gentext key="Pgs" text="Pages"/>
|
||||
<l:gentext key="pgs" text="Pages"/>
|
||||
<l:gentext key="Revisedby" text="Revu par : "/>
|
||||
<l:gentext key="revisedby" text="Revu par : "/>
|
||||
<l:gentext key="TableNotes" text="Remarques"/>
|
||||
<l:gentext key="tablenotes" text="Remarques"/>
|
||||
<l:gentext key="TableofContents" text="Table des matières"/>
|
||||
<l:gentext key="tableofcontents" text="Table des matières"/>
|
||||
<l:gentext key="the" text=""/>
|
||||
<l:gentext key="unexpectedelementname" text="Nom d'élément non attendu"/>
|
||||
<l:gentext key="unsupported" text="Non reconnu par le système"/>
|
||||
<l:gentext key="xrefto" text="Référence vers"/>
|
||||
<l:gentext key="listofequations" text="Liste des équations"/>
|
||||
<l:gentext key="ListofEquations" text="Liste des équations"/>
|
||||
<l:gentext key="ListofExamples" text="Liste des exemples"/>
|
||||
<l:gentext key="listofexamples" text="Liste des exemples"/>
|
||||
<l:gentext key="ListofFigures" text="Liste des illustrations"/>
|
||||
<l:gentext key="listoffigures" text="Liste des illustrations"/>
|
||||
<l:gentext key="ListofProcedures" text="Liste des procédures"/>
|
||||
<l:gentext key="listofprocedures" text="Liste des procédures"/>
|
||||
<l:gentext key="listoftables" text="Liste des tableaux"/>
|
||||
<l:gentext key="ListofTables" text="Liste des tableaux"/>
|
||||
<l:gentext key="ListofUnknown" text="Liste des inconnues"/>
|
||||
<l:gentext key="listofunknown" text="Liste des inconnues"/>
|
||||
<l:gentext key="nav-home" text="Sommaire"/>
|
||||
<l:gentext key="nav-next" text="Suivant"/>
|
||||
<l:gentext key="nav-next-sibling" text="Avance rapide"/>
|
||||
<l:gentext key="nav-prev" text="Précédent"/>
|
||||
<l:gentext key="nav-prev-sibling" text="Arrière rapide"/>
|
||||
<l:gentext key="nav-up" text="Niveau supérieur"/>
|
||||
<l:gentext key="nav-toc" text="TdM"/>
|
||||
<l:gentext key="Draft" text="Brouillon"/>
|
||||
<l:gentext key="above" text="au dessus"/>
|
||||
<l:gentext key="below" text="au dessous"/>
|
||||
<l:gentext key="sectioncalled" text="la section intitulée"/>
|
||||
<l:gentext key="index symbols" text="Symboles"/>
|
||||
<l:gentext key="lowercase.alpha" text="abcdefghijklmnopqrstuvwxyzâêîôûëïüàèùéçæœ"/>
|
||||
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZÂÊÎÔÛËÏÜÀÈÙÉÇÆŒ"/>
|
||||
<l:dingbat key="startquote" text="« "/>
|
||||
<l:dingbat key="endquote" text=" »"/>
|
||||
<l:dingbat key="nestedstartquote" text="« "/>
|
||||
<l:dingbat key="nestedendquote" text=" »"/>
|
||||
<l:dingbat key="singlestartquote" text="‹"/>
|
||||
<l:dingbat key="singleendquote" text="›"/>
|
||||
<l:dingbat key="bullet" text="•"/>
|
||||
<l:gentext key="hyphenation-character" text="-"/>
|
||||
<l:gentext key="hyphenation-push-character-count" text="2"/>
|
||||
<l:gentext key="hyphenation-remain-character-count" text="2"/>
|
||||
|
||||
<l:context name="styles">
|
||||
<l:template name="person-name" text="first-last"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title">
|
||||
<l:template name="abstract" text="%t"/>
|
||||
<l:template name="answer" text="%t"/>
|
||||
<l:template name="appendix" text="Annexe %n. %t"/>
|
||||
<l:template name="article" text="%t"/>
|
||||
<l:template name="authorblurb" text="%t"/>
|
||||
<l:template name="bibliodiv" text="%t"/>
|
||||
<l:template name="biblioentry" text="%t"/>
|
||||
<l:template name="bibliography" text="%t"/>
|
||||
<l:template name="bibliolist" text="%t" lang="en"/>
|
||||
<l:template name="bibliomixed" text="%t"/>
|
||||
<l:template name="bibliomset" text="%t"/>
|
||||
<l:template name="biblioset" text="%t"/>
|
||||
<l:template name="blockquote" text="%t"/>
|
||||
<l:template name="book" text="%t"/>
|
||||
<l:template name="calloutlist" text="%t"/>
|
||||
<l:template name="caution" text="%t"/>
|
||||
<l:template name="chapter" text="Chapitre %n. %t"/>
|
||||
<l:template name="colophon" text="%t"/>
|
||||
<l:template name="dedication" text="%t"/>
|
||||
<l:template name="equation" text="Équation %n. %t"/>
|
||||
<l:template name="example" text="Exemple %n. %t"/>
|
||||
<l:template name="figure" text="Figure %n. %t"/>
|
||||
<l:template name="formalpara" text="%t"/>
|
||||
<l:template name="glossary" text="%t"/>
|
||||
<l:template name="glossdiv" text="%t"/>
|
||||
<l:template name="glosslist" text="%t" lang="en"/>
|
||||
<l:template name="glossentry" text="%t"/>
|
||||
<l:template name="important" text="%t"/>
|
||||
<l:template name="index" text="%t"/>
|
||||
<l:template name="indexdiv" text="%t"/>
|
||||
<l:template name="itemizedlist" text="%t"/>
|
||||
<l:template name="legalnotice" text="%t"/>
|
||||
<l:template name="listitem" text=""/>
|
||||
<l:template name="lot" text="%t"/>
|
||||
<l:template name="msg" text="%t"/>
|
||||
<l:template name="msgexplan" text="%t"/>
|
||||
<l:template name="msgmain" text="%t"/>
|
||||
<l:template name="msgrel" text="%t"/>
|
||||
<l:template name="msgset" text="%t"/>
|
||||
<l:template name="msgsub" text="%t"/>
|
||||
<l:template name="note" text="%t"/>
|
||||
<l:template name="orderedlist" text="%t"/>
|
||||
<l:template name="part" text="%t"/>
|
||||
<l:template name="partintro" text="%t"/>
|
||||
<l:template name="preface" text="%t"/>
|
||||
<l:template name="procedure" text="%t"/>
|
||||
<l:template name="procedure.formal" text="Procédure %n. %t"/>
|
||||
<l:template name="productionset" text="%t"/>
|
||||
<l:template name="productionset.formal" text="Production %n"/>
|
||||
<l:template name="qandadiv" text="%t"/>
|
||||
<l:template name="qandaentry" text="%t"/>
|
||||
<l:template name="qandaset" text="%t"/>
|
||||
<l:template name="question" text="%t"/>
|
||||
<l:template name="refentry" text="%t"/>
|
||||
<l:template name="reference" text="%t"/>
|
||||
<l:template name="refsection" text="%t"/>
|
||||
<l:template name="refsect1" text="%t"/>
|
||||
<l:template name="refsect2" text="%t"/>
|
||||
<l:template name="refsect3" text="%t"/>
|
||||
<l:template name="refsynopsisdiv" text="%t"/>
|
||||
<l:template name="refsynopsisdivinfo" text="%t"/>
|
||||
<l:template name="segmentedlist" text="%t"/>
|
||||
<l:template name="set" text="%t"/>
|
||||
<l:template name="setindex" text="%t"/>
|
||||
<l:template name="sidebar" text="%t"/>
|
||||
<l:template name="step" text="%t"/>
|
||||
<l:template name="table" text="Tableau %n. %t"/>
|
||||
<l:template name="task" text="%t"/>
|
||||
<l:template name="tip" text="%t"/>
|
||||
<l:template name="toc" text="%t"/>
|
||||
<l:template name="variablelist" text="%t"/>
|
||||
<l:template name="varlistentry" text=""/>
|
||||
<l:template name="warning" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title-unnumbered">
|
||||
<l:template name="appendix" text="%t"/>
|
||||
<l:template name="article/appendix" text="%t"/>
|
||||
<l:template name="bridgehead" text="%t"/>
|
||||
<l:template name="chapter" text="%t"/>
|
||||
<l:template name="sect1" text="%t"/>
|
||||
<l:template name="sect2" text="%t"/>
|
||||
<l:template name="sect3" text="%t"/>
|
||||
<l:template name="sect4" text="%t"/>
|
||||
<l:template name="sect5" text="%t"/>
|
||||
<l:template name="section" text="%t"/>
|
||||
<l:template name="simplesect" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="title-numbered">
|
||||
<l:template name="appendix" text="Annexe %n. %t"/>
|
||||
<l:template name="article/appendix" text="%n. %t"/>
|
||||
<l:template name="bridgehead" text="%n. %t"/>
|
||||
<l:template name="chapter" text="Chapitre %n. %t"/>
|
||||
<l:template name="sect1" text="%n. %t"/>
|
||||
<l:template name="sect2" text="%n. %t"/>
|
||||
<l:template name="sect3" text="%n. %t"/>
|
||||
<l:template name="sect4" text="%n. %t"/>
|
||||
<l:template name="sect5" text="%n. %t"/>
|
||||
<l:template name="section" text="%n. %t"/>
|
||||
<l:template name="simplesect" text="%t"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="subtitle">
|
||||
<l:template name="appendix" text="%s"/>
|
||||
<l:template name="article" text="%s"/>
|
||||
<l:template name="bibliodiv" text="%s"/>
|
||||
<l:template name="biblioentry" text="%s"/>
|
||||
<l:template name="bibliography" text="%s"/>
|
||||
<l:template name="bibliomixed" text="%s"/>
|
||||
<l:template name="bibliomset" text="%s"/>
|
||||
<l:template name="biblioset" text="%s"/>
|
||||
<l:template name="book" text="%s"/>
|
||||
<l:template name="chapter" text="%s"/>
|
||||
<l:template name="colophon" text="%s"/>
|
||||
<l:template name="dedication" text="%s"/>
|
||||
<l:template name="glossary" text="%s"/>
|
||||
<l:template name="glossdiv" text="%s"/>
|
||||
<l:template name="index" text="%s"/>
|
||||
<l:template name="indexdiv" text="%s"/>
|
||||
<l:template name="lot" text="%s"/>
|
||||
<l:template name="part" text="%s"/>
|
||||
<l:template name="partintro" text="%s"/>
|
||||
<l:template name="preface" text="%s"/>
|
||||
<l:template name="refentry" text="%s"/>
|
||||
<l:template name="reference" text="%s"/>
|
||||
<l:template name="refsection" text="%s"/>
|
||||
<l:template name="refsect1" text="%s"/>
|
||||
<l:template name="refsect2" text="%s"/>
|
||||
<l:template name="refsect3" text="%s"/>
|
||||
<l:template name="refsynopsisdiv" text="%s"/>
|
||||
<l:template name="sect1" text="%s"/>
|
||||
<l:template name="sect2" text="%s"/>
|
||||
<l:template name="sect3" text="%s"/>
|
||||
<l:template name="sect4" text="%s"/>
|
||||
<l:template name="sect5" text="%s"/>
|
||||
<l:template name="section" text="%s"/>
|
||||
<l:template name="set" text="%s"/>
|
||||
<l:template name="setindex" text="%s"/>
|
||||
<l:template name="sidebar" text="%s"/>
|
||||
<l:template name="simplesect" text="%s"/>
|
||||
<l:template name="toc" text="%s"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref">
|
||||
<l:template name="abstract" text="%t"/>
|
||||
<l:template name="answer" text="R : %n"/>
|
||||
<l:template name="appendix" text="%t"/>
|
||||
<l:template name="article" text="%t"/>
|
||||
<l:template name="authorblurb" text="%t"/>
|
||||
<l:template name="bibliodiv" text="%t"/>
|
||||
<l:template name="bibliography" text="%t"/>
|
||||
<l:template name="bibliomset" text="%t"/>
|
||||
<l:template name="biblioset" text="%t"/>
|
||||
<l:template name="blockquote" text="%t"/>
|
||||
<l:template name="book" text="%t"/>
|
||||
<l:template name="calloutlist" text="%t"/>
|
||||
<l:template name="caution" text="%t"/>
|
||||
<l:template name="chapter" text="%t"/>
|
||||
<l:template name="colophon" text="%t"/>
|
||||
<l:template name="constraintdef" text="%t"/>
|
||||
<l:template name="dedication" text="%t"/>
|
||||
<l:template name="equation" text="%t"/>
|
||||
<l:template name="example" text="%t"/>
|
||||
<l:template name="figure" text="%t"/>
|
||||
<l:template name="formalpara" text="%t"/>
|
||||
<l:template name="glossary" text="%t"/>
|
||||
<l:template name="glossdiv" text="%t"/>
|
||||
<l:template name="important" text="%t"/>
|
||||
<l:template name="index" text="%t"/>
|
||||
<l:template name="indexdiv" text="%t"/>
|
||||
<l:template name="itemizedlist" text="%t"/>
|
||||
<l:template name="legalnotice" text="%t"/>
|
||||
<l:template name="listitem" text="%n"/>
|
||||
<l:template name="lot" text="%t"/>
|
||||
<l:template name="msg" text="%t"/>
|
||||
<l:template name="msgexplan" text="%t"/>
|
||||
<l:template name="msgmain" text="%t"/>
|
||||
<l:template name="msgrel" text="%t"/>
|
||||
<l:template name="msgset" text="%t"/>
|
||||
<l:template name="msgsub" text="%t"/>
|
||||
<l:template name="note" text="%t"/>
|
||||
<l:template name="orderedlist" text="%t"/>
|
||||
<l:template name="part" text="%t"/>
|
||||
<l:template name="partintro" text="%t"/>
|
||||
<l:template name="preface" text="%t"/>
|
||||
<l:template name="procedure" text="%t"/>
|
||||
<l:template name="productionset" text="%t"/>
|
||||
<l:template name="qandadiv" text="%t"/>
|
||||
<l:template name="qandaentry" text="Q : %n"/>
|
||||
<l:template name="qandaset" text="%t"/>
|
||||
<l:template name="question" text="Q : %n"/>
|
||||
<l:template name="reference" text="%t"/>
|
||||
<l:template name="refsynopsisdiv" text="%t"/>
|
||||
<l:template name="segmentedlist" text="%t"/>
|
||||
<l:template name="set" text="%t"/>
|
||||
<l:template name="setindex" text="%t"/>
|
||||
<l:template name="sidebar" text="%t"/>
|
||||
<l:template name="table" text="%t"/>
|
||||
<l:template name="tip" text="%t"/>
|
||||
<l:template name="toc" text="%t"/>
|
||||
<l:template name="variablelist" text="%t"/>
|
||||
<l:template name="varlistentry" text="%n"/>
|
||||
<l:template name="warning" text="%t"/>
|
||||
<l:template name="page.citation" text=" [%p]"/>
|
||||
<l:template name="page" text="(page %p)"/>
|
||||
<l:template name="pageabbrev" text="(p. %p)"/>
|
||||
<l:template name="Page" text="Page %p"/>
|
||||
<l:template name="bridgehead" text="la section intitulée « %t »"/>
|
||||
<l:template name="refsection" text="la section intitulée « %t »"/>
|
||||
<l:template name="refsect1" text="la section intitulée « %t »"/>
|
||||
<l:template name="refsect2" text="la section intitulée « %t »"/>
|
||||
<l:template name="refsect3" text="la section intitulée « %t »"/>
|
||||
<l:template name="sect1" text="la section intitulée « %t »"/>
|
||||
<l:template name="sect2" text="la section intitulée « %t »"/>
|
||||
<l:template name="sect3" text="la section intitulée « %t »"/>
|
||||
<l:template name="sect4" text="la section intitulée « %t »"/>
|
||||
<l:template name="sect5" text="la section intitulée « %t »"/>
|
||||
<l:template name="section" text="la section intitulée « %t »"/>
|
||||
<l:template name="simplesect" text="la section intitulée « %t »"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref-number">
|
||||
<l:template name="answer" text="R : %n"/>
|
||||
<l:template name="appendix" text="Annexe %n"/>
|
||||
<l:template name="bridgehead" text="Section %n"/>
|
||||
<l:template name="chapter" text="Chapitre %n"/>
|
||||
<l:template name="equation" text="Équation %n"/>
|
||||
<l:template name="example" text="Exemple %n"/>
|
||||
<l:template name="figure" text="Figure %n"/>
|
||||
<l:template name="part" text="Partie %n"/>
|
||||
<l:template name="procedure" text="Procédure %n"/>
|
||||
<l:template name="productionset" text="Production %n"/>
|
||||
<l:template name="qandadiv" text="Q & R %n"/>
|
||||
<l:template name="qandaentry" text="Q : %n"/>
|
||||
<l:template name="question" text="Q : %n"/>
|
||||
<l:template name="sect1" text="Section %n"/>
|
||||
<l:template name="sect2" text="Section %n"/>
|
||||
<l:template name="sect3" text="Section %n"/>
|
||||
<l:template name="sect4" text="Section %n"/>
|
||||
<l:template name="sect5" text="Section %n"/>
|
||||
<l:template name="section" text="Section %n"/>
|
||||
<l:template name="table" text="Tableau %n"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="xref-number-and-title">
|
||||
<l:template name="appendix" text="Annexe %n, %t"/>
|
||||
<l:template name="bridgehead" text="Section %n, « %t »"/>
|
||||
<l:template name="chapter" text="Chapitre %n, %t"/>
|
||||
<l:template name="equation" text="Équation %n, « %t »"/>
|
||||
<l:template name="example" text="Exemple %n, « %t »"/>
|
||||
<l:template name="figure" text="Figure %n, « %t »"/>
|
||||
<l:template name="part" text="Partie %n, « %t »"/>
|
||||
<l:template name="procedure" text="Procédure %n, « %t »"/>
|
||||
<l:template name="productionset" text="Production %n, « %t »"/>
|
||||
<l:template name="qandadiv" text="Q & R %n, « %t »"/>
|
||||
<l:template name="refsect1" text="la section intitulée « %t »"/>
|
||||
<l:template name="refsect2" text="la section intitulée « %t »"/>
|
||||
<l:template name="refsect3" text="la section intitulée « %t »"/>
|
||||
<l:template name="refsection" text="la section intitulée « %t »"/>
|
||||
<l:template name="sect1" text="Section %n, « %t »"/>
|
||||
<l:template name="sect2" text="Section %n, « %t »"/>
|
||||
<l:template name="sect3" text="Section %n, « %t »"/>
|
||||
<l:template name="sect4" text="Section %n, « %t »"/>
|
||||
<l:template name="sect5" text="Section %n, « %t »"/>
|
||||
<l:template name="section" text="Section %n, « %t »"/>
|
||||
<l:template name="simplesect" text="la section intitulée « %t »"/>
|
||||
<l:template name="table" text="Tableau %n, « %t »"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="authorgroup">
|
||||
<l:template name="sep" text=", "/>
|
||||
<l:template name="sep2" text=" et "/>
|
||||
<l:template name="seplast" text=", et "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="glossary">
|
||||
<l:template name="see" text="Voir "/>
|
||||
<l:template name="seealso" text="Voir aussi "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="msgset">
|
||||
<l:template name="MsgAud" text="Public visé: "/>
|
||||
<l:template name="MsgLevel" text="Niveau: "/>
|
||||
<l:template name="MsgOrig" text="Origine: "/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime">
|
||||
<l:template name="format" text="d/m/Y"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime-full">
|
||||
<l:template name="January" text="janvier"/>
|
||||
<l:template name="February" text="février"/>
|
||||
<l:template name="March" text="mars"/>
|
||||
<l:template name="April" text="avril"/>
|
||||
<l:template name="May" text="mai"/>
|
||||
<l:template name="June" text="juin"/>
|
||||
<l:template name="July" text="juillet"/>
|
||||
<l:template name="August" text="août"/>
|
||||
<l:template name="September" text="septembre"/>
|
||||
<l:template name="October" text="octobre"/>
|
||||
<l:template name="November" text="novembre"/>
|
||||
<l:template name="December" text="décembre"/>
|
||||
<l:template name="Monday" text="lundi"/>
|
||||
<l:template name="Tuesday" text="mardi"/>
|
||||
<l:template name="Wednesday" text="mercredi"/>
|
||||
<l:template name="Thursday" text="jeudi"/>
|
||||
<l:template name="Friday" text="vendredi"/>
|
||||
<l:template name="Saturday" text="samedi"/>
|
||||
<l:template name="Sunday" text="dimanche"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="datetime-abbrev">
|
||||
<l:template name="Jan" text="jan"/>
|
||||
<l:template name="Feb" text="fév"/>
|
||||
<l:template name="Mar" text="mar"/>
|
||||
<l:template name="Apr" text="avr"/>
|
||||
<l:template name="May" text="mai"/>
|
||||
<l:template name="Jun" text="jun"/>
|
||||
<l:template name="Jul" text="jui"/>
|
||||
<l:template name="Aug" text="aoû"/>
|
||||
<l:template name="Sep" text="sep"/>
|
||||
<l:template name="Oct" text="oct"/>
|
||||
<l:template name="Nov" text="nov"/>
|
||||
<l:template name="Dec" text="déc"/>
|
||||
<l:template name="Mon" text="lun"/>
|
||||
<l:template name="Tue" text="mar"/>
|
||||
<l:template name="Wed" text="mer"/>
|
||||
<l:template name="Thu" text="jeu"/>
|
||||
<l:template name="Fri" text="ven"/>
|
||||
<l:template name="Sat" text="sam"/>
|
||||
<l:template name="Sun" text="dim"/>
|
||||
</l:context>
|
||||
|
||||
<l:context name="htmlhelp">
|
||||
<l:template name="langcode" text="0x040c French (FRANCE)"/>
|
||||
</l:context>
|
||||
|
||||
<l:letters>
|
||||
<l:l i="-1"/>
|
||||
<l:l i="0">Symboles</l:l>
|
||||
<l:l i="1">A</l:l>
|
||||
<l:l i="1">a</l:l>
|
||||
<l:l i="1">à</l:l>
|
||||
<l:l i="1">À</l:l>
|
||||
<l:l i="1">â</l:l>
|
||||
<l:l i="1">Â</l:l>
|
||||
<l:l i="1">Æ</l:l>
|
||||
<l:l i="1">æ</l:l>
|
||||
<l:l i="2">B</l:l>
|
||||
<l:l i="2">b</l:l>
|
||||
<l:l i="3">C</l:l>
|
||||
<l:l i="3">c</l:l>
|
||||
<l:l i="3">ç</l:l>
|
||||
<l:l i="4">D</l:l>
|
||||
<l:l i="4">d</l:l>
|
||||
<l:l i="5">E</l:l>
|
||||
<l:l i="5">e</l:l>
|
||||
<l:l i="5">ê</l:l>
|
||||
<l:l i="5">Ê</l:l>
|
||||
<l:l i="5">é</l:l>
|
||||
<l:l i="5">É</l:l>
|
||||
<l:l i="5">è</l:l>
|
||||
<l:l i="5">È</l:l>
|
||||
<l:l i="5">ë</l:l>
|
||||
<l:l i="5">Ë</l:l>
|
||||
<l:l i="5">€</l:l>
|
||||
<l:l i="6">F</l:l>
|
||||
<l:l i="6">f</l:l>
|
||||
<l:l i="7">G</l:l>
|
||||
<l:l i="7">g</l:l>
|
||||
<l:l i="8">H</l:l>
|
||||
<l:l i="8">h</l:l>
|
||||
<l:l i="9">I</l:l>
|
||||
<l:l i="9">i</l:l>
|
||||
<l:l i="9">Î</l:l>
|
||||
<l:l i="9">î</l:l>
|
||||
<l:l i="9">Ï</l:l>
|
||||
<l:l i="9">ï</l:l>
|
||||
<l:l i="10">J</l:l>
|
||||
<l:l i="10">j</l:l>
|
||||
<l:l i="11">K</l:l>
|
||||
<l:l i="11">k</l:l>
|
||||
<l:l i="12">L</l:l>
|
||||
<l:l i="12">l</l:l>
|
||||
<l:l i="13">M</l:l>
|
||||
<l:l i="13">m</l:l>
|
||||
<l:l i="14">N</l:l>
|
||||
<l:l i="14">n</l:l>
|
||||
<l:l i="15">O</l:l>
|
||||
<l:l i="15">o</l:l>
|
||||
<l:l i="15">Ö</l:l>
|
||||
<l:l i="15">ö</l:l>
|
||||
<l:l i="15">Œ</l:l>
|
||||
<l:l i="15">œ</l:l>
|
||||
<l:l i="16">P</l:l>
|
||||
<l:l i="16">p</l:l>
|
||||
<l:l i="17">Q</l:l>
|
||||
<l:l i="17">q</l:l>
|
||||
<l:l i="18">R</l:l>
|
||||
<l:l i="18">r</l:l>
|
||||
<l:l i="19">S</l:l>
|
||||
<l:l i="19">s</l:l>
|
||||
<l:l i="20">T</l:l>
|
||||
<l:l i="20">t</l:l>
|
||||
<l:l i="21">U</l:l>
|
||||
<l:l i="21">u</l:l>
|
||||
<l:l i="21">Ù</l:l>
|
||||
<l:l i="21">ù</l:l>
|
||||
<l:l i="21">Û</l:l>
|
||||
<l:l i="21">û</l:l>
|
||||
<l:l i="21">Ü</l:l>
|
||||
<l:l i="21">ü</l:l>
|
||||
<l:l i="22">V</l:l>
|
||||
<l:l i="22">v</l:l>
|
||||
<l:l i="23">W</l:l>
|
||||
<l:l i="23">w</l:l>
|
||||
<l:l i="24">X</l:l>
|
||||
<l:l i="24">x</l:l>
|
||||
<l:l i="25">Y</l:l>
|
||||
<l:l i="25">y</l:l>
|
||||
<l:l i="26">Z</l:l>
|
||||
<l:l i="26">z</l:l>
|
||||
</l:letters>
|
||||
</l:l10n>
|
|
@ -0,0 +1,716 @@
|
|||
<?xml version='1.0'?>
|
||||
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||
xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
|
||||
exclude-result-prefixes="doc"
|
||||
version='1.0'>
|
||||
|
||||
<!-- ********************************************************************
|
||||
$Id$
|
||||
********************************************************************
|
||||
|
||||
This file is part of the XSL DocBook Stylesheet distribution.
|
||||
See ../README or http://nwalsh.com/docbook/xsl/ for copyright
|
||||
and other information.
|
||||
|
||||
******************************************************************** -->
|
||||
|
||||
<!-- ==================================================================== -->
|
||||
|
||||
|
||||
<xsl:template match="*" mode="object.title.template">
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'title'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="chapter" mode="object.title.template">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$chapter.autolabel != 0">
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'title-numbered'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'title-unnumbered'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="appendix" mode="object.title.template">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$appendix.autolabel != 0">
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'title-numbered'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'title-unnumbered'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="section|sect1|sect2|sect3|sect4|sect5|simplesect
|
||||
|bridgehead"
|
||||
mode="object.title.template">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$section.autolabel != 0">
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'title-numbered'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'title-unnumbered'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="procedure" mode="object.title.template">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$formal.procedures != 0">
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'title'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
<xsl:text>.formal</xsl:text>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'title'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<xsl:template match="*" mode="object.subtitle.template">
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'subtitle'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<xsl:template match="*" mode="is.autonumber">
|
||||
<xsl:value-of select="'0'"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="section|sect1|sect2|sect3|sect4|sect5"
|
||||
mode="is.autonumber">
|
||||
<xsl:value-of select="$section.autolabel"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="figure|example|table|equation" mode="is.autonumber">
|
||||
<xsl:value-of select="'1'"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="appendix" mode="is.autonumber">
|
||||
<xsl:value-of select="$appendix.autolabel"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="chapter" mode="is.autonumber">
|
||||
<xsl:value-of select="$chapter.autolabel"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="part" mode="is.autonumber">
|
||||
<xsl:value-of select="$part.autolabel"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="preface" mode="is.autonumber">
|
||||
<xsl:value-of select="$preface.autolabel"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="question|answer" mode="is.autonumber">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$qanda.defaultlabel = 'number'
|
||||
and not(label)">
|
||||
<xsl:value-of select="'1'"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="'0'"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="qandadiv" mode="is.autonumber">
|
||||
<xsl:value-of select="$qandadiv.autolabel"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="bridgehead" mode="is.autonumber">
|
||||
<xsl:value-of select="$section.autolabel"/>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="*" mode="object.xref.template">
|
||||
<xsl:param name="purpose"/>
|
||||
<xsl:param name="xrefstyle"/>
|
||||
<xsl:param name="referrer"/>
|
||||
|
||||
<!-- Is autonumbering on? -->
|
||||
<xsl:variable name="autonumber">
|
||||
<xsl:apply-templates select="." mode="is.autonumber"/>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="number-and-title-template">
|
||||
<xsl:call-template name="gentext.template.exists">
|
||||
<xsl:with-param name="context" select="'xref-number-and-title'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="number-template">
|
||||
<xsl:call-template name="gentext.template.exists">
|
||||
<xsl:with-param name="context" select="'xref-number'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
</xsl:call-template>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="context">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$autonumber != 0
|
||||
and $number-and-title-template != 0
|
||||
and $xref.with.number.and.title != 0">
|
||||
<xsl:value-of select="'xref-number-and-title'"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="$autonumber != 0
|
||||
and $number-template != 0">
|
||||
<xsl:value-of select="'xref-number'"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="'xref'"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="$context"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="referrer" select="$referrer"/>
|
||||
</xsl:call-template>
|
||||
|
||||
</xsl:template>
|
||||
|
||||
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<xsl:template match="*" mode="object.title.markup">
|
||||
<xsl:param name="allow-anchors" select="0"/>
|
||||
<xsl:variable name="template">
|
||||
<xsl:apply-templates select="." mode="object.title.template"/>
|
||||
</xsl:variable>
|
||||
|
||||
<!--
|
||||
<xsl:message>
|
||||
<xsl:text>object.title.markup: </xsl:text>
|
||||
<xsl:value-of select="local-name(.)"/>
|
||||
<xsl:text>: </xsl:text>
|
||||
<xsl:value-of select="$template"/>
|
||||
</xsl:message>
|
||||
-->
|
||||
|
||||
<xsl:call-template name="substitute-markup">
|
||||
<xsl:with-param name="allow-anchors" select="$allow-anchors"/>
|
||||
<xsl:with-param name="template" select="$template"/>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="*" mode="object.title.markup.textonly">
|
||||
<xsl:variable name="title">
|
||||
<xsl:apply-templates select="." mode="object.title.markup"/>
|
||||
</xsl:variable>
|
||||
<xsl:value-of select="$title"/>
|
||||
</xsl:template>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<xsl:template match="*" mode="object.titleabbrev.markup">
|
||||
<xsl:param name="allow-anchors" select="0"/>
|
||||
|
||||
<!-- Just for consistency in template naming -->
|
||||
|
||||
<xsl:apply-templates select="." mode="titleabbrev.markup">
|
||||
<xsl:with-param name="allow-anchors" select="$allow-anchors"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:template>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<xsl:template match="*" mode="object.subtitle.markup">
|
||||
<xsl:variable name="template">
|
||||
<xsl:apply-templates select="." mode="object.subtitle.template"/>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:call-template name="substitute-markup">
|
||||
<xsl:with-param name="template" select="$template"/>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<xsl:template match="*" mode="object.xref.markup">
|
||||
<xsl:param name="purpose"/>
|
||||
<xsl:param name="xrefstyle"/>
|
||||
<xsl:param name="referrer"/>
|
||||
|
||||
<xsl:variable name="template">
|
||||
<xsl:choose>
|
||||
<xsl:when test="starts-with(normalize-space($xrefstyle), 'select:')">
|
||||
<xsl:call-template name="make.gentext.template">
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="referrer" select="$referrer"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:when test="starts-with(normalize-space($xrefstyle), 'template:')">
|
||||
<xsl:value-of select="substring-after(normalize-space($xrefstyle), 'template:')"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates select="." mode="object.xref.template">
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="referrer" select="$referrer"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<!--
|
||||
<xsl:message>
|
||||
<xsl:text>object.xref.markup: </xsl:text>
|
||||
<xsl:value-of select="local-name(.)"/>
|
||||
<xsl:text>(</xsl:text>
|
||||
<xsl:value-of select="$xrefstyle"/>
|
||||
<xsl:text>, </xsl:text>
|
||||
<xsl:value-of select="$purpose"/>
|
||||
<xsl:text>)</xsl:text>
|
||||
<xsl:text>: [</xsl:text>
|
||||
<xsl:value-of select="$template"/>
|
||||
<xsl:text>]</xsl:text>
|
||||
</xsl:message>
|
||||
-->
|
||||
|
||||
<xsl:if test="$template = ''">
|
||||
<xsl:message>
|
||||
<xsl:text>object.xref.markup: empty xref template</xsl:text>
|
||||
<xsl:text> for linkend="</xsl:text>
|
||||
<xsl:value-of select="@id"/>
|
||||
<xsl:text>" and @xrefstyle="</xsl:text>
|
||||
<xsl:value-of select="$xrefstyle"/>
|
||||
<xsl:text>"</xsl:text>
|
||||
</xsl:message>
|
||||
</xsl:if>
|
||||
|
||||
<xsl:call-template name="substitute-markup">
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="referrer" select="$referrer"/>
|
||||
<xsl:with-param name="template" select="$template"/>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="listitem" mode="object.xref.markup">
|
||||
<xsl:choose>
|
||||
<xsl:when test="parent::orderedlist">
|
||||
<xsl:variable name="template">
|
||||
<xsl:apply-templates select="." mode="object.xref.template"/>
|
||||
</xsl:variable>
|
||||
<xsl:call-template name="substitute-markup">
|
||||
<xsl:with-param name="template" select="$template"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:message>
|
||||
<xsl:text>Xref is only supported to listitems in an</xsl:text>
|
||||
<xsl:text> orderedlist: </xsl:text>
|
||||
<xsl:value-of select="@id"/>
|
||||
</xsl:message>
|
||||
<xsl:text>???</xsl:text>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<xsl:template match="question" mode="object.xref.markup">
|
||||
<xsl:param name="purpose"/>
|
||||
<xsl:param name="xrefstyle"/>
|
||||
<xsl:param name="referrer"/>
|
||||
|
||||
<xsl:variable name="deflabel">
|
||||
<xsl:choose>
|
||||
<xsl:when test="ancestor-or-self::*[@defaultlabel]">
|
||||
<xsl:value-of select="(ancestor-or-self::*[@defaultlabel])[last()]
|
||||
/@defaultlabel"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$qanda.defaultlabel"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="template">
|
||||
<xsl:choose>
|
||||
<!-- This avoids double Q: Q: in xref when defaultlabel=qanda -->
|
||||
<xsl:when test="$deflabel = 'qanda' and not(label)">%n</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates select="." mode="object.xref.template">
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="referrer" select="$referrer"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:call-template name="substitute-markup">
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="referrer" select="$referrer"/>
|
||||
<xsl:with-param name="template" select="$template"/>
|
||||
</xsl:call-template>
|
||||
</xsl:template>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<xsl:template name="substitute-markup">
|
||||
<xsl:param name="template" select="''"/>
|
||||
<xsl:param name="allow-anchors" select="'0'"/>
|
||||
<xsl:param name="title" select="''"/>
|
||||
<xsl:param name="subtitle" select="''"/>
|
||||
<xsl:param name="label" select="''"/>
|
||||
<xsl:param name="pagenumber" select="''"/>
|
||||
<xsl:param name="purpose"/>
|
||||
<xsl:param name="xrefstyle"/>
|
||||
<xsl:param name="referrer"/>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="contains($template, '%')">
|
||||
<xsl:value-of select="substring-before($template, '%')"/>
|
||||
<xsl:variable name="candidate"
|
||||
select="substring(substring-after($template, '%'), 1, 1)"/>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$candidate = 't'">
|
||||
<xsl:apply-templates select="." mode="insert.title.markup">
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="title">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$title != ''">
|
||||
<xsl:copy-of select="$title"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates select="." mode="title.markup">
|
||||
<xsl:with-param name="allow-anchors" select="$allow-anchors"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:with-param>
|
||||
</xsl:apply-templates>
|
||||
</xsl:when>
|
||||
<xsl:when test="$candidate = 's'">
|
||||
<xsl:apply-templates select="." mode="insert.subtitle.markup">
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="subtitle">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$subtitle != ''">
|
||||
<xsl:copy-of select="$subtitle"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates select="." mode="subtitle.markup">
|
||||
<xsl:with-param name="allow-anchors" select="$allow-anchors"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:with-param>
|
||||
</xsl:apply-templates>
|
||||
</xsl:when>
|
||||
<xsl:when test="$candidate = 'n'">
|
||||
<xsl:apply-templates select="." mode="insert.label.markup">
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="label">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$label != ''">
|
||||
<xsl:copy-of select="$label"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates select="." mode="label.markup"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:with-param>
|
||||
</xsl:apply-templates>
|
||||
</xsl:when>
|
||||
<xsl:when test="$candidate = 'p'">
|
||||
<xsl:apply-templates select="." mode="insert.pagenumber.markup">
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="pagenumber">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$pagenumber != ''">
|
||||
<xsl:copy-of select="$pagenumber"/>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:apply-templates select="." mode="pagenumber.markup"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:with-param>
|
||||
</xsl:apply-templates>
|
||||
</xsl:when>
|
||||
<xsl:when test="$candidate = 'd'">
|
||||
<xsl:apply-templates select="." mode="insert.direction.markup">
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="direction">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$referrer">
|
||||
<xsl:variable name="referent-is-below">
|
||||
<xsl:for-each select="preceding::xref">
|
||||
<xsl:if test="generate-id(.) = generate-id($referrer)">1</xsl:if>
|
||||
</xsl:for-each>
|
||||
</xsl:variable>
|
||||
<xsl:choose>
|
||||
<xsl:when test="$referent-is-below = ''">
|
||||
<xsl:call-template name="gentext">
|
||||
<xsl:with-param name="key" select="'above'"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:call-template name="gentext">
|
||||
<xsl:with-param name="key" select="'below'"/>
|
||||
</xsl:call-template>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:message>Attempt to use %d in gentext with no referrer!</xsl:message>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:with-param>
|
||||
</xsl:apply-templates>
|
||||
</xsl:when>
|
||||
<xsl:when test="$candidate = '%' ">
|
||||
<xsl:text>%</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:text>%</xsl:text><xsl:value-of select="$candidate"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
<!-- recurse with the rest of the template string -->
|
||||
<xsl:variable name="rest"
|
||||
select="substring($template,
|
||||
string-length(substring-before($template, '%'))+3)"/>
|
||||
<xsl:call-template name="substitute-markup">
|
||||
<xsl:with-param name="template" select="$rest"/>
|
||||
<xsl:with-param name="allow-anchors" select="$allow-anchors"/>
|
||||
<xsl:with-param name="title" select="$title"/>
|
||||
<xsl:with-param name="subtitle" select="$subtitle"/>
|
||||
<xsl:with-param name="label" select="$label"/>
|
||||
<xsl:with-param name="pagenumber" select="$pagenumber"/>
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="referrer" select="$referrer"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:otherwise>
|
||||
<xsl:value-of select="$template"/>
|
||||
</xsl:otherwise>
|
||||
</xsl:choose>
|
||||
</xsl:template>
|
||||
|
||||
<!-- ============================================================ -->
|
||||
|
||||
<xsl:template name="make.gentext.template">
|
||||
<xsl:param name="xrefstyle" select="''"/>
|
||||
<xsl:param name="purpose"/>
|
||||
<xsl:param name="referrer"/>
|
||||
<xsl:param name="lang">
|
||||
<xsl:call-template name="l10n.language"/>
|
||||
</xsl:param>
|
||||
|
||||
<!-- parse xrefstyle to get parts -->
|
||||
<xsl:variable name="parts"
|
||||
select="substring-after(normalize-space($xrefstyle), 'select:')"/>
|
||||
|
||||
<xsl:variable name="labeltype">
|
||||
<xsl:choose>
|
||||
<xsl:when test="contains($parts, 'labelnumber')">
|
||||
<xsl:text>labelnumber</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="contains($parts, 'labelname')">
|
||||
<xsl:text>labelname</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="contains($parts, 'label')">
|
||||
<xsl:text>label</xsl:text>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="titletype">
|
||||
<xsl:choose>
|
||||
<xsl:when test="contains($parts, 'quotedtitle')">
|
||||
<xsl:text>quotedtitle</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="contains($parts, 'title')">
|
||||
<xsl:text>title</xsl:text>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:variable name="pagetype">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$insert.xref.page.number = 'no'">
|
||||
<!-- suppress page numbers -->
|
||||
</xsl:when>
|
||||
<xsl:when test="contains($parts, 'nopage')">
|
||||
<xsl:text>nopage</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="contains($parts, 'pagenumber')">
|
||||
<xsl:text>pagenumber</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="contains($parts, 'pageabbrev')">
|
||||
<xsl:text>pageabbrev</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="contains($parts, 'Page')">
|
||||
<xsl:text>Page</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="contains($parts, 'page')">
|
||||
<xsl:text>page</xsl:text>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:variable>
|
||||
|
||||
<xsl:if test="$labeltype != ''">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$labeltype = 'labelname'">
|
||||
<xsl:call-template name="gentext"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="$labeltype = 'labelnumber'">
|
||||
<xsl:text>%n</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="$labeltype = 'label'">
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'xref-number'"/>
|
||||
<xsl:with-param name="name">
|
||||
<xsl:call-template name="xpath.location"/>
|
||||
</xsl:with-param>
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="referrer" select="$referrer"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="$titletype != ''">
|
||||
<xsl:value-of select="$xref.label-title.separator"/>
|
||||
</xsl:when>
|
||||
<xsl:when test="$pagetype != ''">
|
||||
<xsl:value-of select="$xref.label-page.separator"/>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:if>
|
||||
|
||||
<xsl:if test="$titletype != ''">
|
||||
<xsl:choose>
|
||||
<xsl:when test="$titletype = 'title'">
|
||||
<xsl:text>%t</xsl:text>
|
||||
</xsl:when>
|
||||
<xsl:when test="$titletype = 'quotedtitle'">
|
||||
<xsl:call-template name="gentext.dingbat">
|
||||
<xsl:with-param name="dingbat" select="'startquote'"/>
|
||||
</xsl:call-template>
|
||||
<xsl:text>%t</xsl:text>
|
||||
<xsl:call-template name="gentext.dingbat">
|
||||
<xsl:with-param name="dingbat" select="'endquote'"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
|
||||
<xsl:choose>
|
||||
<xsl:when test="$pagetype != '' and $pagetype != 'nopage'">
|
||||
<xsl:value-of select="$xref.title-page.separator"/>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
</xsl:if>
|
||||
|
||||
<xsl:if test="$pagetype != ''">
|
||||
<xsl:choose>
|
||||
<!-- special case: use regular xref template -->
|
||||
<xsl:when test="$pagetype = 'nopage'
|
||||
and $labeltype = ''
|
||||
and $titletype = ''">
|
||||
<xsl:apply-templates select="." mode="object.xref.template">
|
||||
<xsl:with-param name="purpose" select="$purpose"/>
|
||||
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||
<xsl:with-param name="referrer" select="$referrer"/>
|
||||
</xsl:apply-templates>
|
||||
</xsl:when>
|
||||
<xsl:when test="$pagetype = 'page'">
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'xref'"/>
|
||||
<xsl:with-param name="name" select="'page'"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:when test="$pagetype = 'Page'">
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'xref'"/>
|
||||
<xsl:with-param name="name" select="'Page'"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:when test="$pagetype = 'pageabbrev'">
|
||||
<xsl:call-template name="gentext.template">
|
||||
<xsl:with-param name="context" select="'xref'"/>
|
||||
<xsl:with-param name="name" select="'pageabbrev'"/>
|
||||
</xsl:call-template>
|
||||
</xsl:when>
|
||||
<xsl:when test="$pagetype = 'pagenumber'">
|
||||
<xsl:text>%p</xsl:text>
|
||||
</xsl:when>
|
||||
</xsl:choose>
|
||||
|
||||
</xsl:if>
|
||||
|
||||
</xsl:template>
|
||||
|
||||
</xsl:stylesheet>
|