Initial import of the Hibernate3 module

git-svn-id: https://svn.jboss.org/repos/hibernate/trunk/Hibernate3/doc@3890 1b8cb986-b30d-0410-93ca-fae66ebed9b2
This commit is contained in:
Steve Ebersole 2004-06-03 16:31:32 +00:00
commit f02ab0c58e
635 changed files with 164661 additions and 0 deletions

117
api/jdstyle.css Normal file
View File

@ -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;
}

39
api/package.html Normal file
View File

@ -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>

File diff suppressed because one or more lines are too long

9
reference/README Normal file
View File

@ -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

146
reference/build.xml Normal file
View File

@ -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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

View File

@ -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

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

View File

@ -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

168
reference/en/master.xml Normal file
View File

@ -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>

View File

@ -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>

File diff suppressed because it is too large Load Diff

View File

@ -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>&lt;component&gt;</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>

File diff suppressed because it is too large Load Diff

View File

@ -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>&lt;component&gt;</literal> element allows a <literal>&lt;parent&gt;</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>&lt;element&gt;</literal> tag with a
<literal>&lt;composite-element&gt;</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>&lt;nested-composite-element&gt;</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>&lt;set&gt;</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>&lt;list&gt;</literal>, <literal>&lt;map&gt;</literal>,
<literal>&lt;bag&gt;</literal> or <literal>&lt;idbag&gt;</literal>.
</para>
<para>
A special case of a composite element is a composite element with a nested
<literal>&lt;many-to-one&gt;</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>&lt;composite-index&gt;</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>&lt;version&gt;</literal> (or
<literal>&lt;timestamp&gt;</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>&lt;composite-id&gt;</literal> tag (same attributes and
elements as <literal>&lt;component&gt;</literal>) in place of
<literal>&lt;id&gt;</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>&lt;column&gt;</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>&lt;one-to-many&gt;</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>&lt;dynamic-component&gt;</literal> mapping are identical
to <literal>&lt;component&gt;</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>

File diff suppressed because it is too large Load Diff

View File

@ -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>

View File

@ -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>&lt;one-to-many&gt;</literal> association from <literal>Parent</literal>
to <literal>Child</literal>. (The alternative approach is to declare the <literal>Child</literal> as a
<literal>&lt;composite-element&gt;</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>&lt;one-to-many&gt;</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>&lt;version&gt;</literal> or <literal>&lt;timestamp&gt;</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>&lt;composite-element&gt;</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>&lt;idbag&gt;</literal> mapping.)
</para>
</sect1>
</chapter>

View File

@ -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>

View File

@ -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>&lt;subclass&gt;</literal> mappings and
<literal>&lt;joined-subclass&gt;</literal> mappings inside the same
<literal>&lt;class&gt;</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>&lt;many-to-one&gt;</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>&lt;any&gt;</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>&lt;class&gt;</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>&lt;many-to-one&gt;</literal></entry>
<entry><literal>&lt;one-to-one&gt;</literal></entry>
<entry><literal>&lt;one-to-many&gt;</literal></entry>
<entry><literal>&lt;many-to-many&gt;</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>&lt;many-to-one&gt;</literal></entry>
<entry><literal>&lt;one-to-one&gt;</literal></entry>
<entry><literal>&lt;one-to-many&gt;</literal></entry>
<entry><literal>&lt;many-to-many&gt;</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>&lt;any&gt;</literal></entry>
<entry><emphasis>not supported</emphasis></entry>
<entry><emphasis>not supported</emphasis></entry>
<entry><literal>&lt;many-to-any&gt;</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>

File diff suppressed because it is too large Load Diff

View File

@ -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>&lt;key&gt;</literal> and <literal>&lt;index&gt;</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>&lt;key&gt;</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>&lt;set&gt;</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>&lt;idbag&gt;</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>&lt;cache&gt;</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>&lt;class-cache&gt;</literal> and
<literal>&lt;collection-cache&gt;</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>

View File

@ -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>

View File

@ -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>

View File

@ -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>&lt;any&gt;</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>=, &gt;=, &lt;=, &lt;&gt;, !=, 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 &amp; 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>

View File

@ -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>

View File

@ -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 &amp; 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>

File diff suppressed because it is too large Load Diff

View File

@ -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>

View File

@ -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>

View File

@ -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;
}

View File

@ -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>

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -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 ................................. -->
<!-- ...................................................................... -->

View File

@ -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>

View File

@ -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 ..................... -->
<!-- ...................................................................... -->

View File

@ -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 ...................... -->
<!-- ...................................................................... -->

File diff suppressed because it is too large Load Diff

View File

@ -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 ................................. -->
<!-- ...................................................................... -->

File diff suppressed because it is too large Load Diff

View File

@ -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 ............................. --
-- ...................................................................... --

View File

@ -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 "&#x20AC;"><!-- 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 .......................................... -->
<!-- ...................................................................... -->

View File

@ -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 "&#x21B6;"> <!-- ANTICLOCKWISE TOP SEMICIRCLE ARROW -->
<!ENTITY curarr "&#x21B7;"> <!-- CLOCKWISE TOP SEMICIRCLE ARROW -->
<!ENTITY dArr "&#x21D3;"> <!-- DOWNWARDS DOUBLE ARROW -->
<!ENTITY darr2 "&#x21CA;"> <!-- DOWNWARDS PAIRED ARROWS -->
<!ENTITY dharl "&#x21C3;"> <!-- DOWNWARDS HARPOON WITH BARB LEFTWARDS -->
<!ENTITY dharr "&#x21C2;"> <!-- DOWNWARDS HARPOON WITH BARB RIGHTWARDS -->
<!ENTITY lAarr "&#x21DA;"> <!-- LEFTWARDS TRIPLE ARROW -->
<!ENTITY Larr "&#x219E;"> <!-- LEFTWARDS TWO HEADED ARROW -->
<!ENTITY larr2 "&#x21C7;"> <!-- LEFTWARDS PAIRED ARROWS -->
<!ENTITY larrhk "&#x21A9;"> <!-- LEFTWARDS ARROW WITH HOOK -->
<!ENTITY larrlp "&#x21AB;"> <!-- LEFTWARDS ARROW WITH LOOP -->
<!ENTITY larrtl "&#x21A2;"> <!-- LEFTWARDS ARROW WITH TAIL -->
<!ENTITY lhard "&#x21BD;"> <!-- LEFTWARDS HARPOON WITH BARB DOWNWARDS -->
<!ENTITY lharu "&#x21BC;"> <!-- LEFTWARDS HARPOON WITH BARB UPWARDS -->
<!ENTITY hArr "&#x21D4;"> <!-- -->
<!ENTITY harr "&#x2194;"> <!-- LEFT RIGHT ARROW -->
<!ENTITY lrarr2 "&#x21C6;"> <!-- LEFTWARDS ARROW OVER RIGHTWARDS ARROW -->
<!ENTITY rlarr2 "&#x21C4;"> <!-- RIGHTWARDS ARROW OVER LEFTWARDS ARROW -->
<!ENTITY harrw "&#x21AD;"> <!-- LEFT RIGHT WAVE ARROW -->
<!ENTITY rlhar2 "&#x21CC;"> <!-- RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON -->
<!ENTITY lrhar2 "&#x21CB;"> <!-- LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON -->
<!ENTITY lsh "&#x21B0;"> <!-- UPWARDS ARROW WITH TIP LEFTWARDS -->
<!ENTITY map "&#x21A6;"> <!-- RIGHTWARDS ARROW FROM BAR -->
<!ENTITY mumap "&#x22B8;"> <!-- MULTIMAP -->
<!ENTITY nearr "&#x2197;"> <!-- NORTH EAST ARROW -->
<!ENTITY nlArr "&#x21CD;"> <!-- LEFTWARDS DOUBLE ARROW WITH STROKE -->
<!ENTITY nlarr "&#x219A;"> <!-- LEFTWARDS ARROW WITH STROKE -->
<!ENTITY nhArr "&#x21CE;"> <!-- LEFT RIGHT DOUBLE ARROW WITH STROKE -->
<!ENTITY nharr "&#x21AE;"> <!-- LEFT RIGHT ARROW WITH STROKE -->
<!ENTITY nrarr "&#x219B;"> <!-- RIGHTWARDS ARROW WITH STROKE -->
<!ENTITY nrArr "&#x21CF;"> <!-- RIGHTWARDS DOUBLE ARROW WITH STROKE -->
<!ENTITY nwarr "&#x2196;"> <!-- NORTH WEST ARROW -->
<!ENTITY olarr "&#x21BA;"> <!-- ANTICLOCKWISE OPEN CIRCLE ARROW -->
<!ENTITY orarr "&#x21BB;"> <!-- CLOCKWISE OPEN CIRCLE ARROW -->
<!ENTITY rAarr "&#x21DB;"> <!-- RIGHTWARDS TRIPLE ARROW -->
<!ENTITY Rarr "&#x21A0;"> <!-- RIGHTWARDS TWO HEADED ARROW -->
<!ENTITY rarr2 "&#x21C9;"> <!-- RIGHTWARDS PAIRED ARROWS -->
<!ENTITY rarrhk "&#x21AA;"> <!-- RIGHTWARDS ARROW WITH HOOK -->
<!ENTITY rarrlp "&#x21AC;"> <!-- RIGHTWARDS ARROW WITH LOOP -->
<!ENTITY rarrtl "&#x21A3;"> <!-- RIGHTWARDS ARROW WITH TAIL -->
<!ENTITY rarrw "&#x219D;"> <!-- RIGHTWARDS SQUIGGLE ARROW -->
<!ENTITY rhard "&#x21C1;"> <!-- RIGHTWARDS HARPOON WITH BARB DOWNWARDS -->
<!ENTITY rharu "&#x21C0;"> <!-- RIGHTWARDS HARPOON WITH BARB UPWARDS -->
<!ENTITY rsh "&#x21B1;"> <!-- UPWARDS ARROW WITH TIP RIGHTWARDS -->
<!ENTITY drarr "&#x2198;"> <!-- SOUTH EAST ARROW -->
<!ENTITY dlarr "&#x2199;"> <!-- SOUTH WEST ARROW -->
<!ENTITY uArr "&#x21D1;"> <!-- UPWARDS DOUBLE ARROW -->
<!ENTITY uarr2 "&#x21C8;"> <!-- UPWARDS PAIRED ARROWS -->
<!ENTITY vArr "&#x21D5;"> <!-- UP DOWN DOUBLE ARROW -->
<!ENTITY varr "&#x2195;"> <!-- UP DOWN ARROW -->
<!ENTITY uharl "&#x21BF;"> <!-- UPWARDS HARPOON WITH BARB LEFTWARDS -->
<!ENTITY uharr "&#x21BE;"> <!-- UPWARDS HARPOON WITH BARB RIGHTWARDS -->
<!ENTITY xlArr "&#x21D0;"> <!-- LEFTWARDS DOUBLE ARROW -->
<!ENTITY xhArr "&#x2194;"> <!-- LEFT RIGHT ARROW -->
<!ENTITY xharr "&#x2194;"> <!-- LEFT RIGHT ARROW -->
<!ENTITY xrArr "&#x21D2;"> <!-- RIGHTWARDS DOUBLE ARROW -->

View File

@ -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 "&#x2210;"> <!-- N-ARY COPRODUCT -->
<!ENTITY Barwed "&#x2306;"> <!-- PERSPECTIVE -->
<!ENTITY barwed "&#x22BC;"> <!-- NAND -->
<!ENTITY Cap "&#x22D2;"> <!-- DOUBLE INTERSECTION -->
<!ENTITY Cup "&#x22D3;"> <!-- DOUBLE UNION -->
<!ENTITY cuvee "&#x22CE;"> <!-- CURLY LOGICAL OR -->
<!ENTITY cuwed "&#x22CF;"> <!-- CURLY LOGICAL AND -->
<!ENTITY diam "&#x22C4;"> <!-- DIAMOND OPERATOR -->
<!ENTITY divonx "&#x22C7;"> <!-- DIVISION TIMES -->
<!ENTITY intcal "&#x22BA;"> <!-- INTERCALATE -->
<!ENTITY lthree "&#x22CB;"> <!-- LEFT SEMIDIRECT PRODUCT -->
<!ENTITY ltimes "&#x22C9;"> <!-- LEFT NORMAL FACTOR SEMIDIRECT PRODUCT -->
<!ENTITY minusb "&#x229F;"> <!-- SQUARED MINUS -->
<!ENTITY oast "&#x229B;"> <!-- CIRCLED ASTERISK OPERATOR -->
<!ENTITY ocir "&#x229A;"> <!-- CIRCLED RING OPERATOR -->
<!ENTITY odash "&#x229D;"> <!-- CIRCLED DASH -->
<!ENTITY odot "&#x2299;"> <!-- CIRCLED DOT OPERATOR -->
<!ENTITY ominus "&#x2296;"> <!-- CIRCLED MINUS -->
<!ENTITY oplus "&#x2295;"> <!-- CIRCLED PLUS -->
<!ENTITY osol "&#x2298;"> <!-- CIRCLED DIVISION SLASH -->
<!ENTITY otimes "&#x2297;"> <!-- CIRCLED TIMES -->
<!ENTITY plusb "&#x229E;"> <!-- SQUARED PLUS -->
<!ENTITY plusdo "&#x2214;"> <!-- DOT PLUS -->
<!ENTITY rthree "&#x22CC;"> <!-- RIGHT SEMIDIRECT PRODUCT -->
<!ENTITY rtimes "&#x22CA;"> <!-- RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT -->
<!ENTITY sdot "&#x22C5;"> <!-- DOT OPERATOR -->
<!ENTITY sdotb "&#x22A1;"> <!-- SQUARED DOT OPERATOR -->
<!ENTITY setmn "&#x2216;"> <!-- SET MINUS -->
<!ENTITY sqcap "&#x2293;"> <!-- SQUARE CAP -->
<!ENTITY sqcup "&#x2294;"> <!-- SQUARE CUP -->
<!ENTITY ssetmn "&#x2216;"> <!-- SET MINUS -->
<!ENTITY sstarf "&#x22C6;"> <!-- STAR OPERATOR -->
<!ENTITY timesb "&#x22A0;"> <!-- SQUARED TIMES -->
<!ENTITY top "&#x22A4;"> <!-- DOWN TACK -->
<!ENTITY uplus "&#x228E;"> <!-- MULTISET UNION -->
<!ENTITY wreath "&#x2240;"> <!-- WREATH PRODUCT -->
<!ENTITY xcirc "&#x25CB;"> <!-- WHITE CIRCLE -->
<!ENTITY xdtri "&#x25BD;"> <!-- WHITE DOWN-POINTING TRIANGLE -->
<!ENTITY xutri "&#x25B3;"> <!-- WHITE UP-POINTING TRIANGLE -->
<!ENTITY coprod "&#x2210;"> <!-- N-ARY COPRODUCT -->
<!ENTITY prod "&#x220F;"> <!-- N-ARY PRODUCT -->
<!ENTITY sum "&#x2211;"> <!-- N-ARY SUMMATION -->

View File

@ -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 "&#x2309;"> <!-- RIGHT CEILING -->
<!ENTITY rfloor "&#x230B;"> <!-- RIGHT FLOOR -->
<!ENTITY rpargt "&#xE291;"> <!-- -->
<!ENTITY urcorn "&#x231D;"> <!-- TOP RIGHT CORNER -->
<!ENTITY drcorn "&#x231F;"> <!-- BOTTOM RIGHT CORNER -->
<!ENTITY lceil "&#x2308;"> <!-- LEFT CEILING -->
<!ENTITY lfloor "&#x230A;"> <!-- LEFT FLOOR -->
<!-- lpargt Unknown unicode character -->
<!ENTITY ulcorn "&#x231C;"> <!-- TOP LEFT CORNER -->
<!ENTITY dlcorn "&#x231E;"> <!-- BOTTOM LEFT CORNER -->

View File

@ -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 "&#xE411;"> <!-- -->
<!ENTITY gne "&#x2269;"> <!-- -->
<!ENTITY gnE "&#x2269;"> <!-- -->
<!ENTITY gnsim "&#x22E7;"> <!-- GREATER-THAN BUT NOT EQUIVALENT TO -->
<!ENTITY gvnE "&#x2269;"> <!-- GREATER-THAN BUT NOT EQUAL TO -->
<!ENTITY lnap "&#xE2A2;"> <!-- -->
<!ENTITY lnE "&#x2268;"> <!-- -->
<!ENTITY lne "&#x2268;"> <!-- -->
<!ENTITY lnsim "&#x22E6;"> <!-- -->
<!ENTITY lvnE "&#x2268;"> <!-- LESS-THAN BUT NOT EQUAL TO -->
<!ENTITY nap "&#x2249;"> <!-- NOT ALMOST EQUAL TO -->
<!ENTITY ncong "&#x2247;"> <!-- NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO -->
<!ENTITY nequiv "&#x2262;"> <!-- NOT IDENTICAL TO -->
<!ENTITY ngE "&#x2271;"> <!-- -->
<!ENTITY nge "&#x2271;"> <!-- NEITHER GREATER-THAN NOR EQUAL TO -->
<!ENTITY nges "&#x2271;"> <!-- -->
<!ENTITY ngt "&#x226F;"> <!-- NOT GREATER-THAN -->
<!ENTITY nle "&#x2270;"> <!-- NEITHER LESS-THAN NOR EQUAL TO -->
<!ENTITY nlE "&#x2270;"> <!-- -->
<!ENTITY nles "&#x2270;"> <!-- -->
<!ENTITY nlt "&#x226E;"> <!-- NOT LESS-THAN -->
<!ENTITY nltri "&#x22EA;"> <!-- NOT NORMAL SUBGROUP OF -->
<!ENTITY nltrie "&#x22EC;"> <!-- NOT NORMAL SUBGROUP OF OR EQUAL TO -->
<!ENTITY nmid "&#x2224;"> <!-- DOES NOT DIVIDE -->
<!ENTITY npar "&#x2226;"> <!-- NOT PARALLEL TO -->
<!ENTITY npr "&#x2280;"> <!-- DOES NOT PRECEDE -->
<!ENTITY npre "&#x22E0;"> <!-- DOES NOT PRECEDE OR EQUAL -->
<!ENTITY nrtri "&#x22EB;"> <!-- DOES NOT CONTAIN AS NORMAL SUBGROUP -->
<!ENTITY nrtrie "&#x22ED;"> <!-- DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL -->
<!ENTITY nsc "&#x2281;"> <!-- DOES NOT SUCCEED -->
<!ENTITY nsce "&#x22E1;"> <!-- DOES NOT SUCCEED OR EQUAL -->
<!ENTITY nsim "&#x2241;"> <!-- -->
<!ENTITY nsime "&#x2244;"> <!-- -->
<!ENTITY nsmid "&#xE2AA;"> <!-- -->
<!ENTITY nspar "&#x2226;"> <!-- NOT PARALLEL TO -->
<!ENTITY nsub "&#x2284;"> <!-- NOT A SUBSET OF -->
<!ENTITY nsube "&#x2288;"> <!-- -->
<!ENTITY nsubE "&#x2288;"> <!-- -->
<!ENTITY nsup "&#x2285;"> <!-- NOT A SUPERSET OF -->
<!ENTITY nsupE "&#x2289;"> <!-- -->
<!ENTITY nsupe "&#x2289;"> <!-- -->
<!ENTITY nvdash "&#x22AC;"> <!-- DOES NOT PROVE -->
<!ENTITY nvDash "&#x22AD;"> <!-- NOT TRUE -->
<!ENTITY nVDash "&#x22AF;"> <!-- NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE -->
<!ENTITY nVdash "&#x22AE;"> <!-- DOES NOT FORCE -->
<!ENTITY prnap "&#x22E8;"> <!-- -->
<!ENTITY prnE "&#xE2B3;"> <!-- -->
<!ENTITY prnsim "&#x22E8;"> <!-- -->
<!ENTITY scnap "&#x22E9;"> <!-- -->
<!ENTITY scnE "&#xE2B5;"> <!-- -->
<!ENTITY scnsim "&#x22E9;"> <!-- -->
<!ENTITY subne "&#x228A;"> <!-- -->
<!ENTITY subnE "&#x228A;"> <!-- SUBSET OF WITH NOT EQUAL TO -->
<!ENTITY supne "&#x228B;"> <!-- -->
<!ENTITY supnE "&#x228B;"> <!-- -->
<!ENTITY vsubnE "&#xE2B8;"> <!-- -->
<!ENTITY vsubne "&#x228A;"> <!-- SUBSET OF WITH NOT EQUAL TO -->
<!ENTITY vsupne "&#x228B;"> <!-- SUPERSET OF WITH NOT EQUAL TO -->
<!ENTITY vsupnE "&#x228B;"> <!-- SUPERSET OF WITH NOT EQUAL TO -->

View File

@ -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 "&#x2220;"> <!-- ANGLE -->
<!ENTITY angmsd "&#x2221;"> <!-- MEASURED ANGLE -->
<!ENTITY beth "&#x2136;"> <!-- BET SYMBOL -->
<!ENTITY bprime "&#x2035;"> <!-- REVERSED PRIME -->
<!ENTITY comp "&#x2201;"> <!-- COMPLEMENT -->
<!ENTITY daleth "&#x2138;"> <!-- DALET SYMBOL -->
<!ENTITY ell "&#x2113;"> <!-- SCRIPT SMALL L -->
<!ENTITY empty "&#x2205;"> <!-- -->
<!ENTITY gimel "&#x2137;"> <!-- GIMEL SYMBOL -->
<!ENTITY image "&#x2111;"> <!-- BLACK-LETTER CAPITAL I -->
<!ENTITY inodot "&#x0131;"> <!-- LATIN SMALL LETTER DOTLESS I -->
<!-- jnodot Unknown unicode character -->
<!ENTITY nexist "&#x2204;"> <!-- THERE DOES NOT EXIST -->
<!ENTITY oS "&#x24C8;"> <!-- CIRCLED LATIN CAPITAL LETTER S -->
<!ENTITY planck "&#x210F;"> <!-- PLANCK CONSTANT OVER TWO PI -->
<!ENTITY real "&#x211C;"> <!-- BLACK-LETTER CAPITAL R -->
<!ENTITY sbsol "&#xFE68;"> <!-- SMALL REVERSE SOLIDUS -->
<!ENTITY vprime "&#x2032;"> <!-- PRIME -->
<!ENTITY weierp "&#x2118;"> <!-- SCRIPT CAPITAL P -->

View File

@ -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 "&#x224A;"> <!-- -->
<!ENTITY asymp "&#x224D;"> <!-- EQUIVALENT TO -->
<!ENTITY bcong "&#x224C;"> <!-- ALL EQUAL TO -->
<!ENTITY bepsi "&#x220D;"> <!-- SMALL CONTAINS AS MEMBER -->
<!ENTITY bowtie "&#x22C8;"> <!-- -->
<!ENTITY bsim "&#x223D;"> <!-- -->
<!ENTITY bsime "&#x22CD;"> <!-- -->
<!ENTITY bump "&#x224E;"> <!-- -->
<!ENTITY bumpe "&#x224F;"> <!-- -->
<!ENTITY cire "&#x2257;"> <!-- -->
<!ENTITY colone "&#x2254;"> <!-- -->
<!ENTITY cuepr "&#x22DE;"> <!-- -->
<!ENTITY cuesc "&#x22DF;"> <!-- -->
<!ENTITY cupre "&#x227C;"> <!-- -->
<!ENTITY dashv "&#x22A3;"> <!-- -->
<!ENTITY ecir "&#x2256;"> <!-- -->
<!ENTITY ecolon "&#x2255;"> <!-- -->
<!ENTITY eDot "&#x2251;"> <!-- -->
<!ENTITY esdot "&#x2250;"> <!-- -->
<!ENTITY efDot "&#x2252;"> <!-- -->
<!ENTITY egs "&#x22DD;"> <!-- -->
<!ENTITY els "&#x22DC;"> <!-- -->
<!ENTITY erDot "&#x2253;"> <!-- -->
<!ENTITY fork "&#x22D4;"> <!-- -->
<!ENTITY frown "&#x2322;"> <!-- -->
<!ENTITY gap "&#x2273;"> <!-- GREATER-THAN OR EQUIVALENT TO -->
<!ENTITY gsdot "&#x22D7;"> <!-- -->
<!ENTITY gE "&#x2267;"> <!-- -->
<!ENTITY gel "&#x22DB;"> <!-- -->
<!ENTITY gEl "&#x22DB;"> <!-- -->
<!ENTITY ges "&#x2265;"> <!-- GREATER-THAN OR EQUAL TO -->
<!ENTITY Gg "&#x22D9;"> <!-- VERY MUCH GREATER-THAN -->
<!ENTITY gl "&#x2277;"> <!-- -->
<!ENTITY gsim "&#x2273;"> <!-- GREATER-THAN OR EQUIVALENT TO -->
<!ENTITY Gt "&#x226B;"> <!-- MUCH GREATER-THAN -->
<!ENTITY lap "&#x2272;"> <!-- LESS-THAN OR EQUIVALENT TO -->
<!ENTITY ldot "&#x22D6;"> <!-- -->
<!ENTITY lE "&#x2266;"> <!-- -->
<!ENTITY lEg "&#x22DA;"> <!-- -->
<!ENTITY leg "&#x22DA;"> <!-- -->
<!ENTITY les "&#x2264;"> <!-- LESS-THAN OR EQUAL TO -->
<!ENTITY lg "&#x2276;"> <!-- LESS-THAN OR GREATER-THAN -->
<!ENTITY Ll "&#x22D8;"> <!-- -->
<!ENTITY lsim "&#x2272;"> <!-- LESS-THAN OR EQUIVALENT TO -->
<!ENTITY Lt "&#x226A;"> <!-- MUCH LESS-THAN -->
<!ENTITY ltrie "&#x22B4;"> <!-- -->
<!ENTITY mid "&#x2223;"> <!-- -->
<!ENTITY models "&#x22A7;"> <!-- MODELS -->
<!ENTITY pr "&#x227A;"> <!-- -->
<!ENTITY prap "&#x227E;"> <!-- -->
<!ENTITY pre "&#x227C;"> <!-- -->
<!ENTITY prsim "&#x227E;"> <!-- -->
<!ENTITY rtrie "&#x22B5;"> <!-- -->
<!ENTITY samalg "&#x2210;"> <!-- -->
<!ENTITY sc "&#x227B;"> <!-- -->
<!ENTITY scap "&#x227F;"> <!-- -->
<!ENTITY sccue "&#x227D;"> <!-- -->
<!ENTITY sce "&#x227D;"> <!-- -->
<!ENTITY scsim "&#x227F;"> <!-- -->
<!ENTITY sfrown "&#x2322;"> <!-- FROWN -->
<!ENTITY smid "&#xE301;"> <!-- -->
<!ENTITY smile "&#x2323;"> <!-- -->
<!ENTITY spar "&#x2225;"> <!-- PARALLEL TO -->
<!ENTITY sqsub "&#x228F;"> <!-- -->
<!ENTITY sqsube "&#x2291;"> <!-- -->
<!ENTITY sqsup "&#x2290;"> <!-- -->
<!ENTITY sqsupe "&#x2292;"> <!-- -->
<!ENTITY ssmile "&#x2323;"> <!-- SMILE -->
<!ENTITY Sub "&#x22D0;"> <!-- -->
<!ENTITY subE "&#x2286;"> <!-- -->
<!ENTITY Sup "&#x22D1;"> <!-- -->
<!ENTITY supE "&#x2287;"> <!-- -->
<!ENTITY thkap "&#x2248;"> <!-- ALMOST EQUAL TO -->
<!ENTITY thksim "&#x223C;"> <!-- TILDE OPERATOR -->
<!ENTITY trie "&#x225C;"> <!-- -->
<!ENTITY twixt "&#x226C;"> <!-- BETWEEN -->
<!ENTITY vdash "&#x22A2;"> <!-- -->
<!ENTITY Vdash "&#x22A9;"> <!-- -->
<!ENTITY vDash "&#x22A8;"> <!-- -->
<!ENTITY veebar "&#x22BB;"> <!-- -->
<!ENTITY vltri "&#x22B2;"> <!-- -->
<!ENTITY vprop "&#x221D;"> <!-- -->
<!ENTITY vrtri "&#x22B3;"> <!-- -->
<!ENTITY Vvdash "&#x22AA;"> <!-- -->

View File

@ -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 "&#x2500;"> <!-- BOX DRAWINGS LIGHT HORIZONTAL -->
<!ENTITY boxv "&#x2502;"> <!-- BOX DRAWINGS LIGHT VERTICAL -->
<!ENTITY boxur "&#x2514;"> <!-- BOX DRAWINGS LIGHT UP AND RIGHT -->
<!ENTITY boxul "&#x2518;"> <!-- BOX DRAWINGS LIGHT UP AND LEFT -->
<!ENTITY boxdl "&#x2510;"> <!-- BOX DRAWINGS LIGHT DOWN AND LEFT -->
<!ENTITY boxdr "&#x250C;"> <!-- BOX DRAWINGS LIGHT DOWN AND RIGHT -->
<!ENTITY boxvr "&#x251C;"> <!-- BOX DRAWINGS LIGHT VERTICAL AND RIGHT -->
<!ENTITY boxhu "&#x2534;"> <!-- BOX DRAWINGS LIGHT UP AND HORIZONTAL -->
<!ENTITY boxvl "&#x2524;"> <!-- BOX DRAWINGS LIGHT VERTICAL AND LEFT -->
<!ENTITY boxhd "&#x252C;"> <!-- BOX DRAWINGS LIGHT DOWN AND HORIZONTAL -->
<!ENTITY boxvh "&#x253C;"> <!-- BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL -->
<!ENTITY boxvR "&#x255E;"> <!-- BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE -->
<!ENTITY boxhU "&#x2567;"> <!-- BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE -->
<!ENTITY boxvL "&#x2561;"> <!-- BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE -->
<!ENTITY boxhD "&#x2564;"> <!-- BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE -->
<!ENTITY boxvH "&#x256A;"> <!-- BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE -->
<!ENTITY boxH "&#x2550;"> <!-- BOX DRAWINGS DOUBLE HORIZONTAL -->
<!ENTITY boxV "&#x2551;"> <!-- BOX DRAWINGS DOUBLE VERTICAL -->
<!ENTITY boxUR "&#x2558;"> <!-- BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE -->
<!ENTITY boxUL "&#x255B;"> <!-- BOX DRAWINGS UP SINGLE AND LEFT DOUBLE -->
<!ENTITY boxDL "&#x2555;"> <!-- BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE -->
<!ENTITY boxDR "&#x2552;"> <!-- BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE -->
<!ENTITY boxVR "&#x255F;"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE -->
<!ENTITY boxHU "&#x2568;"> <!-- BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE -->
<!ENTITY boxVL "&#x2562;"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE -->
<!ENTITY boxHD "&#x2565;"> <!-- BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE -->
<!ENTITY boxVH "&#x256B;"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE -->
<!ENTITY boxVr "&#x2560;"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND RIGHT -->
<!ENTITY boxHu "&#x2569;"> <!-- BOX DRAWINGS DOUBLE UP AND HORIZONTAL -->
<!ENTITY boxVl "&#x2563;"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND LEFT -->
<!ENTITY boxHd "&#x2566;"> <!-- BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL -->
<!ENTITY boxVh "&#x256C;"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL -->
<!ENTITY boxuR "&#x2559;"> <!-- BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE -->
<!ENTITY boxUl "&#x255C;"> <!-- BOX DRAWINGS UP DOUBLE AND LEFT SINGLE -->
<!ENTITY boxdL "&#x2556;"> <!-- BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE -->
<!ENTITY boxDr "&#x2553;"> <!-- BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE -->
<!ENTITY boxUr "&#x255A;"> <!-- BOX DRAWINGS DOUBLE UP AND RIGHT -->
<!ENTITY boxuL "&#x255D;"> <!-- BOX DRAWINGS DOUBLE UP AND LEFT -->
<!ENTITY boxDl "&#x2557;"> <!-- BOX DRAWINGS DOUBLE DOWN AND LEFT -->
<!ENTITY boxdR "&#x2554;"> <!-- BOX DRAWINGS DOUBLE DOWN AND RIGHT -->

View File

@ -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 "&#x0430;"> <!-- CYRILLIC SMALL LETTER A -->
<!ENTITY Acy "&#x0410;"> <!-- CYRILLIC CAPITAL LETTER A -->
<!ENTITY bcy "&#x0431;"> <!-- CYRILLIC SMALL LETTER BE -->
<!ENTITY Bcy "&#x0411;"> <!-- CYRILLIC CAPITAL LETTER BE -->
<!ENTITY vcy "&#x0432;"> <!-- CYRILLIC SMALL LETTER VE -->
<!ENTITY Vcy "&#x0412;"> <!-- CYRILLIC CAPITAL LETTER VE -->
<!ENTITY gcy "&#x0433;"> <!-- CYRILLIC SMALL LETTER GHE -->
<!ENTITY Gcy "&#x0413;"> <!-- CYRILLIC CAPITAL LETTER GHE -->
<!ENTITY dcy "&#x0434;"> <!-- CYRILLIC SMALL LETTER DE -->
<!ENTITY Dcy "&#x0414;"> <!-- CYRILLIC CAPITAL LETTER DE -->
<!ENTITY iecy "&#x0435;"> <!-- CYRILLIC SMALL LETTER IE -->
<!ENTITY IEcy "&#x0415;"> <!-- CYRILLIC CAPITAL LETTER IE -->
<!ENTITY iocy "&#x0451;"> <!-- CYRILLIC SMALL LETTER IO -->
<!ENTITY IOcy "&#x0401;"> <!-- CYRILLIC CAPITAL LETTER IO -->
<!ENTITY zhcy "&#x0436;"> <!-- CYRILLIC SMALL LETTER ZHE -->
<!ENTITY ZHcy "&#x0416;"> <!-- CYRILLIC CAPITAL LETTER ZHE -->
<!ENTITY zcy "&#x0437;"> <!-- CYRILLIC SMALL LETTER ZE -->
<!ENTITY Zcy "&#x0417;"> <!-- CYRILLIC CAPITAL LETTER ZE -->
<!ENTITY icy "&#x0438;"> <!-- CYRILLIC SMALL LETTER I -->
<!ENTITY Icy "&#x0418;"> <!-- CYRILLIC CAPITAL LETTER I -->
<!ENTITY jcy "&#x0439;"> <!-- CYRILLIC SMALL LETTER SHORT I -->
<!ENTITY Jcy "&#x0419;"> <!-- CYRILLIC CAPITAL LETTER SHORT I -->
<!ENTITY kcy "&#x043A;"> <!-- CYRILLIC SMALL LETTER KA -->
<!ENTITY Kcy "&#x041A;"> <!-- CYRILLIC CAPITAL LETTER KA -->
<!ENTITY lcy "&#x043B;"> <!-- CYRILLIC SMALL LETTER EL -->
<!ENTITY Lcy "&#x041B;"> <!-- CYRILLIC CAPITAL LETTER EL -->
<!ENTITY mcy "&#x043C;"> <!-- CYRILLIC SMALL LETTER EM -->
<!ENTITY Mcy "&#x041C;"> <!-- CYRILLIC CAPITAL LETTER EM -->
<!ENTITY ncy "&#x043D;"> <!-- CYRILLIC SMALL LETTER EN -->
<!ENTITY Ncy "&#x041D;"> <!-- CYRILLIC CAPITAL LETTER EN -->
<!ENTITY ocy "&#x043E;"> <!-- CYRILLIC SMALL LETTER O -->
<!ENTITY Ocy "&#x041E;"> <!-- CYRILLIC CAPITAL LETTER O -->
<!ENTITY pcy "&#x043F;"> <!-- CYRILLIC SMALL LETTER PE -->
<!ENTITY Pcy "&#x041F;"> <!-- CYRILLIC CAPITAL LETTER PE -->
<!ENTITY rcy "&#x0440;"> <!-- CYRILLIC SMALL LETTER ER -->
<!ENTITY Rcy "&#x0420;"> <!-- CYRILLIC CAPITAL LETTER ER -->
<!ENTITY scy "&#x0441;"> <!-- CYRILLIC SMALL LETTER ES -->
<!ENTITY Scy "&#x0421;"> <!-- CYRILLIC CAPITAL LETTER ES -->
<!ENTITY tcy "&#x0442;"> <!-- CYRILLIC SMALL LETTER TE -->
<!ENTITY Tcy "&#x0422;"> <!-- CYRILLIC CAPITAL LETTER TE -->
<!ENTITY ucy "&#x0443;"> <!-- CYRILLIC SMALL LETTER U -->
<!ENTITY Ucy "&#x0423;"> <!-- CYRILLIC CAPITAL LETTER U -->
<!ENTITY fcy "&#x0444;"> <!-- CYRILLIC SMALL LETTER EF -->
<!ENTITY Fcy "&#x0424;"> <!-- CYRILLIC CAPITAL LETTER EF -->
<!ENTITY khcy "&#x0445;"> <!-- CYRILLIC SMALL LETTER HA -->
<!ENTITY KHcy "&#x0425;"> <!-- CYRILLIC CAPITAL LETTER HA -->
<!ENTITY tscy "&#x0446;"> <!-- CYRILLIC SMALL LETTER TSE -->
<!ENTITY TScy "&#x0426;"> <!-- CYRILLIC CAPITAL LETTER TSE -->
<!ENTITY chcy "&#x0447;"> <!-- CYRILLIC SMALL LETTER CHE -->
<!ENTITY CHcy "&#x0427;"> <!-- CYRILLIC CAPITAL LETTER CHE -->
<!ENTITY shcy "&#x0448;"> <!-- CYRILLIC SMALL LETTER SHA -->
<!ENTITY SHcy "&#x0428;"> <!-- CYRILLIC CAPITAL LETTER SHA -->
<!ENTITY shchcy "&#x0449;"> <!-- CYRILLIC SMALL LETTER SHCHA -->
<!ENTITY SHCHcy "&#x0429;"> <!-- CYRILLIC CAPITAL LETTER SHCHA -->
<!ENTITY hardcy "&#x044A;"> <!-- CYRILLIC SMALL LETTER HARD SIGN -->
<!ENTITY HARDcy "&#x042A;"> <!-- CYRILLIC CAPITAL LETTER HARD SIGN -->
<!ENTITY ycy "&#x044B;"> <!-- CYRILLIC SMALL LETTER YERU -->
<!ENTITY Ycy "&#x042B;"> <!-- CYRILLIC CAPITAL LETTER YERU -->
<!ENTITY softcy "&#x044C;"> <!-- CYRILLIC SMALL LETTER SOFT SIGN -->
<!ENTITY SOFTcy "&#x042C;"> <!-- CYRILLIC CAPITAL LETTER SOFT SIGN -->
<!ENTITY ecy "&#x044D;"> <!-- CYRILLIC SMALL LETTER E -->
<!ENTITY Ecy "&#x042D;"> <!-- CYRILLIC CAPITAL LETTER E -->
<!ENTITY yucy "&#x044E;"> <!-- CYRILLIC SMALL LETTER YU -->
<!ENTITY YUcy "&#x042E;"> <!-- CYRILLIC CAPITAL LETTER YU -->
<!ENTITY yacy "&#x044F;"> <!-- CYRILLIC SMALL LETTER YA -->
<!ENTITY YAcy "&#x042F;"> <!-- CYRILLIC CAPITAL LETTER YA -->
<!ENTITY numero "&#x2116;"> <!-- NUMERO SIGN -->

View File

@ -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 "&#x0452;"> <!-- CYRILLIC SMALL LETTER DJE -->
<!ENTITY DJcy "&#x0402;"> <!-- CYRILLIC CAPITAL LETTER DJE -->
<!ENTITY gjcy "&#x0453;"> <!-- CYRILLIC SMALL LETTER GJE -->
<!ENTITY GJcy "&#x0403;"> <!-- CYRILLIC CAPITAL LETTER GJE -->
<!ENTITY jukcy "&#x0454;"> <!-- CYRILLIC SMALL LETTER UKRAINIAN IE -->
<!ENTITY Jukcy "&#x0404;"> <!-- CYRILLIC CAPITAL LETTER UKRAINIAN IE -->
<!ENTITY dscy "&#x0455;"> <!-- CYRILLIC SMALL LETTER DZE -->
<!ENTITY DScy "&#x0405;"> <!-- CYRILLIC CAPITAL LETTER DZE -->
<!ENTITY iukcy "&#x0456;"> <!-- CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -->
<!ENTITY Iukcy "&#x0406;"> <!-- CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -->
<!ENTITY yicy "&#x0457;"> <!-- CYRILLIC SMALL LETTER YI -->
<!ENTITY YIcy "&#x0407;"> <!-- CYRILLIC CAPITAL LETTER YI -->
<!ENTITY jsercy "&#x0458;"> <!-- CYRILLIC SMALL LETTER JE -->
<!ENTITY Jsercy "&#x0408;"> <!-- CYRILLIC CAPITAL LETTER JE -->
<!ENTITY ljcy "&#x0459;"> <!-- CYRILLIC SMALL LETTER LJE -->
<!ENTITY LJcy "&#x0409;"> <!-- CYRILLIC CAPITAL LETTER LJE -->
<!ENTITY njcy "&#x045A;"> <!-- CYRILLIC SMALL LETTER NJE -->
<!ENTITY NJcy "&#x040A;"> <!-- CYRILLIC CAPITAL LETTER NJE -->
<!ENTITY tshcy "&#x045B;"> <!-- CYRILLIC SMALL LETTER TSHE -->
<!ENTITY TSHcy "&#x040B;"> <!-- CYRILLIC CAPITAL LETTER TSHE -->
<!ENTITY kjcy "&#x045C;"> <!-- CYRILLIC SMALL LETTER KJE -->
<!ENTITY KJcy "&#x040C;"> <!-- CYRILLIC CAPITAL LETTER KJE -->
<!ENTITY ubrcy "&#x045E;"> <!-- CYRILLIC SMALL LETTER SHORT U -->
<!ENTITY Ubrcy "&#x040E;"> <!-- CYRILLIC CAPITAL LETTER SHORT U -->
<!ENTITY dzcy "&#x045F;"> <!-- CYRILLIC SMALL LETTER DZHE -->
<!ENTITY DZcy "&#x040F;"> <!-- CYRILLIC CAPITAL LETTER DZHE -->

View File

@ -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 "&#x00B4;"> <!-- ACUTE ACCENT -->
<!ENTITY breve "&#x02D8;"> <!-- BREVE -->
<!ENTITY caron "&#x02C7;"> <!-- CARON -->
<!ENTITY cedil "&#x00B8;"> <!-- CEDILLA -->
<!ENTITY circ "&#x005E;"> <!-- RING OPERATOR -->
<!ENTITY dblac "&#x02DD;"> <!-- DOUBLE ACUTE ACCENT -->
<!ENTITY die "&#x00A8;"> <!-- -->
<!ENTITY dot "&#x02D9;"> <!-- DOT ABOVE -->
<!ENTITY grave "&#x0060;"> <!-- GRAVE ACCENT -->
<!ENTITY macr "&#x00AF;"> <!-- MACRON -->
<!ENTITY ogon "&#x02DB;"> <!-- OGONEK -->
<!ENTITY ring "&#x02DA;"> <!-- RING ABOVE -->
<!ENTITY tilde "&#x02DC;"> <!-- TILDE -->
<!ENTITY uml "&#x00A8;"> <!-- -->

View File

@ -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 "&#x03B1;"> <!-- -->
<!ENTITY Agr "&#x0391;"> <!-- GREEK CAPITAL LETTER ALPHA -->
<!ENTITY bgr "&#x03B2;"> <!-- GREEK SMALL LETTER BETA -->
<!ENTITY Bgr "&#x0392;"> <!-- GREEK CAPITAL LETTER BETA -->
<!ENTITY ggr "&#x03B3;"> <!-- GREEK SMALL LETTER GAMMA -->
<!ENTITY Ggr "&#x0393;"> <!-- GREEK CAPITAL LETTER GAMMA -->
<!ENTITY dgr "&#x03B4;"> <!-- GREEK SMALL LETTER DELTA -->
<!ENTITY Dgr "&#x0394;"> <!-- GREEK CAPITAL LETTER DELTA -->
<!ENTITY egr "&#x03B5;"> <!-- -->
<!ENTITY Egr "&#x0395;"> <!-- GREEK CAPITAL LETTER EPSILON -->
<!ENTITY zgr "&#x03B6;"> <!-- GREEK SMALL LETTER ZETA -->
<!ENTITY Zgr "&#x0396;"> <!-- GREEK CAPITAL LETTER ZETA -->
<!ENTITY eegr "&#x03B7;"> <!-- GREEK SMALL LETTER ETA -->
<!ENTITY EEgr "&#x0397;"> <!-- GREEK CAPITAL LETTER ETA -->
<!ENTITY thgr "&#x03B8;"> <!-- -->
<!ENTITY THgr "&#x0398;"> <!-- GREEK CAPITAL LETTER THETA -->
<!ENTITY igr "&#x03B9;"> <!-- GREEK SMALL LETTER IOTA -->
<!ENTITY Igr "&#x0399;"> <!-- GREEK CAPITAL LETTER IOTA -->
<!ENTITY kgr "&#x03BA;"> <!-- GREEK SMALL LETTER KAPPA -->
<!ENTITY Kgr "&#x039A;"> <!-- GREEK CAPITAL LETTER KAPPA -->
<!ENTITY lgr "&#x03BB;"> <!-- GREEK SMALL LETTER LAMDA -->
<!ENTITY Lgr "&#x039B;"> <!-- GREEK CAPITAL LETTER LAMDA -->
<!ENTITY mgr "&#x03BC;"> <!-- GREEK SMALL LETTER MU -->
<!ENTITY Mgr "&#x039C;"> <!-- GREEK CAPITAL LETTER MU -->
<!ENTITY ngr "&#x03BD;"> <!-- GREEK SMALL LETTER NU -->
<!ENTITY Ngr "&#x039D;"> <!-- GREEK CAPITAL LETTER NU -->
<!ENTITY xgr "&#x03BE;"> <!-- GREEK SMALL LETTER XI -->
<!ENTITY Xgr "&#x039E;"> <!-- GREEK CAPITAL LETTER XI -->
<!ENTITY ogr "&#x03BF;"> <!-- GREEK SMALL LETTER OMICRON -->
<!ENTITY Ogr "&#x039F;"> <!-- GREEK CAPITAL LETTER OMICRON -->
<!ENTITY pgr "&#x03C0;"> <!-- GREEK SMALL LETTER PI -->
<!ENTITY Pgr "&#x03A0;"> <!-- GREEK CAPITAL LETTER PI -->
<!ENTITY rgr "&#x03C1;"> <!-- GREEK SMALL LETTER RHO -->
<!ENTITY Rgr "&#x03A1;"> <!-- GREEK CAPITAL LETTER RHO -->
<!ENTITY sgr "&#x03C3;"> <!-- GREEK SMALL LETTER SIGMA -->
<!ENTITY Sgr "&#x03A3;"> <!-- GREEK CAPITAL LETTER SIGMA -->
<!ENTITY sfgr "&#x03C2;"> <!-- -->
<!ENTITY tgr "&#x03C4;"> <!-- GREEK SMALL LETTER TAU -->
<!ENTITY Tgr "&#x03A4;"> <!-- GREEK CAPITAL LETTER TAU -->
<!ENTITY ugr "&#x03C5;"> <!-- GREEK SMALL LETTER UPSILON -->
<!ENTITY Ugr "&#x03A5;"> <!-- -->
<!ENTITY phgr "&#x03C6;"> <!-- GREEK SMALL LETTER PHI -->
<!ENTITY PHgr "&#x03A6;"> <!-- GREEK CAPITAL LETTER PHI -->
<!ENTITY khgr "&#x03C7;"> <!-- GREEK SMALL LETTER CHI -->
<!ENTITY KHgr "&#x03A7;"> <!-- GREEK CAPITAL LETTER CHI -->
<!ENTITY psgr "&#x03C8;"> <!-- GREEK SMALL LETTER PSI -->
<!ENTITY PSgr "&#x03A8;"> <!-- GREEK CAPITAL LETTER PSI -->
<!ENTITY ohgr "&#x03C9;"> <!-- GREEK SMALL LETTER OMEGA -->
<!ENTITY OHgr "&#x03A9;"> <!-- GREEK CAPITAL LETTER OMEGA -->

View File

@ -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 "&#x03AC;"> <!-- GREEK SMALL LETTER ALPHA WITH TONOS -->
<!ENTITY Aacgr "&#x0386;"> <!-- GREEK CAPITAL LETTER ALPHA WITH TONOS -->
<!ENTITY eacgr "&#x03AD;"> <!-- GREEK SMALL LETTER EPSILON WITH TONOS -->
<!ENTITY Eacgr "&#x0388;"> <!-- GREEK CAPITAL LETTER EPSILON WITH TONOS -->
<!ENTITY eeacgr "&#x03AE;"> <!-- GREEK SMALL LETTER ETA WITH TONOS -->
<!ENTITY EEacgr "&#x0389;"> <!-- GREEK CAPITAL LETTER ETA WITH TONOS -->
<!ENTITY idigr "&#x03CA;"> <!-- GREEK SMALL LETTER IOTA WITH DIALYTIKA -->
<!ENTITY Idigr "&#x03AA;"> <!-- GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -->
<!ENTITY iacgr "&#x03AF;"> <!-- GREEK SMALL LETTER IOTA WITH TONOS -->
<!ENTITY Iacgr "&#x038A;"> <!-- GREEK CAPITAL LETTER IOTA WITH TONOS -->
<!ENTITY idiagr "&#x0390;"> <!-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -->
<!ENTITY oacgr "&#x03CC;"> <!-- GREEK SMALL LETTER OMICRON WITH TONOS -->
<!ENTITY Oacgr "&#x038C;"> <!-- GREEK CAPITAL LETTER OMICRON WITH TONOS -->
<!ENTITY udigr "&#x03CB;"> <!-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA -->
<!ENTITY Udigr "&#x03AB;"> <!-- GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -->
<!ENTITY uacgr "&#x03CD;"> <!-- GREEK SMALL LETTER UPSILON WITH TONOS -->
<!ENTITY Uacgr "&#x038E;"> <!-- GREEK CAPITAL LETTER UPSILON WITH TONOS -->
<!ENTITY udiagr "&#x03B0;"> <!-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -->
<!ENTITY ohacgr "&#x03CE;"> <!-- GREEK SMALL LETTER OMEGA WITH TONOS -->
<!ENTITY OHacgr "&#x038F;"> <!-- GREEK CAPITAL LETTER OMEGA WITH TONOS -->

View File

@ -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 "&#x03B1;"> <!-- -->
<!ENTITY beta "&#x03B2;"> <!-- GREEK SMALL LETTER BETA -->
<!ENTITY gamma "&#x03B3;"> <!-- GREEK SMALL LETTER GAMMA -->
<!ENTITY Gamma "&#x0393;"> <!-- GREEK CAPITAL LETTER GAMMA -->
<!ENTITY gammad "&#x03DC;"> <!-- GREEK LETTER DIGAMMA -->
<!ENTITY delta "&#x03B4;"> <!-- GREEK SMALL LETTER DELTA -->
<!ENTITY Delta "&#x0394;"> <!-- GREEK CAPITAL LETTER DELTA -->
<!ENTITY epsi "&#x220A;"> <!-- -->
<!ENTITY epsiv "&#x03B5;"> <!-- -->
<!ENTITY epsis "&#x220A;"> <!-- -->
<!ENTITY zeta "&#x03B6;"> <!-- GREEK SMALL LETTER ZETA -->
<!ENTITY eta "&#x03B7;"> <!-- GREEK SMALL LETTER ETA -->
<!ENTITY thetas "&#x03B8;"> <!-- -->
<!ENTITY Theta "&#x0398;"> <!-- GREEK CAPITAL LETTER THETA -->
<!ENTITY thetav "&#x03D1;"> <!-- -->
<!ENTITY iota "&#x03B9;"> <!-- GREEK SMALL LETTER IOTA -->
<!ENTITY kappa "&#x03BA;"> <!-- GREEK SMALL LETTER KAPPA -->
<!ENTITY kappav "&#x03F0;"> <!-- GREEK KAPPA SYMBOL -->
<!ENTITY lambda "&#x03BB;"> <!-- GREEK SMALL LETTER LAMDA -->
<!ENTITY Lambda "&#x039B;"> <!-- GREEK CAPITAL LETTER LAMDA -->
<!ENTITY mu "&#x03BC;"> <!-- GREEK SMALL LETTER MU -->
<!ENTITY nu "&#x03BD;"> <!-- GREEK SMALL LETTER NU -->
<!ENTITY xi "&#x03BE;"> <!-- GREEK SMALL LETTER XI -->
<!ENTITY Xi "&#x039E;"> <!-- GREEK CAPITAL LETTER XI -->
<!ENTITY pi "&#x03C0;"> <!-- GREEK SMALL LETTER PI -->
<!ENTITY piv "&#x03D6;"> <!-- GREEK PI SYMBOL -->
<!ENTITY Pi "&#x03A0;"> <!-- GREEK CAPITAL LETTER PI -->
<!ENTITY rho "&#x03C1;"> <!-- GREEK SMALL LETTER RHO -->
<!ENTITY rhov "&#x03F1;"> <!-- GREEK RHO SYMBOL -->
<!ENTITY sigma "&#x03C3;"> <!-- GREEK SMALL LETTER SIGMA -->
<!ENTITY Sigma "&#x03A3;"> <!-- GREEK CAPITAL LETTER SIGMA -->
<!ENTITY sigmav "&#x03C2;"> <!-- -->
<!ENTITY tau "&#x03C4;"> <!-- GREEK SMALL LETTER TAU -->
<!ENTITY upsi "&#x03C5;"> <!-- GREEK SMALL LETTER UPSILON -->
<!ENTITY Upsi "&#x03D2;"> <!-- -->
<!ENTITY phis "&#x03C6;"> <!-- GREEK SMALL LETTER PHI -->
<!ENTITY Phi "&#x03A6;"> <!-- GREEK CAPITAL LETTER PHI -->
<!ENTITY phiv "&#x03D5;"> <!-- GREEK PHI SYMBOL -->
<!ENTITY chi "&#x03C7;"> <!-- GREEK SMALL LETTER CHI -->
<!ENTITY psi "&#x03C8;"> <!-- GREEK SMALL LETTER PSI -->
<!ENTITY Psi "&#x03A8;"> <!-- GREEK CAPITAL LETTER PSI -->
<!ENTITY omega "&#x03C9;"> <!-- GREEK SMALL LETTER OMEGA -->
<!ENTITY Omega "&#x03A9;"> <!-- GREEK CAPITAL LETTER OMEGA -->

View File

@ -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 "&#x03B1;"> <!-- -->
<!ENTITY b.beta "&#x03B2;"> <!-- GREEK SMALL LETTER BETA -->
<!ENTITY b.gamma "&#x03B3;"> <!-- GREEK SMALL LETTER GAMMA -->
<!ENTITY b.Gamma "&#x0393;"> <!-- GREEK CAPITAL LETTER GAMMA -->
<!ENTITY b.gammad "&#x03DC;"> <!-- GREEK LETTER DIGAMMA -->
<!ENTITY b.delta "&#x03B4;"> <!-- GREEK SMALL LETTER DELTA -->
<!ENTITY b.Delta "&#x0394;"> <!-- GREEK CAPITAL LETTER DELTA -->
<!ENTITY b.epsi "&#x03B5;"> <!-- -->
<!ENTITY b.epsiv "&#x03B5;"> <!-- -->
<!ENTITY b.epsis "&#x03B5;"> <!-- -->
<!ENTITY b.zeta "&#x03B6;"> <!-- GREEK SMALL LETTER ZETA -->
<!ENTITY b.eta "&#x03B7;"> <!-- GREEK SMALL LETTER ETA -->
<!ENTITY b.thetas "&#x03B8;"> <!-- -->
<!ENTITY b.Theta "&#x0398;"> <!-- GREEK CAPITAL LETTER THETA -->
<!ENTITY b.thetav "&#x03D1;"> <!-- -->
<!ENTITY b.iota "&#x03B9;"> <!-- GREEK SMALL LETTER IOTA -->
<!ENTITY b.kappa "&#x03BA;"> <!-- GREEK SMALL LETTER KAPPA -->
<!ENTITY b.kappav "&#x03F0;"> <!-- GREEK KAPPA SYMBOL -->
<!ENTITY b.lambda "&#x03BB;"> <!-- GREEK SMALL LETTER LAMDA -->
<!ENTITY b.Lambda "&#x039B;"> <!-- GREEK CAPITAL LETTER LAMDA -->
<!ENTITY b.mu "&#x03BC;"> <!-- GREEK SMALL LETTER MU -->
<!ENTITY b.nu "&#x03BD;"> <!-- GREEK SMALL LETTER NU -->
<!ENTITY b.xi "&#x03BE;"> <!-- GREEK SMALL LETTER XI -->
<!ENTITY b.Xi "&#x039E;"> <!-- GREEK CAPITAL LETTER XI -->
<!ENTITY b.pi "&#x03C0;"> <!-- GREEK SMALL LETTER PI -->
<!ENTITY b.Pi "&#x03A0;"> <!-- GREEK CAPITAL LETTER PI -->
<!ENTITY b.piv "&#x03D6;"> <!-- GREEK PI SYMBOL -->
<!ENTITY b.rho "&#x03C1;"> <!-- GREEK SMALL LETTER RHO -->
<!ENTITY b.rhov "&#x03F1;"> <!-- GREEK RHO SYMBOL -->
<!ENTITY b.sigma "&#x03C3;"> <!-- GREEK SMALL LETTER SIGMA -->
<!ENTITY b.Sigma "&#x03A3;"> <!-- GREEK CAPITAL LETTER SIGMA -->
<!ENTITY b.sigmav "&#x03C2;"> <!-- -->
<!ENTITY b.tau "&#x03C4;"> <!-- GREEK SMALL LETTER TAU -->
<!ENTITY b.upsi "&#x03C5;"> <!-- GREEK SMALL LETTER UPSILON -->
<!ENTITY b.Upsi "&#x03D2;"> <!-- -->
<!ENTITY b.phis "&#x03C6;"> <!-- GREEK SMALL LETTER PHI -->
<!ENTITY b.Phi "&#x03A6;"> <!-- GREEK CAPITAL LETTER PHI -->
<!ENTITY b.phiv "&#x03D5;"> <!-- GREEK PHI SYMBOL -->
<!ENTITY b.chi "&#x03C7;"> <!-- GREEK SMALL LETTER CHI -->
<!ENTITY b.psi "&#x03C8;"> <!-- GREEK SMALL LETTER PSI -->
<!ENTITY b.Psi "&#x03A8;"> <!-- GREEK CAPITAL LETTER PSI -->
<!ENTITY b.omega "&#x03C9;"> <!-- GREEK SMALL LETTER OMEGA -->
<!ENTITY b.Omega "&#x03A9;"> <!-- GREEK CAPITAL LETTER OMEGA -->

View File

@ -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 "&#x00E1;"> <!-- LATIN SMALL LETTER A WITH ACUTE -->
<!ENTITY Aacute "&#x00C1;"> <!-- LATIN CAPITAL LETTER A WITH ACUTE -->
<!ENTITY acirc "&#x00E2;"> <!-- LATIN SMALL LETTER A WITH CIRCUMFLEX -->
<!ENTITY Acirc "&#x00C2;"> <!-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX -->
<!ENTITY agrave "&#x00E0;"> <!-- LATIN SMALL LETTER A WITH GRAVE -->
<!ENTITY Agrave "&#x00C0;"> <!-- LATIN CAPITAL LETTER A WITH GRAVE -->
<!ENTITY aring "&#x00E5;"> <!-- LATIN SMALL LETTER A WITH RING ABOVE -->
<!ENTITY Aring "&#x00C5;"> <!-- LATIN CAPITAL LETTER A WITH RING ABOVE -->
<!ENTITY atilde "&#x00E3;"> <!-- LATIN SMALL LETTER A WITH TILDE -->
<!ENTITY Atilde "&#x00C3;"> <!-- LATIN CAPITAL LETTER A WITH TILDE -->
<!ENTITY auml "&#x00E4;"> <!-- LATIN SMALL LETTER A WITH DIAERESIS -->
<!ENTITY Auml "&#x00C4;"> <!-- LATIN CAPITAL LETTER A WITH DIAERESIS -->
<!ENTITY aelig "&#x00E6;"> <!-- LATIN SMALL LETTER AE -->
<!ENTITY AElig "&#x00C6;"> <!-- LATIN CAPITAL LETTER AE -->
<!ENTITY ccedil "&#x00E7;"> <!-- LATIN SMALL LETTER C WITH CEDILLA -->
<!ENTITY Ccedil "&#x00C7;"> <!-- LATIN CAPITAL LETTER C WITH CEDILLA -->
<!ENTITY eth "&#x00F0;"> <!-- LATIN SMALL LETTER ETH -->
<!ENTITY ETH "&#x00D0;"> <!-- LATIN CAPITAL LETTER ETH -->
<!ENTITY eacute "&#x00E9;"> <!-- LATIN SMALL LETTER E WITH ACUTE -->
<!ENTITY Eacute "&#x00C9;"> <!-- LATIN CAPITAL LETTER E WITH ACUTE -->
<!ENTITY ecirc "&#x00EA;"> <!-- LATIN SMALL LETTER E WITH CIRCUMFLEX -->
<!ENTITY Ecirc "&#x00CA;"> <!-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX -->
<!ENTITY egrave "&#x00E8;"> <!-- LATIN SMALL LETTER E WITH GRAVE -->
<!ENTITY Egrave "&#x00C8;"> <!-- LATIN CAPITAL LETTER E WITH GRAVE -->
<!ENTITY euml "&#x00EB;"> <!-- LATIN SMALL LETTER E WITH DIAERESIS -->
<!ENTITY Euml "&#x00CB;"> <!-- LATIN CAPITAL LETTER E WITH DIAERESIS -->
<!ENTITY iacute "&#x00ED;"> <!-- LATIN SMALL LETTER I WITH ACUTE -->
<!ENTITY Iacute "&#x00CD;"> <!-- LATIN CAPITAL LETTER I WITH ACUTE -->
<!ENTITY icirc "&#x00EE;"> <!-- LATIN SMALL LETTER I WITH CIRCUMFLEX -->
<!ENTITY Icirc "&#x00CE;"> <!-- LATIN CAPITAL LETTER I WITH CIRCUMFLEX -->
<!ENTITY igrave "&#x00EC;"> <!-- LATIN SMALL LETTER I WITH GRAVE -->
<!ENTITY Igrave "&#x00CC;"> <!-- LATIN CAPITAL LETTER I WITH GRAVE -->
<!ENTITY iuml "&#x00EF;"> <!-- LATIN SMALL LETTER I WITH DIAERESIS -->
<!ENTITY Iuml "&#x00CF;"> <!-- LATIN CAPITAL LETTER I WITH DIAERESIS -->
<!ENTITY ntilde "&#x00F1;"> <!-- LATIN SMALL LETTER N WITH TILDE -->
<!ENTITY Ntilde "&#x00D1;"> <!-- LATIN CAPITAL LETTER N WITH TILDE -->
<!ENTITY oacute "&#x00F3;"> <!-- LATIN SMALL LETTER O WITH ACUTE -->
<!ENTITY Oacute "&#x00D3;"> <!-- LATIN CAPITAL LETTER O WITH ACUTE -->
<!ENTITY ocirc "&#x00F4;"> <!-- LATIN SMALL LETTER O WITH CIRCUMFLEX -->
<!ENTITY Ocirc "&#x00D4;"> <!-- LATIN CAPITAL LETTER O WITH CIRCUMFLEX -->
<!ENTITY ograve "&#x00F2;"> <!-- LATIN SMALL LETTER O WITH GRAVE -->
<!ENTITY Ograve "&#x00D2;"> <!-- LATIN CAPITAL LETTER O WITH GRAVE -->
<!ENTITY oslash "&#x00F8;"> <!-- CIRCLED DIVISION SLASH -->
<!ENTITY Oslash "&#x00D8;"> <!-- LATIN CAPITAL LETTER O WITH STROKE -->
<!ENTITY otilde "&#x00F5;"> <!-- LATIN SMALL LETTER O WITH TILDE -->
<!ENTITY Otilde "&#x00D5;"> <!-- LATIN CAPITAL LETTER O WITH TILDE -->
<!ENTITY ouml "&#x00F6;"> <!-- LATIN SMALL LETTER O WITH DIAERESIS -->
<!ENTITY Ouml "&#x00D6;"> <!-- LATIN CAPITAL LETTER O WITH DIAERESIS -->
<!ENTITY szlig "&#x00DF;"> <!-- LATIN SMALL LETTER SHARP S -->
<!ENTITY thorn "&#x00FE;"> <!-- LATIN SMALL LETTER THORN -->
<!ENTITY THORN "&#x00DE;"> <!-- LATIN CAPITAL LETTER THORN -->
<!ENTITY uacute "&#x00FA;"> <!-- LATIN SMALL LETTER U WITH ACUTE -->
<!ENTITY Uacute "&#x00DA;"> <!-- LATIN CAPITAL LETTER U WITH ACUTE -->
<!ENTITY ucirc "&#x00FB;"> <!-- LATIN SMALL LETTER U WITH CIRCUMFLEX -->
<!ENTITY Ucirc "&#x00DB;"> <!-- LATIN CAPITAL LETTER U WITH CIRCUMFLEX -->
<!ENTITY ugrave "&#x00F9;"> <!-- LATIN SMALL LETTER U WITH GRAVE -->
<!ENTITY Ugrave "&#x00D9;"> <!-- LATIN CAPITAL LETTER U WITH GRAVE -->
<!ENTITY uuml "&#x00FC;"> <!-- LATIN SMALL LETTER U WITH DIAERESIS -->
<!ENTITY Uuml "&#x00DC;"> <!-- LATIN CAPITAL LETTER U WITH DIAERESIS -->
<!ENTITY yacute "&#x00FD;"> <!-- LATIN SMALL LETTER Y WITH ACUTE -->
<!ENTITY Yacute "&#x00DD;"> <!-- LATIN CAPITAL LETTER Y WITH ACUTE -->
<!ENTITY yuml "&#x00FF;"> <!-- LATIN SMALL LETTER Y WITH DIAERESIS -->

View File

@ -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 "&#x0103;"> <!-- LATIN SMALL LETTER A WITH BREVE -->
<!ENTITY Abreve "&#x0102;"> <!-- LATIN CAPITAL LETTER A WITH BREVE -->
<!ENTITY amacr "&#x0101;"> <!-- LATIN SMALL LETTER A WITH MACRON -->
<!ENTITY Amacr "&#x0100;"> <!-- LATIN CAPITAL LETTER A WITH MACRON -->
<!ENTITY aogon "&#x0105;"> <!-- LATIN SMALL LETTER A WITH OGONEK -->
<!ENTITY Aogon "&#x0104;"> <!-- LATIN CAPITAL LETTER A WITH OGONEK -->
<!ENTITY cacute "&#x0107;"> <!-- LATIN SMALL LETTER C WITH ACUTE -->
<!ENTITY Cacute "&#x0106;"> <!-- LATIN CAPITAL LETTER C WITH ACUTE -->
<!ENTITY ccaron "&#x010D;"> <!-- LATIN SMALL LETTER C WITH CARON -->
<!ENTITY Ccaron "&#x010C;"> <!-- LATIN CAPITAL LETTER C WITH CARON -->
<!ENTITY ccirc "&#x0109;"> <!-- LATIN SMALL LETTER C WITH CIRCUMFLEX -->
<!ENTITY Ccirc "&#x0108;"> <!-- LATIN CAPITAL LETTER C WITH CIRCUMFLEX -->
<!ENTITY cdot "&#x010B;"> <!-- DOT OPERATOR -->
<!ENTITY Cdot "&#x010A;"> <!-- LATIN CAPITAL LETTER C WITH DOT ABOVE -->
<!ENTITY dcaron "&#x010F;"> <!-- LATIN SMALL LETTER D WITH CARON -->
<!ENTITY Dcaron "&#x010E;"> <!-- LATIN CAPITAL LETTER D WITH CARON -->
<!ENTITY dstrok "&#x0111;"> <!-- LATIN SMALL LETTER D WITH STROKE -->
<!ENTITY Dstrok "&#x0110;"> <!-- LATIN CAPITAL LETTER D WITH STROKE -->
<!ENTITY ecaron "&#x011B;"> <!-- LATIN SMALL LETTER E WITH CARON -->
<!ENTITY Ecaron "&#x011A;"> <!-- LATIN CAPITAL LETTER E WITH CARON -->
<!ENTITY edot "&#x0117;"> <!-- LATIN SMALL LETTER E WITH DOT ABOVE -->
<!ENTITY Edot "&#x0116;"> <!-- LATIN CAPITAL LETTER E WITH DOT ABOVE -->
<!ENTITY emacr "&#x0113;"> <!-- LATIN SMALL LETTER E WITH MACRON -->
<!ENTITY Emacr "&#x0112;"> <!-- LATIN CAPITAL LETTER E WITH MACRON -->
<!ENTITY eogon "&#x0119;"> <!-- LATIN SMALL LETTER E WITH OGONEK -->
<!ENTITY Eogon "&#x0118;"> <!-- LATIN CAPITAL LETTER E WITH OGONEK -->
<!ENTITY gacute "&#x01F5;"> <!-- LATIN SMALL LETTER G WITH ACUTE -->
<!ENTITY gbreve "&#x011F;"> <!-- LATIN SMALL LETTER G WITH BREVE -->
<!ENTITY Gbreve "&#x011E;"> <!-- LATIN CAPITAL LETTER G WITH BREVE -->
<!ENTITY Gcedil "&#x0122;"> <!-- LATIN CAPITAL LETTER G WITH CEDILLA -->
<!ENTITY gcirc "&#x011D;"> <!-- LATIN SMALL LETTER G WITH CIRCUMFLEX -->
<!ENTITY Gcirc "&#x011C;"> <!-- LATIN CAPITAL LETTER G WITH CIRCUMFLEX -->
<!ENTITY gdot "&#x0121;"> <!-- LATIN SMALL LETTER G WITH DOT ABOVE -->
<!ENTITY Gdot "&#x0120;"> <!-- LATIN CAPITAL LETTER G WITH DOT ABOVE -->
<!ENTITY hcirc "&#x0125;"> <!-- LATIN SMALL LETTER H WITH CIRCUMFLEX -->
<!ENTITY Hcirc "&#x0124;"> <!-- LATIN CAPITAL LETTER H WITH CIRCUMFLEX -->
<!ENTITY hstrok "&#x0127;"> <!-- LATIN SMALL LETTER H WITH STROKE -->
<!ENTITY Hstrok "&#x0126;"> <!-- LATIN CAPITAL LETTER H WITH STROKE -->
<!ENTITY Idot "&#x0130;"> <!-- LATIN CAPITAL LETTER I WITH DOT ABOVE -->
<!ENTITY Imacr "&#x012A;"> <!-- LATIN CAPITAL LETTER I WITH MACRON -->
<!ENTITY imacr "&#x012B;"> <!-- LATIN SMALL LETTER I WITH MACRON -->
<!ENTITY ijlig "&#x0133;"> <!-- LATIN SMALL LIGATURE IJ -->
<!ENTITY IJlig "&#x0132;"> <!-- LATIN CAPITAL LIGATURE IJ -->
<!ENTITY inodot "&#x0131;"> <!-- LATIN SMALL LETTER DOTLESS I -->
<!ENTITY iogon "&#x012F;"> <!-- LATIN SMALL LETTER I WITH OGONEK -->
<!ENTITY Iogon "&#x012E;"> <!-- LATIN CAPITAL LETTER I WITH OGONEK -->
<!ENTITY itilde "&#x0129;"> <!-- LATIN SMALL LETTER I WITH TILDE -->
<!ENTITY Itilde "&#x0128;"> <!-- LATIN CAPITAL LETTER I WITH TILDE -->
<!ENTITY jcirc "&#x0135;"> <!-- LATIN SMALL LETTER J WITH CIRCUMFLEX -->
<!ENTITY Jcirc "&#x0134;"> <!-- LATIN CAPITAL LETTER J WITH CIRCUMFLEX -->
<!ENTITY kcedil "&#x0137;"> <!-- LATIN SMALL LETTER K WITH CEDILLA -->
<!ENTITY Kcedil "&#x0136;"> <!-- LATIN CAPITAL LETTER K WITH CEDILLA -->
<!ENTITY kgreen "&#x0138;"> <!-- LATIN SMALL LETTER KRA -->
<!ENTITY lacute "&#x013A;"> <!-- LATIN SMALL LETTER L WITH ACUTE -->
<!ENTITY Lacute "&#x0139;"> <!-- LATIN CAPITAL LETTER L WITH ACUTE -->
<!ENTITY lcaron "&#x013E;"> <!-- LATIN SMALL LETTER L WITH CARON -->
<!ENTITY Lcaron "&#x013D;"> <!-- LATIN CAPITAL LETTER L WITH CARON -->
<!ENTITY lcedil "&#x013C;"> <!-- LATIN SMALL LETTER L WITH CEDILLA -->
<!ENTITY Lcedil "&#x013B;"> <!-- LATIN CAPITAL LETTER L WITH CEDILLA -->
<!ENTITY lmidot "&#x0140;"> <!-- LATIN SMALL LETTER L WITH MIDDLE DOT -->
<!ENTITY Lmidot "&#x013F;"> <!-- LATIN CAPITAL LETTER L WITH MIDDLE DOT -->
<!ENTITY lstrok "&#x0142;"> <!-- LATIN SMALL LETTER L WITH STROKE -->
<!ENTITY Lstrok "&#x0141;"> <!-- LATIN CAPITAL LETTER L WITH STROKE -->
<!ENTITY nacute "&#x0144;"> <!-- LATIN SMALL LETTER N WITH ACUTE -->
<!ENTITY Nacute "&#x0143;"> <!-- LATIN CAPITAL LETTER N WITH ACUTE -->
<!ENTITY eng "&#x014B;"> <!-- LATIN SMALL LETTER ENG -->
<!ENTITY ENG "&#x014A;"> <!-- LATIN CAPITAL LETTER ENG -->
<!ENTITY napos "&#x0149;"> <!-- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE -->
<!ENTITY ncaron "&#x0148;"> <!-- LATIN SMALL LETTER N WITH CARON -->
<!ENTITY Ncaron "&#x0147;"> <!-- LATIN CAPITAL LETTER N WITH CARON -->
<!ENTITY ncedil "&#x0146;"> <!-- LATIN SMALL LETTER N WITH CEDILLA -->
<!ENTITY Ncedil "&#x0145;"> <!-- LATIN CAPITAL LETTER N WITH CEDILLA -->
<!ENTITY odblac "&#x0151;"> <!-- LATIN SMALL LETTER O WITH DOUBLE ACUTE -->
<!ENTITY Odblac "&#x0150;"> <!-- LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -->
<!ENTITY Omacr "&#x014C;"> <!-- LATIN CAPITAL LETTER O WITH MACRON -->
<!ENTITY omacr "&#x014D;"> <!-- LATIN SMALL LETTER O WITH MACRON -->
<!ENTITY oelig "&#x0153;"> <!-- LATIN SMALL LIGATURE OE -->
<!ENTITY OElig "&#x0152;"> <!-- LATIN CAPITAL LIGATURE OE -->
<!ENTITY racute "&#x0155;"> <!-- LATIN SMALL LETTER R WITH ACUTE -->
<!ENTITY Racute "&#x0154;"> <!-- LATIN CAPITAL LETTER R WITH ACUTE -->
<!ENTITY rcaron "&#x0159;"> <!-- LATIN SMALL LETTER R WITH CARON -->
<!ENTITY Rcaron "&#x0158;"> <!-- LATIN CAPITAL LETTER R WITH CARON -->
<!ENTITY rcedil "&#x0157;"> <!-- LATIN SMALL LETTER R WITH CEDILLA -->
<!ENTITY Rcedil "&#x0156;"> <!-- LATIN CAPITAL LETTER R WITH CEDILLA -->
<!ENTITY sacute "&#x015B;"> <!-- LATIN SMALL LETTER S WITH ACUTE -->
<!ENTITY Sacute "&#x015A;"> <!-- LATIN CAPITAL LETTER S WITH ACUTE -->
<!ENTITY scaron "&#x0161;"> <!-- LATIN SMALL LETTER S WITH CARON -->
<!ENTITY Scaron "&#x0160;"> <!-- LATIN CAPITAL LETTER S WITH CARON -->
<!ENTITY scedil "&#x015F;"> <!-- LATIN SMALL LETTER S WITH CEDILLA -->
<!ENTITY Scedil "&#x015E;"> <!-- LATIN CAPITAL LETTER S WITH CEDILLA -->
<!ENTITY scirc "&#x015D;"> <!-- LATIN SMALL LETTER S WITH CIRCUMFLEX -->
<!ENTITY Scirc "&#x015C;"> <!-- LATIN CAPITAL LETTER S WITH CIRCUMFLEX -->
<!ENTITY tcaron "&#x0165;"> <!-- LATIN SMALL LETTER T WITH CARON -->
<!ENTITY Tcaron "&#x0164;"> <!-- LATIN CAPITAL LETTER T WITH CARON -->
<!ENTITY tcedil "&#x0163;"> <!-- LATIN SMALL LETTER T WITH CEDILLA -->
<!ENTITY Tcedil "&#x0162;"> <!-- LATIN CAPITAL LETTER T WITH CEDILLA -->
<!ENTITY tstrok "&#x0167;"> <!-- LATIN SMALL LETTER T WITH STROKE -->
<!ENTITY Tstrok "&#x0166;"> <!-- LATIN CAPITAL LETTER T WITH STROKE -->
<!ENTITY ubreve "&#x016D;"> <!-- LATIN SMALL LETTER U WITH BREVE -->
<!ENTITY Ubreve "&#x016C;"> <!-- LATIN CAPITAL LETTER U WITH BREVE -->
<!ENTITY udblac "&#x0171;"> <!-- LATIN SMALL LETTER U WITH DOUBLE ACUTE -->
<!ENTITY Udblac "&#x0170;"> <!-- LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -->
<!ENTITY umacr "&#x016B;"> <!-- LATIN SMALL LETTER U WITH MACRON -->
<!ENTITY Umacr "&#x016A;"> <!-- LATIN CAPITAL LETTER U WITH MACRON -->
<!ENTITY uogon "&#x0173;"> <!-- LATIN SMALL LETTER U WITH OGONEK -->
<!ENTITY Uogon "&#x0172;"> <!-- LATIN CAPITAL LETTER U WITH OGONEK -->
<!ENTITY uring "&#x016F;"> <!-- LATIN SMALL LETTER U WITH RING ABOVE -->
<!ENTITY Uring "&#x016E;"> <!-- LATIN CAPITAL LETTER U WITH RING ABOVE -->
<!ENTITY utilde "&#x0169;"> <!-- LATIN SMALL LETTER U WITH TILDE -->
<!ENTITY Utilde "&#x0168;"> <!-- LATIN CAPITAL LETTER U WITH TILDE -->
<!ENTITY wcirc "&#x0175;"> <!-- LATIN SMALL LETTER W WITH CIRCUMFLEX -->
<!ENTITY Wcirc "&#x0174;"> <!-- LATIN CAPITAL LETTER W WITH CIRCUMFLEX -->
<!ENTITY ycirc "&#x0177;"> <!-- LATIN SMALL LETTER Y WITH CIRCUMFLEX -->
<!ENTITY Ycirc "&#x0176;"> <!-- LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -->
<!ENTITY Yuml "&#x0178;"> <!-- LATIN CAPITAL LETTER Y WITH DIAERESIS -->
<!ENTITY zacute "&#x017A;"> <!-- LATIN SMALL LETTER Z WITH ACUTE -->
<!ENTITY Zacute "&#x0179;"> <!-- LATIN CAPITAL LETTER Z WITH ACUTE -->
<!ENTITY zcaron "&#x017E;"> <!-- LATIN SMALL LETTER Z WITH CARON -->
<!ENTITY Zcaron "&#x017D;"> <!-- LATIN CAPITAL LETTER Z WITH CARON -->
<!ENTITY zdot "&#x017C;"> <!-- LATIN SMALL LETTER Z WITH DOT ABOVE -->
<!ENTITY Zdot "&#x017B;"> <!-- LATIN CAPITAL LETTER Z WITH DOT ABOVE -->

View File

@ -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 "&#x00BD;"> <!-- VULGAR FRACTION ONE HALF -->
<!ENTITY frac12 "&#x00BD;"> <!-- VULGAR FRACTION ONE HALF -->
<!ENTITY frac14 "&#x00BC;"> <!-- VULGAR FRACTION ONE QUARTER -->
<!ENTITY frac34 "&#x00BE;"> <!-- VULGAR FRACTION THREE QUARTERS -->
<!ENTITY frac18 "&#x215B;"> <!-- -->
<!ENTITY frac38 "&#x215C;"> <!-- -->
<!ENTITY frac58 "&#x215D;"> <!-- -->
<!ENTITY frac78 "&#x215E;"> <!-- -->
<!ENTITY sup1 "&#x00B9;"> <!-- SUPERSCRIPT ONE -->
<!ENTITY sup2 "&#x00B2;"> <!-- SUPERSCRIPT TWO -->
<!ENTITY sup3 "&#x00B3;"> <!-- SUPERSCRIPT THREE -->
<!ENTITY plus "&#x002B;"> <!-- PLUS SIGN -->
<!ENTITY plusmn "&#x00B1;"> <!-- PLUS-MINUS SIGN -->
<!ENTITY lt "&#38;#60;"> <!-- LESS-THAN SIGN -->
<!ENTITY equals "&#x003D;"> <!-- EQUALS SIGN -->
<!ENTITY gt "&#x003E;"> <!-- GREATER-THAN SIGN -->
<!ENTITY divide "&#x00F7;"> <!-- DIVISION SIGN -->
<!ENTITY times "&#x00D7;"> <!-- MULTIPLICATION SIGN -->
<!ENTITY curren "&#x00A4;"> <!-- CURRENCY SIGN -->
<!ENTITY pound "&#x00A3;"> <!-- POUND SIGN -->
<!ENTITY dollar "&#x0024;"> <!-- DOLLAR SIGN -->
<!ENTITY cent "&#x00A2;"> <!-- CENT SIGN -->
<!ENTITY yen "&#x00A5;"> <!-- YEN SIGN -->
<!ENTITY num "&#x0023;"> <!-- NUMBER SIGN -->
<!ENTITY percnt "&#x0025;"> <!-- PERCENT SIGN -->
<!ENTITY amp "&#38;#38;"> <!-- AMPERSAND -->
<!ENTITY ast "&#x002A;"> <!-- ASTERISK OPERATOR -->
<!ENTITY commat "&#x0040;"> <!-- COMMERCIAL AT -->
<!ENTITY lsqb "&#x005B;"> <!-- LEFT SQUARE BRACKET -->
<!ENTITY bsol "&#x005C;"> <!-- REVERSE SOLIDUS -->
<!ENTITY rsqb "&#x005D;"> <!-- RIGHT SQUARE BRACKET -->
<!ENTITY lcub "&#x007B;"> <!-- LEFT CURLY BRACKET -->
<!ENTITY horbar "&#x2015;"> <!-- HORIZONTAL BAR -->
<!ENTITY verbar "&#x007C;"> <!-- VERTICAL LINE -->
<!ENTITY rcub "&#x007D;"> <!-- RIGHT CURLY BRACKET -->
<!ENTITY micro "&#x00B5;"> <!-- MICRO SIGN -->
<!ENTITY ohm "&#x2126;"> <!-- OHM SIGN -->
<!ENTITY deg "&#x00B0;"> <!-- DEGREE SIGN -->
<!ENTITY ordm "&#x00BA;"> <!-- MASCULINE ORDINAL INDICATOR -->
<!ENTITY ordf "&#x00AA;"> <!-- FEMININE ORDINAL INDICATOR -->
<!ENTITY sect "&#x00A7;"> <!-- SECTION SIGN -->
<!ENTITY para "&#x00B6;"> <!-- PILCROW SIGN -->
<!ENTITY middot "&#x00B7;"> <!-- MIDDLE DOT -->
<!ENTITY larr "&#x2190;"> <!-- LEFTWARDS DOUBLE ARROW -->
<!ENTITY rarr "&#x2192;"> <!-- RIGHTWARDS DOUBLE ARROW -->
<!ENTITY uarr "&#x2191;"> <!-- UPWARDS ARROW -->
<!ENTITY darr "&#x2193;"> <!-- DOWNWARDS ARROW -->
<!ENTITY copy "&#x00A9;"> <!-- COPYRIGHT SIGN -->
<!ENTITY reg "&#x00AE;"> <!-- REG TRADE MARK SIGN -->
<!ENTITY trade "&#x2122;"> <!-- TRADE MARK SIGN -->
<!ENTITY brvbar "&#x00A6;"> <!-- BROKEN BAR -->
<!ENTITY not "&#x00AC;"> <!-- NOT SIGN -->
<!ENTITY sung "&#x2669;"> <!-- -->
<!ENTITY excl "&#x0021;"> <!-- EXCLAMATION MARK -->
<!ENTITY iexcl "&#x00A1;"> <!-- INVERTED EXCLAMATION MARK -->
<!ENTITY quot "&#x0022;"> <!-- QUOTATION MARK -->
<!ENTITY apos "&#x0027;"> <!-- APOSTROPHE -->
<!ENTITY lpar "&#x0028;"> <!-- LEFT PARENTHESIS -->
<!ENTITY rpar "&#x0029;"> <!-- RIGHT PARENTHESIS -->
<!ENTITY comma "&#x002C;"> <!-- COMMA -->
<!ENTITY lowbar "&#x005F;"> <!-- LOW LINE -->
<!ENTITY hyphen "&#x002D;"> <!-- HYPHEN-MINUS -->
<!ENTITY period "&#x002E;"> <!-- FULL STOP -->
<!ENTITY sol "&#x002F;"> <!-- SOLIDUS -->
<!ENTITY colon "&#x003A;"> <!-- COLON -->
<!ENTITY semi "&#x003B;"> <!-- SEMICOLON -->
<!ENTITY quest "&#x003F;"> <!-- QUESTION MARK -->
<!ENTITY iquest "&#x00BF;"> <!-- INVERTED QUESTION MARK -->
<!ENTITY laquo "&#x00AB;"> <!-- LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -->
<!ENTITY raquo "&#x00BB;"> <!-- RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
<!ENTITY lsquo "&#x2018;"> <!-- -->
<!ENTITY rsquo "&#x2019;"> <!-- RIGHT SINGLE QUOTATION MARK -->
<!ENTITY ldquo "&#x201C;"> <!-- -->
<!ENTITY rdquo "&#x201D;"> <!-- RIGHT DOUBLE QUOTATION MARK -->
<!ENTITY nbsp "&#x00A0;"> <!-- NO-BREAK SPACE -->
<!ENTITY shy "&#x00AD;"> <!-- SOFT HYPHEN -->

View File

@ -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 "&#x2003;"> <!-- EM SPACE -->
<!ENTITY ensp "&#x2002;"> <!-- EN SPACE -->
<!ENTITY emsp13 "&#x2004;"> <!-- THREE-PER-EM SPACE -->
<!ENTITY emsp14 "&#x2005;"> <!-- FOUR-PER-EM SPACE -->
<!ENTITY numsp "&#x2007;"> <!-- FIGURE SPACE -->
<!ENTITY puncsp "&#x2008;"> <!-- PUNCTUATION SPACE -->
<!ENTITY thinsp "&#x2009;"> <!-- THIN SPACE -->
<!ENTITY hairsp "&#x200A;"> <!-- HAIR SPACE -->
<!ENTITY mdash "&#x2014;"> <!-- EM DASH -->
<!ENTITY ndash "&#x2013;"> <!-- EN DASH -->
<!ENTITY dash "&#x2010;"> <!-- HYPHEN -->
<!ENTITY blank "&#x2423;"> <!-- OPEN BOX -->
<!ENTITY hellip "&#x2026;"> <!-- HORIZONTAL ELLIPSIS -->
<!ENTITY nldr "&#x2025;"> <!-- TWO DOT LEADER -->
<!ENTITY frac13 "&#x2153;"> <!-- VULGAR FRACTION ONE THIRD -->
<!ENTITY frac23 "&#x2154;"> <!-- VULGAR FRACTION TWO THIRDS -->
<!ENTITY frac15 "&#x2155;"> <!-- VULGAR FRACTION ONE FIFTH -->
<!ENTITY frac25 "&#x2156;"> <!-- VULGAR FRACTION TWO FIFTHS -->
<!ENTITY frac35 "&#x2157;"> <!-- VULGAR FRACTION THREE FIFTHS -->
<!ENTITY frac45 "&#x2158;"> <!-- VULGAR FRACTION FOUR FIFTHS -->
<!ENTITY frac16 "&#x2159;"> <!-- VULGAR FRACTION ONE SIXTH -->
<!ENTITY frac56 "&#x215A;"> <!-- VULGAR FRACTION FIVE SIXTHS -->
<!ENTITY incare "&#x2105;"> <!-- CARE OF -->
<!ENTITY block "&#x2588;"> <!-- FULL BLOCK -->
<!ENTITY uhblk "&#x2580;"> <!-- UPPER HALF BLOCK -->
<!ENTITY lhblk "&#x2584;"> <!-- LOWER HALF BLOCK -->
<!ENTITY blk14 "&#x2591;"> <!-- LIGHT SHADE -->
<!ENTITY blk12 "&#x2592;"> <!-- MEDIUM SHADE -->
<!ENTITY blk34 "&#x2593;"> <!-- DARK SHADE -->
<!ENTITY marker "&#x25AE;"> <!-- BLACK VERTICAL RECTANGLE -->
<!ENTITY cir "&#x25CB;"> <!-- WHITE CIRCLE -->
<!ENTITY squ "&#x25A1;"> <!-- WHITE SQUARE -->
<!ENTITY rect "&#x25AD;"> <!-- WHITE RECTANGLE -->
<!ENTITY utri "&#x25B5;"> <!-- WHITE UP-POINTING TRIANGLE -->
<!ENTITY dtri "&#x25BF;"> <!-- WHITE DOWN-POINTING TRIANGLE -->
<!ENTITY star "&#x22C6;"> <!-- STAR OPERATOR -->
<!ENTITY bull "&#x2022;"> <!-- BULLET -->
<!ENTITY squf "&#x25AA;"> <!-- -->
<!ENTITY utrif "&#x25B4;"> <!-- BLACK UP-POINTING TRIANGLE -->
<!ENTITY dtrif "&#x25BE;"> <!-- BLACK DOWN-POINTING TRIANGLE -->
<!ENTITY ltrif "&#x25C2;"> <!-- BLACK LEFT-POINTING TRIANGLE -->
<!ENTITY rtrif "&#x25B8;"> <!-- BLACK RIGHT-POINTING TRIANGLE -->
<!ENTITY clubs "&#x2663;"> <!-- BLACK CLUB SUIT -->
<!ENTITY diams "&#x2666;"> <!-- BLACK DIAMOND SUIT -->
<!ENTITY hearts "&#x2665;"> <!-- BLACK HEART SUIT -->
<!ENTITY spades "&#x2660;"> <!-- BLACK SPADE SUIT -->
<!ENTITY malt "&#x2720;"> <!-- MALTESE CROSS -->
<!ENTITY dagger "&#x2020;"> <!-- DAGGER -->
<!ENTITY Dagger "&#x2021;"> <!-- DOUBLE DAGGER -->
<!ENTITY check "&#x2713;"> <!-- CHECK MARK -->
<!ENTITY cross "&#x2717;"> <!-- BALLOT X -->
<!ENTITY sharp "&#x266F;"> <!-- MUSIC SHARP SIGN -->
<!ENTITY flat "&#x266D;"> <!-- MUSIC FLAT SIGN -->
<!ENTITY male "&#x2642;"> <!-- MALE SIGN -->
<!ENTITY female "&#x2640;"> <!-- -->
<!ENTITY phone "&#x260E;"> <!-- TELEPHONE SIGN -->
<!ENTITY telrec "&#x2315;"> <!-- TELEPHONE RECORDER -->
<!ENTITY copysr "&#x2117;"> <!-- SOUND RECORDING COPYRIGHT -->
<!ENTITY caret "&#x2041;"> <!-- CARET -->
<!ENTITY lsquor "&#x201A;"> <!-- SINGLE LOW-9 QUOTATION MARK -->
<!ENTITY ldquor "&#x201E;"> <!-- DOUBLE LOW-9 QUOTATION MARK -->
<!ENTITY fflig "&#xFB00;"> <!-- -->
<!ENTITY filig "&#xFB01;"> <!-- -->
<!-- fjlig Unknown unicode character -->
<!ENTITY ffilig "&#xFB03;"> <!-- -->
<!ENTITY ffllig "&#xFB04;"> <!-- -->
<!ENTITY fllig "&#xFB02;"> <!-- -->
<!ENTITY mldr "&#x2026;"> <!-- HORIZONTAL ELLIPSIS -->
<!ENTITY rdquor "&#x201C;"> <!-- -->
<!ENTITY rsquor "&#x2018;"> <!-- -->
<!ENTITY vellip "&#x22EE;"> <!-- -->
<!ENTITY hybull "&#x2043;"> <!-- HYPHEN BULLET -->
<!ENTITY loz "&#x25CA;"> <!-- LOZENGE -->
<!ENTITY lozf "&#x2726;"> <!-- -->
<!ENTITY ltri "&#x25C3;"> <!-- WHITE LEFT-POINTING TRIANGLE -->
<!ENTITY rtri "&#x25B9;"> <!-- WHITE RIGHT-POINTING TRIANGLE -->
<!ENTITY starf "&#x2605;"> <!-- BLACK STAR -->
<!ENTITY natur "&#x266E;"> <!-- MUSIC NATURAL SIGN -->
<!ENTITY rx "&#x211E;"> <!-- PRESCRIPTION TAKE -->
<!ENTITY sext "&#x2736;"> <!-- SIX POINTED BLACK STAR -->
<!ENTITY target "&#x2316;"> <!-- POSITION INDICATOR -->
<!ENTITY dlcrop "&#x230D;"> <!-- BOTTOM LEFT CROP -->
<!ENTITY drcrop "&#x230C;"> <!-- BOTTOM RIGHT CROP -->
<!ENTITY ulcrop "&#x230F;"> <!-- TOP LEFT CROP -->
<!ENTITY urcrop "&#x230E;"> <!-- TOP RIGHT CROP -->

View File

@ -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 "&#x2135;"> <!-- ALEF SYMBOL -->
<!ENTITY and "&#x2227;"> <!-- -->
<!ENTITY ang90 "&#x221F;"> <!-- RIGHT ANGLE -->
<!ENTITY angsph "&#x2222;"> <!-- -->
<!ENTITY ap "&#x2248;"> <!-- -->
<!ENTITY becaus "&#x2235;"> <!-- BECAUSE -->
<!ENTITY bottom "&#x22A5;"> <!-- -->
<!ENTITY cap "&#x2229;"> <!-- -->
<!ENTITY cong "&#x2245;"> <!-- -->
<!ENTITY conint "&#x222E;"> <!-- -->
<!ENTITY cup "&#x222A;"> <!-- -->
<!ENTITY equiv "&#x2261;"> <!-- -->
<!ENTITY exist "&#x2203;"> <!-- -->
<!ENTITY forall "&#x2200;"> <!-- -->
<!ENTITY fnof "&#x0192;"> <!-- LATIN SMALL LETTER F WITH HOOK -->
<!ENTITY ge "&#x2265;"> <!-- GREATER-THAN OR EQUAL TO -->
<!ENTITY iff "&#x21D4;"> <!-- LEFT RIGHT DOUBLE ARROW -->
<!ENTITY infin "&#x221E;"> <!-- -->
<!ENTITY int "&#x222B;"> <!-- -->
<!ENTITY isin "&#x220A;"> <!-- -->
<!ENTITY lang "&#x3008;"> <!-- -->
<!ENTITY lArr "&#x21D0;"> <!-- LEFTWARDS ARROW -->
<!ENTITY le "&#x2264;"> <!-- -->
<!ENTITY minus "&#x2212;"> <!-- MINUS SIGN -->
<!ENTITY mnplus "&#x2213;"> <!-- -->
<!ENTITY nabla "&#x2207;"> <!-- NABLA -->
<!ENTITY ne "&#x2260;"> <!-- -->
<!ENTITY ni "&#x220D;"> <!-- -->
<!ENTITY or "&#x2228;"> <!-- -->
<!ENTITY par "&#x2225;"> <!-- PARALLEL TO -->
<!ENTITY part "&#x2202;"> <!-- -->
<!ENTITY permil "&#x2030;"> <!-- PER MILLE SIGN -->
<!ENTITY perp "&#x22A5;"> <!-- -->
<!ENTITY prime "&#x2032;"> <!-- PRIME -->
<!ENTITY Prime "&#x2033;"> <!-- DOUBLE PRIME -->
<!ENTITY prop "&#x221D;"> <!-- -->
<!ENTITY radic "&#x221A;"> <!-- -->
<!ENTITY rang "&#x3009;"> <!-- -->
<!ENTITY rArr "&#x21D2;"> <!-- RIGHTWARDS ARROW -->
<!ENTITY sim "&#x223C;"> <!-- -->
<!ENTITY sime "&#x2243;"> <!-- -->
<!ENTITY square "&#x25A1;"> <!-- WHITE SQUARE -->
<!ENTITY sub "&#x2282;"> <!-- -->
<!ENTITY sube "&#x2286;"> <!-- -->
<!ENTITY sup "&#x2283;"> <!-- -->
<!ENTITY supe "&#x2287;"> <!-- -->
<!ENTITY there4 "&#x2234;"> <!-- -->
<!ENTITY Verbar "&#x2016;"> <!-- DOUBLE VERTICAL LINE -->
<!ENTITY angst "&#x212B;"> <!-- ANGSTROM SIGN -->
<!ENTITY bernou "&#x212C;"> <!-- SCRIPT CAPITAL B -->
<!ENTITY compfn "&#x2218;"> <!-- RING OPERATOR -->
<!ENTITY Dot "&#x00A8;"> <!-- -->
<!ENTITY DotDot "&#x20DC;"> <!-- COMBINING FOUR DOTS ABOVE -->
<!ENTITY hamilt "&#x210B;"> <!-- SCRIPT CAPITAL H -->
<!ENTITY lagran "&#x2112;"> <!-- SCRIPT CAPITAL L -->
<!ENTITY lowast "&#x2217;"> <!-- ASTERISK OPERATOR -->
<!ENTITY notin "&#x2209;"> <!-- -->
<!ENTITY order "&#x2134;"> <!-- SCRIPT SMALL O -->
<!ENTITY phmmat "&#x2133;"> <!-- SCRIPT CAPITAL M -->
<!ENTITY tdot "&#x20DB;"> <!-- COMBINING THREE DOTS ABOVE -->
<!ENTITY tprime "&#x2034;"> <!-- TRIPLE PRIME -->
<!ENTITY wedgeq "&#x2259;"> <!-- ESTIMATES -->

View File

@ -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">

View File

@ -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;
>

View File

@ -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>.

View File

@ -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>&#10;</xsl:text>
<xsl:apply-templates/>
<xsl:text>&#10;</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>&#10;</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>&#10;</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>&#10;</xsl:text>
</xsl:template>
</xsl:stylesheet>

View File

@ -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.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View 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) &gt; 0">
<xsl:copy-of select="$local.l10n.letters"/>
</xsl:when>
<xsl:when test="count($l10n.letters) &gt; 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) &gt; 0">
<xsl:copy-of select="$local.l10n.letters"/>
</xsl:when>
<xsl:when test="count($l10n.letters) &gt; 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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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&#283;&#271;:"/>
<l:gentext key="answer" text="Odpov&#283;&#271;:"/>
<l:gentext key="Appendix" text="P&#345;&#237;loha"/>
<l:gentext key="appendix" text="P&#345;&#237;loha"/>
<l:gentext key="Article" text="&#268;l&#225;nek"/>
<l:gentext key="article" text="&#268;l&#225;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&#253;straha"/>
<l:gentext key="Caution" text="V&#253;straha"/>
<l:gentext key="caution" text="V&#253;straha"/>
<l:gentext key="Chapter" text="Kapitola"/>
<l:gentext key="chapter" text="Kapitola"/>
<l:gentext key="Colophon" text="Tir&#225;&#382;"/>
<l:gentext key="colophon" text="Tir&#225;&#382;"/>
<l:gentext key="Copyright" text="Copyright"/>
<l:gentext key="copyright" text="Copyright"/>
<l:gentext key="Dedication" text="V&#283;nov&#225;n&#237;"/>
<l:gentext key="dedication" text="V&#283;nov&#225;n&#237;"/>
<l:gentext key="Edition" text="Vyd&#225;n&#237;"/>
<l:gentext key="edition" text="Vyd&#225;n&#237;"/>
<l:gentext key="Equation" text="Rovnice"/>
<l:gentext key="equation" text="Rovnice"/>
<l:gentext key="Example" text="P&#345;&#237;klad"/>
<l:gentext key="example" text="P&#345;&#237;klad"/>
<l:gentext key="Figure" text="Obr&#225;zek"/>
<l:gentext key="figure" text="Obr&#225;zek"/>
<l:gentext key="Glossary" text="Slovn&#237;k"/>
<l:gentext key="glossary" text="Slovn&#237;k"/>
<l:gentext key="GlossSee" text="Viz"/>
<l:gentext key="glosssee" text="Viz"/>
<l:gentext key="GlossSeeAlso" text="Viz t&#233;&#382;"/>
<l:gentext key="glossseealso" text="Viz t&#233;&#382;"/>
<l:gentext key="IMPORTANT" text="D&#367;le&#382;it&#233;"/>
<l:gentext key="important" text="D&#367;le&#382;it&#233;"/>
<l:gentext key="Important" text="D&#367;le&#382;it&#233;"/>
<l:gentext key="Index" text="Rejst&#345;&#237;k"/>
<l:gentext key="index" text="Rejst&#345;&#237;k"/>
<l:gentext key="ISBN" text="ISBN"/>
<l:gentext key="isbn" text="ISBN"/>
<l:gentext key="LegalNotice" text="Pr&#225;vn&#237; dolo&#382;ka"/>
<l:gentext key="legalnotice" text="Pr&#225;vn&#237; dolo&#382;ka"/>
<l:gentext key="MsgAud" text="Publikum"/>
<l:gentext key="msgaud" text="Publikum"/>
<l:gentext key="MsgLevel" text="&#218;rove&#328;"/>
<l:gentext key="msglevel" text="&#218;rove&#328;"/>
<l:gentext key="MsgOrig" text="P&#367;vod"/>
<l:gentext key="msgorig" text="P&#367;vod"/>
<l:gentext key="NOTE" text="Pozn&#225;mka"/>
<l:gentext key="Note" text="Pozn&#225;mka"/>
<l:gentext key="note" text="Pozn&#225;mka"/>
<l:gentext key="Part" text="&#268;&#225;st"/>
<l:gentext key="part" text="&#268;&#225;st"/>
<l:gentext key="Preface" text="P&#345;edmluva"/>
<l:gentext key="preface" text="P&#345;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&#225;no"/>
<l:gentext key="published" text="Vyd&#225;no"/>
<l:gentext key="Qandadiv" text="Q &amp; A" lang="en"/>
<l:gentext key="qandadiv" text="Q &amp; A" lang="en"/>
<l:gentext key="Question" text="Ot&#225;zka:"/>
<l:gentext key="question" text="Ot&#225;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&#233;no"/>
<l:gentext key="refname" text="Jm&#233;no"/>
<l:gentext key="RefSection" text=""/>
<l:gentext key="refsection" text=""/>
<l:gentext key="RefSynopsisDiv" text="P&#345;ehled"/>
<l:gentext key="refsynopsisdiv" text="P&#345;ehled"/>
<l:gentext key="RevHistory" text="P&#345;ehled reviz&#237;"/>
<l:gentext key="revhistory" text="P&#345;ehled reviz&#237;"/>
<l:gentext key="revision" text="Revize"/>
<l:gentext key="Revision" text="Revize"/>
<l:gentext key="sect1" text="Odd&#237;l"/>
<l:gentext key="sect2" text="Odd&#237;l"/>
<l:gentext key="sect3" text="Odd&#237;l"/>
<l:gentext key="sect4" text="Odd&#237;l"/>
<l:gentext key="sect5" text="Odd&#237;l"/>
<l:gentext key="section" text="Odd&#237;l"/>
<l:gentext key="Section" text="Odd&#237;l"/>
<l:gentext key="see" text="Viz"/>
<l:gentext key="See" text="Viz"/>
<l:gentext key="seealso" text="Viz t&#233;&#382;"/>
<l:gentext key="Seealso" text="Viz t&#233;&#382;"/>
<l:gentext key="SeeAlso" text="Viz t&#233;&#382;"/>
<l:gentext key="set" text="Sada"/>
<l:gentext key="Set" text="Sada"/>
<l:gentext key="setindex" text="Rejst&#345;&#237;k sady"/>
<l:gentext key="SetIndex" text="Rejst&#345;&#237;k sady"/>
<l:gentext key="Sidebar" text="Margin&#225;lie"/>
<l:gentext key="sidebar" text="Margin&#225;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&#225;n&#237;"/>
<l:gentext key="warning" text="Varov&#225;n&#237;"/>
<l:gentext key="WARNING" text="Varov&#225;n&#237;"/>
<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&#225;no"/>
<l:gentext key="edited" text="Vyd&#225;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&#237;c&#237; prvek"/>
<l:gentext key="notes" text="Pozn&#225;mky"/>
<l:gentext key="Notes" text="Pozn&#225;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&#225;mky"/>
<l:gentext key="tablenotes" text="Pozn&#225;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&#269;ek&#225;van&#233; jm&#233;no prvku"/>
<l:gentext key="unsupported" text="nepodporovan&#253;"/>
<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&#345;&#237;klad&#367;"/>
<l:gentext key="listofexamples" text="Seznam p&#345;&#237;klad&#367;"/>
<l:gentext key="ListofFigures" text="Seznam obr&#225;zk&#367;"/>
<l:gentext key="listoffigures" text="Seznam obr&#225;zk&#367;"/>
<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&#225;m&#233;ho"/>
<l:gentext key="listofunknown" text="Seznam nezn&#225;m&#233;ho"/>
<l:gentext key="nav-home" text="Dom&#367;"/>
<l:gentext key="nav-next" text="Dal&#353;&#237;"/>
<l:gentext key="nav-next-sibling" text="Rychle dop&#345;edu"/>
<l:gentext key="nav-prev" text="P&#345;edch&#225;zej&#237;c&#237;"/>
<l:gentext key="nav-prev-sibling" text="Rychle zp&#283;t"/>
<l:gentext key="nav-up" text="Nahoru"/>
<l:gentext key="nav-toc" text="ToC" lang="en"/>
<l:gentext key="Draft" text="N&#225;vrh"/>
<l:gentext key="above" text="nad"/>
<l:gentext key="below" text="pod"/>
<l:gentext key="sectioncalled" text="odd&#237;l nazvan&#253;"/>
<l:gentext key="index symbols" text="Symboly"/>
<l:gentext key="lowercase.alpha" text="a&#225;bc&#269;d&#271;e&#233;&#283;fghi&#237;jklmno&#243;pqr&#345;s&#353;t&#357;u&#250;&#367;vwxy&#253;z&#382;"/>
<l:gentext key="uppercase.alpha" text="A&#193;BC&#268;D&#270;E&#201;&#282;FGHI&#205;JKLMNO&#211;PQR&#344;S&#352;T&#356;U&#218;&#366;VWXY&#221;Z&#381;"/>
<l:dingbat key="startquote" text="&#8222;"/>
<l:dingbat key="endquote" text="&#8220;"/>
<l:dingbat key="nestedstartquote" text="&#8218;"/>
<l:dingbat key="nestedendquote" text="&#8216;"/>
<l:dingbat key="singlestartquote" text="&#8216;" lang="en"/>
<l:dingbat key="singleendquote" text="&#8217;" lang="en"/>
<l:dingbat key="bullet" text="&#8226;"/>
<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&#345;&#237;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&#345;&#237;klad %n. %t"/>
<l:template name="figure" text="Obr&#225;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="&#268;&#225;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&#345;&#237;loha %n. %t"/>
<l:template name="article/appendix" text="%n.&#160;%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="&#8222;%t&#8220;"/>
<l:template name="refsection" text="&#8222;%t&#8220;"/>
<l:template name="refsect1" text="&#8222;%t&#8220;"/>
<l:template name="refsect2" text="&#8222;%t&#8220;"/>
<l:template name="refsect3" text="&#8222;%t&#8220;"/>
<l:template name="sect1" text="&#8222;%t&#8220;"/>
<l:template name="sect2" text="&#8222;%t&#8220;"/>
<l:template name="sect3" text="&#8222;%t&#8220;"/>
<l:template name="sect4" text="&#8222;%t&#8220;"/>
<l:template name="sect5" text="&#8222;%t&#8220;"/>
<l:template name="section" text="&#8222;%t&#8220;"/>
<l:template name="simplesect" text="&#8222;%t&#8220;"/>
</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 &#8211; &#8222;%t&#8220;"/>
<l:template name="bridgehead" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="chapter" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="equation" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="example" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="figure" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="part" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="procedure" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="productionset" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="qandadiv" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="refsect1" text="&#8222;%t&#8220;"/>
<l:template name="refsect2" text="&#8222;%t&#8220;"/>
<l:template name="refsect3" text="&#8222;%t&#8220;"/>
<l:template name="refsection" text="&#8222;%t&#8220;"/>
<l:template name="sect1" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="sect2" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="sect3" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="sect4" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="sect5" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="section" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="simplesect" text="%n &#8211; &#8222;%t&#8220;"/>
<l:template name="table" text="%n &#8211; &#8222;%t&#8220;"/>
</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&#233;&#382; "/>
</l:context>
<l:context name="msgset">
<l:template name="MsgAud" text="Publikum: "/>
<l:template name="MsgLevel" text="&#218;rove&#328;: "/>
<l:template name="MsgOrig" text="P&#367;vod: "/>
</l:context>
<l:context name="datetime">
<l:template name="format" text="d.&#160;B Y"/>
</l:context>
<l:context name="datetime-full">
<l:template name="January" text="ledna"/>
<l:template name="February" text="&#250;nora"/>
<l:template name="March" text="b&#345;ezna"/>
<l:template name="April" text="dubna"/>
<l:template name="May" text="kv&#283;tna"/>
<l:template name="June" text="&#269;ervna"/>
<l:template name="July" text="&#269;ervence"/>
<l:template name="August" text="srpna"/>
<l:template name="September" text="z&#225;&#345;&#237;"/>
<l:template name="October" text="&#345;&#237;jna"/>
<l:template name="November" text="listopadu"/>
<l:template name="December" text="prosince"/>
<l:template name="Monday" text="pond&#283;l&#237;"/>
<l:template name="Tuesday" text="&#250;ter&#253;"/>
<l:template name="Wednesday" text="st&#345;eda"/>
<l:template name="Thursday" text="&#269;tvrtek"/>
<l:template name="Friday" text="p&#225;tek"/>
<l:template name="Saturday" text="sobota"/>
<l:template name="Sunday" text="ned&#283;le"/>
</l:context>
<l:context name="datetime-abbrev">
<l:template name="Jan" text="led"/>
<l:template name="Feb" text="&#250;no"/>
<l:template name="Mar" text="b&#345;e"/>
<l:template name="Apr" text="dub"/>
<l:template name="May" text="kv&#283;"/>
<l:template name="Jun" text="&#269;er"/>
<l:template name="Jul" text="&#269;nc"/>
<l:template name="Aug" text="srp"/>
<l:template name="Sep" text="z&#225;&#345;"/>
<l:template name="Oct" text="&#345;ij"/>
<l:template name="Nov" text="lis"/>
<l:template name="Dec" text="pro"/>
<l:template name="Mon" text="po"/>
<l:template name="Tue" text="&#250;t"/>
<l:template name="Wed" text="st"/>
<l:template name="Thu" text="&#269;t"/>
<l:template name="Fri" text="p&#225;"/>
<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">&#193;</l:l>
<l:l i="1">&#225;</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">&#268;</l:l>
<l:l i="4">&#269;</l:l>
<l:l i="5">D</l:l>
<l:l i="5">d</l:l>
<l:l i="5">&#270;</l:l>
<l:l i="5">&#271;</l:l>
<l:l i="7">E</l:l>
<l:l i="7">e</l:l>
<l:l i="7">&#201;</l:l>
<l:l i="7">&#233;</l:l>
<l:l i="7">&#282;</l:l>
<l:l i="7">&#283;</l:l>
<l:l i="7">&#203;</l:l>
<l:l i="7">&#235;</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">&#205;</l:l>
<l:l i="12">&#237;</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">&#327;</l:l>
<l:l i="17">&#328;</l:l>
<l:l i="19">O</l:l>
<l:l i="19">o</l:l>
<l:l i="19">&#211;</l:l>
<l:l i="19">&#243;</l:l>
<l:l i="19">&#214;</l:l>
<l:l i="19">&#246;</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">&#344;</l:l>
<l:l i="23">&#345;</l:l>
<l:l i="24">S</l:l>
<l:l i="24">s</l:l>
<l:l i="25">&#352;</l:l>
<l:l i="25">&#353;</l:l>
<l:l i="26">T</l:l>
<l:l i="26">t</l:l>
<l:l i="26">&#356;</l:l>
<l:l i="26">&#357;</l:l>
<l:l i="28">U</l:l>
<l:l i="28">u</l:l>
<l:l i="28">&#218;</l:l>
<l:l i="28">&#250;</l:l>
<l:l i="28">&#366;</l:l>
<l:l i="28">&#367;</l:l>
<l:l i="28">&#220;</l:l>
<l:l i="28">&#252;</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">&#221;</l:l>
<l:l i="32">&#253;</l:l>
<l:l i="33">Z</l:l>
<l:l i="33">z</l:l>
<l:l i="34">&#381;</l:l>
<l:l i="34">&#382;</l:l>
</l:letters>
</l:l10n>

View File

@ -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&#233;"/>
<l:gentext key="abstract" text="resum&#233;"/>
<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&#197;"/>
<l:gentext key="Caution" text="Pas p&#229;"/>
<l:gentext key="caution" text="pas p&#229;"/>
<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&#229;"/>
<l:gentext key="glossseealso" text="se ogs&#229;"/>
<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&#229;lgruppe"/>
<l:gentext key="msgaud" text="m&#229;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&#198;RK"/>
<l:gentext key="Note" text="Bem&#230;rk"/>
<l:gentext key="note" text="bem&#230;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 &amp; A" lang="en"/>
<l:gentext key="qandadiv" text="Q &amp; A" lang="en"/>
<l:gentext key="Question" text="Sp&#248;rgsm&#229;l"/>
<l:gentext key="question" text="sp&#248;rgsm&#229;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&#229;"/>
<l:gentext key="Seealso" text="Se ogs&#229;"/>
<l:gentext key="SeeAlso" text="Se ogs&#229;"/>
<l:gentext key="set" text="s&#230;t"/>
<l:gentext key="Set" text="S&#230;t"/>
<l:gentext key="setindex" text="s&#230;t indeks"/>
<l:gentext key="SetIndex" text="S&#230;t indeks"/>
<l:gentext key="Sidebar" text="Sidebj&#230;lke"/>
<l:gentext key="sidebar" text="sidebj&#230;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&#230;rkning:"/>
<l:gentext key="Notes" text="Slutbem&#230;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&#248;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&#230;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&#230;&#248;&#229;"/>
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZ&#198;&#216;&#197;"/>
<l:dingbat key="startquote" text="&#8220;"/>
<l:dingbat key="endquote" text="&#8221;"/>
<l:dingbat key="nestedstartquote" text="&#8216;"/>
<l:dingbat key="nestedendquote" text="&#8217;"/>
<l:dingbat key="singlestartquote" text="&#8216;" lang="en"/>
<l:dingbat key="singleendquote" text="&#8217;" lang="en"/>
<l:dingbat key="bullet" text="&#8226;"/>
<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&#248;rgsm&#229;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.&#160;%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&#248;rgsm&#229;l %n"/>
<l:template name="qandaset" text="%t"/>
<l:template name="question" text="Sp&#248;rgsm&#229;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 &#8220;%t&#8221;"/>
<l:template name="refsection" text="&#8220;%t&#8221;"/>
<l:template name="refsect1" text="&#8220;%t&#8221;"/>
<l:template name="refsect2" text="&#8220;%t&#8221;"/>
<l:template name="refsect3" text="&#8220;%t&#8221;"/>
<l:template name="sect1" text="&#8220;%t&#8221;"/>
<l:template name="sect2" text="&#8220;%t&#8221;"/>
<l:template name="sect3" text="&#8220;%t&#8221;"/>
<l:template name="sect4" text="&#8220;%t&#8221;"/>
<l:template name="sect5" text="&#8220;%t&#8221;"/>
<l:template name="section" text="&#8220;%t&#8221;"/>
<l:template name="simplesect" text="&#8220;%t&#8221;"/>
</l:context>
<l:context name="xref-number">
<l:template name="answer" text="Svar&#160;%n"/>
<l:template name="appendix" text="Appendiks&#160;%n"/>
<l:template name="bridgehead" text="Afsnit&#160;%n"/>
<l:template name="chapter" text="Kapitel&#160;%n"/>
<l:template name="equation" text="Ligning&#160;%n"/>
<l:template name="example" text="Eksempel&#160;%n"/>
<l:template name="figure" text="Figur&#160;%n"/>
<l:template name="part" text="Del&#160;%n"/>
<l:template name="procedure" text="Procedure&#160;%n"/>
<l:template name="productionset" text="Produktion&#160;%n"/>
<l:template name="qandadiv" text="Q &amp; A&#160;%n"/>
<l:template name="qandaentry" text="Sp&#248;rgsm&#229;l&#160;%n"/>
<l:template name="question" text="Sp&#248;rgsm&#229;l&#160;%n"/>
<l:template name="sect1" text="Afsnit&#160;%n"/>
<l:template name="sect2" text="Afsnit&#160;%n"/>
<l:template name="sect3" text="Afsnit&#160;%n"/>
<l:template name="sect4" text="Afsnit&#160;%n"/>
<l:template name="sect5" text="Afsnit&#160;%n"/>
<l:template name="section" text="Afsnit&#160;%n"/>
<l:template name="table" text="Tabel&#160;%n"/>
</l:context>
<l:context name="xref-number-and-title">
<l:template name="appendix" text="Appendiks&#160;%n, %t"/>
<l:template name="bridgehead" text="Afsnit&#160;%n, &#8220;%t&#8221;"/>
<l:template name="chapter" text="Kapitel&#160;%n, %t"/>
<l:template name="equation" text="Ligning&#160;%n, &#8220;%t&#8221;"/>
<l:template name="example" text="Eksempel&#160;%n, &#8220;%t&#8221;"/>
<l:template name="figure" text="Figur&#160;%n, &#8220;%t&#8221;"/>
<l:template name="part" text="Del&#160;%n, &#8220;%t&#8221;"/>
<l:template name="procedure" text="Procedure&#160;%n, &#8220;%t&#8221;"/>
<l:template name="productionset" text="Produktion&#160;%n, &#8220;%t&#8221;"/>
<l:template name="qandadiv" text="Q &amp; A&#160;%n, &#8220;%t&#8221;"/>
<l:template name="refsect1" text="afsnittet der hedder &#8220;%t&#8221;"/>
<l:template name="refsect2" text="afsnittet der hedder &#8220;%t&#8221;"/>
<l:template name="refsect3" text="afsnittet der hedder &#8220;%t&#8221;"/>
<l:template name="refsection" text="afsnittet der hedder &#8220;%t&#8221;"/>
<l:template name="sect1" text="Afsnit&#160;%n, &#8220;%t&#8221;"/>
<l:template name="sect2" text="Afsnit&#160;%n, &#8220;%t&#8221;"/>
<l:template name="sect3" text="Afsnit&#160;%n, &#8220;%t&#8221;"/>
<l:template name="sect4" text="Afsnit&#160;%n, &#8220;%t&#8221;"/>
<l:template name="sect5" text="Afsnit&#160;%n, &#8220;%t&#8221;"/>
<l:template name="section" text="Afsnit&#160;%n, &#8220;%t&#8221;"/>
<l:template name="simplesect" text="afsnittet der hedder &#8220;%t&#8221;"/>
<l:template name="table" text="Tabel&#160;%n, &#8220;%t&#8221;"/>
</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&#229; "/>
</l:context>
<l:context name="msgset">
<l:template name="MsgAud" text="M&#229;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&#248;rdag"/>
<l:template name="Sunday" text="S&#248;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&#248;r"/>
<l:template name="Sun" text="S&#248;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">&#198;</l:l>
<l:l i="27">&#230;</l:l>
<l:l i="28">&#216;</l:l>
<l:l i="28">&#248;</l:l>
<l:l i="29">&#197;</l:l>
<l:l i="29">&#229;</l:l>
</l:letters>
</l:l10n>

View File

@ -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&#246;ffentlicht"/>
<l:gentext key="pubdate" text="Ver&#246;ffentlicht"/>
<l:gentext key="Published" text="Ver&#246;ffentlicht"/>
<l:gentext key="published" text="Ver&#246;ffentlicht"/>
<l:gentext key="Qandadiv" text="F &amp; A"/>
<l:gentext key="qandadiv" text="F &amp; 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&#223;noten"/>
<l:gentext key="Notes" text="Fu&#223;noten"/>
<l:gentext key="Pgs" text="Seiten"/>
<l:gentext key="pgs" text="Seiten"/>
<l:gentext key="Revisedby" text="Ge&#228;ndert durch: "/>
<l:gentext key="revisedby" text="Ge&#228;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&#252;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&#252;ck"/>
<l:gentext key="nav-prev-sibling" text="Schnell zur&#252;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&#228;&#246;&#252;&#223;"/>
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZ&#196;&#214;&#220;&#223;"/>
<l:dingbat key="startquote" text="&#8222;"/>
<l:dingbat key="endquote" text="&#8220;"/>
<l:dingbat key="nestedstartquote" text="&#8218;"/>
<l:dingbat key="nestedendquote" text="&#8216;"/>
<l:dingbat key="singlestartquote" text="&#8218;"/>
<l:dingbat key="singleendquote" text="&#8216;"/>
<l:dingbat key="bullet" text="&#8226;"/>
<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&#160;%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.&#160;%t"/>
<l:template name="bridgehead" text="%n.&#160;%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:&#160;%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:&#160;%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="&#8222;%t&#8220;"/>
<l:template name="refsection" text="&#8222;%t&#8220;"/>
<l:template name="refsect1" text="&#8222;%t&#8220;"/>
<l:template name="refsect2" text="&#8222;%t&#8220;"/>
<l:template name="refsect3" text="&#8222;%t&#8220;"/>
<l:template name="sect1" text="&#8222;%t&#8220;"/>
<l:template name="sect2" text="&#8222;%t&#8220;"/>
<l:template name="sect3" text="&#8222;%t&#8220;"/>
<l:template name="sect4" text="&#8222;%t&#8220;"/>
<l:template name="sect5" text="&#8222;%t&#8220;"/>
<l:template name="section" text="&#8222;%t&#8220;"/>
<l:template name="simplesect" text="&#8222;%t&#8220;"/>
</l:context>
<l:context name="xref-number">
<l:template name="answer" text="A:&#160;%n"/>
<l:template name="appendix" text="Anhang&#160;%n"/>
<l:template name="bridgehead" text="Abschnitt&#160;%n"/>
<l:template name="chapter" text="Kapitel&#160;%n"/>
<l:template name="equation" text="Gleichung&#160;%n"/>
<l:template name="example" text="Beispiel&#160;%n"/>
<l:template name="figure" text="Abbildung&#160;%n"/>
<l:template name="part" text="Teil&#160;%n"/>
<l:template name="procedure" text="Prozedur&#160;%n"/>
<l:template name="productionset" text="Produktion&#160;%n"/>
<l:template name="qandadiv" text="F &amp; A&#160;%n"/>
<l:template name="qandaentry" text="F:&#160;%n"/>
<l:template name="question" text="F:&#160;%n"/>
<l:template name="sect1" text="Abschnitt&#160;%n"/>
<l:template name="sect2" text="Abschnitt&#160;%n"/>
<l:template name="sect3" text="Abschnitt&#160;%n"/>
<l:template name="sect4" text="Abschnitt&#160;%n"/>
<l:template name="sect5" text="Abschnitt&#160;%n"/>
<l:template name="section" text="Abschnitt&#160;%n"/>
<l:template name="table" text="Tabelle&#160;%n"/>
</l:context>
<l:context name="xref-number-and-title">
<l:template name="appendix" text="Anhang&#160;%n, %t"/>
<l:template name="bridgehead" text="Abschnitt&#160;%n, &#8222;%t&#8220;"/>
<l:template name="chapter" text="Kapitel&#160;%n, %t"/>
<l:template name="equation" text="Gleichung&#160;%n, &#8222;%t&#8220;"/>
<l:template name="example" text="Beispiel&#160;%n, &#8222;%t&#8220;"/>
<l:template name="figure" text="Abbildung&#160;%n, &#8222;%t&#8220;"/>
<l:template name="part" text="Teil&#160;%n, &#8222;%t&#8220;"/>
<l:template name="procedure" text="Prozedur&#160;%n, &#8222;%t&#8220;"/>
<l:template name="productionset" text="Produktion&#160;%n, &#8222;%t&#8220;"/>
<l:template name="qandadiv" text="F &amp; A&#160;%n, &#8222;%t&#8220;"/>
<l:template name="refsect1" text="der Abschnitt namens &#8222;%t&#8220;"/>
<l:template name="refsect2" text="der Abschnitt namens &#8222;%t&#8220;"/>
<l:template name="refsect3" text="der Abschnitt namens &#8222;%t&#8220;"/>
<l:template name="refsection" text="der Abschnitt namens &#8222;%t&#8220;"/>
<l:template name="sect1" text="Abschnitt&#160;%n, &#8222;%t&#8220;"/>
<l:template name="sect2" text="Abschnitt&#160;%n, &#8222;%t&#8220;"/>
<l:template name="sect3" text="Abschnitt&#160;%n, &#8222;%t&#8220;"/>
<l:template name="sect4" text="Abschnitt&#160;%n, &#8222;%t&#8220;"/>
<l:template name="sect5" text="Abschnitt&#160;%n, &#8222;%t&#8220;"/>
<l:template name="section" text="Abschnitt&#160;%n, &#8222;%t&#8220;"/>
<l:template name="simplesect" text="der Abschnitt namens &#8222;%t&#8220;"/>
<l:template name="table" text="Tabelle&#160;%n, &#8222;%t&#8220;"/>
</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&#228;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">&#196;</l:l>
<l:l i="1">&#228;</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">&#214;</l:l>
<l:l i="15">&#246;</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">&#220;</l:l>
<l:l i="21">&#252;</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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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&#233;ndice"/>
<l:gentext key="appendix" text="ap&#233;ndice"/>
<l:gentext key="Article" text="Art&#237;culo"/>
<l:gentext key="article" text="art&#237;culo"/>
<l:gentext key="Bibliography" text="Bibliograf&#237;a"/>
<l:gentext key="bibliography" text="bibliograf&#237;a"/>
<l:gentext key="Book" text="Libro"/>
<l:gentext key="book" text="libro"/>
<l:gentext key="CAUTION" text="ATENCI&#211;N"/>
<l:gentext key="Caution" text="Atenci&#243;n"/>
<l:gentext key="caution" text="atenci&#243;n"/>
<l:gentext key="Chapter" text="Cap&#237;tulo"/>
<l:gentext key="chapter" text="cap&#237;tulo"/>
<l:gentext key="Colophon" text="Colof&#243;n"/>
<l:gentext key="colophon" text="colof&#243;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&#243;n"/>
<l:gentext key="edition" text="edici&#243;n"/>
<l:gentext key="Equation" text="Ecuaci&#243;n"/>
<l:gentext key="equation" text="ecuaci&#243;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&#233;n"/>
<l:gentext key="glossseealso" text="ver tambi&#233;n"/>
<l:gentext key="IMPORTANT" text="IMPORTANTE"/>
<l:gentext key="important" text="importante"/>
<l:gentext key="Important" text="Importante"/>
<l:gentext key="Index" text="&#205;ndice"/>
<l:gentext key="index" text="&#237;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&#243;n"/>
<l:gentext key="PubDate" text="Fecha de publicaci&#243;n"/>
<l:gentext key="pubdate" text="fecha de publicaci&#243;n"/>
<l:gentext key="Published" text="Publicado"/>
<l:gentext key="published" text="publicado"/>
<l:gentext key="Qandadiv" text="Q &amp; A" lang="en"/>
<l:gentext key="qandadiv" text="Q &amp; 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&#243;n de referencia"/>
<l:gentext key="refsection" text="secci&#243;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&#243;n"/>
<l:gentext key="Revision" text="Revisi&#243;n"/>
<l:gentext key="sect1" text="Secci&#243;n"/>
<l:gentext key="sect2" text="Secci&#243;n"/>
<l:gentext key="sect3" text="Secci&#243;n"/>
<l:gentext key="sect4" text="Secci&#243;n"/>
<l:gentext key="sect5" text="Secci&#243;n"/>
<l:gentext key="section" text="secci&#243;n"/>
<l:gentext key="Section" text="Secci&#243;n"/>
<l:gentext key="see" text="ver"/>
<l:gentext key="See" text="Ver"/>
<l:gentext key="seealso" text="ver tambi&#233;n"/>
<l:gentext key="Seealso" text="Ver tambi&#233;n"/>
<l:gentext key="SeeAlso" text="Ver Tambi&#233;n"/>
<l:gentext key="set" text="conjunto"/>
<l:gentext key="Set" text="Conjunto"/>
<l:gentext key="setindex" text="&#237;ndice del conjunto"/>
<l:gentext key="SetIndex" text="&#205;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&#243;n llamada"/>
<l:gentext key="index symbols" text="S&#237;mbolos"/>
<l:gentext key="lowercase.alpha" text="abcdefghijklmnopqrstuvwxyz&#225;&#233;&#237;&#243;&#250;&#241;"/>
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZ&#193;&#201;&#205;&#211;&#218;&#209;"/>
<l:dingbat key="startquote" text="&#8220;"/>
<l:dingbat key="endquote" text="&#8221;"/>
<l:dingbat key="nestedstartquote" text="&#8216;"/>
<l:dingbat key="nestedendquote" text="&#8217;"/>
<l:dingbat key="singlestartquote" text="&#8216;" lang="en"/>
<l:dingbat key="singleendquote" text="&#8217;" lang="en"/>
<l:dingbat key="bullet" text="&#8226;"/>
<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&#233;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&#237;tulo %n. %t"/>
<l:template name="colophon" text="%t"/>
<l:template name="dedication" text="%t"/>
<l:template name="equation" text="Ecuaci&#243;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&#243;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&#233;ndice %n. %t"/>
<l:template name="article/appendix" text="%n.&#160;%t" lang="en"/>
<l:template name="bridgehead" text="%n. %t"/>
<l:template name="chapter" text="Cap&#237;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:&#160;%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:&#160;%n"/>
<l:template name="qandaset" text="%t"/>
<l:template name="question" text="P:&#160;%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="&#8220;%t&#8221;"/>
<l:template name="refsection" text="&#8220;%t&#8221;"/>
<l:template name="refsect1" text="&#8220;%t&#8221;"/>
<l:template name="refsect2" text="&#8220;%t&#8221;"/>
<l:template name="refsect3" text="&#8220;%t&#8221;"/>
<l:template name="sect1" text="&#8220;%t&#8221;"/>
<l:template name="sect2" text="&#8220;%t&#8221;"/>
<l:template name="sect3" text="&#8220;%t&#8221;"/>
<l:template name="sect4" text="&#8220;%t&#8221;"/>
<l:template name="sect5" text="&#8220;%t&#8221;"/>
<l:template name="section" text="&#8220;%t&#8221;"/>
<l:template name="simplesect" text="&#8220;%t&#8221;"/>
</l:context>
<l:context name="xref-number">
<l:template name="answer" text="R:&#160;%n"/>
<l:template name="appendix" text="Ap&#233;ndice&#160;%n"/>
<l:template name="bridgehead" text="Secci&#243;n&#160;%n"/>
<l:template name="chapter" text="Cap&#237;tulo&#160;%n"/>
<l:template name="equation" text="Ecuaci&#243;n&#160;%n"/>
<l:template name="example" text="Ejemplo&#160;%n"/>
<l:template name="figure" text="Figura&#160;%n"/>
<l:template name="part" text="Parte&#160;%n"/>
<l:template name="procedure" text="Procedimiento&#160;%n"/>
<l:template name="productionset" text="Producci&#243;n&#160;%n"/>
<l:template name="qandadiv" text="Q &amp; A&#160;%n"/>
<l:template name="qandaentry" text="P:&#160;%n"/>
<l:template name="question" text="P:&#160;%n"/>
<l:template name="sect1" text="Secci&#243;n&#160;%n"/>
<l:template name="sect2" text="Secci&#243;n&#160;%n"/>
<l:template name="sect3" text="Secci&#243;n&#160;%n"/>
<l:template name="sect4" text="Secci&#243;n&#160;%n"/>
<l:template name="sect5" text="Secci&#243;n&#160;%n"/>
<l:template name="section" text="Secci&#243;n&#160;%n"/>
<l:template name="table" text="Tabla&#160;%n"/>
</l:context>
<l:context name="xref-number-and-title">
<l:template name="appendix" text="Ap&#233;ndice&#160;%n, %t"/>
<l:template name="bridgehead" text="Secci&#243;n&#160;%n, &#8220;%t&#8221;"/>
<l:template name="chapter" text="Cap&#237;tulo&#160;%n, %t"/>
<l:template name="equation" text="Ecuaci&#243;n&#160;%n, &#8220;%t&#8221;"/>
<l:template name="example" text="Ejemplo&#160;%n, &#8220;%t&#8221;"/>
<l:template name="figure" text="Figura&#160;%n, &#8220;%t&#8221;"/>
<l:template name="part" text="Parte&#160;%n, &#8220;%t&#8221;"/>
<l:template name="procedure" text="Procedimiento&#160;%n, &#8220;%t&#8221;"/>
<l:template name="productionset" text="Producci&#243;n&#160;%n, &#8220;%t&#8221;"/>
<l:template name="qandadiv" text="Q &amp; A&#160;%n, &#8220;%t&#8221;"/>
<l:template name="refsect1" text="secci&#243;n llamada &#8220;%t&#8221;"/>
<l:template name="refsect2" text="secci&#243;n llamada &#8220;%t&#8221;"/>
<l:template name="refsect3" text="secci&#243;n llamada &#8220;%t&#8221;"/>
<l:template name="refsection" text="secci&#243;n llamada &#8220;%t&#8221;"/>
<l:template name="sect1" text="Secci&#243;n&#160;%n, &#8220;%t&#8221;"/>
<l:template name="sect2" text="Secci&#243;n&#160;%n, &#8220;%t&#8221;"/>
<l:template name="sect3" text="Secci&#243;n&#160;%n, &#8220;%t&#8221;"/>
<l:template name="sect4" text="Secci&#243;n&#160;%n, &#8220;%t&#8221;"/>
<l:template name="sect5" text="Secci&#243;n&#160;%n, &#8220;%t&#8221;"/>
<l:template name="section" text="Secci&#243;n&#160;%n, &#8220;%t&#8221;"/>
<l:template name="simplesect" text="secci&#243;n llamada &#8220;%t&#8221;"/>
<l:template name="table" text="Tabla&#160;%n, &#8220;%t&#8221;"/>
</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&#233;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&#237;mbolos</l:l>
<l:l i="1">A</l:l>
<l:l i="1">a</l:l>
<l:l i="1">&#225;</l:l>
<l:l i="1">&#193;</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">&#201;</l:l>
<l:l i="6">&#233;</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">&#205;</l:l>
<l:l i="10">&#237;</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">&#209;</l:l>
<l:l i="17">&#241;</l:l>
<l:l i="18">O</l:l>
<l:l i="18">o</l:l>
<l:l i="18">&#211;</l:l>
<l:l i="18">&#243;</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">&#218;</l:l>
<l:l i="24">&#250;</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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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&#233;sum&#233;"/>
<l:gentext key="abstract" text="R&#233;sum&#233;"/>
<l:gentext key="Answer" text="R&#160;:"/>
<l:gentext key="answer" text="R&#160;:"/>
<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&#233;dicace"/>
<l:gentext key="dedication" text="D&#233;dicace"/>
<l:gentext key="Edition" text="&#201;dition"/>
<l:gentext key="edition" text="&#201;dition"/>
<l:gentext key="Equation" text="&#201;quation"/>
<l:gentext key="equation" text="&#201;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&#233;gale"/>
<l:gentext key="legalnotice" text="Note l&#233;gale"/>
<l:gentext key="MsgAud" text="Public vis&#233;"/>
<l:gentext key="msgaud" text="Public vis&#233;"/>
<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&#233;face"/>
<l:gentext key="preface" text="Pr&#233;face"/>
<l:gentext key="Procedure" text="Proc&#233;dure"/>
<l:gentext key="procedure" text="Proc&#233;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&#233;"/>
<l:gentext key="published" text="Publi&#233;"/>
<l:gentext key="Qandadiv" text="Q &amp; R"/>
<l:gentext key="qandadiv" text="Q &amp; R"/>
<l:gentext key="Question" text="Q&#160;:"/>
<l:gentext key="question" text="Q&#160;:"/>
<l:gentext key="RefEntry" text=""/>
<l:gentext key="refentry" text=""/>
<l:gentext key="Reference" text="R&#233;f&#233;rence"/>
<l:gentext key="reference" text="R&#233;f&#233;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="&#233;tape"/>
<l:gentext key="Step" text="&#201;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&#233;"/>
<l:gentext key="Edited" text="Publi&#233;"/>
<l:gentext key="edited" text="Publi&#233;"/>
<l:gentext key="Editedby" text="Publi&#233; par"/>
<l:gentext key="editedby" text="Publi&#233; par"/>
<l:gentext key="in" text="dans"/>
<l:gentext key="lastlistcomma" text=","/>
<l:gentext key="listcomma" text=","/>
<l:gentext key="nonexistantelement" text="Cet &#233;l&#233;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&#160;: "/>
<l:gentext key="revisedby" text="Revu par&#160;: "/>
<l:gentext key="TableNotes" text="Remarques"/>
<l:gentext key="tablenotes" text="Remarques"/>
<l:gentext key="TableofContents" text="Table des mati&#232;res"/>
<l:gentext key="tableofcontents" text="Table des mati&#232;res"/>
<l:gentext key="the" text=""/>
<l:gentext key="unexpectedelementname" text="Nom d'&#233;l&#233;ment non attendu"/>
<l:gentext key="unsupported" text="Non reconnu par le syst&#232;me"/>
<l:gentext key="xrefto" text="R&#233;f&#233;rence vers"/>
<l:gentext key="listofequations" text="Liste des &#233;quations"/>
<l:gentext key="ListofEquations" text="Liste des &#233;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&#233;dures"/>
<l:gentext key="listofprocedures" text="Liste des proc&#233;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&#233;c&#233;dent"/>
<l:gentext key="nav-prev-sibling" text="Arri&#232;re rapide"/>
<l:gentext key="nav-up" text="Niveau sup&#233;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&#233;e"/>
<l:gentext key="index symbols" text="Symboles"/>
<l:gentext key="lowercase.alpha" text="abcdefghijklmnopqrstuvwxyz&#226;&#234;&#238;&#244;&#251;&#235;&#239;&#252;&#224;&#232;&#249;&#233;&#231;&#230;&#339;"/>
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZ&#194;&#202;&#206;&#212;&#219;&#203;&#207;&#220;&#192;&#200;&#217;&#201;&#199;&#198;&#338;"/>
<l:dingbat key="startquote" text="&#171;&#160;"/>
<l:dingbat key="endquote" text="&#160;&#187;"/>
<l:dingbat key="nestedstartquote" text="&#171;&#160;"/>
<l:dingbat key="nestedendquote" text="&#160;&#187;"/>
<l:dingbat key="singlestartquote" text="&#8249;"/>
<l:dingbat key="singleendquote" text="&#8250;"/>
<l:dingbat key="bullet" text="&#8226;"/>
<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&#160;%n.&#160;%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&#160;%n.&#160;%t"/>
<l:template name="colophon" text="%t"/>
<l:template name="dedication" text="%t"/>
<l:template name="equation" text="&#201;quation&#160;%n.&#160;%t"/>
<l:template name="example" text="Exemple&#160;%n.&#160;%t"/>
<l:template name="figure" text="Figure&#160;%n.&#160;%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&#233;dure&#160;%n.&#160;%t"/>
<l:template name="productionset" text="%t"/>
<l:template name="productionset.formal" text="Production&#160;%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&#160;%n.&#160;%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&#160;%n.&#160;%t"/>
<l:template name="article/appendix" text="%n.&#160;%t"/>
<l:template name="bridgehead" text="%n.&#160;%t"/>
<l:template name="chapter" text="Chapitre&#160;%n.&#160;%t"/>
<l:template name="sect1" text="%n.&#160;%t"/>
<l:template name="sect2" text="%n.&#160;%t"/>
<l:template name="sect3" text="%n.&#160;%t"/>
<l:template name="sect4" text="%n.&#160;%t"/>
<l:template name="sect5" text="%n.&#160;%t"/>
<l:template name="section" text="%n.&#160;%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&#160;:&#160;%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&#160;:&#160;%n"/>
<l:template name="qandaset" text="%t"/>
<l:template name="question" text="Q&#160;:&#160;%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&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="refsection" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="refsect1" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="refsect2" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="refsect3" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="sect1" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="sect2" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="sect3" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="sect4" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="sect5" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="section" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="simplesect" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
</l:context>
<l:context name="xref-number">
<l:template name="answer" text="R&#160;:&#160;%n"/>
<l:template name="appendix" text="Annexe&#160;%n"/>
<l:template name="bridgehead" text="Section&#160;%n"/>
<l:template name="chapter" text="Chapitre&#160;%n"/>
<l:template name="equation" text="&#201;quation&#160;%n"/>
<l:template name="example" text="Exemple&#160;%n"/>
<l:template name="figure" text="Figure&#160;%n"/>
<l:template name="part" text="Partie&#160;%n"/>
<l:template name="procedure" text="Proc&#233;dure&#160;%n"/>
<l:template name="productionset" text="Production&#160;%n"/>
<l:template name="qandadiv" text="Q &amp; R&#160;%n"/>
<l:template name="qandaentry" text="Q&#160;:&#160;%n"/>
<l:template name="question" text="Q&#160;:&#160;%n"/>
<l:template name="sect1" text="Section&#160;%n"/>
<l:template name="sect2" text="Section&#160;%n"/>
<l:template name="sect3" text="Section&#160;%n"/>
<l:template name="sect4" text="Section&#160;%n"/>
<l:template name="sect5" text="Section&#160;%n"/>
<l:template name="section" text="Section&#160;%n"/>
<l:template name="table" text="Tableau&#160;%n"/>
</l:context>
<l:context name="xref-number-and-title">
<l:template name="appendix" text="Annexe&#160;%n, %t"/>
<l:template name="bridgehead" text="Section&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="chapter" text="Chapitre&#160;%n, %t"/>
<l:template name="equation" text="&#201;quation&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="example" text="Exemple&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="figure" text="Figure&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="part" text="Partie&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="procedure" text="Proc&#233;dure&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="productionset" text="Production&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="qandadiv" text="Q &amp; R&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="refsect1" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="refsect2" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="refsect3" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="refsection" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="sect1" text="Section&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="sect2" text="Section&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="sect3" text="Section&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="sect4" text="Section&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="sect5" text="Section&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="section" text="Section&#160;%n, &#171;&#160;%t&#160;&#187;"/>
<l:template name="simplesect" text="la section intitul&#233;e &#171;&#160;%t&#160;&#187;"/>
<l:template name="table" text="Tableau&#160;%n, &#171;&#160;%t&#160;&#187;"/>
</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&#233;: "/>
<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&#233;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&#251;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&#233;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&#233;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&#251;"/>
<l:template name="Sep" text="sep"/>
<l:template name="Oct" text="oct"/>
<l:template name="Nov" text="nov"/>
<l:template name="Dec" text="d&#233;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">&#224;</l:l>
<l:l i="1">&#192;</l:l>
<l:l i="1">&#226;</l:l>
<l:l i="1">&#194;</l:l>
<l:l i="1">&#198;</l:l>
<l:l i="1">&#230;</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">&#231;</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">&#234;</l:l>
<l:l i="5">&#202;</l:l>
<l:l i="5">&#233;</l:l>
<l:l i="5">&#201;</l:l>
<l:l i="5">&#232;</l:l>
<l:l i="5">&#200;</l:l>
<l:l i="5">&#235;</l:l>
<l:l i="5">&#203;</l:l>
<l:l i="5">&#8364;</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">&#206;</l:l>
<l:l i="9">&#238;</l:l>
<l:l i="9">&#207;</l:l>
<l:l i="9">&#239;</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">&#214;</l:l>
<l:l i="15">&#246;</l:l>
<l:l i="15">&#338;</l:l>
<l:l i="15">&#339;</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">&#217;</l:l>
<l:l i="21">&#249;</l:l>
<l:l i="21">&#219;</l:l>
<l:l i="21">&#251;</l:l>
<l:l i="21">&#220;</l:l>
<l:l i="21">&#252;</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>

View File

@ -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>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More