Initial import of the Hibernate3 module
git-svn-id: https://svn.jboss.org/repos/hibernate/trunk/Hibernate3/doc@3890 1b8cb986-b30d-0410-93ca-fae66ebed9b2
|
@ -0,0 +1,117 @@
|
||||||
|
/* Javadoc style sheet */
|
||||||
|
|
||||||
|
/* Define colors, fonts and other style attributes here to override the defaults */
|
||||||
|
|
||||||
|
/* Page background color */
|
||||||
|
body { font-family: Arial;
|
||||||
|
background-color: white;
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
td { font-family: Arial;
|
||||||
|
font-size: 10pt;
|
||||||
|
}
|
||||||
|
/* Table colors */
|
||||||
|
.TableHeadingColor { background: #F4F4F4 }
|
||||||
|
.TableSubHeadingColor { background: #F4F4F4 }
|
||||||
|
.TableRowColor { background: #FFFFFF }
|
||||||
|
|
||||||
|
/* Font used in left-hand frame lists */
|
||||||
|
.FrameTitleFont { font-size: normal; font-family: Arial }
|
||||||
|
.FrameHeadingFont { font-size: normal; font-family: Arial }
|
||||||
|
.FrameItemFont { font-size: normal; font-family: Arial }
|
||||||
|
|
||||||
|
/* Example of smaller, sans-serif font in frames */
|
||||||
|
/* .FrameItemFont { font-size: 10pt; font-family: Helvetica, Arial, sans-serif } */
|
||||||
|
|
||||||
|
/* Navigation bar fonts and colors */
|
||||||
|
.NavBarCell1 { background-color:#F4F4F4;}
|
||||||
|
.NavBarCell1Rev { background-color:silver;}
|
||||||
|
|
||||||
|
.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;}
|
||||||
|
.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;}
|
||||||
|
|
||||||
|
.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
|
||||||
|
.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF;}
|
||||||
|
|
||||||
|
A {
|
||||||
|
color: #003399;
|
||||||
|
}
|
||||||
|
|
||||||
|
A:active {
|
||||||
|
color: #003399;
|
||||||
|
}
|
||||||
|
|
||||||
|
A:visited {
|
||||||
|
color: #888888;
|
||||||
|
}
|
||||||
|
|
||||||
|
P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
TD, TH, SPAN {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
BLOCKQUOTE {
|
||||||
|
margin-right: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*H1, H2, H3, H4, H5, H6 {
|
||||||
|
color: #000000;
|
||||||
|
font-weight:500;
|
||||||
|
margin-top:10px;
|
||||||
|
padding-top:15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
H1 { font-size: 150%; }
|
||||||
|
H2 { font-size: 140%; }
|
||||||
|
H3 { font-size: 110%; font-weight: bold; }
|
||||||
|
H4 { font-size: 110%; font-weight: bold;}
|
||||||
|
H5 { font-size: 100%; font-style: italic; }
|
||||||
|
H6 { font-size: 100%; font-style: italic; }*/
|
||||||
|
|
||||||
|
TT {
|
||||||
|
font-size: 90%;
|
||||||
|
font-family: "Courier New", Courier, monospace;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRE {
|
||||||
|
font-size: 90%;
|
||||||
|
padding: 5px;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
border-color: #CCCCCC;
|
||||||
|
background-color: #F4F4F4;
|
||||||
|
}
|
||||||
|
|
||||||
|
UL, OL, LI {
|
||||||
|
list-style: disc;
|
||||||
|
}
|
||||||
|
|
||||||
|
HR {
|
||||||
|
width: 100%;
|
||||||
|
height: 1px;
|
||||||
|
background-color: #CCCCCC;
|
||||||
|
border-width: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
color: #CCCCCC;
|
||||||
|
}
|
||||||
|
|
||||||
|
.variablelist {
|
||||||
|
padding-top: 10;
|
||||||
|
padding-bottom:10;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemizedlist, UL {
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom:0;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.term {
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
|
@ -0,0 +1,39 @@
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<h2>Hibernate API</h2>
|
||||||
|
|
||||||
|
This documentation concentrates upon the following <b>Core API</b> interfaces:
|
||||||
|
<li><tt>net.sf.hibernate.Hibernate</tt></li>
|
||||||
|
<li><tt>net.sf.hibernate.Session</tt></li>
|
||||||
|
<li><tt>net.sf.hibernate.SessionFactory</tt></li>
|
||||||
|
<li><tt>net.sf.hibernate.Transaction</tt></li>
|
||||||
|
<li><tt>net.sf.hibernate.Query</tt></li>
|
||||||
|
<li><tt>net.sf.hibernate.Criteria</tt></li>
|
||||||
|
<li><tt>net.sf.hibernate.ScrollableResults</tt></li>
|
||||||
|
<li><tt>net.sf.hibernate.cfg.Configuration</tt></li>
|
||||||
|
<li><tt>net.sf.hibernate.expression.Expression</tt></li>
|
||||||
|
<li><tt>net.sf.hibernate.expression.Order</tt></li>
|
||||||
|
<li><tt>net.sf.hibernate.expression.Example</tt></li>
|
||||||
|
These interfaces are fully intended to be exposed to application code.<br>
|
||||||
|
<br>
|
||||||
|
The <b>Extension API</b> is intended to be used by application programmers
|
||||||
|
to extend Hibernate functionality. None of these interfaces are intended
|
||||||
|
to be called by the application - they are called internally by Hibernate.
|
||||||
|
This API is less stable than the Core API. The safest way to extend
|
||||||
|
functionality is to contribute extensions back to the project; that way
|
||||||
|
extensions will be updated when the Extension API changes.<br>
|
||||||
|
<br>
|
||||||
|
Full Hibernate documentation may be found at
|
||||||
|
<a href="http://hibernate.org">hibernate.org</a>.
|
||||||
|
@see net.sf.hibernate.Hibernate
|
||||||
|
@see net.sf.hibernate.Session
|
||||||
|
@see net.sf.hibernate.SessionFactory
|
||||||
|
@see net.sf.hibernate.Transaction
|
||||||
|
@see net.sf.hibernate.Query
|
||||||
|
@see net.sf.hibernate.Criteria
|
||||||
|
@see net.sf.hibernate.ScrollableResults
|
||||||
|
@see net.sf.hibernate.cfg.Configuration
|
||||||
|
@see net.sf.hibernate.expression.Expression
|
||||||
|
@see net.sf.hibernate.expression.Order
|
||||||
|
@see net.sf.hibernate.expression.Example
|
||||||
|
</body>
|
|
@ -0,0 +1,9 @@
|
||||||
|
We're using the DocBook XSL distribution for HTML and PDF
|
||||||
|
generation. The best results can be achieved with the
|
||||||
|
Saxon XSLT processor (don't use Xalan!) and the Apache
|
||||||
|
FOP library.
|
||||||
|
|
||||||
|
The documentation is generated with the distribution
|
||||||
|
build.xml target 'doc<pdf|html|htmlsingle>'.
|
||||||
|
|
||||||
|
christian@hibernate.org
|
|
@ -0,0 +1,146 @@
|
||||||
|
<project name="HibernateDocumentation" default="all.doc" basedir=".">
|
||||||
|
|
||||||
|
<!-- Set build directories for all formats. -->
|
||||||
|
<property name="build.dir" value="${basedir}/build"/>
|
||||||
|
|
||||||
|
<!-- Support files for build process. -->
|
||||||
|
<property name="support.dir" value="${basedir}/support"/>
|
||||||
|
|
||||||
|
<!-- Set DocBook stylesheets. -->
|
||||||
|
<property name="db.style.fopdf" value="fopdf.xsl"/>
|
||||||
|
<property name="db.style.html" value="html_chunk.xsl"/>
|
||||||
|
<property name="db.style.htmlsingle" value="html.xsl"/>
|
||||||
|
|
||||||
|
<!-- Classpath for the build tools. -->
|
||||||
|
<path id="lib.classpath">
|
||||||
|
<fileset dir="${support.dir}/lib">
|
||||||
|
<include name="**/*.jar"/>
|
||||||
|
</fileset>
|
||||||
|
</path>
|
||||||
|
|
||||||
|
<!-- ################################################################## -->
|
||||||
|
|
||||||
|
<target name="all.doc"
|
||||||
|
depends="clean"
|
||||||
|
description="Compile documentation for all languages and all formats.">
|
||||||
|
|
||||||
|
<!-- TRANSLATOR: Duplicate this line for your language -->
|
||||||
|
<antcall target="lang.all"><param name="lang" value="en"/></antcall>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="all.revdiff"
|
||||||
|
description="Generates a diff report for all translated versions.">
|
||||||
|
|
||||||
|
<!-- TRANSLATOR: Duplicate this line for your language -->
|
||||||
|
<antcall target="lang.revdiff"><param name="lang" value="de"/></antcall>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<!-- ################################################################## -->
|
||||||
|
|
||||||
|
<target name="clean">
|
||||||
|
|
||||||
|
<!-- Delete build directory. -->
|
||||||
|
<delete dir="${build.dir}"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="lang.all">
|
||||||
|
<!-- Compile the documentation for a single language in all formats. -->
|
||||||
|
<antcall target="lang.docpdf"/>
|
||||||
|
<antcall target="lang.dochtml"/>
|
||||||
|
<antcall target="lang.dochtmlsingle"/>
|
||||||
|
<antcall target="lang.htmlmisc"/>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="lang.docpdf">
|
||||||
|
|
||||||
|
<!-- Copy all the images to the output location, will be removed later. -->
|
||||||
|
<copy todir="${build.dir}/${lang}/pdf/images">
|
||||||
|
<fileset dir="${basedir}/${lang}/images">
|
||||||
|
<include name="**/*.png"/>
|
||||||
|
<include name="**/*.svg"/>
|
||||||
|
<include name="**/*.gif"/>
|
||||||
|
</fileset>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
<!-- Create the XSL/FO temporary file. -->
|
||||||
|
<java classname="com.icl.saxon.StyleSheet" fork="true" dir="${basedir}">
|
||||||
|
<classpath refid="lib.classpath"/>
|
||||||
|
<arg value="-o"/>
|
||||||
|
<arg value="${build.dir}/${lang}/pdf/docbook_fop.tmp"/>
|
||||||
|
<arg value="${basedir}/${lang}/master.xml"/>
|
||||||
|
<arg value="${basedir}/${lang}/styles/${db.style.fopdf}"/>
|
||||||
|
</java>
|
||||||
|
|
||||||
|
<!-- Create a PDF from the XSL/FO. -->
|
||||||
|
<java classname="org.apache.fop.apps.Fop" fork="true" dir="${basedir}">
|
||||||
|
<classpath refid="lib.classpath"/>
|
||||||
|
<arg value="${build.dir}/${lang}/pdf/docbook_fop.tmp"/>
|
||||||
|
<arg value="${build.dir}/${lang}/pdf/hibernate_reference.pdf"/>
|
||||||
|
</java>
|
||||||
|
|
||||||
|
<!-- Delete temporary files. -->
|
||||||
|
<delete file="${build.dir}/${lang}/pdf/docbook_fop.tmp"/>
|
||||||
|
<delete dir="${build.dir}/${lang}/pdf/images"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="lang.dochtml">
|
||||||
|
|
||||||
|
<mkdir dir="${build.dir}/${lang}/html/"/>
|
||||||
|
|
||||||
|
<java classname="com.icl.saxon.StyleSheet" fork="true" dir="${build.dir}/${lang}/html">
|
||||||
|
<classpath refid="lib.classpath"/>
|
||||||
|
<arg value="${basedir}/${lang}/master.xml"/>
|
||||||
|
<arg value="${basedir}/${lang}/styles/${db.style.html}"/>
|
||||||
|
</java>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="lang.dochtmlsingle">
|
||||||
|
|
||||||
|
<mkdir dir="${build.dir}/${lang}/html_single/"/>
|
||||||
|
|
||||||
|
<java classname="com.icl.saxon.StyleSheet" fork="true" dir="${basedir}">
|
||||||
|
<classpath refid="lib.classpath"/>
|
||||||
|
<arg value="-o"/>
|
||||||
|
<arg value="${build.dir}/${lang}/html_single/index.html"/>
|
||||||
|
<arg value="${basedir}/${lang}/master.xml"/>
|
||||||
|
<arg value="${basedir}/${lang}/styles/${db.style.htmlsingle}"/>
|
||||||
|
</java>
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="lang.htmlmisc">
|
||||||
|
|
||||||
|
<!-- Copy images and CSS for HTML documentation, language specific. -->
|
||||||
|
<copy todir="${build.dir}/${lang}/shared/images">
|
||||||
|
<fileset dir="${basedir}/${lang}/images">
|
||||||
|
<include name="**/*.png"/>
|
||||||
|
<include name="**/*.gif"/>
|
||||||
|
</fileset>
|
||||||
|
</copy>
|
||||||
|
<copy todir="${build.dir}/${lang}/shared/css">
|
||||||
|
<fileset dir="${basedir}/${lang}/styles">
|
||||||
|
<include name="**/*.css"/>
|
||||||
|
</fileset>
|
||||||
|
</copy>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="lang.revdiff">
|
||||||
|
|
||||||
|
<taskdef name="revdiff"
|
||||||
|
classname="org.hibernate.docproc.revdiff.RevDiffReportTask"
|
||||||
|
classpathref="lib.classpath">
|
||||||
|
|
||||||
|
</taskdef>
|
||||||
|
|
||||||
|
<revdiff original="${basedir}/en/master.xml"
|
||||||
|
copy="${basedir}/${lang}/master.xml"
|
||||||
|
report="${build.dir}/status_${lang}.html"/>
|
||||||
|
|
||||||
|
</target>
|
||||||
|
|
||||||
|
|
||||||
|
</project>
|
After Width: | Height: | Size: 7.0 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 9.5 KiB |
After Width: | Height: | Size: 9.1 KiB |
|
@ -0,0 +1,429 @@
|
||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
|
||||||
|
[
|
||||||
|
<!ATTLIST svg
|
||||||
|
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
|
||||||
|
]>
|
||||||
|
<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
width="354.331"
|
||||||
|
height="336.614"
|
||||||
|
id="svg1">
|
||||||
|
<defs
|
||||||
|
id="defs3">
|
||||||
|
<linearGradient
|
||||||
|
x1="0"
|
||||||
|
y1="0"
|
||||||
|
x2="1"
|
||||||
|
y2="0"
|
||||||
|
id="linearGradient127"
|
||||||
|
gradientUnits="objectBoundingBox"
|
||||||
|
spreadMethod="pad">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop128" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop129" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="0"
|
||||||
|
y1="0"
|
||||||
|
x2="1"
|
||||||
|
y2="0"
|
||||||
|
id="linearGradient130"
|
||||||
|
xlink:href="#linearGradient127"
|
||||||
|
gradientUnits="objectBoundingBox"
|
||||||
|
spreadMethod="pad" />
|
||||||
|
<radialGradient
|
||||||
|
cx="0.5"
|
||||||
|
cy="0.5"
|
||||||
|
fx="0.5"
|
||||||
|
fy="0.5"
|
||||||
|
r="0.5"
|
||||||
|
id="radialGradient131"
|
||||||
|
xlink:href="#linearGradient127"
|
||||||
|
gradientUnits="objectBoundingBox"
|
||||||
|
spreadMethod="pad" />
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.823795,0,0,0.823795,0.120302,5.25349)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g659">
|
||||||
|
<rect
|
||||||
|
width="212.257"
|
||||||
|
height="57.2441"
|
||||||
|
x="17.9576"
|
||||||
|
y="100.132"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect137" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="13.4238"
|
||||||
|
y="95.9309"
|
||||||
|
transform="matrix(0.743454,0,0,0.482981,6.46949,52.2178)"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect132" />
|
||||||
|
</g>
|
||||||
|
<rect
|
||||||
|
width="325.86"
|
||||||
|
height="63.6537"
|
||||||
|
x="17.4083"
|
||||||
|
y="15.194"
|
||||||
|
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect136" />
|
||||||
|
<rect
|
||||||
|
width="325.86"
|
||||||
|
height="63.6537"
|
||||||
|
x="13.6713"
|
||||||
|
y="12.4966"
|
||||||
|
style="font-size:12;fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect126" />
|
||||||
|
<g
|
||||||
|
transform="matrix(1.14345,0,0,0.729078,-1.67818,105.325)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g164">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="77.2688"
|
||||||
|
x="16.6979"
|
||||||
|
y="222.966"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect138" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="77.2688"
|
||||||
|
x="14.7335"
|
||||||
|
y="221.002"
|
||||||
|
transform="translate(-1.30962,-1.30992)"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect133" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="170.824753"
|
||||||
|
y="58.402939"
|
||||||
|
transform="scale(0.823795,0.823795)"
|
||||||
|
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text183">
|
||||||
|
<tspan
|
||||||
|
x="170.824997"
|
||||||
|
y="58.402901"
|
||||||
|
id="tspan360">
|
||||||
|
Application</tspan>
|
||||||
|
</text>
|
||||||
|
<text
|
||||||
|
x="178.076340"
|
||||||
|
y="364.281433"
|
||||||
|
transform="scale(0.823795,0.823795)"
|
||||||
|
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text197">
|
||||||
|
<tspan
|
||||||
|
x="178.076004"
|
||||||
|
y="364.281006"
|
||||||
|
id="tspan421">
|
||||||
|
Database</tspan>
|
||||||
|
</text>
|
||||||
|
<text
|
||||||
|
x="68.605331"
|
||||||
|
y="138.524582"
|
||||||
|
transform="scale(0.823795,0.823795)"
|
||||||
|
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text216">
|
||||||
|
<tspan
|
||||||
|
x="68.605301"
|
||||||
|
y="138.524994"
|
||||||
|
id="tspan384">
|
||||||
|
SessionFactory</tspan>
|
||||||
|
</text>
|
||||||
|
<rect
|
||||||
|
width="67.0014"
|
||||||
|
height="101.35"
|
||||||
|
x="196.927"
|
||||||
|
y="89.2389"
|
||||||
|
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect387" />
|
||||||
|
<rect
|
||||||
|
width="67.0014"
|
||||||
|
height="101.35"
|
||||||
|
x="194.633"
|
||||||
|
y="86.4389"
|
||||||
|
style="font-size:12;fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect388" />
|
||||||
|
<text
|
||||||
|
x="249.108841"
|
||||||
|
y="173.885559"
|
||||||
|
transform="scale(0.823795,0.823795)"
|
||||||
|
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text389">
|
||||||
|
<tspan
|
||||||
|
x="249.108994"
|
||||||
|
y="173.886002"
|
||||||
|
id="tspan392">
|
||||||
|
Session</tspan>
|
||||||
|
</text>
|
||||||
|
<rect
|
||||||
|
width="73.0355"
|
||||||
|
height="101.35"
|
||||||
|
x="270.995"
|
||||||
|
y="90.0018"
|
||||||
|
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect395" />
|
||||||
|
<rect
|
||||||
|
width="73.0355"
|
||||||
|
height="101.35"
|
||||||
|
x="267.869"
|
||||||
|
y="87.2018"
|
||||||
|
style="font-size:12;fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect396" />
|
||||||
|
<text
|
||||||
|
x="328.593658"
|
||||||
|
y="174.715622"
|
||||||
|
transform="scale(0.823795,0.823795)"
|
||||||
|
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text397">
|
||||||
|
<tspan
|
||||||
|
x="328.593994"
|
||||||
|
y="174.716003"
|
||||||
|
id="tspan563">
|
||||||
|
Transaction</tspan>
|
||||||
|
</text>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.29544,0,0,0.397877,9.70533,103.96)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g565">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="16.6979"
|
||||||
|
y="99.2053"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect566" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="13.4238"
|
||||||
|
y="95.9309"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect567" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="25.592752"
|
||||||
|
y="204.497803"
|
||||||
|
transform="scale(0.823795,0.823795)"
|
||||||
|
style="font-size:10;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text568">
|
||||||
|
<tspan
|
||||||
|
x="25.592800"
|
||||||
|
y="204.498001"
|
||||||
|
id="tspan662">
|
||||||
|
TransactionFactory</tspan>
|
||||||
|
</text>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.298082,0,0,0.397877,99.6898,103.96)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g573">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="16.6979"
|
||||||
|
y="99.2053"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect574" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="13.4238"
|
||||||
|
y="95.9309"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect575" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="134.030670"
|
||||||
|
y="205.532791"
|
||||||
|
transform="scale(0.823795,0.823795)"
|
||||||
|
style="font-size:10;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text576">
|
||||||
|
<tspan
|
||||||
|
x="134.031006"
|
||||||
|
y="205.533005"
|
||||||
|
id="tspan664">
|
||||||
|
ConnectionProvider</tspan>
|
||||||
|
</text>
|
||||||
|
<g
|
||||||
|
transform="matrix(1.14345,0,0,0.729078,-1.67818,38.9539)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g587">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="77.2688"
|
||||||
|
x="16.6979"
|
||||||
|
y="222.966"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect588" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="77.2688"
|
||||||
|
x="14.7335"
|
||||||
|
y="221.002"
|
||||||
|
transform="translate(-1.30962,-1.30992)"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect589" />
|
||||||
|
</g>
|
||||||
|
<rect
|
||||||
|
width="90.951"
|
||||||
|
height="44.4829"
|
||||||
|
x="25.6196"
|
||||||
|
y="206.028"
|
||||||
|
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect594" />
|
||||||
|
<rect
|
||||||
|
width="90.951"
|
||||||
|
height="44.4829"
|
||||||
|
x="24.4229"
|
||||||
|
y="204.135"
|
||||||
|
style="font-size:12;fill:#b3b3b3;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect595" />
|
||||||
|
<text
|
||||||
|
x="85.575645"
|
||||||
|
y="282.300354"
|
||||||
|
transform="scale(0.823795,0.823795)"
|
||||||
|
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;text-anchor:middle;"
|
||||||
|
id="text596">
|
||||||
|
<tspan
|
||||||
|
x="85.575600"
|
||||||
|
y="282.299988"
|
||||||
|
id="tspan607">
|
||||||
|
JNDI</tspan>
|
||||||
|
</text>
|
||||||
|
<rect
|
||||||
|
width="90.951"
|
||||||
|
height="44.4829"
|
||||||
|
x="236.937"
|
||||||
|
y="206.791"
|
||||||
|
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect610" />
|
||||||
|
<rect
|
||||||
|
width="90.951"
|
||||||
|
height="44.4829"
|
||||||
|
x="235.741"
|
||||||
|
y="204.898"
|
||||||
|
style="font-size:12;fill:#b3b3b3;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect611" />
|
||||||
|
<text
|
||||||
|
x="342.093201"
|
||||||
|
y="283.226410"
|
||||||
|
transform="scale(0.823795,0.823795)"
|
||||||
|
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;text-anchor:middle;"
|
||||||
|
id="text612">
|
||||||
|
<tspan
|
||||||
|
x="342.092987"
|
||||||
|
y="283.226013"
|
||||||
|
id="tspan621">
|
||||||
|
JTA</tspan>
|
||||||
|
</text>
|
||||||
|
<rect
|
||||||
|
width="90.951"
|
||||||
|
height="44.4829"
|
||||||
|
x="130.134"
|
||||||
|
y="206.791"
|
||||||
|
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect616" />
|
||||||
|
<rect
|
||||||
|
width="90.951"
|
||||||
|
height="44.4829"
|
||||||
|
x="128.937"
|
||||||
|
y="204.898"
|
||||||
|
style="font-size:12;fill:#b3b3b3;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect617" />
|
||||||
|
<text
|
||||||
|
x="212.445343"
|
||||||
|
y="283.226410"
|
||||||
|
transform="scale(0.823795,0.823795)"
|
||||||
|
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;text-anchor:middle;"
|
||||||
|
id="text618">
|
||||||
|
<tspan
|
||||||
|
x="212.445007"
|
||||||
|
y="283.226013"
|
||||||
|
id="tspan623">
|
||||||
|
JDBC</tspan>
|
||||||
|
</text>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.823795,0,0,0.823795,0.120302,6.19341)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g637">
|
||||||
|
<g
|
||||||
|
transform="matrix(0.499515,0,0,0.415467,-0.237339,5.61339)"
|
||||||
|
id="g167">
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="61.8805"
|
||||||
|
y="68.4288"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect134" />
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="59.2613"
|
||||||
|
y="65.8095"
|
||||||
|
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect135" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="33.749969"
|
||||||
|
y="50.589706"
|
||||||
|
style="font-size:11;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text188">
|
||||||
|
<tspan
|
||||||
|
x="33.750000"
|
||||||
|
y="50.589699"
|
||||||
|
id="tspan635">
|
||||||
|
Transient Objects</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.823795,0,0,0.823795,0.120302,5.25349)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g644">
|
||||||
|
<g
|
||||||
|
transform="matrix(0.297486,0,0,0.516482,230.251,36.9178)"
|
||||||
|
id="g364">
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="61.8805"
|
||||||
|
y="68.4288"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect365" />
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="59.2613"
|
||||||
|
y="65.8095"
|
||||||
|
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect366" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="277.123230"
|
||||||
|
y="85.155571"
|
||||||
|
style="font-size:11;font-weight:normal;stroke-width:1pt;font-family:Helvetica;text-anchor:middle;"
|
||||||
|
id="text367">
|
||||||
|
<tspan
|
||||||
|
x="277.122986"
|
||||||
|
y="85.155602"
|
||||||
|
id="tspan631">
|
||||||
|
Persistent</tspan>
|
||||||
|
<tspan
|
||||||
|
x="277.122986"
|
||||||
|
y="96.155602"
|
||||||
|
id="tspan633">
|
||||||
|
Objects</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 31 KiB |
After Width: | Height: | Size: 6.6 KiB |
|
@ -0,0 +1,334 @@
|
||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
|
||||||
|
[
|
||||||
|
<!ATTLIST svg
|
||||||
|
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
|
||||||
|
]>
|
||||||
|
<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
width="318.898"
|
||||||
|
height="248.031"
|
||||||
|
id="svg1">
|
||||||
|
<defs
|
||||||
|
id="defs3">
|
||||||
|
<linearGradient
|
||||||
|
x1="0"
|
||||||
|
y1="0"
|
||||||
|
x2="1"
|
||||||
|
y2="0"
|
||||||
|
id="linearGradient127"
|
||||||
|
gradientUnits="objectBoundingBox"
|
||||||
|
spreadMethod="pad">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop128" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop129" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="0"
|
||||||
|
y1="0"
|
||||||
|
x2="1"
|
||||||
|
y2="0"
|
||||||
|
id="linearGradient130"
|
||||||
|
xlink:href="#linearGradient127"
|
||||||
|
gradientUnits="objectBoundingBox"
|
||||||
|
spreadMethod="pad" />
|
||||||
|
<radialGradient
|
||||||
|
cx="0.5"
|
||||||
|
cy="0.5"
|
||||||
|
fx="0.5"
|
||||||
|
fy="0.5"
|
||||||
|
r="0.5"
|
||||||
|
id="radialGradient131"
|
||||||
|
xlink:href="#linearGradient127"
|
||||||
|
gradientUnits="objectBoundingBox"
|
||||||
|
spreadMethod="pad" />
|
||||||
|
</defs>
|
||||||
|
<rect
|
||||||
|
width="291.837"
|
||||||
|
height="57.0074"
|
||||||
|
x="17.3169"
|
||||||
|
y="18.646"
|
||||||
|
style="font-size:12;fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect136" />
|
||||||
|
<rect
|
||||||
|
width="291.837"
|
||||||
|
height="57.0074"
|
||||||
|
x="13.9703"
|
||||||
|
y="16.2302"
|
||||||
|
style="font-size:12;fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect126" />
|
||||||
|
<g
|
||||||
|
transform="matrix(0.326107,0,0,0.765831,9.59261,8.98517)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g161">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="16.6979"
|
||||||
|
y="99.2053"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect137" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="13.4238"
|
||||||
|
y="95.9309"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect132" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(1.02406,0,0,0.652953,0.223384,39.9254)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g164">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="77.2688"
|
||||||
|
x="16.6979"
|
||||||
|
y="222.966"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect138" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="77.2688"
|
||||||
|
x="14.7335"
|
||||||
|
y="221.002"
|
||||||
|
transform="translate(-1.30962,-1.30992)"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect133" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.449834,0,0,0.338463,-3.15909,9.73319)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g167">
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="61.8805"
|
||||||
|
y="68.4288"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect134" />
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="59.2613"
|
||||||
|
y="65.8095"
|
||||||
|
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect135" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="302.277679"
|
||||||
|
y="65.943230"
|
||||||
|
transform="scale(0.73778,0.73778)"
|
||||||
|
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text183">
|
||||||
|
<tspan
|
||||||
|
x="302.277954"
|
||||||
|
y="65.943184"
|
||||||
|
id="tspan360">
|
||||||
|
Application</tspan>
|
||||||
|
</text>
|
||||||
|
<text
|
||||||
|
x="36.235924"
|
||||||
|
y="63.796055"
|
||||||
|
transform="scale(0.73778,0.73778)"
|
||||||
|
style="font-size:14;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text188">
|
||||||
|
<tspan
|
||||||
|
x="36.235950"
|
||||||
|
y="63.796051"
|
||||||
|
id="tspan427">
|
||||||
|
Transient Objects</tspan>
|
||||||
|
</text>
|
||||||
|
<text
|
||||||
|
x="180.416245"
|
||||||
|
y="290.543701"
|
||||||
|
transform="scale(0.73778,0.73778)"
|
||||||
|
style="font-size:18;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text197">
|
||||||
|
<tspan
|
||||||
|
x="180.415939"
|
||||||
|
y="290.543549"
|
||||||
|
id="tspan421">
|
||||||
|
Database</tspan>
|
||||||
|
</text>
|
||||||
|
<text
|
||||||
|
x="25.037701"
|
||||||
|
y="179.154755"
|
||||||
|
transform="scale(0.73778,0.73778)"
|
||||||
|
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text216">
|
||||||
|
<tspan
|
||||||
|
x="25.037655"
|
||||||
|
y="179.154648"
|
||||||
|
id="tspan384">
|
||||||
|
SessionFactory</tspan>
|
||||||
|
</text>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.252763,0,0,0.765831,109.104,8.98517)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g386">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="16.6979"
|
||||||
|
y="99.2053"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect387" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="13.4238"
|
||||||
|
y="95.9309"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect388" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.297394,0,0,0.572692,101.502,21.6359)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g364">
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="61.8805"
|
||||||
|
y="68.4288"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect365" />
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="59.2613"
|
||||||
|
y="65.8095"
|
||||||
|
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect366" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="202.746506"
|
||||||
|
y="102.992203"
|
||||||
|
transform="scale(0.73778,0.73778)"
|
||||||
|
style="font-size:14;font-weight:normal;stroke-width:1pt;font-family:Helvetica;text-anchor:middle;"
|
||||||
|
id="text367">
|
||||||
|
<tspan
|
||||||
|
x="202.746948"
|
||||||
|
y="102.992249"
|
||||||
|
id="tspan423">
|
||||||
|
Persistent</tspan>
|
||||||
|
<tspan
|
||||||
|
x="202.746948"
|
||||||
|
y="116.992355"
|
||||||
|
id="tspan425">
|
||||||
|
Objects</tspan>
|
||||||
|
</text>
|
||||||
|
<text
|
||||||
|
x="174.458496"
|
||||||
|
y="180.080795"
|
||||||
|
transform="scale(0.73778,0.73778)"
|
||||||
|
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text389">
|
||||||
|
<tspan
|
||||||
|
x="174.458618"
|
||||||
|
y="180.080338"
|
||||||
|
id="tspan392">
|
||||||
|
Session</tspan>
|
||||||
|
</text>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.127369,0,0,0.765831,188.675,8.98517)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g394">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="16.6979"
|
||||||
|
y="99.2053"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect395" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="13.4238"
|
||||||
|
y="95.9309"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect396" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="260.413269"
|
||||||
|
y="179.154739"
|
||||||
|
transform="scale(0.73778,0.73778)"
|
||||||
|
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text397">
|
||||||
|
<tspan
|
||||||
|
x="260.412964"
|
||||||
|
y="179.154343"
|
||||||
|
id="tspan400">
|
||||||
|
JDBC</tspan>
|
||||||
|
</text>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.127369,0,0,0.765831,229.156,8.98517)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g405">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="16.6979"
|
||||||
|
y="99.2053"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect406" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="13.4238"
|
||||||
|
y="95.9309"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect407" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="320.606903"
|
||||||
|
y="179.154739"
|
||||||
|
transform="scale(0.73778,0.73778)"
|
||||||
|
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text408">
|
||||||
|
<tspan
|
||||||
|
x="320.606964"
|
||||||
|
y="179.154343"
|
||||||
|
id="tspan417">
|
||||||
|
JNDI</tspan>
|
||||||
|
</text>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.127369,0,0,0.765831,269.281,8.98517)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g411">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="16.6979"
|
||||||
|
y="99.2053"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect412" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="13.4238"
|
||||||
|
y="95.9309"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect413" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="377.096313"
|
||||||
|
y="179.154739"
|
||||||
|
transform="scale(0.73778,0.73778)"
|
||||||
|
style="font-size:16;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text414">
|
||||||
|
<tspan
|
||||||
|
x="377.096008"
|
||||||
|
y="179.154999"
|
||||||
|
id="tspan145">
|
||||||
|
JTA</tspan>
|
||||||
|
</text>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 8.4 KiB |
|
@ -0,0 +1,250 @@
|
||||||
|
<?xml version="1.0" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
|
||||||
|
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd"
|
||||||
|
[
|
||||||
|
<!ATTLIST svg
|
||||||
|
xmlns:xlink CDATA #FIXED "http://www.w3.org/1999/xlink">
|
||||||
|
]>
|
||||||
|
<!-- Created with Sodipodi ("http://www.sodipodi.com/") -->
|
||||||
|
<svg
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||||
|
width="248.031"
|
||||||
|
height="248.031"
|
||||||
|
id="svg1">
|
||||||
|
<defs
|
||||||
|
id="defs3">
|
||||||
|
<linearGradient
|
||||||
|
x1="0"
|
||||||
|
y1="0"
|
||||||
|
x2="1"
|
||||||
|
y2="0"
|
||||||
|
id="linearGradient127"
|
||||||
|
gradientUnits="objectBoundingBox"
|
||||||
|
spreadMethod="pad">
|
||||||
|
<stop
|
||||||
|
style="stop-color:#000000;stop-opacity:1;"
|
||||||
|
offset="0"
|
||||||
|
id="stop128" />
|
||||||
|
<stop
|
||||||
|
style="stop-color:#ffffff;stop-opacity:1;"
|
||||||
|
offset="1"
|
||||||
|
id="stop129" />
|
||||||
|
</linearGradient>
|
||||||
|
<linearGradient
|
||||||
|
x1="0"
|
||||||
|
y1="0"
|
||||||
|
x2="1"
|
||||||
|
y2="0"
|
||||||
|
id="linearGradient130"
|
||||||
|
xlink:href="#linearGradient127"
|
||||||
|
gradientUnits="objectBoundingBox"
|
||||||
|
spreadMethod="pad" />
|
||||||
|
<radialGradient
|
||||||
|
cx="0.5"
|
||||||
|
cy="0.5"
|
||||||
|
fx="0.5"
|
||||||
|
fy="0.5"
|
||||||
|
r="0.5"
|
||||||
|
id="radialGradient131"
|
||||||
|
xlink:href="#linearGradient127"
|
||||||
|
gradientUnits="objectBoundingBox"
|
||||||
|
spreadMethod="pad" />
|
||||||
|
</defs>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.771934,0,0,0.771934,4.36019,-3.02123)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g158">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="77.2688"
|
||||||
|
x="16.6979"
|
||||||
|
y="17.3527"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect136" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="77.2688"
|
||||||
|
x="14.7335"
|
||||||
|
y="15.3883"
|
||||||
|
transform="translate(-1.30962,-1.30992)"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect126" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.771934,0,0,0.771934,4.36019,3.04452)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g161">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="16.6979"
|
||||||
|
y="99.2053"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect137" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="118.523"
|
||||||
|
x="13.4238"
|
||||||
|
y="95.9309"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect132" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.771934,0,0,0.771934,4.36019,8.0993)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g164">
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="77.2688"
|
||||||
|
x="16.6979"
|
||||||
|
y="222.966"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect138" />
|
||||||
|
<rect
|
||||||
|
width="285.502"
|
||||||
|
height="77.2688"
|
||||||
|
x="14.7335"
|
||||||
|
y="221.002"
|
||||||
|
transform="translate(-1.30962,-1.30992)"
|
||||||
|
style="fill:#d2d2d2;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect133" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.771934,0,0,0.543505,2.59104,21.1103)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g167">
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="61.8805"
|
||||||
|
y="68.4288"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect134" />
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="59.2613"
|
||||||
|
y="65.8095"
|
||||||
|
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect135" />
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="105.392174"
|
||||||
|
y="56.568123"
|
||||||
|
transform="scale(0.771934,0.771934)"
|
||||||
|
style="font-size:24;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text183">
|
||||||
|
<tspan
|
||||||
|
x="105.392273"
|
||||||
|
y="56.568146"
|
||||||
|
id="tspan186">
|
||||||
|
Application</tspan>
|
||||||
|
</text>
|
||||||
|
<text
|
||||||
|
x="81.820183"
|
||||||
|
y="103.149330"
|
||||||
|
transform="scale(0.771934,0.771934)"
|
||||||
|
style="font-size:20;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text188">
|
||||||
|
<tspan
|
||||||
|
x="81.820213"
|
||||||
|
y="103.149727"
|
||||||
|
id="tspan206">
|
||||||
|
Persistent Objects</tspan>
|
||||||
|
</text>
|
||||||
|
<text
|
||||||
|
x="111.548180"
|
||||||
|
y="278.927887"
|
||||||
|
transform="scale(0.771934,0.771934)"
|
||||||
|
style="font-size:24;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text197">
|
||||||
|
<tspan
|
||||||
|
x="111.547874"
|
||||||
|
y="278.927551"
|
||||||
|
id="tspan200">
|
||||||
|
Database</tspan>
|
||||||
|
</text>
|
||||||
|
<text
|
||||||
|
x="94.436180"
|
||||||
|
y="153.805740"
|
||||||
|
transform="scale(0.771934,0.771934)"
|
||||||
|
style="font-size:24;font-weight:normal;stroke-width:1pt;font-family:Helvetica;"
|
||||||
|
id="text216">
|
||||||
|
<tspan
|
||||||
|
x="94.436180"
|
||||||
|
y="153.805740"
|
||||||
|
id="tspan221">
|
||||||
|
HIBERNATE</tspan>
|
||||||
|
</text>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.771934,0,0,0.771934,2.59083,1.02261)"
|
||||||
|
style="font-size:12;"
|
||||||
|
id="g254">
|
||||||
|
<g
|
||||||
|
transform="translate(4.58374,2.61928)"
|
||||||
|
id="g176">
|
||||||
|
<g
|
||||||
|
transform="matrix(0.571429,0,0,0.67347,-10.6174,117.093)"
|
||||||
|
id="g170">
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="61.8805"
|
||||||
|
y="68.4288"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect171" />
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="59.2613"
|
||||||
|
y="65.8095"
|
||||||
|
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect172" />
|
||||||
|
</g>
|
||||||
|
<g
|
||||||
|
transform="matrix(0.571429,0,0,0.67347,138.682,117.093)"
|
||||||
|
id="g173">
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="61.8805"
|
||||||
|
y="68.4288"
|
||||||
|
style="fill:#757575;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect174" />
|
||||||
|
<rect
|
||||||
|
width="199.065"
|
||||||
|
height="61.5532"
|
||||||
|
x="59.2613"
|
||||||
|
y="65.8095"
|
||||||
|
style="fill:#e0e0e0;fill-rule:evenodd;stroke-width:1pt;"
|
||||||
|
id="rect175" />
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
<text
|
||||||
|
x="47.259438"
|
||||||
|
y="182.367538"
|
||||||
|
style="font-weight:bold;stroke-width:1pt;font-family:Courier;"
|
||||||
|
id="text191">
|
||||||
|
<tspan
|
||||||
|
x="47.259399"
|
||||||
|
y="182.367996"
|
||||||
|
id="tspan212">
|
||||||
|
hibernate.</tspan>
|
||||||
|
<tspan
|
||||||
|
x="47.259399"
|
||||||
|
y="194.367996"
|
||||||
|
id="tspan214">
|
||||||
|
properties</tspan>
|
||||||
|
</text>
|
||||||
|
<text
|
||||||
|
x="198.523010"
|
||||||
|
y="188.260941"
|
||||||
|
style="font-weight:normal;stroke-width:1pt;font-family:helvetica;"
|
||||||
|
id="text194">
|
||||||
|
<tspan
|
||||||
|
id="tspan195">
|
||||||
|
XML Mapping</tspan>
|
||||||
|
</text>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 6.2 KiB |
|
@ -0,0 +1,168 @@
|
||||||
|
<?xml version='1.0' encoding="iso-8859-1"?>
|
||||||
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||||
|
"../support/docbook-dtd/docbookx.dtd"
|
||||||
|
[
|
||||||
|
<!ENTITY quickstart SYSTEM "modules/quickstart.xml">
|
||||||
|
<!ENTITY architecture SYSTEM "modules/architecture.xml">
|
||||||
|
<!ENTITY configuration SYSTEM "modules/configuration.xml">
|
||||||
|
<!ENTITY persistent-classes SYSTEM "modules/persistent_classes.xml">
|
||||||
|
<!ENTITY basic-mapping SYSTEM "modules/basic_mapping.xml">
|
||||||
|
<!ENTITY collection-mapping SYSTEM "modules/collection_mapping.xml">
|
||||||
|
<!ENTITY component-mapping SYSTEM "modules/component_mapping.xml">
|
||||||
|
<!ENTITY inheritance-mapping SYSTEM "modules/inheritance_mapping.xml">
|
||||||
|
<!ENTITY manipulating-data SYSTEM "modules/manipulating_data.xml">
|
||||||
|
<!ENTITY transactions SYSTEM "modules/transactions.xml">
|
||||||
|
<!ENTITY query-hql SYSTEM "modules/query_hql.xml">
|
||||||
|
<!ENTITY query-criteria SYSTEM "modules/query_criteria.xml">
|
||||||
|
<!ENTITY query-sql SYSTEM "modules/query_sql.xml">
|
||||||
|
<!ENTITY performance SYSTEM "modules/performance.xml">
|
||||||
|
<!ENTITY toolset-guide SYSTEM "modules/toolset_guide.xml">
|
||||||
|
<!ENTITY example-parentchild SYSTEM "modules/example_parentchild.xml">
|
||||||
|
<!ENTITY example-weblog SYSTEM "modules/example_weblog.xml">
|
||||||
|
<!ENTITY example-mappings SYSTEM "modules/example_mappings.xml">
|
||||||
|
<!ENTITY best-practices SYSTEM "modules/best_practices.xml">
|
||||||
|
]>
|
||||||
|
|
||||||
|
<book lang="en">
|
||||||
|
|
||||||
|
<bookinfo>
|
||||||
|
<title>HIBERNATE - Relational Persistence for Idiomatic Java</title>
|
||||||
|
<subtitle>Hibernate Reference Documentation</subtitle>
|
||||||
|
<releaseinfo>3.0</releaseinfo>
|
||||||
|
</bookinfo>
|
||||||
|
|
||||||
|
<toc/>
|
||||||
|
|
||||||
|
<preface id="preface">
|
||||||
|
<title>Preface</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Working with object-oriented software and a relational database can be cumbersome
|
||||||
|
and time consuming in today's enterprise environments. Hibernate is an object/relational
|
||||||
|
mapping tool for Java environments. The term object/relational mapping (ORM) refers to
|
||||||
|
the technique of mapping a data representation from an object model to a relational
|
||||||
|
data model with a SQL-based schema.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate not only takes care of the mapping from Java classes to
|
||||||
|
database tables (and from Java data types to SQL data types), but also provides data
|
||||||
|
query and retrieval facilities and can significantly reduce development time otherwise
|
||||||
|
spent with manual data handling in SQL and JDBC.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernates goal is to relieve the developer from 95 percent of common data persistence
|
||||||
|
related programming tasks. Hibernate may not be the best solution for data-centric
|
||||||
|
applications that only use stored-procedures to implement the business logic in the
|
||||||
|
database, it is most useful with object-oriented domain models and business logic in
|
||||||
|
the Java-based middle-tier. However, Hibernate can certainly help you to remove or
|
||||||
|
encapsulate vendor-specific SQL code and will help with the common task of result set
|
||||||
|
translation from a tabular representation to a graph of objects.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If you are new to Hibernate and Object/Relational Mapping or even Java,
|
||||||
|
please follow these steps:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<orderedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Read <xref linkend="quickstart"/> for a 30 minute tutorial, using Tomcat.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Read <xref linkend="architecture"/> to understand the environments where
|
||||||
|
Hibernate can be used.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Have a look at the <literal>eg/</literal> directory in the Hibernate
|
||||||
|
distribution, it contains a simple standalone application. Copy your
|
||||||
|
JDBC driver to the <literal>lib/</literal> directory and edit
|
||||||
|
<literal>src/hibernate.properties</literal>, specifying correct values for
|
||||||
|
your database. From a command prompt in the distribution directory,
|
||||||
|
type <literal>ant eg</literal> (using Ant), or under Windows, type
|
||||||
|
<literal>build eg</literal>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Use this reference documentation as your primary source of information.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
FAQs are answered on the Hibernate website.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Third party demos, examples and tutorials are linked on the Hibernate
|
||||||
|
website.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The Community Area on the Hibernate website is a good source for
|
||||||
|
design patterns and various integration solutions (Tomcat, JBoss, Spring,
|
||||||
|
Struts, EJB, etc.).
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
An offline version of the Hibernate website is distributed with
|
||||||
|
Hibernate in the <literal>doc/</literal> subdirectory.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</orderedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If you have questions, use the user forum linked on the Hibernate website. We also
|
||||||
|
provide a JIRA issue trackings system for bug reports and feature requests. If you
|
||||||
|
are interested in the development of Hibernate, join the developer mailing list.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Commercial development, production support and training for Hibernate is available
|
||||||
|
through JBoss Inc. (see http://www.hibernate.org/SupportTraining/). Hibernate is a
|
||||||
|
project of the JBoss Professional Open Source product suite.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</preface>
|
||||||
|
|
||||||
|
&quickstart;
|
||||||
|
|
||||||
|
&architecture;
|
||||||
|
|
||||||
|
&configuration;
|
||||||
|
|
||||||
|
&persistent-classes;
|
||||||
|
|
||||||
|
&basic-mapping;
|
||||||
|
&collection-mapping;
|
||||||
|
&component-mapping;
|
||||||
|
&inheritance-mapping;
|
||||||
|
|
||||||
|
&manipulating-data;
|
||||||
|
&transactions;
|
||||||
|
|
||||||
|
&query-hql;
|
||||||
|
&query-criteria;
|
||||||
|
&query-sql;
|
||||||
|
|
||||||
|
&performance;
|
||||||
|
|
||||||
|
&toolset-guide;
|
||||||
|
|
||||||
|
&example-parentchild;
|
||||||
|
&example-weblog;
|
||||||
|
&example-mappings;
|
||||||
|
|
||||||
|
&best-practices;
|
||||||
|
|
||||||
|
</book>
|
||||||
|
|
|
@ -0,0 +1,172 @@
|
||||||
|
<chapter id="architecture">
|
||||||
|
|
||||||
|
<title>Architecture</title>
|
||||||
|
|
||||||
|
<sect1 id="architecture-overview">
|
||||||
|
<title>Overview</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A (very) high-level view of the Hibernate architecture:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<mediaobject>
|
||||||
|
<imageobject role="fo">
|
||||||
|
<imagedata fileref="images/overview.svg" format="SVG" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
<imageobject role="html">
|
||||||
|
<imagedata fileref="../shared/images/overview.gif" format="GIF" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
</mediaobject>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This diagram shows Hibernate using the database and configuration data to
|
||||||
|
provide persistence services (and persistent objects) to the application.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We would like to show a more detailed view of the runtime architecture.
|
||||||
|
Unfortunately, Hibernate is flexible and supports several approaches. We will
|
||||||
|
show the two extremes. The "lite" architecture has the application
|
||||||
|
provide its own JDBC connections and manage its own transactions. This approach
|
||||||
|
uses a minimal subset of Hibernate's APIs:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<mediaobject>
|
||||||
|
<imageobject role="fo">
|
||||||
|
<imagedata fileref="images/lite.svg" format="SVG" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
<imageobject role="html">
|
||||||
|
<imagedata fileref="../shared/images/lite.gif" format="GIF" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
</mediaobject>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The "full cream" architecture abstracts the application away from the
|
||||||
|
underlying JDBC/JTA APIs and lets Hibernate take care of the details.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<mediaobject>
|
||||||
|
<imageobject role="fo">
|
||||||
|
<imagedata fileref="images/full_cream.svg" format="SVG" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
<imageobject role="html">
|
||||||
|
<imagedata fileref="../shared/images/full_cream.gif" format="GIF" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
</mediaobject>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Heres some definitions of the objects in the diagrams:
|
||||||
|
|
||||||
|
<variablelist spacing="compact">
|
||||||
|
<varlistentry>
|
||||||
|
<term>SessionFactory (<literal>net.sf.hibernate.SessionFactory</literal>)</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A threadsafe (immutable) cache of compiled mappings for a single database.
|
||||||
|
A factory for <literal>Session</literal> and a client of
|
||||||
|
<literal>ConnectionProvider</literal>. Might hold an optional (second-level)
|
||||||
|
cache of data that is reusable between transactions, at a
|
||||||
|
process- or cluster-level.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Session (<literal>net.sf.hibernate.Session</literal>)</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A single-threaded, short-lived object representing a conversation between
|
||||||
|
the application and the persistent store. Wraps a JDBC connection. Factory
|
||||||
|
for <literal>Transaction</literal>. Holds a mandatory (first-level) cache
|
||||||
|
of persistent objects, used when navigating the object graph or looking up
|
||||||
|
objects by identifier.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Persistent Objects and Collections</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Short-lived, single threaded objects containing persistent state and business
|
||||||
|
function. These might be ordinary JavaBeans/POJOs, the only special thing about
|
||||||
|
them is that they are currently associated with (exactly one)
|
||||||
|
<literal>Session</literal>. As soon as the <literal>Session</literal> is closed,
|
||||||
|
they will be detached and free to use in any application layer (e.g. directly
|
||||||
|
as data transfer objects to and from presentation).
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Transient Objects and Collections</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Instances of persistent classes that are not currently associated with a
|
||||||
|
<literal>Session</literal>. They may have been instantiated by
|
||||||
|
the application and not (yet) persisted or they may have been instantiated by a
|
||||||
|
closed <literal>Session</literal>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Transaction (<literal>net.sf.hibernate.Transaction</literal>)</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
(Optional) A single-threaded, short-lived object used by the application to
|
||||||
|
specify atomic units of work. Abstracts application from underlying JDBC,
|
||||||
|
JTA or CORBA transaction. A <literal>Session</literal> might span several
|
||||||
|
<literal>Transaction</literal>s in some cases.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>ConnectionProvider (<literal>net.sf.hibernate.connection.ConnectionProvider</literal>)</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
(Optional) A factory for (and pool of) JDBC connections. Abstracts application from
|
||||||
|
underlying <literal>Datasource</literal> or <literal>DriverManager</literal>.
|
||||||
|
Not exposed to application, but can be extended/implemented by the developer.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>TransactionFactory (<literal>net.sf.hibernate.TransactionFactory</literal>)</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
(Optional) A factory for <literal>Transaction</literal> instances. Not exposed to the
|
||||||
|
application, but can be extended/implemented by the developer.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Given a "lite" architecture, the application bypasses the
|
||||||
|
<literal>Transaction</literal>/<literal>TransactionFactory</literal> and/or
|
||||||
|
<literal>ConnectionProvider</literal> APIs to talk to JTA or JDBC directly.
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="architecture-jmx">
|
||||||
|
<title>JMX Integration</title>
|
||||||
|
<para>
|
||||||
|
JMX is the J2EE standard for management of Java components. Hibernate may be managed via
|
||||||
|
a JMX standard MBean but because most application servers do not yet support JMX, Hibernate
|
||||||
|
also affords some non-standard configuration mechanisms.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Please see the Hibernate website for more information on how to configure Hibernate to
|
||||||
|
run as a JMX component inside JBoss.
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="architecture-jca">
|
||||||
|
<title>JCA Support</title>
|
||||||
|
<para>
|
||||||
|
Hibernate may also be configured as a JCA connector. Please see the website for more
|
||||||
|
details.
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
|
|
@ -0,0 +1,168 @@
|
||||||
|
<chapter id="best-practices">
|
||||||
|
|
||||||
|
<title>Best Practices</title>
|
||||||
|
|
||||||
|
<variablelist spacing="compact">
|
||||||
|
<varlistentry>
|
||||||
|
<term>Write fine-grained classes and map them using <literal><component></literal>.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Use an <literal>Address</literal> class to encapsulate <literal>street</literal>,
|
||||||
|
<literal>suburb</literal>, <literal>state</literal>, <literal>postcode</literal>.
|
||||||
|
This encourages code reuse and simplifies refactoring.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Declare identifier properties on persistent classes.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Hibernate makes identifier properties optional. There are all sorts of reasons why
|
||||||
|
you should use them. We recommend that identifiers be 'synthetic' (generated, with
|
||||||
|
no business meaning) and of a non-primitive type. For maximum flexibility, use
|
||||||
|
<literal>java.lang.Long</literal> or <literal>java.lang.String</literal>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Place each class mapping in its own file.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Don't use a single monolithic mapping document. Map <literal>com.eg.Foo</literal> in
|
||||||
|
the file <literal>com/eg/Foo.hbm.xml</literal>. This makes particularly good sense in
|
||||||
|
a team environment.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Load mappings as resources.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Deploy the mappings along with the classes they map.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Consider externalising query strings.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This is a good practice if your queries call non-ANSI-standard SQL functions.
|
||||||
|
Externalising the query strings to mapping files will make the application more portable.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Use bind variables.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
As in JDBC, always replace non-constant values by "?". Never use string manipulation to
|
||||||
|
bind a non-constant value in a query! Even better, consider using named parameters in
|
||||||
|
queries.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Don't manage your own JDBC connections.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Hibernate lets the application manage JDBC connections. This approach should be considered
|
||||||
|
a last-resort. If you can't use the built-in connections providers, consider providing your
|
||||||
|
own implementation of <literal>net.sf.hibernate.connection.ConnectionProvider</literal>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Consider using a custom type.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Suppose you have a Java type, say from some library, that needs to be persisted but doesn't
|
||||||
|
provide the accessors needed to map it as a component. You should consider implementing
|
||||||
|
<literal>net.sf.hibernate.UserType</literal>. This approach frees the application
|
||||||
|
code from implementing transformations to / from a Hibernate type.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Use hand-coded JDBC in bottlenecks.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
In performance-critical areas of the system, some kinds of operations (eg. mass update /
|
||||||
|
delete) might benefit from direct JDBC. But please, wait until you <emphasis>know</emphasis>
|
||||||
|
something is a bottleneck. And don't assume that direct JDBC is necessarily faster. If need to
|
||||||
|
use direct JDBC, it might be worth opening a Hibernate <literal>Session</literal> and using that SQL
|
||||||
|
connection. That way you can still use the same transaction strategy and underlying connection
|
||||||
|
provider.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Understand <literal>Session</literal> flushing.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
From time to time the Session synchronizes its persistent state with the database. Performance will
|
||||||
|
be affected if this process occurs too often. You may sometimes minimize unnecessary flushing by
|
||||||
|
disabling automatic flushing or even by changing the order of queries and other operations within a
|
||||||
|
particular transaction.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>In a three tiered architecture, consider using <literal>saveOrUpdate()</literal>.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
When using a servlet / session bean architecture, you could pass persistent objects loaded in
|
||||||
|
the session bean to and from the servlet / JSP layer. Use a new session to service each request.
|
||||||
|
Use <literal>Session.update()</literal> or <literal>Session.saveOrUpdate()</literal> to update the
|
||||||
|
persistent state of an object.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>In a two tiered architecture, consider using session disconnection.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
When using a servlet only, you may reuse the same session for multiple client requests. Just
|
||||||
|
remember to disconnect the session before returning control to the client.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Don't treat exceptions as recoverable.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This is more of a necessary practice than a "best" practice. When an exception occurs, roll back
|
||||||
|
the <literal>Transaction</literal> and close the <literal>Session</literal>. If you don't, Hibernate
|
||||||
|
can't guarantee that in-memory state accurately represents persistent state. As a special case of this,
|
||||||
|
do not use <literal>Session.load()</literal> to determine if an instance with the given identifier
|
||||||
|
exists on the database; use <literal>find()</literal> instead.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Prefer lazy fetching for associations.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Use eager (outer-join) fetching sparingly. Use proxies and/or lazy collections for most associations
|
||||||
|
to classes that are not cached at the JVM-level. For associations to cached classes, where there is
|
||||||
|
a high probability of a cache hit, explicitly disable eager fetching using
|
||||||
|
<literal>outer-join="false"</literal>. When an outer-join fetch is appropriate to a particular use
|
||||||
|
case, use a query with a <literal>left join</literal>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>Consider abstracting your business logic from Hibernate.</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Hide (Hibernate) data-access code behind an interface. Combine the <emphasis>DAO</emphasis> and
|
||||||
|
<emphasis>Thread Local Session</emphasis> patterns. You can even have some classes persisted by
|
||||||
|
handcoded JDBC, associated to Hibernate via a <literal>UserType</literal>. (This advice is
|
||||||
|
intended for "sufficiently large" applications; it is not appropriate for an application with
|
||||||
|
five tables!)
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
|
|
@ -0,0 +1,373 @@
|
||||||
|
<chapter id="components">
|
||||||
|
<title>Component Mapping</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The notion of a <emphasis>component</emphasis> is re-used in several different contexts,
|
||||||
|
for different purposes, throughout Hibernate.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect1 id="components-dependentobjects">
|
||||||
|
<title>Dependent objects</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A component is a contained object that is persisted as a value type, not an entity.
|
||||||
|
The term "component" refers to the object-oriented notion of composition
|
||||||
|
(not to architecture-level components). For example, you might model a person like this:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[public class Person {
|
||||||
|
private java.util.Date birthday;
|
||||||
|
private Name name;
|
||||||
|
private String key;
|
||||||
|
public String getKey() {
|
||||||
|
return key;
|
||||||
|
}
|
||||||
|
private void setKey(String key) {
|
||||||
|
this.key=key;
|
||||||
|
}
|
||||||
|
public java.util.Date getBirthday() {
|
||||||
|
return birthday;
|
||||||
|
}
|
||||||
|
public void setBirthday(java.util.Date birthday) {
|
||||||
|
this.birthday = birthday;
|
||||||
|
}
|
||||||
|
public Name getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
public void setName(Name name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
......
|
||||||
|
......
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[public class Name {
|
||||||
|
char initial;
|
||||||
|
String first;
|
||||||
|
String last;
|
||||||
|
public String getFirst() {
|
||||||
|
return first;
|
||||||
|
}
|
||||||
|
void setFirst(String first) {
|
||||||
|
this.first = first;
|
||||||
|
}
|
||||||
|
public String getLast() {
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
void setLast(String last) {
|
||||||
|
this.last = last;
|
||||||
|
}
|
||||||
|
public char getInitial() {
|
||||||
|
return initial;
|
||||||
|
}
|
||||||
|
void setInitial(char initial) {
|
||||||
|
this.initial = initial;
|
||||||
|
}
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Now <literal>Name</literal> may be persisted as a component of
|
||||||
|
<literal>Person</literal>. Notice that <literal>Name</literal> defines getter
|
||||||
|
and setter methods for its persistent properties, but doesn't need to declare
|
||||||
|
any interfaces or identifier properties.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Our Hibernate mapping would look like:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="eg.Person" table="person">
|
||||||
|
<id name="Key" column="pid" type="string">
|
||||||
|
<generator class="uuid.hex"/>
|
||||||
|
</id>
|
||||||
|
<property name="birthday" type="date"/>
|
||||||
|
<component name="Name" class="eg.Name"> <!-- class attribute optional -->
|
||||||
|
<property name="initial"/>
|
||||||
|
<property name="first"/>
|
||||||
|
<property name="last"/>
|
||||||
|
</component>
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The person table would have the columns <literal>pid</literal>,
|
||||||
|
<literal>birthday</literal>,
|
||||||
|
<literal>initial</literal>,
|
||||||
|
<literal>first</literal> and
|
||||||
|
<literal>last</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Like all value types, components do not support shared references. The null
|
||||||
|
value semantics of a component are <emphasis>ad hoc</emphasis>. When reloading the
|
||||||
|
containing object, Hibernate will assume that if all component columns are
|
||||||
|
null, then the entire component is null. This should be okay for most purposes.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The properties of a component may be of any Hibernate type (collections, many-to-one
|
||||||
|
associations, other components, etc). Nested components should <emphasis>not</emphasis>
|
||||||
|
be considered an exotic usage. Hibernate is intended to support a very fine-grained
|
||||||
|
object model.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal><component></literal> element allows a <literal><parent></literal>
|
||||||
|
subelement that maps a property of the component class as a reference back to the
|
||||||
|
containing entity.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="eg.Person" table="person">
|
||||||
|
<id name="Key" column="pid" type="string">
|
||||||
|
<generator class="uuid.hex"/>
|
||||||
|
</id>
|
||||||
|
<property name="birthday" type="date"/>
|
||||||
|
<component name="Name" class="eg.Name">
|
||||||
|
<parent name="namedPerson"/> <!-- reference back to the Person -->
|
||||||
|
<property name="initial"/>
|
||||||
|
<property name="first"/>
|
||||||
|
<property name="last"/>
|
||||||
|
</component>
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="components-incollections">
|
||||||
|
<title>Collections of dependent objects</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Collections of components are supported (eg. an array of type
|
||||||
|
<literal>Name</literal>). Declare your component collection by
|
||||||
|
replacing the <literal><element></literal> tag with a
|
||||||
|
<literal><composite-element></literal> tag.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<set name="someNames" table="some_names" lazy="true">
|
||||||
|
<key column="id"/>
|
||||||
|
<composite-element class="eg.Name"> <!-- class attribute required -->
|
||||||
|
<property name="initial"/>
|
||||||
|
<property name="first"/>
|
||||||
|
<property name="last"/>
|
||||||
|
</composite-element>
|
||||||
|
</set>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note: if you define a <literal>Set</literal> of composite elements, it is
|
||||||
|
very important to implement <literal>equals()</literal> and
|
||||||
|
<literal>hashCode()</literal> correctly.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Composite elements may contain components but not collections. If your
|
||||||
|
composite element itself contains
|
||||||
|
components, use the <literal><nested-composite-element></literal>
|
||||||
|
tag. This is a pretty exotic case - a collection of components which
|
||||||
|
themselves have components. By this stage you should be asking yourself
|
||||||
|
if a one-to-many association is more appropriate. Try remodelling the
|
||||||
|
composite element as an entity - but note that even though the Java model
|
||||||
|
is the same, the relational model and persistence semantics are still
|
||||||
|
slightly different.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Please note that a composite element mapping doesn't support null-able properties
|
||||||
|
if you're using a <literal><set></literal>. Hibernate
|
||||||
|
has to use each columns value to identify a record when deleting objects
|
||||||
|
(there is no separate primary key column in the composite element table),
|
||||||
|
which is not possible with null values. You have to either use only
|
||||||
|
not-null properties in a composite-element or choose a
|
||||||
|
<literal><list></literal>, <literal><map></literal>,
|
||||||
|
<literal><bag></literal> or <literal><idbag></literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A special case of a composite element is a composite element with a nested
|
||||||
|
<literal><many-to-one></literal> element. A mapping like this allows
|
||||||
|
you to map extra columns of a many-to-many association table to the
|
||||||
|
composite element class. The following is a many-to-many association
|
||||||
|
from <literal>Order</literal> to <literal>Item</literal> where
|
||||||
|
<literal>purchaseDate</literal>, <literal>price</literal> and
|
||||||
|
<literal>quantity</literal> are properties of the association:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="eg.Order" .... >
|
||||||
|
....
|
||||||
|
<set name="purchasedItems" table="purchase_items" lazy="true">
|
||||||
|
<key column="order_id">
|
||||||
|
<composite-element class="eg.Purchase">
|
||||||
|
<property name="purchaseDate"/>
|
||||||
|
<property name="price"/>
|
||||||
|
<property name="quantity"/>
|
||||||
|
<many-to-one name="item" class="eg.Item"/> <!-- class attribute is optional -->
|
||||||
|
</composite-element>
|
||||||
|
</set>
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
<para>Even ternary (or quaternary, etc) associations are possible:</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="eg.Order" .... >
|
||||||
|
....
|
||||||
|
<set name="purchasedItems" table="purchase_items" lazy="true">
|
||||||
|
<key column="order_id">
|
||||||
|
<composite-element class="eg.OrderLine">
|
||||||
|
<many-to-one name="purchaseDetails class="eg.Purchase"/>
|
||||||
|
<many-to-one name="item" class="eg.Item"/>
|
||||||
|
</composite-element>
|
||||||
|
</set>
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Composite elements may appear in queries using the same syntax as
|
||||||
|
associations to other entities.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="components-asmapindex">
|
||||||
|
<title>Components as Map indices</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal><composite-index></literal> element lets you map a
|
||||||
|
component class as the key of a <literal>Map</literal>. Make sure you override
|
||||||
|
<literal>hashCode()</literal> and <literal>equals()</literal> correctly on
|
||||||
|
the component class.
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="components-compositeid">
|
||||||
|
<title>Components as composite identifiers</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may use a component as an identifier of an entity class. Your component
|
||||||
|
class must satisfy certain requirements:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist spacing="compact">
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
It must implement <literal>java.io.Serializable</literal>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
It must re-implement <literal>equals()</literal> and
|
||||||
|
<literal>hashCode()</literal>, consistently with the database's
|
||||||
|
notion of composite key equality.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You can't use an <literal>IdentifierGenerator</literal> to generate composite keys.
|
||||||
|
Instead the application must assign its own identifiers.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Since a composite identifier must be assigned to the object before saving it,
|
||||||
|
we can't use <literal>unsaved-value</literal> of the identifier to distinguish
|
||||||
|
between newly instantiated instances and instances saved in a previous session.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may instead implement <literal>Interceptor.isUnsaved()</literal> if
|
||||||
|
you wish to use <literal>saveOrUpdate()</literal> or cascading save / update.
|
||||||
|
As an alternative, you may also set the <literal>unsaved-value</literal>
|
||||||
|
attribute on a <literal><version></literal> (or
|
||||||
|
<literal><timestamp></literal>) element to specify a
|
||||||
|
value that indicates a new transient instance. In this case, the version
|
||||||
|
of the entity is used instead of the (assigned) identifier and you don't have
|
||||||
|
to implement <literal>Interceptor.isUnsaved()</literal> yourself.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Use the <literal><composite-id></literal> tag (same attributes and
|
||||||
|
elements as <literal><component></literal>) in place of
|
||||||
|
<literal><id></literal> for the declaration of a composite identifier
|
||||||
|
class:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="eg.Foo" table"FOOS">
|
||||||
|
<composite-id name="compId" class="eg.FooCompositeID">
|
||||||
|
<key-property name="string"/>
|
||||||
|
<key-property name="short"/>
|
||||||
|
<key-property name="date" column="date_" type="date"/>
|
||||||
|
</composite-id>
|
||||||
|
<property name="name"/>
|
||||||
|
....
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Now, any foreign keys into the table <literal>FOOS</literal> are also composite.
|
||||||
|
You must declare this in your mappings for other classes. An association to
|
||||||
|
<literal>Foo</literal> would be declared like this:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<many-to-one name="foo" class="eg.Foo">
|
||||||
|
<!-- the "class" attribute is optional, as usual -->
|
||||||
|
<column name="foo_string"/>
|
||||||
|
<column name="foo_short"/>
|
||||||
|
<column name="foo_date"/>
|
||||||
|
</many-to-one>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This new <literal><column></literal> tag is also used by multi-column custom types.
|
||||||
|
Actually it is an alternative to the <literal>column</literal> attribute everywhere. A
|
||||||
|
collection with elements of type <literal>Foo</literal> would use:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<set name="foos">
|
||||||
|
<key column="owner_id"/>
|
||||||
|
<many-to-many class="eg.Foo">
|
||||||
|
<column name="foo_string"/>
|
||||||
|
<column name="foo_short"/>
|
||||||
|
<column name="foo_date"/>
|
||||||
|
</many-to-many>
|
||||||
|
</set>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
On the other hand, <literal><one-to-many></literal>, as usual, declares no columns.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If <literal>Foo</literal> itself contains collections, they will also need a
|
||||||
|
composite foreign key.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="eg.Foo">
|
||||||
|
....
|
||||||
|
....
|
||||||
|
<set name="dates" lazy="true">
|
||||||
|
<key> <!-- a collection inherits the composite key type -->
|
||||||
|
<column name="foo_string"/>
|
||||||
|
<column name="foo_short"/>
|
||||||
|
<column name="foo_date"/>
|
||||||
|
</key>
|
||||||
|
<element column="foo_date" type="date"/>
|
||||||
|
</set>
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="components-dynamic">
|
||||||
|
<title>Dynamic components</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may even map a property of type <literal>Map</literal>:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<dynamic-component name="userAttributes">
|
||||||
|
<property name="foo" column="FOO"/>
|
||||||
|
<property name="bar" column="BAR"/>
|
||||||
|
<many-to-one name="baz" class="eg.Baz" column="BAZ"/>
|
||||||
|
</dynamic-component>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The semantics of a <literal><dynamic-component></literal> mapping are identical
|
||||||
|
to <literal><component></literal>. The advantage of this kind of mapping is
|
||||||
|
the ability to determine the actual properties of the bean at deployment time, just
|
||||||
|
by editing the mapping document. (Runtime manipulation of the mapping document is
|
||||||
|
also possible, using a DOM parser.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
|
@ -0,0 +1,356 @@
|
||||||
|
<chapter id="example-mappings">
|
||||||
|
<title>Example: Various Mappings</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This chapters shows off some more complex association mappings.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect1 id="example-mappings-emp">
|
||||||
|
<title>Employer/Employee</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following model of the relationship between <literal>Employer</literal> and
|
||||||
|
<literal>Employee</literal> uses an actual entity class (<literal>Employment</literal>)
|
||||||
|
to represent the association. This is done because there might be more than one
|
||||||
|
period of employment for the same two parties. Components are used to model monetory
|
||||||
|
values and employee names.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<mediaobject>
|
||||||
|
<imageobject role="fo">
|
||||||
|
<imagedata fileref="images/EmployerEmployee.gif" format="GIF" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
<imageobject role="html">
|
||||||
|
<imagedata fileref="../shared/images/EmployerEmployee.gif" format="GIF" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
</mediaobject>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Heres a possible mapping document:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<hibernate-mapping>
|
||||||
|
|
||||||
|
<class name="Employer" table="employers">
|
||||||
|
<id name="id">
|
||||||
|
<generator class="sequence">
|
||||||
|
<param name="sequence">employer_id_seq</param>
|
||||||
|
</generator>
|
||||||
|
</id>
|
||||||
|
<property name="name"/>
|
||||||
|
</class>
|
||||||
|
|
||||||
|
<class name="Employment" table="employment_periods">
|
||||||
|
|
||||||
|
<id name="id">
|
||||||
|
<generator class="sequence">
|
||||||
|
<param name="sequence">employment_id_seq</param>
|
||||||
|
</generator>
|
||||||
|
</id>
|
||||||
|
<property name="startDate" column="start_date"/>
|
||||||
|
<property name="endDate" column="end_date"/>
|
||||||
|
|
||||||
|
<component name="hourlyRate" class="MonetoryAmount">
|
||||||
|
<property name="amount">
|
||||||
|
<column name="hourly_rate" sql-type="NUMERIC(12, 2)"/>
|
||||||
|
</property>
|
||||||
|
<property name="currency" length="12"/>
|
||||||
|
</component>
|
||||||
|
|
||||||
|
<many-to-one name="employer" column="employer_id" not-null="true"/>
|
||||||
|
<many-to-one name="employee" column="employee_id" not-null="true"/>
|
||||||
|
|
||||||
|
</class>
|
||||||
|
|
||||||
|
<class name="Employee" table="employees">
|
||||||
|
<id name="id">
|
||||||
|
<generator class="sequence">
|
||||||
|
<param name="sequence">employee_id_seq</param>
|
||||||
|
</generator>
|
||||||
|
</id>
|
||||||
|
<property name="taxfileNumber"/>
|
||||||
|
<component name="name" class="Name">
|
||||||
|
<property name="firstName"/>
|
||||||
|
<property name="initial"/>
|
||||||
|
<property name="lastName"/>
|
||||||
|
</component>
|
||||||
|
</class>
|
||||||
|
|
||||||
|
</hibernate-mapping>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
And heres the table schema generated by <literal>SchemaExport</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[create table employers (
|
||||||
|
id BIGINT not null,
|
||||||
|
name VARCHAR(255),
|
||||||
|
primary key (id)
|
||||||
|
)
|
||||||
|
|
||||||
|
create table employment_periods (
|
||||||
|
id BIGINT not null,
|
||||||
|
hourly_rate NUMERIC(12, 2),
|
||||||
|
currency VARCHAR(12),
|
||||||
|
employee_id BIGINT not null,
|
||||||
|
employer_id BIGINT not null,
|
||||||
|
end_date TIMESTAMP,
|
||||||
|
start_date TIMESTAMP,
|
||||||
|
primary key (id)
|
||||||
|
)
|
||||||
|
|
||||||
|
create table employees (
|
||||||
|
id BIGINT not null,
|
||||||
|
firstName VARCHAR(255),
|
||||||
|
initial CHAR(1),
|
||||||
|
lastName VARCHAR(255),
|
||||||
|
taxfileNumber VARCHAR(255),
|
||||||
|
primary key (id)
|
||||||
|
)
|
||||||
|
|
||||||
|
alter table employment_periods
|
||||||
|
add constraint employment_periodsFK0 foreign key (employer_id) references employers
|
||||||
|
alter table employment_periods
|
||||||
|
add constraint employment_periodsFK1 foreign key (employee_id) references employees
|
||||||
|
create sequence employee_id_seq
|
||||||
|
create sequence employment_id_seq
|
||||||
|
create sequence employer_id_seq]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="example-mappings-authorwork">
|
||||||
|
<title>Author/Work</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Consider the following model of the relationships between <literal>Work</literal>,
|
||||||
|
<literal>Author</literal> and <literal>Person</literal>. We represent the relationship
|
||||||
|
between <literal>Work</literal> and <literal>Author</literal> as a many-to-many
|
||||||
|
association. We choose to represent the relationship between <literal>Author</literal>
|
||||||
|
and <literal>Person</literal> as one-to-one association. Another possibility would be to
|
||||||
|
have <literal>Author</literal> extend <literal>Person</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<mediaobject>
|
||||||
|
<imageobject role="fo">
|
||||||
|
<imagedata fileref="images/AuthorWork.gif" format="GIF" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
<imageobject role="html">
|
||||||
|
<imagedata fileref="../shared/images/AuthorWork.gif" format="GIF" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
</mediaobject>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following mapping document correctly represents these relationships:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<hibernate-mapping>
|
||||||
|
|
||||||
|
<class name="Work" table="works" discriminator-value="W">
|
||||||
|
|
||||||
|
<id name="id" column="id">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<discriminator column="type" type="character"/>
|
||||||
|
|
||||||
|
<property name="title"/>
|
||||||
|
<set name="authors" table="author_work" lazy="true">
|
||||||
|
<key>
|
||||||
|
<column name="work_id" not-null="true"/>
|
||||||
|
</key>
|
||||||
|
<many-to-many class="Author">
|
||||||
|
<column name="author_id" not-null="true"/>
|
||||||
|
</many-to-many>
|
||||||
|
</set>
|
||||||
|
|
||||||
|
<subclass name="Book" discriminator-value="B">
|
||||||
|
<property name="text"/>
|
||||||
|
</subclass>
|
||||||
|
|
||||||
|
<subclass name="Song" discriminator-value="S">
|
||||||
|
<property name="tempo"/>
|
||||||
|
<property name="genre"/>
|
||||||
|
</subclass>
|
||||||
|
|
||||||
|
</class>
|
||||||
|
|
||||||
|
<class name="Author" table="authors">
|
||||||
|
|
||||||
|
<id name="id" column="id">
|
||||||
|
<!-- The Author must have the same identifier as the Person -->
|
||||||
|
<generator class="assigned"/>
|
||||||
|
</id>
|
||||||
|
|
||||||
|
<property name="alias"/>
|
||||||
|
<one-to-one name="person" constrained="true"/>
|
||||||
|
|
||||||
|
<set name="works" table="author_work" inverse="true" lazy="true">
|
||||||
|
<key column="author_id"/>
|
||||||
|
<many-to-many class="Work" column="work_id"/>
|
||||||
|
</set>
|
||||||
|
|
||||||
|
</class>
|
||||||
|
|
||||||
|
<class name="Person" table="persons">
|
||||||
|
<id name="id" column="id">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<property name="name"/>
|
||||||
|
</class>
|
||||||
|
|
||||||
|
</hibernate-mapping>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There are four tables in this mapping. <literal>works</literal>,
|
||||||
|
<literal>authors</literal> and <literal>persons</literal> hold work, author
|
||||||
|
and person data respectively. <literal>author_work</literal> is an association
|
||||||
|
table linking authors to works. Heres the table schema, as generated by
|
||||||
|
<literal>SchemaExport</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[create table works (
|
||||||
|
id BIGINT not null generated by default as identity,
|
||||||
|
tempo FLOAT,
|
||||||
|
genre VARCHAR(255),
|
||||||
|
text INTEGER,
|
||||||
|
title VARCHAR(255),
|
||||||
|
type CHAR(1) not null,
|
||||||
|
primary key (id)
|
||||||
|
)
|
||||||
|
|
||||||
|
create table author_work (
|
||||||
|
author_id BIGINT not null,
|
||||||
|
work_id BIGINT not null,
|
||||||
|
primary key (work_id, author_id)
|
||||||
|
)
|
||||||
|
|
||||||
|
create table authors (
|
||||||
|
id BIGINT not null generated by default as identity,
|
||||||
|
alias VARCHAR(255),
|
||||||
|
primary key (id)
|
||||||
|
)
|
||||||
|
|
||||||
|
create table persons (
|
||||||
|
id BIGINT not null generated by default as identity,
|
||||||
|
name VARCHAR(255),
|
||||||
|
primary key (id)
|
||||||
|
)
|
||||||
|
|
||||||
|
alter table authors
|
||||||
|
add constraint authorsFK0 foreign key (id) references persons
|
||||||
|
alter table author_work
|
||||||
|
add constraint author_workFK0 foreign key (author_id) references authors
|
||||||
|
alter table author_work
|
||||||
|
add constraint author_workFK1 foreign key (work_id) references works]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="example-mappings-customerorderproduct">
|
||||||
|
<title>Customer/Order/Product</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Now consider a model of the relationships between <literal>Customer</literal>,
|
||||||
|
<literal>Order</literal> and <literal>LineItem</literal> and <literal>Product</literal>.
|
||||||
|
There is a one-to-many association between <literal>Customer</literal> and
|
||||||
|
<literal>Order</literal>, but how should we represent <literal>Order</literal> /
|
||||||
|
<literal>LineItem</literal> / <literal>Product</literal>? I've chosen to map
|
||||||
|
<literal>LineItem</literal> as an association class representing the many-to-many
|
||||||
|
association between <literal>Order</literal> and <literal>Product</literal>. In
|
||||||
|
Hibernate, this is called a composite element.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<mediaobject>
|
||||||
|
<imageobject role="fo">
|
||||||
|
<imagedata fileref="images/CustomerOrderProduct.gif" format="GIF" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
<imageobject role="html">
|
||||||
|
<imagedata fileref="../shared/images/CustomerOrderProduct.gif" format="GIF" align="center"/>
|
||||||
|
</imageobject>
|
||||||
|
</mediaobject>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The mapping document:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<hibernate-mapping>
|
||||||
|
|
||||||
|
<class name="Customer" table="customers">
|
||||||
|
<id name="id">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<property name="name"/>
|
||||||
|
<set name="orders" inverse="true" lazy="true">
|
||||||
|
<key column="customer_id"/>
|
||||||
|
<one-to-many class="Order"/>
|
||||||
|
</set>
|
||||||
|
</class>
|
||||||
|
|
||||||
|
<class name="Order" table="orders">
|
||||||
|
<id name="id">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<property name="date"/>
|
||||||
|
<many-to-one name="customer" column="customer_id"/>
|
||||||
|
<list name="lineItems" table="line_items" lazy="true">
|
||||||
|
<key column="order_id"/>
|
||||||
|
<index column="line_number"/>
|
||||||
|
<composite-element class="LineItem">
|
||||||
|
<property name="quantity"/>
|
||||||
|
<many-to-one name="product" column="product_id"/>
|
||||||
|
</composite-element>
|
||||||
|
</list>
|
||||||
|
</class>
|
||||||
|
|
||||||
|
<class name="Product" table="products">
|
||||||
|
<id name="id">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<property name="serialNumber"/>
|
||||||
|
</class>
|
||||||
|
|
||||||
|
</hibernate-mapping>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<literal>customers</literal>, <literal>orders</literal>, <literal>line_items</literal> and
|
||||||
|
<literal>products</literal> hold customer, order, order line item and product data
|
||||||
|
respectively. <literal>line_items</literal> also acts as an association table linking
|
||||||
|
orders with products.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[create table customers (
|
||||||
|
id BIGINT not null generated by default as identity,
|
||||||
|
name VARCHAR(255),
|
||||||
|
primary key (id)
|
||||||
|
)
|
||||||
|
|
||||||
|
create table orders (
|
||||||
|
id BIGINT not null generated by default as identity,
|
||||||
|
customer_id BIGINT,
|
||||||
|
date TIMESTAMP,
|
||||||
|
primary key (id)
|
||||||
|
)
|
||||||
|
|
||||||
|
create table line_items (
|
||||||
|
line_number INTEGER not null,
|
||||||
|
order_id BIGINT not null,
|
||||||
|
product_id BIGINT,
|
||||||
|
quantity INTEGER,
|
||||||
|
primary key (order_id, line_number)
|
||||||
|
)
|
||||||
|
|
||||||
|
create table products (
|
||||||
|
id BIGINT not null generated by default as identity,
|
||||||
|
serialNumber VARCHAR(255),
|
||||||
|
primary key (id)
|
||||||
|
)
|
||||||
|
|
||||||
|
alter table orders
|
||||||
|
add constraint ordersFK0 foreign key (customer_id) references customers
|
||||||
|
alter table line_items
|
||||||
|
add constraint line_itemsFK0 foreign key (product_id) references products
|
||||||
|
alter table line_items
|
||||||
|
add constraint line_itemsFK1 foreign key (order_id) references orders]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
|
|
@ -0,0 +1,385 @@
|
||||||
|
<chapter id="example-parentchild">
|
||||||
|
<title>Example: Parent/Child</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
One of the very first things that new users try to do with Hibernate is to model a parent / child type
|
||||||
|
relationship. There are two different approaches to this. For various reasons the most convenient
|
||||||
|
approach, especially for new users, is to model both <literal>Parent</literal> and <literal>Child</literal>
|
||||||
|
as entity classes with a <literal><one-to-many></literal> association from <literal>Parent</literal>
|
||||||
|
to <literal>Child</literal>. (The alternative approach is to declare the <literal>Child</literal> as a
|
||||||
|
<literal><composite-element></literal>.) Now, it turns out that default semantics of a one to many
|
||||||
|
association (in Hibernate) are much less close to the usual semantics of a parent / child relationship than
|
||||||
|
those of a composite element mapping. We will explain how to use a <emphasis>bidirectional one to many
|
||||||
|
association with cascades</emphasis> to model a parent / child relationship efficiently and elegantly. It's
|
||||||
|
not at all difficult!
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect1 id="example-parentchild-collections">
|
||||||
|
<title>A note about collections</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate collections are considered to be a logical part of their owning entity; never of the
|
||||||
|
contained entities. This is a crucial distinction! It has the following consequences:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
When we remove / add an object from / to a collection, the version number of the collection owner
|
||||||
|
is incremented.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
If an object that was removed from a collection is an instance of a value type (eg, a composite
|
||||||
|
element), that object will cease to be persistent and its state will be completely removed from
|
||||||
|
the database. Likewise, adding a value type instance to the collection will cause its state to be
|
||||||
|
immediately persistent.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
On the other hand, if an entity is removed from a collection (a one-to-many or many-to-many
|
||||||
|
association), it will not be deleted, by default. This behaviour is completely consistent - a
|
||||||
|
change to the internal state of another entity should not cause the associated entity to vanish!
|
||||||
|
Likewise, adding an entity to a collection does not cause that entity to become persistent, by
|
||||||
|
default.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Instead, the default behaviour is that adding an entity to a collection merely creates a link between
|
||||||
|
the two entities, while removing it removes the link. This is very appropriate for all sorts of cases.
|
||||||
|
Where it is not appropriate at all is the case of a parent / child relationship, where the life of the
|
||||||
|
child is bound to the lifecycle of the parent.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="example-parentchild-bidir">
|
||||||
|
<title>Bidirectional one-to-many</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Suppose we start with a simple <literal><one-to-many></literal> association from
|
||||||
|
<literal>Parent</literal> to <literal>Child</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<set name="children">
|
||||||
|
<key column="parent_id"/>
|
||||||
|
<one-to-many class="Child"/>
|
||||||
|
</set>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If we were to execute the following code
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Parent p = .....;
|
||||||
|
Child c = new Child();
|
||||||
|
p.getChildren().add(c);
|
||||||
|
session.save(c);
|
||||||
|
session.flush();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate would issue two SQL statements:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>an <literal>INSERT</literal> to create the record for <literal>c</literal></para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
an <literal>UPDATE</literal> to create the link from <literal>p</literal> to
|
||||||
|
<literal>c</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This is not only inefficient, but also violates any <literal>NOT NULL</literal> constraint on the
|
||||||
|
<literal>parent_id</literal> column.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The underlying cause is that the link (the foreign key <literal>parent_id</literal>) from
|
||||||
|
<literal>p</literal> to <literal>c</literal> is not considered part of the state of the <literal>Child</literal>
|
||||||
|
object and is therefore not created in the <literal>INSERT</literal>. So the solution is to make the link part
|
||||||
|
of the <literal>Child</literal> mapping.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<many-to-one name="parent" column="parent_id" not-null="true"/>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
(We also need to add the <literal>parent</literal> property to the <literal>Child</literal> class.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Now that the <literal>Child</literal> entity is managing the state of the link, we tell the collection not
|
||||||
|
to update the link. We use the <literal>inverse</literal> attribute.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<set name="children" inverse="true">
|
||||||
|
<key column="parent_id"/>
|
||||||
|
<one-to-many class="Child"/>
|
||||||
|
</set>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following code would be used to add a new <literal>Child</literal>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||||
|
Child c = new Child();
|
||||||
|
c.setParent(p);
|
||||||
|
p.getChildren().add(c);
|
||||||
|
session.save(c);
|
||||||
|
session.flush();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
And now, only one SQL <literal>INSERT</literal> would be issued!
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
To tighten things up a bit, we could create an <literal>addChild()</literal> method of
|
||||||
|
<literal>Parent</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[public void addChild(Child c) {
|
||||||
|
c.setParent(this);
|
||||||
|
children.add(c);
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Now, the code to add a <literal>Child</literal> looks like
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||||
|
Child c = new Child();
|
||||||
|
p.addChild(c);
|
||||||
|
session.save(c);
|
||||||
|
session.flush();]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="example-parentchild-cascades">
|
||||||
|
<title>Cascading lifecycle</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The explicit call to <literal>save()</literal> is still annoying. We will address this by
|
||||||
|
using cascades.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<set name="children" inverse="true" cascade="all">
|
||||||
|
<key column="parent_id"/>
|
||||||
|
<one-to-many class="Child"/>
|
||||||
|
</set>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This simplifies the code above to
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||||
|
Child c = new Child();
|
||||||
|
p.addChild(c);
|
||||||
|
session.flush();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Similarly, we don't need to iterate over the children when saving or deleting a <literal>Parent</literal>.
|
||||||
|
The following removes <literal>p</literal> and all its children from the database.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||||
|
session.delete(p);
|
||||||
|
session.flush();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
However, this code
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||||
|
Child c = (Child) p.getChildren().iterator().next();
|
||||||
|
p.getChildren().remove(c);
|
||||||
|
c.setParent(null);
|
||||||
|
session.flush();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
will not remove <literal>c</literal> from the database; it will ony remove the link to <literal>p</literal>
|
||||||
|
(and cause a <literal>NOT NULL</literal> constraint violation, in this case). You need to explicitly
|
||||||
|
<literal>delete()</literal> the <literal>Child</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Parent p = (Parent) session.load(Parent.class, pid);
|
||||||
|
Child c = (Child) p.getChildren().iterator().next();
|
||||||
|
p.getChildren().remove(c);
|
||||||
|
session.delete(c);
|
||||||
|
session.flush();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Now, in our case, a <literal>Child</literal> can't really exist without its parent. So if we remove
|
||||||
|
a <literal>Child</literal> from the collection, we really do want it to be deleted. For this, we must
|
||||||
|
use <literal>cascade="all-delete-orphan"</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<set name="children" inverse="true" cascade="all-delete-orphan">
|
||||||
|
<key column="parent_id"/>
|
||||||
|
<one-to-many class="Child"/>
|
||||||
|
</set>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note: even though the collection mapping specifies <literal>inverse="true"</literal>, cascades are still
|
||||||
|
processed by iterating the collection elements. So if you require that an object be saved, deleted or
|
||||||
|
updated by cascade, you must add it to the collection. It is not enough to simply call
|
||||||
|
<literal>setParent()</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="example-parentchild-update">
|
||||||
|
<title>Using cascading <literal>update()</literal></title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Suppose we loaded up a <literal>Parent</literal> in one <literal>Session</literal>, made some changes in a UI
|
||||||
|
action and wish to persist these changes in a new Session (by calling <literal>update()</literal>). The
|
||||||
|
<literal>Parent</literal> will contain a collection of childen and, since cascading update is enabled, Hibernate
|
||||||
|
needs to know which children are newly instantiated and which represent existing rows in the database. Lets assume
|
||||||
|
that both <literal>Parent</literal> and <literal>Child</literal> have (synthetic) identifier properties of type
|
||||||
|
<literal>java.lang.Long</literal>. Hibernate will use the identifier property value to determine which of the
|
||||||
|
children are new. (You may also use the version or timestamp property, see
|
||||||
|
<xref linkend="manipulatingdata-updating-detached"/>.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>unsaved-value</literal> attribute is used to specify the identifier value of a newly instantiated
|
||||||
|
instance. <literal>unsaved-value</literal> defaults to "null", which is perfect for a <literal>Long</literal>
|
||||||
|
identifier type. If we would have used a primitive identitifier property, we would need to specify
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<id name="id" type="long" unsaved-value="0">]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
for the <literal>Child</literal> mapping. (There is also an <literal>unsaved-value</literal> attribute
|
||||||
|
for version and timestamp property mappings.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following code will update <literal>parent</literal> and <literal>child</literal> and insert
|
||||||
|
<literal>newChild</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[//parent and child were both loaded in a previous session
|
||||||
|
parent.addChild(child);
|
||||||
|
Child newChild = new Child();
|
||||||
|
parent.addChild(newChild);
|
||||||
|
session.update(parent);
|
||||||
|
session.flush();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Well, thats all very well for the case of a generated identifier, but what about assigned identifiers
|
||||||
|
and composite identifiers? This is more difficult, since <literal>unsaved-value</literal> can't
|
||||||
|
distinguish between a newly instantiated object (with an identifier assigned by the user) and an object
|
||||||
|
loaded in a previous session. In these cases, you will probably need to give Hibernate a hint; either
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
define <literal>unsaved-value="null"</literal> or <literal>unsaved-value="negative"</literal>
|
||||||
|
on a <literal><version></literal> or <literal><timestamp></literal> property
|
||||||
|
mapping for the class.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
set <literal>unsaved-value="none"</literal> and explicitly <literal>save()</literal>
|
||||||
|
newly instantiated children before calling <literal>update(parent)</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
set <literal>unsaved-value="any"</literal> and explicitly <literal>update()</literal>
|
||||||
|
previously persistent children before calling <literal>update(parent)</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<literal>none</literal> is the default <literal>unsaved-value</literal> for assigned and composite
|
||||||
|
identifiers.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There is one further possibility. There is a new <literal>Interceptor</literal> method named
|
||||||
|
<literal>isUnsaved()</literal> which lets the application implement its own strategy for distinguishing
|
||||||
|
newly instantiated objects. For example, you could define a base class for your persistent classes.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[public class Persistent {
|
||||||
|
private boolean _saved = false;
|
||||||
|
public void onSave() {
|
||||||
|
_saved=true;
|
||||||
|
}
|
||||||
|
public void onLoad() {
|
||||||
|
_saved=true;
|
||||||
|
}
|
||||||
|
......
|
||||||
|
public boolean isSaved() {
|
||||||
|
return _saved;
|
||||||
|
}
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
(The <literal>saved</literal> property is non-persistent.)
|
||||||
|
Now implement <literal>isUnsaved()</literal>, along with <literal>onLoad()</literal>
|
||||||
|
and <literal>onSave()</literal> as follows.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[public Boolean isUnsaved(Object entity) {
|
||||||
|
if (entity instanceof Persistent) {
|
||||||
|
return new Boolean( !( (Persistent) entity ).isSaved() );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onLoad(Object entity,
|
||||||
|
Serializable id,
|
||||||
|
Object[] state,
|
||||||
|
String[] propertyNames,
|
||||||
|
Type[] types) {
|
||||||
|
|
||||||
|
if (entity instanceof Persistent) ( (Persistent) entity ).onLoad();
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean onSave(Object entity,
|
||||||
|
Serializable id,
|
||||||
|
Object[] state,
|
||||||
|
String[] propertyNames,
|
||||||
|
Type[] types) {
|
||||||
|
|
||||||
|
if (entity instanceof Persistent) ( (Persistent) entity ).onSave();
|
||||||
|
return false;
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="example-parentchild-conclusion">
|
||||||
|
<title>Conclusion</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There is quite a bit to digest here and it might look confusing first time around. However, in practice, it
|
||||||
|
all works out quite nicely. Most Hibernate applications use the parent / child pattern in many places.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We mentioned an alternative in the first paragraph. None of the above issues exist in the case of
|
||||||
|
<literal><composite-element></literal> mappings, which have exactly the semantics of a parent / child
|
||||||
|
relationship. Unfortunately, there are two big limitations to composite element classes: composite elements may
|
||||||
|
not own collections, and they should not be the child of any entity other than the unique parent. (However,
|
||||||
|
they <emphasis>may</emphasis> have a surrogate primary key, using an <literal><idbag></literal> mapping.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
|
@ -0,0 +1,432 @@
|
||||||
|
<chapter id="example-weblog">
|
||||||
|
<title>Example: Weblog Application</title>
|
||||||
|
|
||||||
|
<sect1 id="example-weblog-classes">
|
||||||
|
<title>Persistent Classes</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The persistent classes represent a weblog, and an item posted
|
||||||
|
in a weblog. They are to be modelled as a standard parent/child
|
||||||
|
relationship, but we will use an ordered bag, instead of a set.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[package eg;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class Blog {
|
||||||
|
private Long _id;
|
||||||
|
private String _name;
|
||||||
|
private List _items;
|
||||||
|
|
||||||
|
public Long getId() {
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
public List getItems() {
|
||||||
|
return _items;
|
||||||
|
}
|
||||||
|
public String getName() {
|
||||||
|
return _name;
|
||||||
|
}
|
||||||
|
public void setId(Long long1) {
|
||||||
|
_id = long1;
|
||||||
|
}
|
||||||
|
public void setItems(List list) {
|
||||||
|
_items = list;
|
||||||
|
}
|
||||||
|
public void setName(String string) {
|
||||||
|
_name = string;
|
||||||
|
}
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[package eg;
|
||||||
|
|
||||||
|
import java.text.DateFormat;
|
||||||
|
import java.util.Calendar;
|
||||||
|
|
||||||
|
public class BlogItem {
|
||||||
|
private Long _id;
|
||||||
|
private Calendar _datetime;
|
||||||
|
private String _text;
|
||||||
|
private String _title;
|
||||||
|
private Blog _blog;
|
||||||
|
|
||||||
|
public Blog getBlog() {
|
||||||
|
return _blog;
|
||||||
|
}
|
||||||
|
public Calendar getDatetime() {
|
||||||
|
return _datetime;
|
||||||
|
}
|
||||||
|
public Long getId() {
|
||||||
|
return _id;
|
||||||
|
}
|
||||||
|
public String getText() {
|
||||||
|
return _text;
|
||||||
|
}
|
||||||
|
public String getTitle() {
|
||||||
|
return _title;
|
||||||
|
}
|
||||||
|
public void setBlog(Blog blog) {
|
||||||
|
_blog = blog;
|
||||||
|
}
|
||||||
|
public void setDatetime(Calendar calendar) {
|
||||||
|
_datetime = calendar;
|
||||||
|
}
|
||||||
|
public void setId(Long long1) {
|
||||||
|
_id = long1;
|
||||||
|
}
|
||||||
|
public void setText(String string) {
|
||||||
|
_text = string;
|
||||||
|
}
|
||||||
|
public void setTitle(String string) {
|
||||||
|
_title = string;
|
||||||
|
}
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="example-weblog-mappings">
|
||||||
|
<title>Hibernate Mappings</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The XML mappings should now be quite straightforward.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE hibernate-mapping PUBLIC
|
||||||
|
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
|
||||||
|
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
|
||||||
|
|
||||||
|
<hibernate-mapping package="eg">
|
||||||
|
|
||||||
|
<class
|
||||||
|
name="Blog"
|
||||||
|
table="BLOGS"
|
||||||
|
lazy="true">
|
||||||
|
|
||||||
|
<id
|
||||||
|
name="id"
|
||||||
|
column="BLOG_ID">
|
||||||
|
|
||||||
|
<generator class="native"/>
|
||||||
|
|
||||||
|
</id>
|
||||||
|
|
||||||
|
<property
|
||||||
|
name="name"
|
||||||
|
column="NAME"
|
||||||
|
not-null="true"
|
||||||
|
unique="true"/>
|
||||||
|
|
||||||
|
<bag
|
||||||
|
name="items"
|
||||||
|
inverse="true"
|
||||||
|
lazy="true"
|
||||||
|
order-by="DATE_TIME"
|
||||||
|
cascade="all">
|
||||||
|
|
||||||
|
<key column="BLOG_ID"/>
|
||||||
|
<one-to-many class="BlogItem"/>
|
||||||
|
|
||||||
|
</bag>
|
||||||
|
|
||||||
|
</class>
|
||||||
|
|
||||||
|
</hibernate-mapping>]]></programlisting>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE hibernate-mapping PUBLIC
|
||||||
|
"-//Hibernate/Hibernate Mapping DTD 2.0//EN"
|
||||||
|
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
|
||||||
|
|
||||||
|
<hibernate-mapping package="eg">
|
||||||
|
|
||||||
|
<class
|
||||||
|
name="BlogItem"
|
||||||
|
table="BLOG_ITEMS"
|
||||||
|
dynamic-update="true">
|
||||||
|
|
||||||
|
<id
|
||||||
|
name="id"
|
||||||
|
column="BLOG_ITEM_ID">
|
||||||
|
|
||||||
|
<generator class="native"/>
|
||||||
|
|
||||||
|
</id>
|
||||||
|
|
||||||
|
<property
|
||||||
|
name="title"
|
||||||
|
column="TITLE"
|
||||||
|
not-null="true"/>
|
||||||
|
|
||||||
|
<property
|
||||||
|
name="text"
|
||||||
|
column="TEXT"
|
||||||
|
not-null="true"/>
|
||||||
|
|
||||||
|
<property
|
||||||
|
name="datetime"
|
||||||
|
column="DATE_TIME"
|
||||||
|
not-null="true"/>
|
||||||
|
|
||||||
|
<many-to-one
|
||||||
|
name="blog"
|
||||||
|
column="BLOG_ID"
|
||||||
|
not-null="true"/>
|
||||||
|
|
||||||
|
</class>
|
||||||
|
|
||||||
|
</hibernate-mapping>]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="example-weblog-code">
|
||||||
|
<title>Hibernate Code</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following class demonstrates some of the kinds of things
|
||||||
|
we can do with these classes, using Hibernate.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[package eg;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Calendar;
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import net.sf.hibernate.HibernateException;
|
||||||
|
import net.sf.hibernate.Query;
|
||||||
|
import net.sf.hibernate.Session;
|
||||||
|
import net.sf.hibernate.SessionFactory;
|
||||||
|
import net.sf.hibernate.Transaction;
|
||||||
|
import net.sf.hibernate.cfg.Configuration;
|
||||||
|
import net.sf.hibernate.tool.hbm2ddl.SchemaExport;
|
||||||
|
|
||||||
|
public class BlogMain {
|
||||||
|
|
||||||
|
private SessionFactory _sessions;
|
||||||
|
|
||||||
|
public void configure() throws HibernateException {
|
||||||
|
_sessions = new Configuration()
|
||||||
|
.addClass(Blog.class)
|
||||||
|
.addClass(BlogItem.class)
|
||||||
|
.buildSessionFactory();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void exportTables() throws HibernateException {
|
||||||
|
Configuration cfg = new Configuration()
|
||||||
|
.addClass(Blog.class)
|
||||||
|
.addClass(BlogItem.class);
|
||||||
|
new SchemaExport(cfg).create(true, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Blog createBlog(String name) throws HibernateException {
|
||||||
|
|
||||||
|
Blog blog = new Blog();
|
||||||
|
blog.setName(name);
|
||||||
|
blog.setItems( new ArrayList() );
|
||||||
|
|
||||||
|
Session session = _sessions.openSession();
|
||||||
|
Transaction tx = null;
|
||||||
|
try {
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
session.save(blog);
|
||||||
|
tx.commit();
|
||||||
|
}
|
||||||
|
catch (HibernateException he) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
throw he;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
return blog;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlogItem createBlogItem(Blog blog, String title, String text)
|
||||||
|
throws HibernateException {
|
||||||
|
|
||||||
|
BlogItem item = new BlogItem();
|
||||||
|
item.setTitle(title);
|
||||||
|
item.setText(text);
|
||||||
|
item.setBlog(blog);
|
||||||
|
item.setDatetime( Calendar.getInstance() );
|
||||||
|
blog.getItems().add(item);
|
||||||
|
|
||||||
|
Session session = _sessions.openSession();
|
||||||
|
Transaction tx = null;
|
||||||
|
try {
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
session.update(blog);
|
||||||
|
tx.commit();
|
||||||
|
}
|
||||||
|
catch (HibernateException he) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
throw he;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BlogItem createBlogItem(Long blogid, String title, String text)
|
||||||
|
throws HibernateException {
|
||||||
|
|
||||||
|
BlogItem item = new BlogItem();
|
||||||
|
item.setTitle(title);
|
||||||
|
item.setText(text);
|
||||||
|
item.setDatetime( Calendar.getInstance() );
|
||||||
|
|
||||||
|
Session session = _sessions.openSession();
|
||||||
|
Transaction tx = null;
|
||||||
|
try {
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
Blog blog = (Blog) session.load(Blog.class, blogid);
|
||||||
|
item.setBlog(blog);
|
||||||
|
blog.getItems().add(item);
|
||||||
|
tx.commit();
|
||||||
|
}
|
||||||
|
catch (HibernateException he) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
throw he;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateBlogItem(BlogItem item, String text)
|
||||||
|
throws HibernateException {
|
||||||
|
|
||||||
|
item.setText(text);
|
||||||
|
|
||||||
|
Session session = _sessions.openSession();
|
||||||
|
Transaction tx = null;
|
||||||
|
try {
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
session.update(item);
|
||||||
|
tx.commit();
|
||||||
|
}
|
||||||
|
catch (HibernateException he) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
throw he;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void updateBlogItem(Long itemid, String text)
|
||||||
|
throws HibernateException {
|
||||||
|
|
||||||
|
Session session = _sessions.openSession();
|
||||||
|
Transaction tx = null;
|
||||||
|
try {
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
BlogItem item = (BlogItem) session.load(BlogItem.class, itemid);
|
||||||
|
item.setText(text);
|
||||||
|
tx.commit();
|
||||||
|
}
|
||||||
|
catch (HibernateException he) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
throw he;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public List listAllBlogNamesAndItemCounts(int max)
|
||||||
|
throws HibernateException {
|
||||||
|
|
||||||
|
Session session = _sessions.openSession();
|
||||||
|
Transaction tx = null;
|
||||||
|
List result = null;
|
||||||
|
try {
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
Query q = session.createQuery(
|
||||||
|
"select blog.id, blog.name, count(blogItem) " +
|
||||||
|
"from Blog as blog " +
|
||||||
|
"left outer join blog.items as blogItem " +
|
||||||
|
"group by blog.name, blog.id " +
|
||||||
|
"order by max(blogItem.datetime)"
|
||||||
|
);
|
||||||
|
q.setMaxResults(max);
|
||||||
|
result = q.list();
|
||||||
|
tx.commit();
|
||||||
|
}
|
||||||
|
catch (HibernateException he) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
throw he;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Blog getBlogAndAllItems(Long blogid)
|
||||||
|
throws HibernateException {
|
||||||
|
|
||||||
|
Session session = _sessions.openSession();
|
||||||
|
Transaction tx = null;
|
||||||
|
Blog blog = null;
|
||||||
|
try {
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
Query q = session.createQuery(
|
||||||
|
"from Blog as blog " +
|
||||||
|
"left outer join fetch blog.items " +
|
||||||
|
"where blog.id = :blogid"
|
||||||
|
);
|
||||||
|
q.setParameter("blogid", blogid);
|
||||||
|
blog = (Blog) q.list().get(0);
|
||||||
|
tx.commit();
|
||||||
|
}
|
||||||
|
catch (HibernateException he) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
throw he;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
return blog;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List listBlogsAndRecentItems() throws HibernateException {
|
||||||
|
|
||||||
|
Session session = _sessions.openSession();
|
||||||
|
Transaction tx = null;
|
||||||
|
List result = null;
|
||||||
|
try {
|
||||||
|
tx = session.beginTransaction();
|
||||||
|
Query q = session.createQuery(
|
||||||
|
"from Blog as blog " +
|
||||||
|
"inner join blog.items as blogItem " +
|
||||||
|
"where blogItem.datetime > :minDate"
|
||||||
|
);
|
||||||
|
|
||||||
|
Calendar cal = Calendar.getInstance();
|
||||||
|
cal.roll(Calendar.MONTH, false);
|
||||||
|
q.setCalendar("minDate", cal);
|
||||||
|
|
||||||
|
result = q.list();
|
||||||
|
tx.commit();
|
||||||
|
}
|
||||||
|
catch (HibernateException he) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
throw he;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
session.close();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
|
|
@ -0,0 +1,335 @@
|
||||||
|
<chapter id="inheritance">
|
||||||
|
<title>Inheritance Mapping</title>
|
||||||
|
|
||||||
|
<sect1 id="inheritance-strategies" revision="1">
|
||||||
|
<title>The Three Strategies</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate supports the three basic inheritance mapping strategies.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
table per class hierarchy
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
table per subclass
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
table per concrete class (some limitations)
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
It is even possible to use different mapping strategies for different
|
||||||
|
branches of the same inheritance hierarchy, but the same limitations
|
||||||
|
apply as apply to table-per-concrete class mappings. Hibernate does
|
||||||
|
not support mixing <literal><subclass></literal> mappings and
|
||||||
|
<literal><joined-subclass></literal> mappings inside the same
|
||||||
|
<literal><class></literal> element.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Suppose we have an interface <literal>Payment</literal>, with implementors
|
||||||
|
<literal>CreditCardPayment</literal>, <literal>CashPayment</literal>,
|
||||||
|
<literal>ChequePayment</literal>. The table-per-hierarchy mapping would
|
||||||
|
look like:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="Payment" table="PAYMENT">
|
||||||
|
<id name="id" type="long" column="PAYMENT_ID">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<discriminator column="PAYMENT_TYPE" type="string"/>
|
||||||
|
<property name="amount" column="AMOUNT"/>
|
||||||
|
...
|
||||||
|
<subclass name="CreditCardPayment" discriminator-value="CREDIT">
|
||||||
|
...
|
||||||
|
</subclass>
|
||||||
|
<subclass name="CashPayment" discriminator-value="CASH">
|
||||||
|
...
|
||||||
|
</subclass>
|
||||||
|
<subclass name="ChequePayment" discriminator-value="CHEQUE">
|
||||||
|
...
|
||||||
|
</subclass>
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Exactly one table is required. There is one big limitation of this
|
||||||
|
mapping strategy: columns declared by the subclasses may not have
|
||||||
|
<literal>NOT NULL</literal> constraints.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A table-per-subclass mapping would look like:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="Payment" table="PAYMENT">
|
||||||
|
<id name="id" type="long" column="PAYMENT_ID">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<property name="amount" column="AMOUNT"/>
|
||||||
|
...
|
||||||
|
<joined-subclass name="CreditCardPayment" table="CREDIT_PAYMENT">
|
||||||
|
<key column="PAYMENT_ID"/>
|
||||||
|
...
|
||||||
|
</joined-subclass>
|
||||||
|
<joined-subclass name="CashPayment" table="CASH_PAYMENT">
|
||||||
|
<key column="PAYMENT_ID"/>
|
||||||
|
...
|
||||||
|
</joined-subclass>
|
||||||
|
<joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
|
||||||
|
<key column="PAYMENT_ID"/>
|
||||||
|
...
|
||||||
|
</joined-subclass>
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Four tables are required. The three subclass tables have primary
|
||||||
|
key associations to the superclass table (so the relational model
|
||||||
|
is actually a one-to-one association).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note that Hibernate's implementation of table-per-subclass requires
|
||||||
|
no discriminator column. Other object/relational mappers use a
|
||||||
|
different implementation of table-per-subclass which requires a type
|
||||||
|
discriminator column in the superclass table. The approach taken by
|
||||||
|
Hibernate is much more difficult to implement but arguably more
|
||||||
|
correct from a relational point of view.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
For either of these two mapping strategies, a polymorphic
|
||||||
|
association to <literal>Payment</literal> is mapped using
|
||||||
|
<literal><many-to-one></literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<many-to-one name="payment"
|
||||||
|
column="PAYMENT"
|
||||||
|
class="Payment"/>]]></programlisting>
|
||||||
|
|
||||||
|
<para>The table-per-concrete-class strategy is very different.</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="CreditCardPayment" table="CREDIT_PAYMENT">
|
||||||
|
<id name="id" type="long" column="CREDIT_PAYMENT_ID">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<property name="amount" column="CREDIT_AMOUNT"/>
|
||||||
|
...
|
||||||
|
</class>
|
||||||
|
|
||||||
|
<class name="CashPayment" table="CASH_PAYMENT">
|
||||||
|
<id name="id" type="long" column="CASH_PAYMENT_ID">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<property name="amount" column="CASH_AMOUNT"/>
|
||||||
|
...
|
||||||
|
</class>
|
||||||
|
|
||||||
|
<class name="ChequePayment" table="CHEQUE_PAYMENT">
|
||||||
|
<id name="id" type="long" column="CHEQUE_PAYMENT_ID">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<property name="amount" column="CHEQUE_AMOUNT"/>
|
||||||
|
...
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Three tables were required. Notice that nowhere do we
|
||||||
|
mention the <literal>Payment</literal> interface explicitly.
|
||||||
|
Instead, we make use of Hibernate's <emphasis>implicit
|
||||||
|
polymorphism</emphasis>. Also notice that properties of
|
||||||
|
<literal>Payment</literal> are mapped in each of the
|
||||||
|
subclasses.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In this case, a polymorphic association to <literal>Payment</literal>
|
||||||
|
is mapped using <literal><any></literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<any name="payment"
|
||||||
|
meta-type="class"
|
||||||
|
id-type="long">
|
||||||
|
<column name="PAYMENT_CLASS"/>
|
||||||
|
<column name="PAYMENT_ID"/>
|
||||||
|
</any>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
It would be better if we defined a <literal>UserType</literal>
|
||||||
|
as the <literal>meta-type</literal>, to handle the mapping from
|
||||||
|
type discriminator strings to <literal>Payment</literal> subclass.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<any name="payment"
|
||||||
|
meta-type="PaymentMetaType"
|
||||||
|
id-type="long">
|
||||||
|
<column name="PAYMENT_TYPE"/> <!-- CREDIT, CASH or CHEQUE -->
|
||||||
|
<column name="PAYMENT_ID"/>
|
||||||
|
</any>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There is one further thing to notice about this mapping.
|
||||||
|
Since the subclasses are each mapped in their own
|
||||||
|
<literal><class></literal> element (and since
|
||||||
|
<literal>Payment</literal> is just an interface), each of
|
||||||
|
the subclasses could easily be part of another table-per-class
|
||||||
|
or table-per-subclass inheritance hierarchy! (And you can
|
||||||
|
still use polymorphic queries against the
|
||||||
|
<literal>Payment</literal> interface.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="CreditCardPayment" table="CREDIT_PAYMENT">
|
||||||
|
<id name="id" type="long" column="CREDIT_PAYMENT_ID">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
<discriminator column="CREDIT_CARD" type="string"/>
|
||||||
|
<property name="amount" column="CREDIT_AMOUNT"/>
|
||||||
|
...
|
||||||
|
<subclass name="MasterCardPayment" discriminator-value="MDC"/>
|
||||||
|
<subclass name="VisaPayment" discriminator-value="VISA"/>
|
||||||
|
</class>
|
||||||
|
|
||||||
|
<class name="NonelectronicTransaction" table="NONELECTRONIC_TXN">
|
||||||
|
<id name="id" type="long" column="TXN_ID">
|
||||||
|
<generator class="native"/>
|
||||||
|
</id>
|
||||||
|
...
|
||||||
|
<joined-subclass name="CashPayment" table="CASH_PAYMENT">
|
||||||
|
<key column="PAYMENT_ID"/>
|
||||||
|
<property name="amount" column="CASH_AMOUNT"/>
|
||||||
|
...
|
||||||
|
</joined-subclass>
|
||||||
|
<joined-subclass name="ChequePayment" table="CHEQUE_PAYMENT">
|
||||||
|
<key column="PAYMENT_ID"/>
|
||||||
|
<property name="amount" column="CHEQUE_AMOUNT"/>
|
||||||
|
...
|
||||||
|
</joined-subclass>
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Once again, we don't mention <literal>Payment</literal> explicitly. If we
|
||||||
|
execute a query against the <literal>Payment</literal> interface - for
|
||||||
|
example, <literal>from Payment</literal> - Hibernate
|
||||||
|
automatically returns instances of <literal>CreditCardPayment</literal>
|
||||||
|
(and its subclasses, since they also implement <literal>Payment</literal>),
|
||||||
|
<literal>CashPayment</literal> and <literal>ChequePayment</literal> but
|
||||||
|
not instances of <literal>NonelectronicTransaction</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="inheritance-limitations">
|
||||||
|
<title>Limitations</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate assumes that an association maps to exactly one foreign key column.
|
||||||
|
Multiple associations per foreign key are tolerated (you might need to specify
|
||||||
|
<literal>inverse="true"</literal> or <literal>insert="false" update="false"</literal>),
|
||||||
|
but there is no way to map any association to multiple foreign keys. This means that:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
when an association is modified, it is always the same foreign key that is
|
||||||
|
updated
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
when an association is fetched lazily, a single database query is used
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
when an association is fetched eagerly, it may be fetched using a single
|
||||||
|
outer join
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In particular, it implies that polymorphic one-to-many associations to
|
||||||
|
classes mapped using the table-per-concrete-class strategy are
|
||||||
|
<emphasis>not supported</emphasis>. (Fetching this association would
|
||||||
|
require multiple queries or multiple joins.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following table shows the limitations of table-per-concrete-class
|
||||||
|
mappings, and of implicit polymorphism, in Hibernate.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<table frame="topbot">
|
||||||
|
<title>Features of inheritance mappings</title>
|
||||||
|
<tgroup cols='8' align='left' colsep='1' rowsep='1'>
|
||||||
|
<colspec colname='c1' colwidth="1*"/>
|
||||||
|
<colspec colname='c2' colwidth="1*"/>
|
||||||
|
<colspec colname='c3' colwidth="1*"/>
|
||||||
|
<colspec colname='c4' colwidth="1*"/>
|
||||||
|
<colspec colname='c5' colwidth="1*"/>
|
||||||
|
<colspec colname='c6' colwidth="1*"/>
|
||||||
|
<colspec colname='c7' colwidth="1*"/>
|
||||||
|
<colspec colname='c8' colwidth="1*"/>
|
||||||
|
<thead>
|
||||||
|
<row>
|
||||||
|
<entry>Inheritance strategy</entry>
|
||||||
|
<entry>Polymorphic many-to-one</entry>
|
||||||
|
<entry>Polymorphic one-to-one</entry>
|
||||||
|
<entry>Polymorphic one-to-many</entry>
|
||||||
|
<entry>Polymorphic many-to-many</entry>
|
||||||
|
<entry>Polymorphic <literal>load()/get()</literal></entry>
|
||||||
|
<entry>Polymorphic queries</entry>
|
||||||
|
<entry>Polymorphic joins</entry>
|
||||||
|
<entry>Outer join fetching</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<row>
|
||||||
|
<entry>table-per-class-hierarchy</entry>
|
||||||
|
<entry><literal><many-to-one></literal></entry>
|
||||||
|
<entry><literal><one-to-one></literal></entry>
|
||||||
|
<entry><literal><one-to-many></literal></entry>
|
||||||
|
<entry><literal><many-to-many></literal></entry>
|
||||||
|
<entry><literal>s.get(Payment.class, id)</literal></entry>
|
||||||
|
<entry><literal>from Payment p</literal></entry>
|
||||||
|
<entry><literal>from Order o join o.payment p</literal></entry>
|
||||||
|
<entry><emphasis>supported</emphasis></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>table-per-subclass</entry>
|
||||||
|
<entry><literal><many-to-one></literal></entry>
|
||||||
|
<entry><literal><one-to-one></literal></entry>
|
||||||
|
<entry><literal><one-to-many></literal></entry>
|
||||||
|
<entry><literal><many-to-many></literal></entry>
|
||||||
|
<entry><literal>s.get(Payment.class, id)</literal></entry>
|
||||||
|
<entry><literal>from Payment p</literal></entry>
|
||||||
|
<entry><literal>from Order o join o.payment p</literal></entry>
|
||||||
|
<entry><emphasis>supported</emphasis></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>table-per-concrete-class (implicit polymorphism)</entry>
|
||||||
|
<entry><literal><any></literal></entry>
|
||||||
|
<entry><emphasis>not supported</emphasis></entry>
|
||||||
|
<entry><emphasis>not supported</emphasis></entry>
|
||||||
|
<entry><literal><many-to-any></literal></entry>
|
||||||
|
<entry><emphasis>use a query</emphasis></entry>
|
||||||
|
<entry><literal>from Payment p</literal></entry>
|
||||||
|
<entry><emphasis>not supported</emphasis></entry>
|
||||||
|
<entry><emphasis>not supported</emphasis></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
|
@ -0,0 +1,684 @@
|
||||||
|
<chapter id="performance">
|
||||||
|
<title>Improving performance</title>
|
||||||
|
|
||||||
|
<sect1 id="performance-collections">
|
||||||
|
<title>Understanding Collection performance</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We've already spent quite some time talking about collections.
|
||||||
|
In this section we will highlight a couple more issues about
|
||||||
|
how collections behave at runtime.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect2 id="performance-collections-taxonomy">
|
||||||
|
<title>Taxonomy</title>
|
||||||
|
|
||||||
|
<para>Hibernate defines three basic kinds of collections:</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>collections of values</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>one to many associations</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>many to many associations</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This classification distinguishes the various table and foreign key
|
||||||
|
relationships but does not tell us quite everything we need to know
|
||||||
|
about the relational model. To fully understand the relational structure
|
||||||
|
and performance characteristics, we must also consider the structure of
|
||||||
|
the primary key that is used by Hibernate to update or delete collection
|
||||||
|
rows. This suggests the following classification:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>indexed collections</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>sets</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>bags</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
All indexed collections (maps, lists, arrays) have a primary key consisting
|
||||||
|
of the <literal><key></literal> and <literal><index></literal>
|
||||||
|
columns. In this case collection updates are usually extremely efficient -
|
||||||
|
the primary key may be efficiently indexed and a particular row may be efficiently
|
||||||
|
located when Hibernate tries to update or delete it.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Sets have a primary key consisting of <literal><key></literal> and element
|
||||||
|
columns. This may be less efficient for some types of collection element, particularly
|
||||||
|
composite elements or large text or binary fields; the database may not be able to index
|
||||||
|
a complex primary key as efficently. On the other hand, for one to many or many to many
|
||||||
|
associations, particularly in the case of synthetic identifiers, it is likely to be just
|
||||||
|
as efficient. (Side-note: if you want <literal>SchemaExport</literal> to actually create
|
||||||
|
the primary key of a <literal><set></literal> for you, you must declare all columns
|
||||||
|
as <literal>not-null="true"</literal>.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Bags are the worst case. Since a bag permits duplicate element values and has no
|
||||||
|
index column, no primary key may be defined. Hibernate has no way of distinguishing
|
||||||
|
between duplicate rows. Hibernate resolves this problem by completely removing
|
||||||
|
(in a single <literal>DELETE</literal>) and recreating the collection whenever it
|
||||||
|
changes. This might be very inefficient.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note that for a one-to-many association, the "primary key" may not be the physical
|
||||||
|
primary key of the database table - but even in this case, the above classification
|
||||||
|
is still useful. (It still reflects how Hibernate "locates" individual rows of the
|
||||||
|
collection.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="performance-collections-mostefficientupdate">
|
||||||
|
<title>Lists, maps and sets are the most efficient collections to update</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
From the discussion above, it should be clear that indexed collections
|
||||||
|
and (usually) sets allow the most efficient operation in terms of adding,
|
||||||
|
removing and updating elements.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There is, arguably, one more advantage that indexed collections have over sets for
|
||||||
|
many to many associations or collections of values. Because of the structure of a
|
||||||
|
<literal>Set</literal>, Hibernate doesn't ever <literal>UPDATE</literal> a row when
|
||||||
|
an element is "changed". Changes to a <literal>Set</literal> always work via
|
||||||
|
<literal>INSERT</literal> and <literal>DELETE</literal> (of individual rows). Once
|
||||||
|
again, this consideration does not apply to one to many associations.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
After observing that arrays cannot be lazy, we would conclude that lists, maps and sets
|
||||||
|
are the most performant collection types. (With the caveat that a set might be less
|
||||||
|
efficient for some collections of values.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Sets are expected to be the most common kind of collection in Hibernate applications.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<emphasis>There is an undocumented feature in this release of Hibernate. The
|
||||||
|
<literal><idbag></literal> mapping implements bag semantics for a collection
|
||||||
|
of values or a many to many association and is more efficient that any other
|
||||||
|
style of collection in this case!</emphasis>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="performance-collections-mostefficentinverse">
|
||||||
|
<title>Bags and lists are the most efficient inverse collections</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Just before you ditch bags forever, there is a particular case in which bags (and also lists)
|
||||||
|
are much more performant than sets. For a collection with <literal>inverse="true"</literal>
|
||||||
|
(the standard bidirectional one-to-many relationship idiom, for example) we can add elements
|
||||||
|
to a bag or list without needing to initialize (fetch) the bag elements! This is because
|
||||||
|
<literal>Collection.add()</literal> or <literal>Collection.addAll()</literal> must always
|
||||||
|
return true for a bag or <literal>List</literal> (unlike a <literal>Set</literal>). This can
|
||||||
|
make the following common code much faster.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Parent p = (Parent) sess.load(Parent.class, id);
|
||||||
|
Child c = new Child();
|
||||||
|
c.setParent(p);
|
||||||
|
p.getChildren().add(c); //no need to fetch the collection!
|
||||||
|
sess.flush();]]></programlisting>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="performance-collections-oneshotdelete">
|
||||||
|
<title>One shot delete</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Occasionally, deleting collection elements one by one can be extremely inefficient. Hibernate
|
||||||
|
isn't completly stupid, so it knows not to do that in the case of an newly-empty collection
|
||||||
|
(if you called <literal>list.clear()</literal>, for example). In this case, Hibernate will
|
||||||
|
issue a single <literal>DELETE</literal> and we are done!
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Suppose we add a single element to a collection of size twenty and then remove two elements.
|
||||||
|
Hibernate will issue one <literal>INSERT</literal> statement and two <literal>DELETE</literal>
|
||||||
|
statements (unless the collection is a bag). This is certainly desirable.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
However, suppose that we remove eighteen elements, leaving two and then add thee new elements.
|
||||||
|
There are two possible ways to proceed
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>delete eighteen rows one by one and then insert three rows</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>remove the whole collection (in one SQL <literal>DELETE</literal>) and insert
|
||||||
|
all five current elements (one by one)</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate isn't smart enough to know that the second option is probably quicker in this case.
|
||||||
|
(And it would probably be undesirable for Hibernate to be that smart; such behaviour might
|
||||||
|
confuse database triggers, etc.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Fortunately, you can force this behaviour (ie. the second strategy) at any time by discarding
|
||||||
|
(ie. dereferencing) the original collection and returning a newly instantiated collection with
|
||||||
|
all the current elements. This can be very useful and powerful from time to time.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We have already shown how you can use lazy initialization for persistent collections
|
||||||
|
in the chapter about collection mappings. A similar effect is achievable for ordinary object
|
||||||
|
references, using CGLIB proxies. We have also mentioned how Hibernate caches persistent
|
||||||
|
objects at the level of a <literal>Session</literal>. More aggressive caching strategies
|
||||||
|
may be configured upon a class-by-class basis.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In the next section, we show you how to use these features, which may be used to
|
||||||
|
achieve much higher performance, where necessary.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect1 id="performance-proxies">
|
||||||
|
<title>Proxies for Lazy Initialization</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate implements lazy initializing proxies for persistent objects using runtime
|
||||||
|
bytecode enhancement (via the excellent CGLIB library).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The mapping file declares a class or interface to use as the proxy interface
|
||||||
|
for that class. The recommended approach is to specify the class itself:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="eg.Order" proxy="eg.Order">]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The runtime type of the proxies will be a subclass of <literal>Order</literal>. Note that
|
||||||
|
the proxied class must implement a default constructor with at least package visibility.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There are some gotchas to be aware of when extending this approach to polymorphic
|
||||||
|
classes, eg.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="eg.Cat" proxy="eg.Cat">
|
||||||
|
......
|
||||||
|
<subclass name="eg.DomesticCat" proxy="eg.DomesticCat">
|
||||||
|
.....
|
||||||
|
</subclass>
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Firstly, instances of <literal>Cat</literal> will never be castable to
|
||||||
|
<literal>DomesticCat</literal>, even if the underlying instance is an
|
||||||
|
instance of <literal>DomesticCat</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Cat cat = (Cat) session.load(Cat.class, id); // instantiate a proxy (does not hit the db)
|
||||||
|
if ( cat.isDomesticCat() ) { // hit the db to initialize the proxy
|
||||||
|
DomesticCat dc = (DomesticCat) cat; // Error!
|
||||||
|
....
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Secondly, it is possible to break proxy <literal>==</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[
|
||||||
|
Cat cat = (Cat) session.load(Cat.class, id); // instantiate a Cat proxy
|
||||||
|
DomesticCat dc =
|
||||||
|
(DomesticCat) session.load(DomesticCat.class, id); // required new DomesticCat proxy!
|
||||||
|
System.out.println(cat==dc); // false]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
However, the situation is not quite as bad as it looks. Even though we now have two references
|
||||||
|
to different proxy objects, the underlying instance will still be the same object:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[cat.setWeight(11.0); // hit the db to initialize the proxy
|
||||||
|
System.out.println( dc.getWeight() ); // 11.0]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Third, you may not use a CGLIB proxy for a <literal>final</literal> class or a class
|
||||||
|
with any <literal>final</literal> methods.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Finally, if your persistent object acquires any resources upon instantiation (eg. in
|
||||||
|
initializers or default constructor), then those resources will also be acquired by
|
||||||
|
the proxy. The proxy class is an actual subclass of the persistent class.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
These problems are all due to fundamental limitations in Java's single inheritence model.
|
||||||
|
If you wish to avoid these problems your persistent classes must each implement an interface
|
||||||
|
that declares its business methods. You should specify these interfaces in the mapping file. eg.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="eg.Cat" proxy="eg.ICat">
|
||||||
|
......
|
||||||
|
<subclass name="eg.DomesticCat" proxy="eg.IDomesticCat">
|
||||||
|
.....
|
||||||
|
</subclass>
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
where <literal>Cat</literal> implements the interface <literal>ICat</literal> and
|
||||||
|
<literal>DomesticCat</literal> implements the interface <literal>IDomesticCat</literal>. Then
|
||||||
|
proxies for instances of <literal>Cat</literal> and <literal>DomesticCat</literal> may be returned
|
||||||
|
by <literal>load()</literal> or <literal>iterate()</literal>. (Note that <literal>find()</literal>
|
||||||
|
does not return proxies.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[ICat cat = (ICat) session.load(Cat.class, catid);
|
||||||
|
Iterator iter = session.iterate("from cat in class eg.Cat where cat.name='fritz'");
|
||||||
|
ICat fritz = (ICat) iter.next();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Relationships are also lazily initialized. This means you must declare any properties to be of
|
||||||
|
type <literal>ICat</literal>, not <literal>Cat</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Certain operations do <emphasis>not</emphasis> require proxy initialization
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist spacing="compact">
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>equals()</literal>, if the persistent class does not override
|
||||||
|
<literal>equals()</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>hashCode()</literal>, if the persistent class does not override
|
||||||
|
<literal>hashCode()</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The identifier getter method
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate will detect persistent classes that override <literal>equals()</literal> or
|
||||||
|
<literal>hashCode()</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Exceptions that occur while initializing a proxy are wrapped in a
|
||||||
|
<literal>LazyInitializationException</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Sometimes we need to ensure that a proxy or collection is initialized before closing the
|
||||||
|
<literal>Session</literal>. Of course, we can alway force initialization by calling
|
||||||
|
<literal>cat.getSex()</literal> or <literal>cat.getKittens().size()</literal>, for example.
|
||||||
|
But that is confusing to readers of the code and is not convenient for generic code.
|
||||||
|
The static methods <literal>Hibernate.initialize()</literal> and <literal>Hibernate.isInitialized()</literal>
|
||||||
|
provide the application with a convenient way of working with lazyily initialized collections or
|
||||||
|
proxies. <literal>Hibernate.initialize(cat)</literal> will force the initialization of a proxy,
|
||||||
|
<literal>cat</literal>, as long as its <literal>Session</literal> is still open.
|
||||||
|
<literal>Hibernate.initialize( cat.getKittens() )</literal> has a similar effect for the collection
|
||||||
|
of kittens.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="performance-cache">
|
||||||
|
<title>The Second Level Cache</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A Hibernate <literal>Session</literal> is a transaction-level cache of persistent data. It is
|
||||||
|
possible to configure a cluster or JVM-level (<literal>SessionFactory</literal>-level) cache on
|
||||||
|
a class-by-class and collection-by-collection basis. You may even plug in a clustered cache. Be
|
||||||
|
careful. Caches are never aware of changes made to the persistent store by another application
|
||||||
|
(though they may be configured to regularly expire cached data).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
By default, Hibernate uses EHCache for JVM-level caching. (JCS support is now deprecated and will
|
||||||
|
be removed in a future version of Hibernate.) You may choose a different implementation by
|
||||||
|
specifying the name of a class that implements <literal>net.sf.hibernate.cache.CacheProvider</literal>
|
||||||
|
using the property <literal>hibernate.cache.provider_class</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<table frame="topbot">
|
||||||
|
<title>Cache Providers</title>
|
||||||
|
<tgroup cols='5' align='left' colsep='1' rowsep='1'>
|
||||||
|
<colspec colname='c1' colwidth="1*"/>
|
||||||
|
<colspec colname='c2' colwidth="3*"/>
|
||||||
|
<colspec colname='c3' colwidth="1*"/>
|
||||||
|
<colspec colname='c4' colwidth="1*"/>
|
||||||
|
<colspec colname='c5' colwidth="1*"/>
|
||||||
|
<thead>
|
||||||
|
<row>
|
||||||
|
<entry>Cache</entry>
|
||||||
|
<entry>Provider class</entry>
|
||||||
|
<entry>Type</entry>
|
||||||
|
<entry>Cluster Safe</entry>
|
||||||
|
<entry>Query Cache Supported</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<row>
|
||||||
|
<entry>Hashtable (not intended for production use)</entry>
|
||||||
|
<entry><literal>net.sf.hibernate.cache.HashtableCacheProvider</literal></entry>
|
||||||
|
<entry>memory</entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>EHCache</entry>
|
||||||
|
<entry><literal>net.sf.ehcache.hibernate.Provider</literal></entry>
|
||||||
|
<entry>memory, disk</entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>OSCache</entry>
|
||||||
|
<entry><literal>net.sf.hibernate.cache.OSCacheProvider</literal></entry>
|
||||||
|
<entry>memory, disk</entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>SwarmCache</entry>
|
||||||
|
<entry><literal>net.sf.hibernate.cache.SwarmCacheProvider</literal></entry>
|
||||||
|
<entry>clustered (ip multicast)</entry>
|
||||||
|
<entry>yes (clustered invalidation)</entry>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>JBoss TreeCache</entry>
|
||||||
|
<entry><literal>net.sf.hibernate.cache.TreeCacheProvider</literal></entry>
|
||||||
|
<entry>clustered (ip multicast), transactional</entry>
|
||||||
|
<entry>yes (replication)</entry>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<sect2 id="performance-cache-mapping">
|
||||||
|
<title>Cache mappings</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal><cache></literal> element of a class or collection mapping has the
|
||||||
|
following form:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlistingco>
|
||||||
|
<areaspec>
|
||||||
|
<area id="cache1" coords="2 70"/>
|
||||||
|
</areaspec>
|
||||||
|
<programlisting><![CDATA[<cache
|
||||||
|
usage="transactional|read-write|nonstrict-read-write|read-only"
|
||||||
|
/>]]></programlisting>
|
||||||
|
<calloutlist>
|
||||||
|
<callout arearefs="cache1">
|
||||||
|
<para>
|
||||||
|
<literal>usage</literal> specifies the caching strategy:
|
||||||
|
<literal>transactional</literal>,
|
||||||
|
<literal>read-write</literal>,
|
||||||
|
<literal>nonstrict-read-write</literal> or
|
||||||
|
<literal>read-only</literal>
|
||||||
|
</para>
|
||||||
|
</callout>
|
||||||
|
</calloutlist>
|
||||||
|
</programlistingco>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Alternatively (preferrably?), you may specify <literal><class-cache></literal> and
|
||||||
|
<literal><collection-cache></literal> elements in <literal>hibernate.cfg.xml</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>usage</literal> attribute specifies a <emphasis>cache concurrency strategy</emphasis>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="performance-cache-readonly">
|
||||||
|
<title>Strategy: read only</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If your application needs to read but never modify instances of a persistent class, a
|
||||||
|
<literal>read-only</literal> cache may be used. This is the simplest and best performing
|
||||||
|
strategy. Its even perfectly safe for use in a cluster.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="eg.Immutable" mutable="false">
|
||||||
|
<cache usage="read-only"/>
|
||||||
|
....
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
|
||||||
|
<sect2 id="performance-cache-readwrite">
|
||||||
|
<title>Strategy: read/write</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If the application needs to update data, a <literal>read-write</literal> cache might be appropriate.
|
||||||
|
This cache strategy should never be used if serializable transaction isolation level is required.
|
||||||
|
If the cache is used in a JTA environment, you must specify the property
|
||||||
|
<literal>hibernate.transaction.manager_lookup_class</literal>, naming a strategy for obtaining the
|
||||||
|
JTA <literal>TransactionManager</literal>. In other environments, you should ensure that the transaction
|
||||||
|
is completed when <literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called.
|
||||||
|
If you wish to use this strategy in a cluster, you should ensure that the underlying cache implementation
|
||||||
|
supports locking. The built-in cache providers do <emphasis>not</emphasis>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<class name="eg.Cat" .... >
|
||||||
|
<cache usage="read-write"/>
|
||||||
|
....
|
||||||
|
<set name="kittens" ... >
|
||||||
|
<cache usage="read-write"/>
|
||||||
|
....
|
||||||
|
</set>
|
||||||
|
</class>]]></programlisting>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="performance-cache-nonstrict">
|
||||||
|
<title>Strategy: nonstrict read/write</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If the application only occasionally needs to update data (ie. if it is extremely unlikely that two
|
||||||
|
transactions would try to update the same item simultaneously) and strict transaction isolation is
|
||||||
|
not required, a <literal>nonstrict-read-write</literal> cache might be appropriate. If the cache is
|
||||||
|
used in a JTA environment, you must specify <literal>hibernate.transaction.manager_lookup_class</literal>.
|
||||||
|
In other environments, you should ensure that the transaction is completed when
|
||||||
|
<literal>Session.close()</literal> or <literal>Session.disconnect()</literal> is called.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="performance-cache-transactional">
|
||||||
|
<title>Strategy: transactional</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>transactional</literal> cache strategy provides support for fully transactional cache
|
||||||
|
providers such as JBoss TreeCache. Such a cache may only be used in a JTA environment and you must
|
||||||
|
specify <literal>hibernate.transaction.manager_lookup_class</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
None of the cache providers support all of the cache concurrency strategies. The following table shows
|
||||||
|
which providers are compatible with which concurrency strategies.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<table frame="topbot">
|
||||||
|
<title>Cache Concurrency Strategy Support</title>
|
||||||
|
<tgroup cols='5' align='left' colsep='1' rowsep='1'>
|
||||||
|
<colspec colname='c1' colwidth="1*"/>
|
||||||
|
<colspec colname='c2' colwidth="1*"/>
|
||||||
|
<colspec colname='c3' colwidth="1*"/>
|
||||||
|
<colspec colname='c4' colwidth="1*"/>
|
||||||
|
<colspec colname='c5' colwidth="1*"/>
|
||||||
|
<thead>
|
||||||
|
<row>
|
||||||
|
<entry>Cache</entry>
|
||||||
|
<entry>read-only</entry>
|
||||||
|
<entry>nonstrict-read-write</entry>
|
||||||
|
<entry>read-write</entry>
|
||||||
|
<entry>transactional</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<row>
|
||||||
|
<entry>Hashtable (not intended for production use)</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>EHCache</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>OSCache</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>SwarmCache</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>JBoss TreeCache</entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry></entry>
|
||||||
|
<entry>yes</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="performance-sessioncache" revision="2">
|
||||||
|
<title>Managing the <literal>Session</literal> Cache</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Whenever you pass an object to <literal>save()</literal>, <literal>update()</literal>
|
||||||
|
or <literal>saveOrUpdate()</literal> and whenever you retrieve an object using
|
||||||
|
<literal>load()</literal>, <literal>find()</literal>, <literal>iterate()</literal>,
|
||||||
|
or <literal>filter()</literal>, that object is added to the internal cache of the
|
||||||
|
<literal>Session</literal>. When <literal>flush()</literal> is subsequently called,
|
||||||
|
the state of that object will be synchronized with the database. If you do not want
|
||||||
|
this synchronization to occur or if you are processing a huge number of objects and
|
||||||
|
need to manage memory efficiently, the <literal>evict()</literal> method may be
|
||||||
|
used to remove the object and its collections from the cache.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Iterator cats = sess.iterate("from eg.Cat as cat"); //a huge result set
|
||||||
|
while ( cats.hasNext() ) {
|
||||||
|
Cat cat = (Cat) iter.next();
|
||||||
|
doSomethingWithACat(cat);
|
||||||
|
sess.evict(cat);
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate will evict associated entities automatically if the association is mapped
|
||||||
|
with <literal>cascade="all"</literal> or <literal>cascade="all-delete-orphan"</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>Session</literal> also provides a <literal>contains()</literal> method
|
||||||
|
to determine if an instance belongs to the session cache.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
To completely evict all objects from the session cache, call <literal>Session.clear()</literal>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
For the second-level cache, there are methods defined on <literal>SessionFactory</literal> for
|
||||||
|
evicting the cached state of an instance, entire class, collection instance or entire collection
|
||||||
|
role.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="performance-querycache">
|
||||||
|
<title>The Query Cache</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Query result sets may also be cached. This is only useful for queries that are run
|
||||||
|
frequently with the same parameters. To use the query cache you must first enable it
|
||||||
|
by setting the property <literal>hibernate.cache.use_query_cache=true</literal>. This
|
||||||
|
causes the creation of two cache regions - one holding cached query result sets
|
||||||
|
(<literal>net.sf.hibernate.cache.QueryCache</literal>), the other holding timestamps
|
||||||
|
of most recent updates to queried tables
|
||||||
|
(<literal>net.sf.hibernate.cache.UpdateTimestampsCache</literal>). Note that the query
|
||||||
|
cache does not cache the state of any entities in the result set; it caches only
|
||||||
|
identifier values and results of value type. So the query cache is usually used in
|
||||||
|
conjunction with the second-level cache.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Most queries do not benefit from caching, so by default queries are not cached. To
|
||||||
|
enable caching, call <literal>Query.setCacheable(true)</literal>. This call allows
|
||||||
|
the query to look for existing cache results or add its results to the cache when
|
||||||
|
it is executed.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If you require fine-grained control over query cache expiration policies, you may
|
||||||
|
specify a named cache region for a particular query by calling
|
||||||
|
<literal>Query.setCacheRegion()</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List blogs = sess.createQuery("from Blog blog where blog.blogger = :blogger")
|
||||||
|
.setEntity("blogger", blogger)
|
||||||
|
.setMaxResults(15)
|
||||||
|
.setCacheable(true)
|
||||||
|
.setCacheRegion("frontpages")
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
|
@ -0,0 +1,512 @@
|
||||||
|
<chapter id="persistent-classes">
|
||||||
|
<title>Persistent Classes</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Persistent classes are classes in an application that implement the entities
|
||||||
|
of the business problem (e.g. Customer and Order in an E-commerce application).
|
||||||
|
Persistent classes have, as the name implies, transient and also persistent
|
||||||
|
instance stored in the database.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate works best if these classes follow some simple rules, also known
|
||||||
|
as the Plain Old Java Object (POJO) programming model.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect1 id="persistent-classes-pojo">
|
||||||
|
<title>A simple POJO example</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Most Java applications require a persistent class representing felines.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[package eg;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
public class Cat {
|
||||||
|
private Long id; // identifier
|
||||||
|
private String name;
|
||||||
|
private Date birthdate;
|
||||||
|
private Cat mate;
|
||||||
|
private Set kittens
|
||||||
|
private Color color;
|
||||||
|
private char sex;
|
||||||
|
private float weight;
|
||||||
|
|
||||||
|
private void setId(Long id) {
|
||||||
|
this.id=id;
|
||||||
|
}
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setMate(Cat mate) {
|
||||||
|
this.mate = mate;
|
||||||
|
}
|
||||||
|
public Cat getMate() {
|
||||||
|
return mate;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setBirthdate(Date date) {
|
||||||
|
birthdate = date;
|
||||||
|
}
|
||||||
|
public Date getBirthdate() {
|
||||||
|
return birthdate;
|
||||||
|
}
|
||||||
|
void setWeight(float weight) {
|
||||||
|
this.weight = weight;
|
||||||
|
}
|
||||||
|
public float getWeight() {
|
||||||
|
return weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Color getColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
void setColor(Color color) {
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
void setKittens(Set kittens) {
|
||||||
|
this.kittens = kittens;
|
||||||
|
}
|
||||||
|
public Set getKittens() {
|
||||||
|
return kittens;
|
||||||
|
}
|
||||||
|
// addKitten not needed by Hibernate
|
||||||
|
public void addKitten(Cat kitten) {
|
||||||
|
kittens.add(kitten);
|
||||||
|
}
|
||||||
|
void setSex(char sex) {
|
||||||
|
this.sex=sex;
|
||||||
|
}
|
||||||
|
public char getSex() {
|
||||||
|
return sex;
|
||||||
|
}
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There are four main rules to follow here:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
|
||||||
|
<sect2 id="persistent-classes-pojo-accessors">
|
||||||
|
<title>Declare accessors and mutators for persistent fields</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<literal>Cat</literal> declares accessor methods for all its persistent fields.
|
||||||
|
Many other ORM tools directly persist instance variables. We believe
|
||||||
|
it is far better to decouple this implementation detail from the persistence
|
||||||
|
mechanism. Hibernate persists JavaBeans style properties, and recognizes method
|
||||||
|
names of the form <literal>getFoo</literal>, <literal>isFoo</literal> and
|
||||||
|
<literal>setFoo</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Properties need <emphasis>not</emphasis> be declared public - Hibernate can
|
||||||
|
persist a property with a default, <literal>protected</literal> or <literal>
|
||||||
|
private</literal> get / set pair.
|
||||||
|
</para>
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="persistent-classes-pojo-constructor">
|
||||||
|
<title>Implement a default constructor</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<literal>Cat</literal> has an implicit default (no-argument) constructor. All
|
||||||
|
persistent classes must have a default constructor (which may be non-public) so
|
||||||
|
Hibernate can instantiate them using <literal>Constructor.newInstance()</literal>.
|
||||||
|
</para>
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="persistent-classes-pojo-identifier">
|
||||||
|
<title>Provide an identifier property (optional)</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<literal>Cat</literal> has a property called <literal>id</literal>. This property
|
||||||
|
holds the primary key column of a database table. The property might have been called
|
||||||
|
anything, and its type might have been any primitive type, any primitive "wrapper"
|
||||||
|
type, <literal>java.lang.String</literal> or <literal>java.util.Date</literal>. (If
|
||||||
|
your legacy database table has composite keys, you can even use a user-defined class
|
||||||
|
with properties of these types - see the section on composite identifiers below.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The identifier property is optional. You can leave it off and let Hibernate keep track
|
||||||
|
of object identifiers internally. However, for many applications it is still
|
||||||
|
a good (and very popular) design decision.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
What's more, some functionality is available only to classes which declare an
|
||||||
|
identifier property:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist spacing="compact">
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Cascaded updates (see "Lifecycle Objects")
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>Session.saveOrUpdate()</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We recommend you declare consistently-named identifier properties on persistent
|
||||||
|
classes. We further recommend that you use a nullable (ie. non-primitive) type.
|
||||||
|
</para>
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="persistent-classes-pojo-final">
|
||||||
|
<title>Prefer non-final classes (optional)</title>
|
||||||
|
<para>
|
||||||
|
A central feature of Hibernate, <emphasis>proxies</emphasis>, depends upon the
|
||||||
|
persistent class being either non-final, or the implementation of an interface
|
||||||
|
that declares all public methods.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
You can persist <literal>final</literal> classes that do not implement an interface
|
||||||
|
with Hibernate, but you won't be able to use proxies - which will limit your options
|
||||||
|
for performance tuning somewhat.
|
||||||
|
</para>
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="persistent-classes-inheritance">
|
||||||
|
<title>Implementing inheritance</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A subclass must also observe the first and second rules. It inherits its
|
||||||
|
identifier property from <literal>Cat</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[package eg;
|
||||||
|
|
||||||
|
public class DomesticCat extends Cat {
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
protected void setName(String name) {
|
||||||
|
this.name=name;
|
||||||
|
}
|
||||||
|
}]]></programlisting>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="persistent-classes-equalshashcode">
|
||||||
|
<title>Implementing <literal>equals()</literal> and <literal>hashCode()</literal></title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You have to override the <literal>equals()</literal> and <literal>hashCode()</literal>
|
||||||
|
methods if you intend to mix objects of persistent classes (e.g. in a <literal>Set</literal>).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<emphasis>This only applies if these objects are loaded in two different
|
||||||
|
<literal>Session</literal>s, as Hibernate only guarantees JVM identity (<literal> a == b </literal>,
|
||||||
|
the default implementation of <literal>equals()</literal>) inside a single
|
||||||
|
<literal>Session</literal>!</emphasis>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Even if both objecs <literal>a</literal> and <literal>b</literal> are the same database row
|
||||||
|
(they have the same primary key value as their identifier), we can't guarantee that they are
|
||||||
|
the same Java instance outside of a particular <literal>Session</literal> context.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The most obvious way is to implement <literal>equals()</literal>/<literal>hashCode()</literal>
|
||||||
|
by comparing the identifier value of both objects. If the value is the same, both must
|
||||||
|
be the same database row, they are therefore equal (if both are added to a <literal>Set</literal>,
|
||||||
|
we will only have one element in the <literal>Set</literal>). Unfortunately, we can't use that
|
||||||
|
approach. Hibernate will only assign identifier values to objects that are persistent,
|
||||||
|
a newly created instance will not have any identifier value! We recommend implementing
|
||||||
|
<literal>equals()</literal> and <literal>hashCode()</literal> using
|
||||||
|
<emphasis>Business key equality</emphasis>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Business key equality means that the <literal>equals()</literal>
|
||||||
|
method compares only the properties that form the business key, a key that would
|
||||||
|
identify our instance in the real world (a <emphasis>natural</emphasis> candidate key):
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[public class Cat {
|
||||||
|
|
||||||
|
...
|
||||||
|
public boolean equals(Object other) {
|
||||||
|
if (this == other) return true;
|
||||||
|
if (!(other instanceof Cat)) return false;
|
||||||
|
|
||||||
|
final Cat cat = (Cat) other;
|
||||||
|
|
||||||
|
if (!getName().equals(cat.getName())) return false;
|
||||||
|
if (!getBirthday().equals(cat.getBirthday())) return false;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int hashCode() {
|
||||||
|
int result;
|
||||||
|
result = getName().hashCode();
|
||||||
|
result = 29 * result + getBirthday().hashCode();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Keep in mind that our candidate key (in this case a composite of name and birthday)
|
||||||
|
has to be only valid for a particular comparison operation (maybe even only in a
|
||||||
|
single use case). We don't need the stability criteria we usually apply to a real
|
||||||
|
primary key!
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="persistent-classes-lifecycle">
|
||||||
|
<title>Lifecycle Callbacks</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Optionally, a persistent class might implement the interface
|
||||||
|
<literal>Lifecycle</literal> which provides some callbacks that allow
|
||||||
|
the persistent object to perform necessary initialization/cleanup after
|
||||||
|
save or load and before deletion or update.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<!-- TODO: add xref to interceptor -->
|
||||||
|
The Hibernate <literal>Interceptor</literal> offers a less intrusive
|
||||||
|
alternative, however.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlistingco>
|
||||||
|
<areaspec>
|
||||||
|
<area id="lifecycle1" coords="2 70"/>
|
||||||
|
<area id="lifecycle2" coords="3 70" />
|
||||||
|
<area id="lifecycle3" coords="4 70"/>
|
||||||
|
<area id="lifecycle4" coords="5 70" />
|
||||||
|
</areaspec>
|
||||||
|
<programlisting><![CDATA[public interface Lifecycle {
|
||||||
|
public boolean onSave(Session s) throws CallbackException;
|
||||||
|
public boolean onUpdate(Session s) throws CallbackException;
|
||||||
|
public boolean onDelete(Session s) throws CallbackException;
|
||||||
|
public void onLoad(Session s, Serializable id);
|
||||||
|
}]]></programlisting>
|
||||||
|
<calloutlist>
|
||||||
|
<callout arearefs="lifecycle1">
|
||||||
|
<para>
|
||||||
|
<literal>onSave</literal> - called just before the object is saved or
|
||||||
|
inserted
|
||||||
|
</para>
|
||||||
|
</callout>
|
||||||
|
<callout arearefs="lifecycle2">
|
||||||
|
<para>
|
||||||
|
<literal>onUpdate</literal> - called just before an object is updated
|
||||||
|
(when the object is passed to <literal>Session.update()</literal>)
|
||||||
|
</para>
|
||||||
|
</callout>
|
||||||
|
<callout arearefs="lifecycle3">
|
||||||
|
<para>
|
||||||
|
<literal>onDelete</literal> - called just before an object is deleted
|
||||||
|
</para>
|
||||||
|
</callout>
|
||||||
|
<callout arearefs="lifecycle4">
|
||||||
|
<para>
|
||||||
|
<literal>onLoad</literal> - called just after an object is loaded
|
||||||
|
</para>
|
||||||
|
</callout>
|
||||||
|
</calloutlist>
|
||||||
|
</programlistingco>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<literal>onSave()</literal>, <literal>onDelete()</literal> and
|
||||||
|
<literal>onUpdate()</literal> may be used to cascade saves and
|
||||||
|
deletions of dependent objects. This is an alternative to declaring cascaded
|
||||||
|
operations in the mapping file. <literal>onLoad()</literal> may
|
||||||
|
be used to initialize transient properties of the object from its persistent
|
||||||
|
state. It may not be used to load dependent objects since the
|
||||||
|
<literal>Session</literal> interface may not be invoked from
|
||||||
|
inside this method. A further intended usage of <literal>onLoad()</literal>,
|
||||||
|
<literal>onSave()</literal> and <literal>onUpdate()</literal> is to store a
|
||||||
|
reference to the current <literal>Session</literal> for later use.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note that <literal>onUpdate()</literal> is not called every time the object's
|
||||||
|
persistent state is updated. It is called only when a transient object is passed
|
||||||
|
to <literal>Session.update()</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If <literal>onSave()</literal>, <literal>onUpdate()</literal> or
|
||||||
|
<literal>onDelete()</literal> return <literal>true</literal>, the operation is
|
||||||
|
silently vetoed. If a <literal>CallbackException</literal> is thrown, the operation
|
||||||
|
is vetoed and the exception is passed back to the application.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note that <literal>onSave()</literal> is called after an identifier is assigned to
|
||||||
|
the object, except when native key generation is used.
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="persistent-classes-validatable">
|
||||||
|
<title>Validatable callback</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If the persistent class needs to check invariants before its state is
|
||||||
|
persisted, it may implement the following interface:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[public interface Validatable {
|
||||||
|
public void validate() throws ValidationFailure;
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The object should throw a <literal>ValidationFailure</literal> if an invariant
|
||||||
|
was violated. An instance of <literal>Validatable</literal> should not change
|
||||||
|
its state from inside <literal>validate()</literal>.
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
Unlike the callback methods of the <literal>Lifecycle</literal> interface,
|
||||||
|
<literal>validate()</literal> might be called at unpredictable times. The
|
||||||
|
application should not rely upon calls to <literal>validate()</literal> for
|
||||||
|
business functionality.
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="persistent-classes-xdoclet">
|
||||||
|
<title>Using XDOclet markup</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In the next chapter we will show how Hibernate mappings may be expressed using
|
||||||
|
a simple, readable XML format. Many Hibernate users prefer to embed mapping
|
||||||
|
information directly in sourcecode using XDoclet <literal>@hibernate.tags</literal>.
|
||||||
|
We will not cover this approach in this document, since strictly it is considered
|
||||||
|
part of XDoclet. However, we include the following example of the <literal>Cat</literal>
|
||||||
|
class with XDoclet mappings.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[package eg;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hibernate.class
|
||||||
|
* table="CATS"
|
||||||
|
*/
|
||||||
|
public class Cat {
|
||||||
|
private Long id; // identifier
|
||||||
|
private Date birthdate;
|
||||||
|
private Cat mate;
|
||||||
|
private Set kittens
|
||||||
|
private Color color;
|
||||||
|
private char sex;
|
||||||
|
private float weight;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hibernate.id
|
||||||
|
* generator-class="native"
|
||||||
|
* column="CAT_ID"
|
||||||
|
*/
|
||||||
|
public Long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
private void setId(Long id) {
|
||||||
|
this.id=id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hibernate.many-to-one
|
||||||
|
* column="MATE_ID"
|
||||||
|
*/
|
||||||
|
public Cat getMate() {
|
||||||
|
return mate;
|
||||||
|
}
|
||||||
|
void setMate(Cat mate) {
|
||||||
|
this.mate = mate;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hibernate.property
|
||||||
|
* column="BIRTH_DATE"
|
||||||
|
*/
|
||||||
|
public Date getBirthdate() {
|
||||||
|
return birthdate;
|
||||||
|
}
|
||||||
|
void setBirthdate(Date date) {
|
||||||
|
birthdate = date;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @hibernate.property
|
||||||
|
* column="WEIGHT"
|
||||||
|
*/
|
||||||
|
public float getWeight() {
|
||||||
|
return weight;
|
||||||
|
}
|
||||||
|
void setWeight(float weight) {
|
||||||
|
this.weight = weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hibernate.property
|
||||||
|
* column="COLOR"
|
||||||
|
* not-null="true"
|
||||||
|
*/
|
||||||
|
public Color getColor() {
|
||||||
|
return color;
|
||||||
|
}
|
||||||
|
void setColor(Color color) {
|
||||||
|
this.color = color;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @hibernate.set
|
||||||
|
* lazy="true"
|
||||||
|
* order-by="BIRTH_DATE"
|
||||||
|
* @hibernate.collection-key
|
||||||
|
* column="PARENT_ID"
|
||||||
|
* @hibernate.collection-one-to-many
|
||||||
|
*/
|
||||||
|
public Set getKittens() {
|
||||||
|
return kittens;
|
||||||
|
}
|
||||||
|
void setKittens(Set kittens) {
|
||||||
|
this.kittens = kittens;
|
||||||
|
}
|
||||||
|
// addKitten not needed by Hibernate
|
||||||
|
public void addKitten(Cat kitten) {
|
||||||
|
kittens.add(kitten);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @hibernate.property
|
||||||
|
* column="SEX"
|
||||||
|
* not-null="true"
|
||||||
|
* update="false"
|
||||||
|
*/
|
||||||
|
public char getSex() {
|
||||||
|
return sex;
|
||||||
|
}
|
||||||
|
void setSex(char sex) {
|
||||||
|
this.sex=sex;
|
||||||
|
}
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
|
|
@ -0,0 +1,217 @@
|
||||||
|
<chapter id="querycriteria">
|
||||||
|
<title>Criteria Queries</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate now features an intuitive, extensible criteria query API. For now, this API
|
||||||
|
is less powerful and than the more mature HQL query facilities. In particular, criteria
|
||||||
|
queries do not support projection or aggregation.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect1 id="querycriteria-creating">
|
||||||
|
<title>Creating a <literal>Criteria</literal> instance</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The interface <literal>net.sf.hibernate.Criteria</literal> represents a query against
|
||||||
|
a particular persistent class. The <literal>Session</literal> is a factory for
|
||||||
|
<literal>Criteria</literal> instances.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Criteria crit = sess.createCriteria(Cat.class);
|
||||||
|
crit.setMaxResults(50);
|
||||||
|
List cats = crit.list();]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="querycriteria-narrowing">
|
||||||
|
<title>Narrowing the result set</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
An individual query criterion is an instance of the interface
|
||||||
|
<literal>net.sf.hibernate.expression.Criterion</literal>. The class
|
||||||
|
<literal>net.sf.hibernate.expression.Expression</literal> defines
|
||||||
|
factory methods for obtaining certain built-in
|
||||||
|
<literal>Criterion</literal> types.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||||
|
.add( Expression.like("name", "Fritz%") )
|
||||||
|
.add( Expression.between("weight", minWeight, maxWeight) )
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Expressions may be grouped logically.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||||
|
.add( Expression.like("name", "Fritz%") )
|
||||||
|
.add( Expression.or(
|
||||||
|
Expression.eq( "age", new Integer(0) ),
|
||||||
|
Expression.isNull("age")
|
||||||
|
) )
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||||
|
.add( Expression.in( "name", new String[] { "Fritz", "Izi", "Pk" } ) )
|
||||||
|
.add( Expression.disjunction()
|
||||||
|
.add( Expression.isNull("age") )
|
||||||
|
.add( Expression.eq("age", new Integer(0) ) )
|
||||||
|
.add( Expression.eq("age", new Integer(1) ) )
|
||||||
|
.add( Expression.eq("age", new Integer(2) ) )
|
||||||
|
) )
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There are quite a range of built-in criterion types (<literal>Expression</literal>
|
||||||
|
subclasses), but one that is especially useful lets you specify SQL directly.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||||
|
.add( Expression.sql("lower({alias}.name) like lower(?)", "Fritz%", Hibernate.STRING) )
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>{alias}</literal> placeholder with be replaced by the row alias
|
||||||
|
of the queried entity.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="querycriteria-ordering">
|
||||||
|
<title>Ordering the results</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may order the results using <literal>net.sf.hibernate.expression.Order</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||||
|
.add( Expression.like("name", "F%")
|
||||||
|
.addOrder( Order.asc("name") )
|
||||||
|
.addOrder( Order.desc("age") )
|
||||||
|
.setMaxResults(50)
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="querycriteria-associations">
|
||||||
|
<title>Associations</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may easily specify constraints upon related entities by navigating
|
||||||
|
associations using <literal>createCriteria()</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||||
|
.add( Expression.like("name", "F%")
|
||||||
|
.createCriteria("kittens")
|
||||||
|
.add( Expression.like("name", "F%")
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
note that the second <literal>createCriteria()</literal> returns a new
|
||||||
|
instance of <literal>Criteria</literal>, which refers to the elements of
|
||||||
|
the <literal>kittens</literal> collection.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following, alternate form is useful in certain circumstances.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||||
|
.createAlias("kittens", "kt")
|
||||||
|
.createAlias("mate", "mt")
|
||||||
|
.add( Expression.eqProperty("kt.name", "mt.name") )
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
(<literal>createAlias()</literal> does not create a new instance of
|
||||||
|
<literal>Criteria</literal>.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note that the kittens collections held by the <literal>Cat</literal> instances
|
||||||
|
returned by the previous two queries are <emphasis>not</emphasis> pre-filtered
|
||||||
|
by the criteria! If you wish to retrieve just the kittens that match the
|
||||||
|
criteria, you must use <literal>returnMaps()</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||||
|
.createCriteria("kittens", "kt")
|
||||||
|
.add( Expression.eq("name", "F%") )
|
||||||
|
.returnMaps()
|
||||||
|
.list();
|
||||||
|
Iterator iter = cats.iterator();
|
||||||
|
while ( iter.hasNext() ) {
|
||||||
|
Map map = (Map) iter.next();
|
||||||
|
Cat cat = (Cat) map.get(Criteria.ROOT_ALIAS);
|
||||||
|
Cat kitten = (Cat) map.get("kt");
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="querycriteria-dynamicfetching">
|
||||||
|
<title>Dynamic association fetching</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may specify association fetching semantics at runtime using
|
||||||
|
<literal>setFetchMode()</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List cats = sess.createCriteria(Cat.class)
|
||||||
|
.add( Expression.like("name", "Fritz%") )
|
||||||
|
.setFetchMode("mate", FetchMode.EAGER)
|
||||||
|
.setFetchMode("kittens", FetchMode.EAGER)
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This query will fetch both <literal>mate</literal> and <literal>kittens</literal>
|
||||||
|
by outer join.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="querycriteria-examples">
|
||||||
|
<title>Example queries</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The class <literal>net.sf.hibernate.expression.Example</literal> allows
|
||||||
|
you to construct a query criterion from a given instance.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Cat cat = new Cat();
|
||||||
|
cat.setSex('F');
|
||||||
|
cat.setColor(Color.BLACK);
|
||||||
|
List results = session.createCriteria(Cat.class)
|
||||||
|
.add( Example.create(cat) )
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Version properties, identifiers and associations are ignored. By default,
|
||||||
|
null valued properties are excluded.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You can adjust how the <literal>Example</literal> is applied.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Example example = Example.create(cat)
|
||||||
|
.excludeZeroes() //exclude zero valued properties
|
||||||
|
.excludeProperty("color") //exclude the property named "color"
|
||||||
|
.ignoreCase() //perform case insensitive string comparisons
|
||||||
|
.enableLike(); //use like for string comparisons
|
||||||
|
List results = session.createCriteria(Cat.class)
|
||||||
|
.add(example)
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You can even use examples to place criteria upon associated objects.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List results = session.createCriteria(Cat.class)
|
||||||
|
.add( Example.create(cat) )
|
||||||
|
.createCriteria("mate")
|
||||||
|
.add( Example.create( cat.getMate() ) )
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
|
@ -0,0 +1,960 @@
|
||||||
|
<chapter id="queryhql">
|
||||||
|
<title>HQL: The Hibernate Query Language</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate is equiped with an extremely powerful query language that (quite intentionally)
|
||||||
|
looks very much like SQL. But don't be fooled by the syntax; HQL is fully object-oriented,
|
||||||
|
understanding notions like inheritence, polymorphism and association.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-casesensitivity">
|
||||||
|
<title>Case Sensitivity</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Queries are case-insensitive, except for names of Java classes and properties.
|
||||||
|
So <literal>SeLeCT</literal> is the same as
|
||||||
|
<literal>sELEct</literal> is the same as
|
||||||
|
<literal>SELECT</literal> but
|
||||||
|
<literal>net.sf.hibernate.eg.FOO</literal> is not
|
||||||
|
<literal>net.sf.hibernate.eg.Foo</literal> and
|
||||||
|
<literal>foo.barSet</literal> is not
|
||||||
|
<literal>foo.BARSET</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This manual uses lowercase HQL keywords. Some users find queries with uppercase keywords
|
||||||
|
more readable, but we find this convention ugly when embedded in Java code.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-from">
|
||||||
|
<title>The from clause</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The simplest possible Hibernate query is of the form:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
which simply returns all instances of the class <literal>eg.Cat</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Most of the time, you will need to assign an <emphasis>alias</emphasis>, since
|
||||||
|
you will want to refer to the <literal>Cat</literal> in other parts of the
|
||||||
|
query.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat as cat]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This query assigns the alias <literal>cat</literal> to <literal>Cat</literal>
|
||||||
|
instances, so we could use that alias later in the query. The <literal>as</literal>
|
||||||
|
keyword is optional; we could also write:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat cat]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Multiple classes may appear, resulting in a cartesian product or "cross" join.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from Formula, Parameter]]></programlisting>
|
||||||
|
<programlisting><![CDATA[from Formula as form, Parameter as param]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
It is considered good practice to name query aliases using an initial lowercase,
|
||||||
|
consistent with Java naming standards for local variables
|
||||||
|
(eg. <literal>domesticCat</literal>).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-joins">
|
||||||
|
<title>Associations and joins</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We may also assign aliases to associated entities, or even to elements of a collection of
|
||||||
|
values, using a <literal>join</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat as cat
|
||||||
|
inner join cat.mate as mate
|
||||||
|
left outer join cat.kittens as kitten
|
||||||
|
|
||||||
|
from eg.Cat as cat left join cat.mate.kittens as kittens
|
||||||
|
|
||||||
|
from Formula form full join form.parameter param]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The supported join types are borrowed from ANSI SQL
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist spacing="compact">
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>inner join</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>left outer join</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>right outer join</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>full join</literal> (not usually useful)
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>inner join</literal>, <literal>left outer join</literal> and
|
||||||
|
<literal>right outer join</literal> constructs may be abbreviated.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat as cat
|
||||||
|
join cat.mate as mate
|
||||||
|
left join cat.kittens as kitten]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In addition, a "fetch" join allows associations or collections of values to be
|
||||||
|
initialized along with their parent objects, using a single select. This is particularly
|
||||||
|
useful in the case of a collection. It effectively overrides the outer join and
|
||||||
|
lazy declarations of the mapping file for associations and collections.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat as cat
|
||||||
|
inner join fetch cat.mate
|
||||||
|
left join fetch cat.kittens]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A fetch join does not usually need to assign an alias, because the associated objects
|
||||||
|
should not be used in the <literal>where</literal> clause (or any other clause). Also,
|
||||||
|
the associated objects are not returned directly in the query results. Instead, they may
|
||||||
|
be accessed via the parent object.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note that, in the current implementation, only one collection role may be fetched
|
||||||
|
in a query (everything else would be non-performant). Note also that the
|
||||||
|
<literal>fetch</literal> construct may not be used in queries called using
|
||||||
|
<literal>scroll()</literal> or <literal>iterate()</literal>. Finally, note that
|
||||||
|
<literal>full join fetch</literal> and <literal>right join fetch</literal> are not meaningful.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-select">
|
||||||
|
<title>The select clause</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>select</literal> clause picks which objects and properties to return in
|
||||||
|
the query result set. Consider:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select mate
|
||||||
|
from eg.Cat as cat
|
||||||
|
inner join cat.mate as mate]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The query will select <literal>mate</literal>s of other <literal>Cat</literal>s.
|
||||||
|
Actually, you may express this query more compactly as:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select cat.mate from eg.Cat cat]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may even select collection elements, using the special <literal>elements</literal>
|
||||||
|
function. The following query returns all kittens of any cat.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select elements(cat.kittens) from eg.Cat cat]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Queries may return properties of any value type including properties of component type:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select cat.name from eg.DomesticCat cat
|
||||||
|
where cat.name like 'fri%'
|
||||||
|
|
||||||
|
select cust.name.firstName from Customer as cust]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Queries may return multiple objects and/or properties as an array of type
|
||||||
|
<literal>Object[]</literal>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select mother, offspr, mate.name
|
||||||
|
from eg.DomesticCat as mother
|
||||||
|
inner join mother.mate as mate
|
||||||
|
left outer join mother.kittens as offspr]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
or as an actual typesafe Java object
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select new Family(mother, mate, offspr)
|
||||||
|
from eg.DomesticCat as mother
|
||||||
|
join mother.mate as mate
|
||||||
|
left join mother.kittens as offspr]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
assuming that the class <literal>Family</literal> has an appropriate constructor.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-aggregation">
|
||||||
|
<title>Aggregate functions</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
HQL queries may even return the results of aggregate functions on properties:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select avg(cat.weight), sum(cat.weight), max(cat.weight), count(cat)
|
||||||
|
from eg.Cat cat]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Collections may also appear inside aggregate functions in the <literal>select</literal>
|
||||||
|
clause.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select cat, count( elements(cat.kittens) )
|
||||||
|
from eg.Cat cat group by cat]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The supported aggregate functions are
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist spacing="compact">
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>avg(...), sum(...), min(...), max(...)</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>count(*)</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>count(...), count(distinct ...), count(all...)</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>distinct</literal> and <literal>all</literal> keywords may be used and have
|
||||||
|
the same semantics as in SQL.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select distinct cat.name from eg.Cat cat
|
||||||
|
|
||||||
|
select count(distinct cat.name), count(cat) from eg.Cat cat]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-polymorphism">
|
||||||
|
<title>Polymorphic queries</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A query like:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat as cat]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
returns instances not only of <literal>Cat</literal>, but also of subclasses like
|
||||||
|
<literal>DomesticCat</literal>. Hibernate queries may name <emphasis>any</emphasis> Java
|
||||||
|
class or interface in the <literal>from</literal> clause. The query will return instances
|
||||||
|
of all persistent classes that extend that class or implement the interface. The following
|
||||||
|
query would return all persistent objects:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from java.lang.Object o]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The interface <literal>Named</literal> might be implemented by various persistent
|
||||||
|
classes:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Named n, eg.Named m where n.name = m.name]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note that these last two queries will require more than one SQL <literal>SELECT</literal>. This
|
||||||
|
means that the <literal>order by</literal> clause does not correctly order the whole result set.
|
||||||
|
(It also means you can't call these queries using <literal>Query.scroll()</literal>.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-where">
|
||||||
|
<title>The where clause</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>where</literal> clause allows you to narrow the list of instances returned.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat as cat where cat.name='Fritz']]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
returns instances of <literal>Cat</literal> named 'Fritz'.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select foo
|
||||||
|
from eg.Foo foo, eg.Bar bar
|
||||||
|
where foo.startDate = bar.date]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
will return all instances of <literal>Foo</literal> for which
|
||||||
|
there exists an instance of <literal>bar</literal> with a
|
||||||
|
<literal>date</literal> property equal to the
|
||||||
|
<literal>startDate</literal> property of the
|
||||||
|
<literal>Foo</literal>. Compound path expressions make the
|
||||||
|
<literal>where</literal> clause extremely powerful. Consider:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat cat where cat.mate.name is not null]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This query translates to an SQL query with a table (inner) join. If you were to write
|
||||||
|
something like
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Foo foo
|
||||||
|
where foo.bar.baz.customer.address.city is not null]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
you would end up with a query that would require four table joins in SQL.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>=</literal> operator may be used to compare not only properties, but also
|
||||||
|
instances:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat cat, eg.Cat rival where cat.mate = rival.mate
|
||||||
|
|
||||||
|
select cat, mate
|
||||||
|
from eg.Cat cat, eg.Cat mate
|
||||||
|
where cat.mate = mate]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The special property (lowercase) <literal>id</literal> may be used to reference the
|
||||||
|
unique identifier of an object. (You may also use its property name.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat as cat where cat.id = 123
|
||||||
|
|
||||||
|
from eg.Cat as cat where cat.mate.id = 69]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The second query is efficient. No table join is required!
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Properties of composite identifiers may also be used. Suppose <literal>Person</literal>
|
||||||
|
has a composite identifier consisting of <literal>country</literal> and
|
||||||
|
<literal>medicareNumber</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from bank.Person person
|
||||||
|
where person.id.country = 'AU'
|
||||||
|
and person.id.medicareNumber = 123456
|
||||||
|
|
||||||
|
from bank.Account account
|
||||||
|
where account.owner.id.country = 'AU'
|
||||||
|
and account.owner.id.medicareNumber = 123456]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Once again, the second query requires no table join.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Likewise, the special property <literal>class</literal> accesses the discriminator value
|
||||||
|
of an instance in the case of polymorphic persistence. A Java class name embedded in the
|
||||||
|
where clause will be translated to its discriminator value.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat cat where cat.class = eg.DomesticCat]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may also specify properties of components or composite user types (and of components
|
||||||
|
of components, etc). Never try to use a path-expression that ends in a property of component
|
||||||
|
type (as opposed to a property of a component). For example, if <literal>store.owner</literal>
|
||||||
|
is an entity with a component <literal>address</literal>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[store.owner.address.city // okay
|
||||||
|
store.owner.address // error!]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
An "any" type has the special properties <literal>id</literal> and <literal>class</literal>,
|
||||||
|
allowing us to express a join in the following way (where <literal>AuditLog.item</literal>
|
||||||
|
is a property mapped with <literal><any></literal>).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.AuditLog log, eg.Payment payment
|
||||||
|
where log.item.class = 'eg.Payment' and log.item.id = payment.id]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Notice that <literal>log.item.class</literal> and <literal>payment.class</literal>
|
||||||
|
would refer to the values of completely different database columns in the above query.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-expressions">
|
||||||
|
<title>Expressions</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Expressions allowed in the <literal>where</literal> clause include
|
||||||
|
most of the kind of things you could write in SQL:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist spacing="compact">
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
mathematical operators <literal>+, -, *, /</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
binary comparison operators <literal>=, >=, <=, <>, !=, like</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
logical operations <literal>and, or, not</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
string concatenation ||
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
SQL scalar functions like <literal>upper()</literal> and
|
||||||
|
<literal>lower()</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Parentheses <literal>( )</literal> indicate grouping
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>in</literal>,
|
||||||
|
<literal>between</literal>,
|
||||||
|
<literal>is null</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
JDBC IN parameters <literal>?</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
named parameters <literal>:name</literal>, <literal>:start_date</literal>, <literal>:x1</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
SQL literals <literal>'foo'</literal>, <literal>69</literal>, <literal>'1970-01-01 10:00:01.0'</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Java <literal>public static final</literal> constants <literal>eg.Color.TABBY</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<literal>in</literal> and <literal>between</literal> may be used as follows:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.DomesticCat cat where cat.name between 'A' and 'B'
|
||||||
|
|
||||||
|
from eg.DomesticCat cat where cat.name in ( 'Foo', 'Bar', 'Baz' )]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
and the negated forms may be written
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.DomesticCat cat where cat.name not between 'A' and 'B'
|
||||||
|
|
||||||
|
from eg.DomesticCat cat where cat.name not in ( 'Foo', 'Bar', 'Baz' )]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Likewise, <literal>is null</literal> and <literal>is not null</literal> may be used to test
|
||||||
|
for null values.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Booleans may be easily used in expressions by declaring HQL query substitutions in Hibernate
|
||||||
|
configuration:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<property name="hibernate.query.substitutions">true 1, false 0</property>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This will replace the keywords <literal>true</literal> and <literal>false</literal> with the
|
||||||
|
literals <literal>1</literal> and <literal>0</literal> in the translated SQL from this HQL:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat cat where cat.alive = true]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may test the size of a collection with the special property <literal>size</literal>, or
|
||||||
|
the special <literal>size()</literal> function.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat cat where cat.kittens.size > 0
|
||||||
|
|
||||||
|
from eg.Cat cat where size(cat.kittens) > 0]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
For indexed collections, you may refer to the minimum and maximum indices using
|
||||||
|
<literal>minIndex</literal> and <literal>maxIndex</literal>. Similarly, you may refer to the
|
||||||
|
minimum and maximum elements of a collection of basic type using <literal>minElement</literal>
|
||||||
|
and <literal>maxElement</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from Calendar cal where cal.holidays.maxElement > current date]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
There are also functional forms (which, unlike the constructs above, are not case sensitive):
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from Order order where maxindex(order.items) > 100
|
||||||
|
|
||||||
|
from Order order where minelement(order.items) > 10000]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The SQL functions <literal>any, some, all, exists, in</literal> are supported when passed the element
|
||||||
|
or index set of a collection (<literal>elements</literal> and <literal>indices</literal> functions)
|
||||||
|
or the result of a subquery (see below).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select mother from eg.Cat as mother, eg.Cat as kit
|
||||||
|
where kit in elements(foo.kittens)
|
||||||
|
|
||||||
|
select p from eg.NameList list, eg.Person p
|
||||||
|
where p.name = some elements(list.names)
|
||||||
|
|
||||||
|
from eg.Cat cat where exists elements(cat.kittens)
|
||||||
|
|
||||||
|
from eg.Player p where 3 > all elements(p.scores)
|
||||||
|
|
||||||
|
from eg.Show show where 'fizard' in indices(show.acts)]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note that these constructs - <literal>size</literal>, <literal>elements</literal>,
|
||||||
|
<literal>indices</literal>, <literal>minIndex</literal>, <literal>maxIndex</literal>,
|
||||||
|
<literal>minElement</literal>, <literal>maxElement</literal> - have certain usage
|
||||||
|
restrictions:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist spacing="compact">
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
in a <literal>where</literal> clause: only for databases with subselects
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
in a <literal>select</literal> clause: only <literal>elements</literal> and
|
||||||
|
<literal>indices</literal> make sense
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Elements of indexed collections (arrays, lists, maps) may be referred to by
|
||||||
|
index (in a where clause only):
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from Order order where order.items[0].id = 1234
|
||||||
|
|
||||||
|
select person from Person person, Calendar calendar
|
||||||
|
where calendar.holidays['national day'] = person.birthDay
|
||||||
|
and person.nationality.calendar = calendar
|
||||||
|
|
||||||
|
select item from Item item, Order order
|
||||||
|
where order.items[ order.deliveredItemIndices[0] ] = item and order.id = 11
|
||||||
|
|
||||||
|
select item from Item item, Order order
|
||||||
|
where order.items[ maxindex(order.items) ] = item and order.id = 11]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The expression inside <literal>[]</literal> may even be an arithmetic expression.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select item from Item item, Order order
|
||||||
|
where order.items[ size(order.items) - 1 ] = item]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
HQL also provides the built-in <literal>index()</literal> function, for elements of
|
||||||
|
a one-to-many association or collection of values.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select item, index(item) from Order order
|
||||||
|
join order.items item
|
||||||
|
where index(item) < 5]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Scalar SQL functions supported by the underlying database may be used
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.DomesticCat cat where upper(cat.name) like 'FRI%']]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If you are not yet convinced by all this, think how much longer and less readable the
|
||||||
|
following query would be in SQL:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select cust
|
||||||
|
from Product prod,
|
||||||
|
Store store
|
||||||
|
inner join store.customers cust
|
||||||
|
where prod.name = 'widget'
|
||||||
|
and store.location.name in ( 'Melbourne', 'Sydney' )
|
||||||
|
and prod = all elements(cust.currentOrder.lineItems)]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<emphasis>Hint:</emphasis> something like
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[SELECT cust.name, cust.address, cust.phone, cust.id, cust.current_order
|
||||||
|
FROM customers cust,
|
||||||
|
stores store,
|
||||||
|
locations loc,
|
||||||
|
store_customers sc,
|
||||||
|
product prod
|
||||||
|
WHERE prod.name = 'widget'
|
||||||
|
AND store.loc_id = loc.id
|
||||||
|
AND loc.name IN ( 'Melbourne', 'Sydney' )
|
||||||
|
AND sc.store_id = store.id
|
||||||
|
AND sc.cust_id = cust.id
|
||||||
|
AND prod.id = ALL(
|
||||||
|
SELECT item.prod_id
|
||||||
|
FROM line_items item, orders o
|
||||||
|
WHERE item.order_id = o.id
|
||||||
|
AND cust.current_order = o.id
|
||||||
|
)]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-ordering">
|
||||||
|
<title>The order by clause</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The list returned by a query may be ordered by any property of a returned class or components:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.DomesticCat cat
|
||||||
|
order by cat.name asc, cat.weight desc, cat.birthdate]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The optional <literal>asc</literal> or <literal>desc</literal> indicate ascending or descending order
|
||||||
|
respectively.
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-grouping">
|
||||||
|
<title>The group by clause</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A query that returns aggregate values may be grouped by any property of a returned class or components:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select cat.color, sum(cat.weight), count(cat)
|
||||||
|
from eg.Cat cat
|
||||||
|
group by cat.color
|
||||||
|
|
||||||
|
select foo.id, avg( elements(foo.names) ), max( indices(foo.names) )
|
||||||
|
from eg.Foo foo
|
||||||
|
group by foo.id]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note: You may use the <literal>elements</literal> and <literal>indices</literal> constructs
|
||||||
|
inside a select clause, even on databases with no subselects.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A <literal>having</literal> clause is also allowed.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select cat.color, sum(cat.weight), count(cat)
|
||||||
|
from eg.Cat cat
|
||||||
|
group by cat.color
|
||||||
|
having cat.color in (eg.Color.TABBY, eg.Color.BLACK)]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
SQL functions and aggregate functions are allowed in the <literal>having</literal>
|
||||||
|
and <literal>order by</literal> clauses, if supported by the underlying database (ie.
|
||||||
|
not in MySQL).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select cat
|
||||||
|
from eg.Cat cat
|
||||||
|
join cat.kittens kitten
|
||||||
|
group by cat
|
||||||
|
having avg(kitten.weight) > 100
|
||||||
|
order by count(kitten) asc, sum(kitten.weight) desc]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Note that neither the <literal>group by</literal> clause nor the
|
||||||
|
<literal>order by</literal> clause may contain arithmetic expressions.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-subqueries">
|
||||||
|
<title>Subqueries</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
For databases that support subselects, Hibernate supports subqueries within queries. A subquery must
|
||||||
|
be surrounded by parentheses (often by an SQL aggregate function call). Even correlated subqueries
|
||||||
|
(subqueries that refer to an alias in the outer query) are allowed.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from eg.Cat as fatcat
|
||||||
|
where fatcat.weight > (
|
||||||
|
select avg(cat.weight) from eg.DomesticCat cat
|
||||||
|
)
|
||||||
|
|
||||||
|
from eg.DomesticCat as cat
|
||||||
|
where cat.name = some (
|
||||||
|
select name.nickName from eg.Name as name
|
||||||
|
)
|
||||||
|
|
||||||
|
from eg.Cat as cat
|
||||||
|
where not exists (
|
||||||
|
from eg.Cat as mate where mate.mate = cat
|
||||||
|
)
|
||||||
|
|
||||||
|
from eg.DomesticCat as cat
|
||||||
|
where cat.name not in (
|
||||||
|
select name.nickName from eg.Name as name
|
||||||
|
)]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-examples">
|
||||||
|
<title>HQL examples</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate queries can be quite powerful and complex. In fact, the power of the query language
|
||||||
|
is one of Hibernate's main selling points. Here are some example queries very similar to queries
|
||||||
|
that I used on a recent project. Note that most queries you will write are much simpler than these!
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The following query returns the order id, number of items and total value of the order for all
|
||||||
|
unpaid orders for a particular customer and given minimum total value, ordering the results by
|
||||||
|
total value. In determining the prices, it uses the current catalog. The resulting SQL query,
|
||||||
|
against the <literal>ORDER</literal>, <literal>ORDER_LINE</literal>, <literal>PRODUCT</literal>,
|
||||||
|
<literal>CATALOG</literal> and <literal>PRICE</literal> tables has four inner joins and an
|
||||||
|
(uncorrelated) subselect.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select order.id, sum(price.amount), count(item)
|
||||||
|
from Order as order
|
||||||
|
join order.lineItems as item
|
||||||
|
join item.product as product,
|
||||||
|
Catalog as catalog
|
||||||
|
join catalog.prices as price
|
||||||
|
where order.paid = false
|
||||||
|
and order.customer = :customer
|
||||||
|
and price.product = product
|
||||||
|
and catalog.effectiveDate < sysdate
|
||||||
|
and catalog.effectiveDate >= all (
|
||||||
|
select cat.effectiveDate
|
||||||
|
from Catalog as cat
|
||||||
|
where cat.effectiveDate < sysdate
|
||||||
|
)
|
||||||
|
group by order
|
||||||
|
having sum(price.amount) > :minAmount
|
||||||
|
order by sum(price.amount) desc]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
What a monster! Actually, in real life, I'm not very keen on subqueries, so my query was
|
||||||
|
really more like this:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select order.id, sum(price.amount), count(item)
|
||||||
|
from Order as order
|
||||||
|
join order.lineItems as item
|
||||||
|
join item.product as product,
|
||||||
|
Catalog as catalog
|
||||||
|
join catalog.prices as price
|
||||||
|
where order.paid = false
|
||||||
|
and order.customer = :customer
|
||||||
|
and price.product = product
|
||||||
|
and catalog = :currentCatalog
|
||||||
|
group by order
|
||||||
|
having sum(price.amount) > :minAmount
|
||||||
|
order by sum(price.amount) desc]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The next query counts the number of payments in each status, excluding all payments in the
|
||||||
|
<literal>AWAITING_APPROVAL</literal> status where the most recent status change was made by the
|
||||||
|
current user. It translates to an SQL query with two inner joins and a correlated subselect
|
||||||
|
against the <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal> and
|
||||||
|
<literal>PAYMENT_STATUS_CHANGE</literal> tables.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select count(payment), status.name
|
||||||
|
from Payment as payment
|
||||||
|
join payment.currentStatus as status
|
||||||
|
join payment.statusChanges as statusChange
|
||||||
|
where payment.status.name <> PaymentStatus.AWAITING_APPROVAL
|
||||||
|
or (
|
||||||
|
statusChange.timeStamp = (
|
||||||
|
select max(change.timeStamp)
|
||||||
|
from PaymentStatusChange change
|
||||||
|
where change.payment = payment
|
||||||
|
)
|
||||||
|
and statusChange.user <> :currentUser
|
||||||
|
)
|
||||||
|
group by status.name, status.sortOrder
|
||||||
|
order by status.sortOrder]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If I would have mapped the <literal>statusChanges</literal> collection as a list, instead of a set,
|
||||||
|
the query would have been much simpler to write.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select count(payment), status.name
|
||||||
|
from Payment as payment
|
||||||
|
join payment.currentStatus as status
|
||||||
|
where payment.status.name <> PaymentStatus.AWAITING_APPROVAL
|
||||||
|
or payment.statusChanges[ maxIndex(payment.statusChanges) ].user <> :currentUser
|
||||||
|
group by status.name, status.sortOrder
|
||||||
|
order by status.sortOrder]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The next query uses the MS SQL Server <literal>isNull()</literal> function to return all
|
||||||
|
the accounts and unpaid payments for the organization to which the current user belongs.
|
||||||
|
It translates to an SQL query with three inner joins, an outer join and a subselect against
|
||||||
|
the <literal>ACCOUNT</literal>, <literal>PAYMENT</literal>, <literal>PAYMENT_STATUS</literal>,
|
||||||
|
<literal>ACCOUNT_TYPE</literal>, <literal>ORGANIZATION</literal> and
|
||||||
|
<literal>ORG_USER</literal> tables.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select account, payment
|
||||||
|
from Account as account
|
||||||
|
left outer join account.payments as payment
|
||||||
|
where :currentUser in elements(account.holder.users)
|
||||||
|
and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)
|
||||||
|
order by account.type.sortOrder, account.accountNumber, payment.dueDate]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
For some databases, we would need to do away with the (correlated) subselect.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select account, payment
|
||||||
|
from Account as account
|
||||||
|
join account.holder.users as user
|
||||||
|
left outer join account.payments as payment
|
||||||
|
where :currentUser = user
|
||||||
|
and PaymentStatus.UNPAID = isNull(payment.currentStatus.name, PaymentStatus.UNPAID)
|
||||||
|
order by account.type.sortOrder, account.accountNumber, payment.dueDate]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="queryhql-tipstricks">
|
||||||
|
<title>Tips & Tricks</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You can count the number of query results without actually returning them:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[( (Integer) session.iterate("select count(*) from ....").next() ).intValue()]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
To order a result by the size of a collection, use the following query:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select usr.id, usr.name
|
||||||
|
from User as usr
|
||||||
|
left join usr.messages as msg
|
||||||
|
group by usr.id, usr.name
|
||||||
|
order by count(msg)]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If your database supports subselects, you can place a condition upon selection
|
||||||
|
size in the where clause of your query:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[from User usr where size(usr.messages) >= 1]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If your database doesn't support subselects, use the following query:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select usr.id, usr.name
|
||||||
|
from User usr.name
|
||||||
|
join usr.messages msg
|
||||||
|
group by usr.id, usr.name
|
||||||
|
having count(msg) >= 1]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
As this solution can't return a <literal>User</literal> with zero messages
|
||||||
|
because of the inner join, the following form is also useful:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[select usr.id, usr.name
|
||||||
|
from User as usr
|
||||||
|
left join usr.messages as msg
|
||||||
|
group by usr.id, usr.name
|
||||||
|
having count(msg) = 0]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Properties of a JavaBean can be bound to named query parameters:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Query q = s.createQuery("from foo in class Foo where foo.name=:name and foo.size=:size");
|
||||||
|
q.setProperties(fooBean); // fooBean has getName() and getSize()
|
||||||
|
List foos = q.list();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Collections are pageable by using the <literal>Query</literal> interface with a filter:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Query q = s.createFilter( collection, "" ); // the trivial filter
|
||||||
|
q.setMaxResults(PAGE_SIZE);
|
||||||
|
q.setFirstResult(PAGE_SIZE * pageNumber);
|
||||||
|
List page = q.list();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Collection elements may be ordered or grouped using a query filter:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Collection orderedCollection = s.filter( collection, "order by this.amount" );
|
||||||
|
Collection counts = s.filter( collection, "select this.type, count(this) group by this.type" );]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You can find the size of a collection without initializing it:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[( (Integer) session.iterate("select count(*) from ....").next() ).intValue();]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
|
|
@ -0,0 +1,104 @@
|
||||||
|
<chapter id="querysql">
|
||||||
|
<title>Native SQL Queries</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may also express queries in the native SQL dialect of your database. This is useful if you
|
||||||
|
want to utilize database specific features such as the CONNECT keyword in Oracle.
|
||||||
|
This also allows for a cleaner migration path from a direct SQL/JDBC based application to
|
||||||
|
Hibernate.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect1 id="querysql-creating">
|
||||||
|
<title>Creating a SQL based <literal>Query</literal></title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
SQL queries are exposed through the same <literal>Query</literal> interface, just like ordinary
|
||||||
|
HQL queries. The only difference is the use of <literal>Session.createSQLQuery()</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Query sqlQuery = sess.createSQLQuery("select {cat.*} from cats {cat}", "cat", Cat.class);
|
||||||
|
sqlQuery.setMaxResults(50);
|
||||||
|
List cats = sqlQuery.list();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The three parameters provided to <literal>createSQLQuery()</literal> are:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
the SQL query string
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
a table alias name
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
the persistent class returned by the query
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The alias name is used inside the sql string to refer to the properties of the mapped class
|
||||||
|
(in this case <literal>Cat</literal>). You may retrieve multiple objects per row by supplying
|
||||||
|
a <literal>String</literal> array of alias names and a <literal>Class</literal> array of
|
||||||
|
corresponding classes.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="querysql-aliasreferences">
|
||||||
|
<title>Alias and property references</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>{cat.*}</literal> notation used above is a shorthand for "all properties". You
|
||||||
|
may even list the properties explicity, but you must let Hibernate provide SQL column aliases
|
||||||
|
for each property. The placeholders for these column aliases are the property name qualified by
|
||||||
|
the table alias. In the following example, we retrieve <literal>Cat</literal>s from a different
|
||||||
|
table (<literal>cat_log</literal>) to the one declared in the mapping metadata. Notice that we
|
||||||
|
may even use the property aliases in the where clause.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[String sql = "select cat.originalId as {cat.id}, "
|
||||||
|
+ " cat.mateid as {cat.mate}, cat.sex as {cat.sex}, "
|
||||||
|
+ " cat.weight*10 as {cat.weight}, cat.name as {cat.name}"
|
||||||
|
+ " from cat_log cat where {cat.mate} = :catId"
|
||||||
|
List loggedCats = sess.createSQLQuery(sql, "cat", Cat.class)
|
||||||
|
.setLong("catId", catId)
|
||||||
|
.list();
|
||||||
|
]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<emphasis>Note:</emphasis> if you list each property explicitly, you must include all
|
||||||
|
properties of the class <emphasis>and its subclasses</emphasis>!
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="querysql-namedqueries">
|
||||||
|
<title>Named SQL queries</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Named SQL queries may be defined in the mapping document and called in exactly the same way
|
||||||
|
as a named HQL query.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[List people = sess.getNamedQuery("mySqlQuery")
|
||||||
|
.setMaxResults(50)
|
||||||
|
.list();]]></programlisting>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<sql-query name="mySqlQuery">
|
||||||
|
<return alias="person" class="eg.Person"/>
|
||||||
|
SELECT {person}.NAME AS {person.name},
|
||||||
|
{person}.AGE AS {person.age},
|
||||||
|
{person}.SEX AS {person.sex}
|
||||||
|
FROM PERSON {person} WHERE {person}.NAME LIKE 'Hiber%'
|
||||||
|
</sql-query>]]></programlisting>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
|
@ -0,0 +1,613 @@
|
||||||
|
<chapter id="quickstart">
|
||||||
|
<title>Quickstart with Tomcat</title>
|
||||||
|
|
||||||
|
<sect1 id="quickstart-intro">
|
||||||
|
<title>Getting started with Hibernate</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This tutorial explains a setup of Hibernate 2.1 with the Apache Tomcat
|
||||||
|
servlet container for a web-based application. Hibernate works
|
||||||
|
well in a managed environment with all major J2EE application servers, or
|
||||||
|
even in standalone Java applications. The database system used in this
|
||||||
|
tutorial is PostgreSQL 7.3, support for other database is only a matter
|
||||||
|
of changing the Hibernate SQL dialect configuration.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
First, we have to copy all required libraries to the Tomcat installation.
|
||||||
|
We use a separate web context (<literal>webapps/quickstart</literal>) for
|
||||||
|
this tutorial, so we've to consider both the global library search path
|
||||||
|
(<literal>TOMCAT/common/lib</literal>) and the classloader at the context level in
|
||||||
|
<literal>webapps/quickstart/WEB-INF/lib</literal> (for JAR files) and
|
||||||
|
<literal>webapps/quickstart/WEB-INF/classes</literal>. We refer to both classloader
|
||||||
|
levels as the global classpath and the context classpath.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Now, copy the libraries to the two classpaths:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<orderedlist>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Copy the JDBC driver for the database to the global classpath. This is
|
||||||
|
required for the DBCP connection pool software which comes bundled with Tomcat.
|
||||||
|
Hibernate uses JDBC connections to execute SQL on the database, so you
|
||||||
|
either have to provide pooled JDBC connections or configure Hibernate to
|
||||||
|
use one of the directly supported pools (C3P0, Proxool). For this tutorial,
|
||||||
|
copy the <literal>pg73jdbc3.jar</literal> library (for PostgreSQL 7.3 and JDK 1.4)
|
||||||
|
to the global classloaders path. If you'd like to use a different database, simply
|
||||||
|
copy its appropriate JDBC driver.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Never copy anything else into the global classloader path in Tomcat, or you
|
||||||
|
will get problems with various tools, including Log4j, commons-logging and
|
||||||
|
others. Always us the context classpath for each web application, that is,
|
||||||
|
copy libraries to <literal>WEB-INF/lib</literal> and your own classes and
|
||||||
|
configuration/property files to <literal>WEB-INF/classes</literal>. Both
|
||||||
|
directories are in the context level classpath by default.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Hibernate is packaged as a JAR library. The <literal>hibernate2.jar</literal>
|
||||||
|
file should be copied in the context classpath together with other classes of
|
||||||
|
the application. Hibernate requires some 3rd party libraries at runtime, these
|
||||||
|
come bundled with the Hibernate distribution in the <literal>lib/</literal>
|
||||||
|
directory; see <xref linkend="3rdpartylibs"/>. Copy the required 3rd party
|
||||||
|
libraries to the context classpath.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</orderedlist>
|
||||||
|
|
||||||
|
<table frame="topbot" id="3rdpartylibs">
|
||||||
|
<title>
|
||||||
|
Hibernate 3rd party libraries
|
||||||
|
</title>
|
||||||
|
<tgroup cols="2" rowsep="1" colsep="1">
|
||||||
|
<colspec colname="c1" colwidth="1*"/>
|
||||||
|
<colspec colname="c2" colwidth="2*"/>
|
||||||
|
<thead>
|
||||||
|
<row>
|
||||||
|
<entry align="center">
|
||||||
|
Library
|
||||||
|
</entry>
|
||||||
|
<entry align="center">
|
||||||
|
Description
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
dom4j (required)
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
Hibernate uses dom4j to parse XML configuration and XML mapping
|
||||||
|
metadata files.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
CGLIB (required)
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
Hibernate uses the code generation library to enhance classes
|
||||||
|
at runtime (in combination with Java reflection).
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
Commons Collections, Commons Logging (required)
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
Hibernate uses various utility libraries from the Apache Jakarta
|
||||||
|
Commons project.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
ODMG4 (required)
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
Hibernate provides an optional ODMG compliant persistence manager
|
||||||
|
interface. It is required if you like to map collections, even
|
||||||
|
if you don't intend to use the ODMG API. We don't map collections
|
||||||
|
in this tutorial, but it's a good idea to copy the JAR anyway.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
EHCache (required)
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
Hibernate can use various cache providers for the second-level
|
||||||
|
cache. EHCache is the default cache provider if not changed in
|
||||||
|
the configuration.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
Log4j (optional)
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
Hibernate uses the Commons Logging API, which in turn can use
|
||||||
|
Log4j as the underlying logging mechanism. If the Log4j library is
|
||||||
|
available in the context library directory, Commons Logging will use
|
||||||
|
Log4j and the <literal>log4j.properties</literal> configuration in the
|
||||||
|
context classpath. An example properties file for Log4j is bundled
|
||||||
|
with the Hibernate distribution. So, copy log4j.jar and the configuration
|
||||||
|
file (from <literal>src/</literal>) to your context classpath if
|
||||||
|
you want to see whats going on behind the scenes.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
<row>
|
||||||
|
<entry>
|
||||||
|
Required or not?
|
||||||
|
</entry>
|
||||||
|
<entry>
|
||||||
|
Have a look at the file <literal>lib/README.txt</literal> in the
|
||||||
|
Hibernate distribution. This is an up-to-date list of 3rd party
|
||||||
|
libraries distributed with Hibernate. You will find all required
|
||||||
|
and optional libraries listed there.
|
||||||
|
</entry>
|
||||||
|
</row>
|
||||||
|
</tbody>
|
||||||
|
</tgroup>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We now set up the database connection pooling and sharing in both Tomcat and
|
||||||
|
Hibernate. This means Tomcat will provide pooled JDBC connections (using its
|
||||||
|
builtin DBCP pooling feature), Hibernate requests theses connections through
|
||||||
|
JNDI. Tomcat binds the connection pool to JNDI, we add a resource declaration
|
||||||
|
to Tomcats main configuration file, <literal>TOMCAT/conf/server.xml</literal>:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<Context path="/quickstart" docBase="quickstart">
|
||||||
|
<Resource name="jdbc/quickstart" scope="Shareable" type="javax.sql.DataSource"/>
|
||||||
|
<ResourceParams name="jdbc/quickstart">
|
||||||
|
<parameter>
|
||||||
|
<name>factory</name>
|
||||||
|
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
|
||||||
|
</parameter>
|
||||||
|
|
||||||
|
<!-- DBCP database connection settings -->
|
||||||
|
<parameter>
|
||||||
|
<name>url</name>
|
||||||
|
<value>jdbc:postgresql://localhost/quickstart</value>
|
||||||
|
</parameter>
|
||||||
|
<parameter>
|
||||||
|
<name>driverClassName</name><value>org.postgresql.Driver</value>
|
||||||
|
</parameter>
|
||||||
|
<parameter>
|
||||||
|
<name>username</name>
|
||||||
|
<value>quickstart</value>
|
||||||
|
</parameter>
|
||||||
|
<parameter>
|
||||||
|
<name>password</name>
|
||||||
|
<value>secret</value>
|
||||||
|
</parameter>
|
||||||
|
|
||||||
|
<!-- DBCP connection pooling options -->
|
||||||
|
<parameter>
|
||||||
|
<name>maxWait</name>
|
||||||
|
<value>3000</value>
|
||||||
|
</parameter>
|
||||||
|
<parameter>
|
||||||
|
<name>maxIdle</name>
|
||||||
|
<value>100</value>
|
||||||
|
</parameter>
|
||||||
|
<parameter>
|
||||||
|
<name>maxActive</name>
|
||||||
|
<value>10</value>
|
||||||
|
</parameter>
|
||||||
|
</ResourceParams>
|
||||||
|
</Context>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The context we configure in this example is named <literal>quickstart</literal>,
|
||||||
|
its base is the <literal>TOMCAT/webapp/quickstart</literal> directory. To access
|
||||||
|
any servlets, call the path <literal>http://localhost:8080/quickstart</literal>
|
||||||
|
in your browser (of course, adding the name of the servlet as mapped in your
|
||||||
|
<literal>web.xml</literal>). You may also go ahead and create a simple servlet
|
||||||
|
now that has an empty <literal>process()</literal>
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Tomcat uses the DBCP connection pool with this configuration and provides pooled
|
||||||
|
JDBC <literal>Connection</literal>s through JNDI at
|
||||||
|
<literal>java:comp/env/jdbc/quickstart</literal>. If you have trouble getting the
|
||||||
|
connection pool running, refer to the Tomcat documentation. If you get JDBC driver
|
||||||
|
exception messages, try to setup JDBC connection pool without Hibernate first.
|
||||||
|
Tomcat & JDBC tutorials are available on the Web.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The next step is to configure Hibernate, using the connections from the JNDI bound pool.
|
||||||
|
We use Hibernates XML based configuration. The basic approach, using properties, is
|
||||||
|
equivalent in features, but doesn't offer any advantages. We use the XML configuration
|
||||||
|
because it is usually more convenient. The XML configuration file is placed in the
|
||||||
|
context classpath (<literal>WEB-INF/classes</literal>), as
|
||||||
|
<literal>hibernate.cfg.xml</literal>:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<?xml version='1.0' encoding='utf-8'?>
|
||||||
|
<!DOCTYPE hibernate-configuration
|
||||||
|
PUBLIC "-//Hibernate/Hibernate Configuration DTD//EN"
|
||||||
|
"http://hibernate.sourceforge.net/hibernate-configuration-2.0.dtd">
|
||||||
|
|
||||||
|
<hibernate-configuration>
|
||||||
|
|
||||||
|
<session-factory>
|
||||||
|
|
||||||
|
<property name="connection.datasource">java:comp/env/jdbc/quickstart</property>
|
||||||
|
<property name="show_sql">false</property>
|
||||||
|
<property name="dialect">net.sf.hibernate.dialect.PostgreSQLDialect</property>
|
||||||
|
|
||||||
|
<!-- Mapping files -->
|
||||||
|
<mapping resource="Cat.hbm.xml"/>
|
||||||
|
|
||||||
|
</session-factory>
|
||||||
|
|
||||||
|
</hibernate-configuration>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We turn logging of SQL commands off and tell Hibernate what database SQL
|
||||||
|
dialect is used and where to get the JDBC connections (by declaring the JNDI
|
||||||
|
address of the Tomcat bound datasource pool). The dialect is a required setting,
|
||||||
|
databases differ in their interpretation of the SQL "standard". Hibernate will take
|
||||||
|
care of the differences and comes bundled with dialects for all major
|
||||||
|
commercial and open source databases.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A <literal>SessionFactory</literal> is Hibernate's concept of a single
|
||||||
|
datastore, multiple databases can be used by creating multiple XML
|
||||||
|
configuration files and creating multiple <literal>Configuration</literal>
|
||||||
|
and <literal>SessionFactory</literal> objects in your application.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The last element of the <literal>hibernate.cfg.xml</literal> declares
|
||||||
|
<literal>Cat.hbm.xml</literal> as the name of a Hibernate XML mapping
|
||||||
|
file for the persistent class <literal>Cat</literal>. This file contains
|
||||||
|
the metadata for the mapping of the POJO class to a datbase table (or multiple
|
||||||
|
tables). We'll come back to that file soon. Let's write the POJO class first
|
||||||
|
and then declare the mapping metadata for it.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="quickstart-persistentclass">
|
||||||
|
<title>First persistent class</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate works best with the Plain Old Java Objects (POJOs, sometimes
|
||||||
|
called Plain Ordinary Java Objects) programming model for persistent classes.
|
||||||
|
A POJO is much like a JavaBean, with properties of the class accessible via getter
|
||||||
|
and setter methods, shielding the internal representation from the publicly
|
||||||
|
visible interface:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[package net.sf.hibernate.examples.quickstart;
|
||||||
|
|
||||||
|
public class Cat {
|
||||||
|
|
||||||
|
private String id;
|
||||||
|
private String name;
|
||||||
|
private char sex;
|
||||||
|
private float weight;
|
||||||
|
|
||||||
|
public Cat() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setId(String id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public char getSex() {
|
||||||
|
return sex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSex(char sex) {
|
||||||
|
this.sex = sex;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getWeight() {
|
||||||
|
return weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setWeight(float weight) {
|
||||||
|
this.weight = weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate is not restricted in its usage of property types, all Java JDK
|
||||||
|
types and primitives (like <literal>String</literal>, <literal>char</literal>
|
||||||
|
and <literal>Date</literal>) can be mapped, including classes from the Java
|
||||||
|
collections framework. You can map them as values, collections of values, or
|
||||||
|
associations to other entities. The <literal>id</literal> is a special property
|
||||||
|
that represents the database identifer (primary key) of that class, it is
|
||||||
|
highly recommended for entities like a <literal>Cat</literal>. Hibernate can
|
||||||
|
use identifiers only internally, but we would lose some of the flexibility in our
|
||||||
|
application architecture.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
No special interface has to be implemented for persistent classes nor do we have
|
||||||
|
to subclass from a special root persistent class. Hibernate also doesn't use any
|
||||||
|
build time processing, such as byte-code manipulation, it relies solely on
|
||||||
|
Java reflection and runtime class enhancement (through CGLIB). So, without any
|
||||||
|
dependency in the POJO class on Hibernate, we can map it to a database table.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="quickstart-mapping">
|
||||||
|
<title>Mapping the cat</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>Cat.hbm.xml</literal> mapping file contains the metadata
|
||||||
|
required for the object/relational mapping. The metadata includes declaration
|
||||||
|
of persistent classes and the mapping of properties (to columns and
|
||||||
|
foreign key relationships to other entities) to database tables.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE hibernate-mapping
|
||||||
|
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
|
||||||
|
"http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">
|
||||||
|
|
||||||
|
<hibernate-mapping>
|
||||||
|
|
||||||
|
<class name="net.sf.hibernate.examples.quickstart.Cat" table="CAT">
|
||||||
|
|
||||||
|
<!-- A 32 hex character is our surrogate key. It's automatically
|
||||||
|
generated by Hibernate with the UUID pattern. -->
|
||||||
|
<id name="id" type="string" unsaved-value="null" >
|
||||||
|
<column name="CAT_ID" sql-type="char(32)" not-null="true"/>
|
||||||
|
<generator class="uuid.hex"/>
|
||||||
|
</id>
|
||||||
|
|
||||||
|
<!-- A cat has to have a name, but it shouldn' be too long. -->
|
||||||
|
<property name="name">
|
||||||
|
<column name="NAME" length="16" not-null="true"/>
|
||||||
|
</property>
|
||||||
|
|
||||||
|
<property name="sex"/>
|
||||||
|
|
||||||
|
<property name="weight"/>
|
||||||
|
|
||||||
|
</class>
|
||||||
|
|
||||||
|
</hibernate-mapping>]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Every persistent class should have an identifer attribute (actually, only
|
||||||
|
classes representing entities, not dependent value objects, which
|
||||||
|
are mapped as components of an entity). This property is used to distinguish
|
||||||
|
persistent objects: Two cats are equal if
|
||||||
|
<literal>catA.getId().equals(catB.getId())</literal> is true, this concept is
|
||||||
|
called <emphasis>database identity</emphasis>. Hibernate comes bundled with
|
||||||
|
various identifer generators for different scenarios (including native generators
|
||||||
|
for database sequences, hi/lo identifier tables, and application assigned
|
||||||
|
identifiers). We use the UUID generator (only recommended for testing, as integer
|
||||||
|
surrogate keys generated by the database should be prefered) and also specify the
|
||||||
|
column <literal>CAT_ID</literal> of the table <literal>CAT</literal> for the
|
||||||
|
Hibernate generated identifier value (as a primary key of the table).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
All other properties of <literal>Cat</literal> are mapped to the same table. In
|
||||||
|
the case of the <literal>name</literal> property, we mapped it with an explicit
|
||||||
|
database column declaration. This is especially useful when the database
|
||||||
|
schema is automatically generated (as SQL DDL statements) from the mapping
|
||||||
|
declaration with Hibernate's <emphasis>SchemaExport</emphasis> tool. All other
|
||||||
|
properties are mapped using Hibernate's default settings, which is what you
|
||||||
|
need most of the time. The table <literal>CAT</literal> in the database looks
|
||||||
|
like this:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[ Column | Type | Modifiers
|
||||||
|
--------+-----------------------+-----------
|
||||||
|
cat_id | character(32) | not null
|
||||||
|
name | character varying(16) | not null
|
||||||
|
sex | character(1) |
|
||||||
|
weight | real |
|
||||||
|
Indexes: cat_pkey primary key btree (cat_id)]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You should now create this table in your database manually, and later read
|
||||||
|
<xref linkend="toolsetguide"/> if you want to automate this step with the
|
||||||
|
SchemaExport tool. This tool can create a full SQL DDL, including table
|
||||||
|
definition, custom column type constraints, unique constraints and indexes.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="quickstart-playingwithcats">
|
||||||
|
<title>Playing with cats</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We're now ready to start Hibernate's <literal>Session</literal>. It is the
|
||||||
|
<emphasis>persistence manager</emphasis>interface, we use it
|
||||||
|
to store and retrieve <literal>Cat</literal>s to and from the database.
|
||||||
|
But first, we've to get a <literal>Session</literal> (Hibernate's unit-of-work)
|
||||||
|
from the <literal>SessionFactory</literal>:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[SessionFactory sessionFactory =
|
||||||
|
new Configuration().configure().buildSessionFactory();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A <literal>SessionFactory</literal> is responsible for one database and
|
||||||
|
may only use one XML configuration file (<literal>hibernate.cfg.xml</literal>).
|
||||||
|
You can set other properties (and even change the mapping metadata) by
|
||||||
|
accessing the <literal>Configuration</literal> <emphasis>before</emphasis>
|
||||||
|
you build the <literal>SessionFactory</literal> (it is immutable). Where
|
||||||
|
do we create the <literal>SessionFactory</literal> and how can we access
|
||||||
|
it in our application?
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A <literal>SessionFactory</literal> is usually only build done once,
|
||||||
|
e.g. at startup with a <emphasis>load-on-startup</emphasis> servlet.
|
||||||
|
This also means you should not keep it in an instance variable in your
|
||||||
|
servlets, but in some other location. We need some kind of
|
||||||
|
<emphasis>Singleton</emphasis>, so we can access the
|
||||||
|
<literal>SessionFactory</literal> easily. The approach shown next
|
||||||
|
solves both problems: configuration and easy access to a
|
||||||
|
<literal>SessionFactory</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We implement a <literal>HibernateUtil</literal> helper class:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[import net.sf.hibernate.*;
|
||||||
|
import net.sf.hibernate.cfg.*;
|
||||||
|
|
||||||
|
public class HibernateUtil {
|
||||||
|
|
||||||
|
private static final SessionFactory sessionFactory;
|
||||||
|
|
||||||
|
static {
|
||||||
|
try {
|
||||||
|
// Create the SessionFactory
|
||||||
|
sessionFactory = new Configuration().configure().buildSessionFactory();
|
||||||
|
} catch (HibernateException ex) {
|
||||||
|
throw new RuntimeException("Configuration problem: " + ex.getMessage(), ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final ThreadLocal session = new ThreadLocal();
|
||||||
|
|
||||||
|
public static Session currentSession() throws HibernateException {
|
||||||
|
Session s = (Session) session.get();
|
||||||
|
// Open a new Session, if this Thread has none yet
|
||||||
|
if (s == null) {
|
||||||
|
s = sessionFactory.openSession();
|
||||||
|
session.set(s);
|
||||||
|
}
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void closeSession() throws HibernateException {
|
||||||
|
Session s = (Session) session.get();
|
||||||
|
session.set(null);
|
||||||
|
if (s != null)
|
||||||
|
s.close();
|
||||||
|
}
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This class does not only take care of the <literal>SessionFactory</literal>
|
||||||
|
with its static attribute, but also has a <literal>ThreadLocal</literal> to
|
||||||
|
hold the <literal>Session</literal> for the current executing thread. Make
|
||||||
|
sure you understand the Java concept of a thread-local variable before you
|
||||||
|
try to use this helper.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A <literal>SessionFactory</literal> is threadsafe, many threads can access
|
||||||
|
it concurrently and request <literal>Session</literal>s. A <literal>Session</literal>
|
||||||
|
is a non-threadsafe object that represents a single unit-of-work with the database.
|
||||||
|
<literal>Session</literal>s are opened by a <literal>SessionFactory</literal> and
|
||||||
|
are closed when all work is completed:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Session session = HibernateUtil.currentSession();
|
||||||
|
|
||||||
|
Transaction tx= session.beginTransaction();
|
||||||
|
|
||||||
|
Cat princess = new Cat();
|
||||||
|
princess.setName("Princess");
|
||||||
|
princess.setSex('F');
|
||||||
|
princess.setWeight(7.4f);
|
||||||
|
|
||||||
|
session.save(princess);
|
||||||
|
tx.commit();
|
||||||
|
|
||||||
|
HibernateUtil.closeSession();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In a <literal>Session</literal>, every database operation occurs inside a
|
||||||
|
transaction that isolates the database operations (even read-only operations).
|
||||||
|
We use Hibernates <literal>Transaction</literal> API to abstract from the underlying
|
||||||
|
transaction strategy (in our case, JDBC transactions). This allows our code
|
||||||
|
to be deployed with container-managed transactions (using JTA) without any changes.
|
||||||
|
Please note that the example above does not handle any exceptions.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Also note that you may call <literal>HibernateUtil.currentSession();</literal>
|
||||||
|
as many times as you like, you will always get the current <literal>Session</literal>
|
||||||
|
of this thread. You have to make sure the <literal>Session</literal> is closed
|
||||||
|
after your unit-of-work completes, either in your servlet code or in a servlet filter
|
||||||
|
before the HTTP response is send. The nice side effect of the latter is easy
|
||||||
|
lazy initialization: the <literal>Session</literal> is still open when the view is
|
||||||
|
rendered, so Hibernate can load unitialized objects while you navigate the graph.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate has various methods that can be used to retrieve objects from the
|
||||||
|
database. The most flexible way is using the Hibernate Query Language (HQL),
|
||||||
|
which is an easy to learn and powerful object-oriented extension to SQL:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[Transaction tx = session.beginTransaction();
|
||||||
|
|
||||||
|
Query query = session.createQuery("select c from Cat as c where c.sex = :sex");
|
||||||
|
query.setCharacter("sex", 'F');
|
||||||
|
for (Iterator it = query.iterate(); it.hasNext();) {
|
||||||
|
Cat cat = (Cat) it.next();
|
||||||
|
out.println("Female Cat: " + cat.getName() );
|
||||||
|
}
|
||||||
|
|
||||||
|
tx.commit();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate also offers an object-oriented <emphasis>query by criteria</emphasis> API
|
||||||
|
that can be used to formulate type-safe queries. Hibernate of course uses
|
||||||
|
<literal>PreparedStatement</literal>s and parameter binding for all SQL communication
|
||||||
|
with the database. You may also use Hibernate's direct SQL query feature or
|
||||||
|
get a plain JDBC connection from a <literal>Session</literal> in rare cases.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="quickstart-summary">
|
||||||
|
<title>Finally</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We only scratched the surface of Hibernate in this small tutorial. Please note that
|
||||||
|
we don't include any servlet specific code in our examples. You have to create a
|
||||||
|
servlet yourself and insert the Hibernate code as you see fit.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Keep in mind that Hibernate, as a data access layer, is tightly integrated into
|
||||||
|
your application. Usually, all other layers depent on the persistence mechanism.
|
||||||
|
Make sure you understand the implications of this design.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
|
@ -0,0 +1,472 @@
|
||||||
|
<chapter id="transactions">
|
||||||
|
<title>Transactions And Concurrency</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate is not itself a database. It is a lightweight object-relational
|
||||||
|
mapping tool. Transaction management is delegated to the underlying database
|
||||||
|
connection. If the connection is enlisted with JTA, operations performed by the
|
||||||
|
<literal>Session</literal> are atomically part of the wider JTA
|
||||||
|
transaction. Hibernate can be seen as a thin adapter to JDBC, adding object-
|
||||||
|
oriented semantics.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect1 id="transactions-basics">
|
||||||
|
<title>Configurations, Sessions and Factories</title>
|
||||||
|
<para>
|
||||||
|
A <literal>SessionFactory</literal> is an expensive-to-create, threadsafe object
|
||||||
|
intended to be shared by all application threads. A <literal>Session</literal>
|
||||||
|
is an inexpensive, non-threadsafe object that should be used once, for a single
|
||||||
|
business process, and then discarded. For example, when using Hibernate in a
|
||||||
|
servlet-based application, servlets could obtain a <literal>SessionFactory</literal>
|
||||||
|
using
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[SessionFactory sf = (SessionFactory)getServletContext().getAttribute("my.session.factory");]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Each call to a service method could create a new <literal>Session</literal>,
|
||||||
|
<literal>flush()</literal> it, <literal>commit()</literal> its connection,
|
||||||
|
<literal>close()</literal> it and finally discard it. (The <literal>SessionFactory</literal>
|
||||||
|
may also be kept in JNDI or in a static <emphasis>Singleton</emphasis> helper variable.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
In a stateless session bean, a similar approach could be used. The bean would
|
||||||
|
obtain a <literal>SessionFactory</literal> in <literal>setSessionContext()</literal>.
|
||||||
|
Then each business method would create a <literal>Session</literal>,
|
||||||
|
<literal>flush()</literal> it and <literal>close()</literal> it. Of course, the
|
||||||
|
application should not <literal>commit()</literal> the connection. (Leave that to
|
||||||
|
JTA, the database connection participates automatically in container-managed
|
||||||
|
transactions.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
We use the Hibernate <literal>Transaction</literal> API as discussed previously,
|
||||||
|
a single <literal>commit()</literal> of a Hibernate <literal>Transaction</literal>
|
||||||
|
flushes the state and commits any underlying database connection (with special
|
||||||
|
handling of JTA transactions).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Ensure you understand the semantics of <literal>flush()</literal>.
|
||||||
|
Flushing synchronizes the persistent store with in-memory changes but
|
||||||
|
<emphasis>not</emphasis> vice-versa. Note that for all Hibernate JDBC
|
||||||
|
connections/transactions, the transaction isolation level for that connection
|
||||||
|
applies to all operations executed by Hibernate!
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The next few sections will discuss alternative approaches that utilize versioning
|
||||||
|
to ensure transaction atomicity. These are considered "advanced" approaches to
|
||||||
|
be used with care.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="transactions-threads">
|
||||||
|
<title>Threads and connections</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You should observe the following practices when creating Hibernate Sessions:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist spacing="compact">
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Never create more than one concurrent <literal>Session</literal> or
|
||||||
|
<literal>Transaction</literal> instance per database connection.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
Be extremely careful when creating more than one <literal>Session</literal>
|
||||||
|
per database per transaction. The <literal>Session</literal> itself keeps
|
||||||
|
track of updates made to loaded objects, so a different <literal>Session</literal>
|
||||||
|
might see stale data.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
The <literal>Session</literal> is <emphasis>not</emphasis> threadsafe!
|
||||||
|
Never access the same <literal>Session</literal> in two concurrent threads.
|
||||||
|
A <literal>Session</literal> is usually only a single unit-of-work!
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="transactions-identity">
|
||||||
|
<title>Considering object identity</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The application may concurrently access the same persistent state in two
|
||||||
|
different units-of-work. However, an instance of a persistent class is never shared
|
||||||
|
between two <literal>Session</literal> instances. Hence there are
|
||||||
|
two different notions of identity:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<variablelist spacing="compact">
|
||||||
|
<varlistentry>
|
||||||
|
<term>Database Identity</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>foo.getId().equals( bar.getId() )</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>JVM Identity</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>foo==bar</literal>
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Then for objects attached to a <emphasis>particular</emphasis> <literal>Session</literal>,
|
||||||
|
the two notions are equivalent. However, while the application might concurrently access
|
||||||
|
the "same" (persistent identity) business object in two different sessions, the two
|
||||||
|
instances will actually be "different" (JVM identity).
|
||||||
|
</para>
|
||||||
|
<para>
|
||||||
|
This approach leaves Hibernate and the database to worry about concurrency. The
|
||||||
|
application never needs to synchronize on any business object, as long as it sticks to a
|
||||||
|
single thread per <literal>Session</literal> or object identity (within a
|
||||||
|
<literal>Session</literal> the application may safely use <literal>==</literal> to
|
||||||
|
compare objects).
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="transactions-optimistic">
|
||||||
|
<title>Optimistic concurrency control</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Many business processes require a whole series of interactions with the user
|
||||||
|
interleaved with database accesses. In web and enterprise applications it is
|
||||||
|
not acceptable for a database transaction to span a user interaction.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Maintaining isolation of business processes becomes the partial responsibility
|
||||||
|
of the application tier, hence we call this process a long running
|
||||||
|
<emphasis>application transaction</emphasis>. A single application transaction
|
||||||
|
usually spans several database transactions. It will be atomar if only one of
|
||||||
|
these database transactions (the last one) stores the updated data, all others
|
||||||
|
simply read data.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The only approach that is consistent with high concurrency and high
|
||||||
|
scalability is optimistic concurrency control with versioning. Hibernate
|
||||||
|
provides for three possible approaches to writing application code that
|
||||||
|
uses optimistic concurrency.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<sect2 id="transactions-optimistic-longsession">
|
||||||
|
<title>Long session with automatic versioning</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
A single <literal>Session</literal> instance and its persistent instances are
|
||||||
|
used for the whole application transaction.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>Session</literal> uses optimistic locking with versioning to
|
||||||
|
ensure that many database transactions appear to the application as a single
|
||||||
|
logical application transaction. The <literal>Session</literal> is disconnected
|
||||||
|
from any underlying JDBC connection when waiting for user interaction. This
|
||||||
|
approach is the most efficient in terms of database access. The application
|
||||||
|
need not concern itself with version checking or with reattaching detached
|
||||||
|
instances.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[// foo is an instance loaded earlier by the Session
|
||||||
|
session.reconnect();
|
||||||
|
foo.setProperty("bar");
|
||||||
|
session.flush();
|
||||||
|
session.connection().commit();
|
||||||
|
session.disconnect();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>foo</literal> object still knows which <literal>Session</literal>
|
||||||
|
it was loaded it. As soon as the <literal>Session</literal> has a JDBC connection,
|
||||||
|
we commit the changes to the object.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This pattern is problematic if our <literal>Session</literal> is too big to
|
||||||
|
be stored during user think time, e.g. an <literal>HttpSession</literal> should
|
||||||
|
be kept as small as possible. As the <literal>Session</literal> is also the
|
||||||
|
(mandatory) first-level cache and contains all loaded objects, we can propably
|
||||||
|
use this strategy only for a few request/response cycles. This is indeed
|
||||||
|
recommended, as the <literal>Session</literal> will soon also have stale data.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="transactions-optimistic-detached">
|
||||||
|
<title>Many sessions with automatic versioning</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Each interaction with the persistent store occurs in a new <literal>Session</literal>.
|
||||||
|
However, the same persistent instances are reused for each interaction with the database.
|
||||||
|
The application manipulates the state of detached instances originally loaded in another
|
||||||
|
<literal>Session</literal> and then "reassociates" them using
|
||||||
|
<literal>Session.update()</literal> or <literal>Session.saveOrUpdate()</literal>.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[// foo is an instance loaded by a previous Session
|
||||||
|
foo.setProperty("bar");
|
||||||
|
session = factory.openSession();
|
||||||
|
session.saveOrUpdate(foo);
|
||||||
|
session.flush();
|
||||||
|
session.connection().commit();
|
||||||
|
session.close();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You may also call <literal>lock()</literal> instead of <literal>update()</literal>
|
||||||
|
and use <literal>LockMode.READ</literal> (performing a version check, bypassing all
|
||||||
|
caches) if you are sure that the object has not been modified.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
<sect2 id="transactions-optimistic-manual">
|
||||||
|
<title>Application version checking</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Each interaction with the database occurs in a new <literal>Session</literal>
|
||||||
|
that reloads all persistent instances from the database before manipulating them.
|
||||||
|
This approach forces the application to carry out its own version checking to ensure
|
||||||
|
application transaction isolation. (Of course, Hibernate will still <emphasis>update</emphasis>
|
||||||
|
version numbers for you.) This approach is the least efficient in terms of database access.
|
||||||
|
It is the approach most similar to entity EJBs.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[// foo is an instance loaded by a previous Session
|
||||||
|
session = factory.openSession();
|
||||||
|
int oldVersion = foo.getVersion();
|
||||||
|
session.load( foo, foo.getKey() );
|
||||||
|
if ( oldVersion!=foo.getVersion ) throw new StaleObjectStateException();
|
||||||
|
foo.setProperty("bar");
|
||||||
|
session.flush();
|
||||||
|
session.connection().commit();
|
||||||
|
session.close();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Of course, if you are operating in a low-data-concurrency environment and don't
|
||||||
|
require version checking, you may use this approach and just skip the version
|
||||||
|
check.
|
||||||
|
</para>
|
||||||
|
</sect2>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="transactions-disconnection">
|
||||||
|
<title>Session disconnection</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The first approach described above is to maintain a single <literal>Session</literal>
|
||||||
|
for a whole business process thats spans user think time. (For example, a servlet might
|
||||||
|
keep a <literal>Session</literal> in the user's <literal>HttpSession</literal>.) For
|
||||||
|
performance reasons you should
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<orderedlist spacing="compact">
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
commit the <literal>Transaction</literal> (or JDBC connection) and then
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
disconnect the <literal>Session</literal> from the JDBC connection
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</orderedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
before waiting for user activity. The method <literal>Session.disconnect()</literal>
|
||||||
|
will disconnect the session from the JDBC connection and return the connection to
|
||||||
|
the pool (unless you provided the connection).
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<literal>Session.reconnect()</literal> obtains a new connection (or you may supply one)
|
||||||
|
and restarts the session. After reconnection, to force a version check on data you aren't
|
||||||
|
updating, you may call <literal>Session.lock()</literal> on any objects that might have
|
||||||
|
been updated by another transaction. You don't need to lock any data that you
|
||||||
|
<emphasis>are</emphasis> updating.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Heres an example:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[SessionFactory sessions;
|
||||||
|
List fooList;
|
||||||
|
Bar bar;
|
||||||
|
....
|
||||||
|
Session s = sessions.openSession();
|
||||||
|
|
||||||
|
Transaction tx = null;
|
||||||
|
try {
|
||||||
|
tx = s.beginTransaction();
|
||||||
|
|
||||||
|
fooList = s.find(
|
||||||
|
"select foo from eg.Foo foo where foo.Date = current date"
|
||||||
|
// uses db2 date function
|
||||||
|
);
|
||||||
|
bar = (Bar) s.create(Bar.class);
|
||||||
|
|
||||||
|
tx.commit();
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
s.close();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
s.disconnect();]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Later on:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<programlisting><![CDATA[s.reconnect();
|
||||||
|
|
||||||
|
try {
|
||||||
|
tx = s.beginTransaction();
|
||||||
|
|
||||||
|
bar.setFooTable( new HashMap() );
|
||||||
|
Iterator iter = fooList.iterator();
|
||||||
|
while ( iter.hasNext() ) {
|
||||||
|
Foo foo = (Foo) iter.next();
|
||||||
|
s.lock(foo, LockMode.READ); //check that foo isn't stale
|
||||||
|
bar.getFooTable().put( foo.getName(), foo );
|
||||||
|
}
|
||||||
|
|
||||||
|
tx.commit();
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
if (tx!=null) tx.rollback();
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
finally {
|
||||||
|
s.close();
|
||||||
|
}]]></programlisting>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
You can see from this how the relationship between <literal>Transaction</literal>s and
|
||||||
|
<literal>Session</literal>s is many-to-one, A <literal>Session</literal> represents a
|
||||||
|
conversation between the application and the database. The
|
||||||
|
<literal>Transaction</literal> breaks that conversation up into atomic units of work
|
||||||
|
at the database level.
|
||||||
|
</para>
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
<sect1 id="transactions-locking">
|
||||||
|
<title>Pessimistic Locking</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
It is not intended that users spend much time worring about locking strategies. Its usually
|
||||||
|
enough to specify an isolation level for the JDBC connections and then simply let the
|
||||||
|
database do all the work. However, advanced users may sometimes wish to obtain
|
||||||
|
exclusive pessimistic locks, or re-obtain locks at the start of a new transaction.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
Hibernate will always use the locking mechanism of the database, never lock objects
|
||||||
|
in memory!
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The <literal>LockMode</literal> class defines the different lock levels that may be acquired
|
||||||
|
by Hibernate. A lock is obtained by the following mechanisms:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist spacing="compact">
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>LockMode.WRITE</literal> is acquired automatically when Hibernate updates or inserts
|
||||||
|
a row.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>LockMode.UPGRADE</literal> may be acquired upon explicit user request using
|
||||||
|
<literal>SELECT ... FOR UPDATE</literal> on databases which support that syntax.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>LockMode.UPGRADE_NOWAIT</literal> may be acquired upon explicit user request using a
|
||||||
|
<literal>SELECT ... FOR UPDATE NOWAIT</literal> under Oracle.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>LockMode.READ</literal> is acquired automatically when Hibernate reads data
|
||||||
|
under Repeatable Read or Serializable isolation level. May be re-acquired by explicit user
|
||||||
|
request.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
<literal>LockMode.NONE</literal> represents the absence of a lock. All objects switch to this
|
||||||
|
lock mode at the end of a <literal>Transaction</literal>. Objects associated with the session
|
||||||
|
via a call to <literal>update()</literal> or <literal>saveOrUpdate()</literal> also start out
|
||||||
|
in this lock mode.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
The "explicit user request" is expressed in one of the following ways:
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<itemizedlist spacing="compact">
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A call to <literal>Session.load()</literal>, specifying a <literal>LockMode</literal>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A call to <literal>Session.lock()</literal>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
A call to <literal>Query.setLockMode()</literal>.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If <literal>Session.load()</literal> is called with <literal>UPGRADE</literal> or
|
||||||
|
<literal>UPGRADE_NOWAIT</literal>, and the requested object was not yet loaded by
|
||||||
|
the session, the object is loaded using <literal>SELECT ... FOR UPDATE</literal>.
|
||||||
|
If <literal>load()</literal> is called for an object that is already loaded with
|
||||||
|
a less restrictive lock than the one requested, Hibernate calls
|
||||||
|
<literal>lock()</literal> for that object.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
<literal>Session.lock()</literal> performs a version number check if the specified lock
|
||||||
|
mode is <literal>READ</literal>, <literal>UPGRADE</literal> or
|
||||||
|
<literal>UPGRADE_NOWAIT</literal>. (In the case of <literal>UPGRADE</literal> or
|
||||||
|
<literal>UPGRADE_NOWAIT</literal>, <literal>SELECT ... FOR UPDATE</literal> is used.)
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
If the database does not support the requested lock mode, Hibernate will use an appropriate
|
||||||
|
alternate mode (instead of throwing an exception). This ensures that applications will
|
||||||
|
be portable.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
</sect1>
|
||||||
|
|
||||||
|
</chapter>
|
||||||
|
|
|
@ -0,0 +1,499 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
This is the XSL FO configuration file for the Hibernate
|
||||||
|
Reference Documentation. It defines a custom titlepage and
|
||||||
|
the parameters for the A4 sized PDF printable output.
|
||||||
|
|
||||||
|
It took me days to figure out this stuff and fix most of
|
||||||
|
the obvious bugs in the DocBook XSL distribution. Some of
|
||||||
|
the workarounds might not be appropriate with a newer version
|
||||||
|
of DocBook XSL. This file is released as part of Hibernate,
|
||||||
|
hence LGPL licensed.
|
||||||
|
|
||||||
|
christian@hibernate.org
|
||||||
|
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE xsl:stylesheet [
|
||||||
|
<!ENTITY db_xsl_path "../../support/docbook-xsl/">
|
||||||
|
]>
|
||||||
|
|
||||||
|
<xsl:stylesheet
|
||||||
|
version="1.0"
|
||||||
|
xmlns="http://www.w3.org/TR/xhtml1/transitional"
|
||||||
|
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
xmlns:fo="http://www.w3.org/1999/XSL/Format"
|
||||||
|
exclude-result-prefixes="#default">
|
||||||
|
|
||||||
|
<xsl:import href="&db_xsl_path;/fo/docbook.xsl"/>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Custom Title Page
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<xsl:template name="book.titlepage.recto">
|
||||||
|
<fo:block>
|
||||||
|
<fo:table table-layout="fixed" width="175mm">
|
||||||
|
<fo:table-column column-width="175mm"/>
|
||||||
|
<fo:table-body>
|
||||||
|
<fo:table-row>
|
||||||
|
<fo:table-cell text-align="center">
|
||||||
|
<fo:block>
|
||||||
|
<fo:external-graphic src="file:images/hibernate_logo_a.png"/>
|
||||||
|
</fo:block>
|
||||||
|
<fo:block font-family="Helvetica" font-size="22pt" padding-before="10mm">
|
||||||
|
<xsl:value-of select="bookinfo/subtitle"/>
|
||||||
|
</fo:block>
|
||||||
|
<fo:block font-family="Helvetica" font-size="12pt" padding="10mm">
|
||||||
|
Version:
|
||||||
|
<xsl:value-of select="bookinfo/releaseinfo"/>
|
||||||
|
</fo:block>
|
||||||
|
</fo:table-cell>
|
||||||
|
</fo:table-row>
|
||||||
|
</fo:table-body>
|
||||||
|
</fo:table>
|
||||||
|
</fo:block>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Prevent blank pages in output -->
|
||||||
|
<xsl:template name="book.titlepage.before.verso">
|
||||||
|
</xsl:template>
|
||||||
|
<xsl:template name="book.titlepage.verso">
|
||||||
|
</xsl:template>
|
||||||
|
<xsl:template name="book.titlepage.separator">
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Header
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- More space in the center header for long text -->
|
||||||
|
<xsl:attribute-set name="header.content.properties">
|
||||||
|
<xsl:attribute name="font-family">
|
||||||
|
<xsl:value-of select="$body.font.family"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="margin-left">-5em</xsl:attribute>
|
||||||
|
<xsl:attribute name="margin-right">-5em</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Custom Footer
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- This footer prints the Hibernate version number on the left side -->
|
||||||
|
<xsl:template name="footer.content">
|
||||||
|
<xsl:param name="pageclass" select="''"/>
|
||||||
|
<xsl:param name="sequence" select="''"/>
|
||||||
|
<xsl:param name="position" select="''"/>
|
||||||
|
<xsl:param name="gentext-key" select="''"/>
|
||||||
|
|
||||||
|
<xsl:variable name="Version">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="//releaseinfo">
|
||||||
|
<xsl:text>Hibernate </xsl:text>
|
||||||
|
<xsl:value-of select="//releaseinfo"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<!-- nop -->
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$sequence='blank'">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$double.sided != 0 and $position = 'left'">
|
||||||
|
<xsl:value-of select="$Version"/>
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<xsl:when test="$double.sided = 0 and $position = 'center'">
|
||||||
|
<!-- nop -->
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<xsl:otherwise>
|
||||||
|
<fo:page-number/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<xsl:when test="$pageclass='titlepage'">
|
||||||
|
<!-- nop: other titlepage sequences have no footer -->
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='left'">
|
||||||
|
<fo:page-number/>
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='right'">
|
||||||
|
<fo:page-number/>
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<xsl:when test="$double.sided = 0 and $position='right'">
|
||||||
|
<fo:page-number/>
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<xsl:when test="$double.sided != 0 and $sequence = 'odd' and $position='left'">
|
||||||
|
<xsl:value-of select="$Version"/>
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<xsl:when test="$double.sided != 0 and $sequence = 'even' and $position='right'">
|
||||||
|
<xsl:value-of select="$Version"/>
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<xsl:when test="$double.sided = 0 and $position='left'">
|
||||||
|
<xsl:value-of select="$Version"/>
|
||||||
|
</xsl:when>
|
||||||
|
|
||||||
|
<xsl:otherwise>
|
||||||
|
<!-- nop -->
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Custom Toc Line
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Improve the TOC. -->
|
||||||
|
<xsl:template name="toc.line">
|
||||||
|
<xsl:variable name="id">
|
||||||
|
<xsl:call-template name="object.id"/>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:variable name="label">
|
||||||
|
<xsl:apply-templates select="." mode="label.markup"/>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<fo:block text-align-last="justify"
|
||||||
|
end-indent="{$toc.indent.width}pt"
|
||||||
|
last-line-end-indent="-{$toc.indent.width}pt">
|
||||||
|
<fo:inline keep-with-next.within-line="always">
|
||||||
|
<fo:basic-link internal-destination="{$id}">
|
||||||
|
|
||||||
|
<!-- Chapter titles should be bold. -->
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="local-name(.) = 'chapter'">
|
||||||
|
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||||
|
</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
|
||||||
|
<xsl:if test="$label != ''">
|
||||||
|
<xsl:copy-of select="$label"/>
|
||||||
|
<xsl:value-of select="$autotoc.label.separator"/>
|
||||||
|
</xsl:if>
|
||||||
|
<xsl:apply-templates select="." mode="titleabbrev.markup"/>
|
||||||
|
</fo:basic-link>
|
||||||
|
</fo:inline>
|
||||||
|
<fo:inline keep-together.within-line="always">
|
||||||
|
<xsl:text> </xsl:text>
|
||||||
|
<fo:leader leader-pattern="dots"
|
||||||
|
leader-pattern-width="3pt"
|
||||||
|
leader-alignment="reference-area"
|
||||||
|
keep-with-next.within-line="always"/>
|
||||||
|
<xsl:text> </xsl:text>
|
||||||
|
<fo:basic-link internal-destination="{$id}">
|
||||||
|
<fo:page-number-citation ref-id="{$id}"/>
|
||||||
|
</fo:basic-link>
|
||||||
|
</fo:inline>
|
||||||
|
</fo:block>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Extensions
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- These extensions are required for table printing and other stuff -->
|
||||||
|
<xsl:param name="use.extensions">1</xsl:param>
|
||||||
|
<xsl:param name="tablecolumns.extension">0</xsl:param>
|
||||||
|
<!-- FOP provide only PDF Bookmarks at the moment -->
|
||||||
|
<xsl:param name="fop.extensions">1</xsl:param>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Table Of Contents
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Generate the TOCs for named components only -->
|
||||||
|
<xsl:param name="generate.toc">
|
||||||
|
book toc
|
||||||
|
</xsl:param>
|
||||||
|
|
||||||
|
<!-- Show only Sections up to level 3 in the TOCs -->
|
||||||
|
<xsl:param name="toc.section.depth">3</xsl:param>
|
||||||
|
|
||||||
|
<!-- Dot and Whitespace as separator in TOC between Label and Title-->
|
||||||
|
<xsl:param name="autotoc.label.separator" select="'. '"/>
|
||||||
|
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Paper & Page Size
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Paper type, no headers on blank pages, no double sided printing -->
|
||||||
|
<xsl:param name="paper.type" select="'A4'"/>
|
||||||
|
<xsl:param name="double.sided">0</xsl:param>
|
||||||
|
<xsl:param name="headers.on.blank.pages">0</xsl:param>
|
||||||
|
<xsl:param name="footers.on.blank.pages">0</xsl:param>
|
||||||
|
|
||||||
|
<!-- Space between paper border and content (chaotic stuff, don't touch) -->
|
||||||
|
<xsl:param name="page.margin.top">5mm</xsl:param>
|
||||||
|
<xsl:param name="region.before.extent">10mm</xsl:param>
|
||||||
|
<xsl:param name="body.margin.top">10mm</xsl:param>
|
||||||
|
|
||||||
|
<xsl:param name="body.margin.bottom">15mm</xsl:param>
|
||||||
|
<xsl:param name="region.after.extent">10mm</xsl:param>
|
||||||
|
<xsl:param name="page.margin.bottom">0mm</xsl:param>
|
||||||
|
|
||||||
|
<xsl:param name="page.margin.outer">18mm</xsl:param>
|
||||||
|
<xsl:param name="page.margin.inner">18mm</xsl:param>
|
||||||
|
|
||||||
|
<!-- No intendation of Titles -->
|
||||||
|
<xsl:param name="title.margin.left">0pc</xsl:param>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Fonts & Styles
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Default Font size -->
|
||||||
|
<xsl:param name="body.font.master">11</xsl:param>
|
||||||
|
|
||||||
|
<!-- Line height in body text -->
|
||||||
|
<xsl:param name="line-height">1.4</xsl:param>
|
||||||
|
|
||||||
|
<!-- Monospaced fonts are smaller than regular text -->
|
||||||
|
<xsl:attribute-set name="monospace.properties">
|
||||||
|
<xsl:attribute name="font-family">
|
||||||
|
<xsl:value-of select="$monospace.font.family"/>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="font-size">0.8em</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Tables
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- The table width should be adapted to the paper size -->
|
||||||
|
<xsl:param name="default.table.width">17.4cm</xsl:param>
|
||||||
|
|
||||||
|
<!-- Some padding inside tables -->
|
||||||
|
<xsl:attribute-set name="table.cell.padding">
|
||||||
|
<xsl:attribute name="padding-left">4pt</xsl:attribute>
|
||||||
|
<xsl:attribute name="padding-right">4pt</xsl:attribute>
|
||||||
|
<xsl:attribute name="padding-top">4pt</xsl:attribute>
|
||||||
|
<xsl:attribute name="padding-bottom">4pt</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
|
||||||
|
<!-- Only hairlines as frame and cell borders in tables -->
|
||||||
|
<xsl:param name="table.frame.border.thickness">0.1pt</xsl:param>
|
||||||
|
<xsl:param name="table.cell.border.thickness">0.1pt</xsl:param>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Labels
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Label Chapters and Sections (numbering) -->
|
||||||
|
<xsl:param name="chapter.autolabel">1</xsl:param>
|
||||||
|
<xsl:param name="section.autolabel" select="1"/>
|
||||||
|
<xsl:param name="section.label.includes.component.label" select="1"/>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Titles
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Chapter title size -->
|
||||||
|
<xsl:attribute-set name="chapter.titlepage.recto.style">
|
||||||
|
<xsl:attribute name="text-align">left</xsl:attribute>
|
||||||
|
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||||
|
<xsl:attribute name="font-size">
|
||||||
|
<xsl:value-of select="$body.font.master * 1.8"/>
|
||||||
|
<xsl:text>pt</xsl:text>
|
||||||
|
</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
|
||||||
|
<!-- Why is the font-size for chapters hardcoded in the XSL FO templates?
|
||||||
|
Let's remove it, so this sucker can use our attribute-set only... -->
|
||||||
|
<xsl:template match="title" mode="chapter.titlepage.recto.auto.mode">
|
||||||
|
<fo:block xmlns:fo="http://www.w3.org/1999/XSL/Format"
|
||||||
|
xsl:use-attribute-sets="chapter.titlepage.recto.style">
|
||||||
|
<xsl:call-template name="component.title">
|
||||||
|
<xsl:with-param name="node" select="ancestor-or-self::chapter[1]"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</fo:block>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- Sections 1, 2 and 3 titles have a small bump factor and padding -->
|
||||||
|
<xsl:attribute-set name="section.title.level1.properties">
|
||||||
|
<xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
|
||||||
|
<xsl:attribute name="font-size">
|
||||||
|
<xsl:value-of select="$body.font.master * 1.5"/>
|
||||||
|
<xsl:text>pt</xsl:text>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
<xsl:attribute-set name="section.title.level2.properties">
|
||||||
|
<xsl:attribute name="space-before.optimum">0.6em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-before.minimum">0.6em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-before.maximum">0.6em</xsl:attribute>
|
||||||
|
<xsl:attribute name="font-size">
|
||||||
|
<xsl:value-of select="$body.font.master * 1.25"/>
|
||||||
|
<xsl:text>pt</xsl:text>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
<xsl:attribute-set name="section.title.level3.properties">
|
||||||
|
<xsl:attribute name="space-before.optimum">0.4em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-before.minimum">0.4em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-before.maximum">0.4em</xsl:attribute>
|
||||||
|
<xsl:attribute name="font-size">
|
||||||
|
<xsl:value-of select="$body.font.master * 1.0"/>
|
||||||
|
<xsl:text>pt</xsl:text>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
|
||||||
|
<!-- Titles of formal objects (tables, examples, ...) -->
|
||||||
|
<xsl:attribute-set name="formal.title.properties" use-attribute-sets="normal.para.spacing">
|
||||||
|
<xsl:attribute name="font-weight">bold</xsl:attribute>
|
||||||
|
<xsl:attribute name="font-size">
|
||||||
|
<xsl:value-of select="$body.font.master"/>
|
||||||
|
<xsl:text>pt</xsl:text>
|
||||||
|
</xsl:attribute>
|
||||||
|
<xsl:attribute name="hyphenate">false</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.minimum">0.4em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.optimum">0.6em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.maximum">0.8em</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Programlistings
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Verbatim text formatting (programlistings) -->
|
||||||
|
<xsl:attribute-set name="verbatim.properties">
|
||||||
|
<xsl:attribute name="space-before.minimum">1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-before.optimum">1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-before.maximum">1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="border-color">#444444</xsl:attribute>
|
||||||
|
<xsl:attribute name="border-style">solid</xsl:attribute>
|
||||||
|
<xsl:attribute name="border-width">0.1pt</xsl:attribute>
|
||||||
|
<xsl:attribute name="padding-top">0.5em</xsl:attribute>
|
||||||
|
<xsl:attribute name="padding-left">0.5em</xsl:attribute>
|
||||||
|
<xsl:attribute name="padding-right">0.5em</xsl:attribute>
|
||||||
|
<xsl:attribute name="padding-bottom">0.5em</xsl:attribute>
|
||||||
|
<xsl:attribute name="margin-left">0.5em</xsl:attribute>
|
||||||
|
<xsl:attribute name="margin-right">0.5em</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
|
||||||
|
<!-- Shade (background) programlistings -->
|
||||||
|
<xsl:param name="shade.verbatim">1</xsl:param>
|
||||||
|
<xsl:attribute-set name="shade.verbatim.style">
|
||||||
|
<xsl:attribute name="background-color">#F0F0F0</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Callouts
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- We want to use callouts... -->
|
||||||
|
<xsl:param name="callout.extensions">1</xsl:param>
|
||||||
|
|
||||||
|
<!-- Place callout bullets at this column in programmlisting.-->
|
||||||
|
<xsl:param name="callout.defaultcolumn">90</xsl:param>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
No, don't use crappy graphics for the callout bullets. This setting
|
||||||
|
enables some weird Unicode rendering for some fancy bullet points
|
||||||
|
in callouts. By default, this can only count to 10 and produces
|
||||||
|
strange results if you ever have more than 10 callouts for one
|
||||||
|
programlisting. We will fix that next.
|
||||||
|
-->
|
||||||
|
<xsl:param name="callout.graphics">0</xsl:param>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Again, fun with DocBook XSL: The callout bullets are rendered in
|
||||||
|
two places: In the programlisting itself and in the list below
|
||||||
|
the listing, with the actual callout text. The rendering in the
|
||||||
|
programlisting is some XSL transformer extension (e.g. a Saxon
|
||||||
|
extension), so we can't change that without messing with the
|
||||||
|
extensions. We only can turn it off by setting this limit to
|
||||||
|
zero, then, a simple bracket style like "(3)" and "(4)" will
|
||||||
|
be used in the programlisting.
|
||||||
|
-->
|
||||||
|
<xsl:param name="callout.unicode.number.limit" select="'0'"></xsl:param>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The callout bullets in the actual callout list will be rendered
|
||||||
|
with an XSL FO template. The default template is broken: limited to 10
|
||||||
|
nice looking Unicode bullet points and then it doesn't print anything,
|
||||||
|
the fallback doesn't work. We implement our own template, which is not
|
||||||
|
as complicated, more ugly, but works. As always, function is more
|
||||||
|
important than form.
|
||||||
|
-->
|
||||||
|
<xsl:template name="callout-bug">
|
||||||
|
<xsl:param name="conum" select='1'/>
|
||||||
|
<fo:inline
|
||||||
|
color="black"
|
||||||
|
padding-top="0.1em"
|
||||||
|
padding-bottom="0.1em"
|
||||||
|
padding-start="0.2em"
|
||||||
|
padding-end="0.2em"
|
||||||
|
baseline-shift="0.1em"
|
||||||
|
font-family="{$monospace.font.family}"
|
||||||
|
font-weight="bold"
|
||||||
|
font-size="75%">
|
||||||
|
<xsl:text>(</xsl:text>
|
||||||
|
<xsl:value-of select="$conum"/>
|
||||||
|
<xsl:text>)</xsl:text>
|
||||||
|
</fo:inline>
|
||||||
|
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Misc
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Correct placement of titles for figures and examples. -->
|
||||||
|
<xsl:param name="formal.title.placement">
|
||||||
|
figure after
|
||||||
|
example before
|
||||||
|
equation before
|
||||||
|
table before
|
||||||
|
procedure before
|
||||||
|
</xsl:param>
|
||||||
|
|
||||||
|
<!-- Format Variable Lists as Blocks (prevents horizontal overflow). -->
|
||||||
|
<xsl:param name="variablelist.as.blocks">1</xsl:param>
|
||||||
|
|
||||||
|
<!-- The horrible list spacing problems, this is much better. -->
|
||||||
|
<xsl:attribute-set name="list.block.spacing">
|
||||||
|
<xsl:attribute name="space-before.optimum">0.8em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-before.minimum">0.8em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-before.maximum">0.8em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.optimum">0.1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.minimum">0.1em</xsl:attribute>
|
||||||
|
<xsl:attribute name="space-after.maximum">0.1em</xsl:attribute>
|
||||||
|
</xsl:attribute-set>
|
||||||
|
|
||||||
|
<!-- Newer DocBook XSL apparently thinks that some sections are by
|
||||||
|
default "draft" status, and this idiotic thing is by default
|
||||||
|
also set to "maybe", so it spits out a lot of errors with the
|
||||||
|
latest FOP as the XSL/FO styles have references to some draft
|
||||||
|
watermarks, which you actually don't want in the first place.
|
||||||
|
Turn this crap off. If you have to work with the "status"
|
||||||
|
attribute, don't.
|
||||||
|
-->
|
||||||
|
<xsl:param name="draft.mode" select="'no'"/>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
|
@ -0,0 +1,97 @@
|
||||||
|
A {
|
||||||
|
color: #003399;
|
||||||
|
}
|
||||||
|
|
||||||
|
A:active {
|
||||||
|
color: #003399;
|
||||||
|
}
|
||||||
|
|
||||||
|
A:visited {
|
||||||
|
color: #888888;
|
||||||
|
}
|
||||||
|
|
||||||
|
P, OL, UL, LI, DL, DT, DD, BLOCKQUOTE {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
TD, TH, SPAN {
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
BLOCKQUOTE {
|
||||||
|
margin-right: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
H1, H2, H3, H4, H5, H6 {
|
||||||
|
color: #000000;
|
||||||
|
font-weight:500;
|
||||||
|
margin-top:10px;
|
||||||
|
padding-top:15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
TABLE {
|
||||||
|
border-collapse: collapse;
|
||||||
|
border-spacing:0;
|
||||||
|
border: 1px thin black;
|
||||||
|
empty-cells: hide;
|
||||||
|
}
|
||||||
|
|
||||||
|
TD {
|
||||||
|
padding: 4pt;
|
||||||
|
}
|
||||||
|
|
||||||
|
H1 { font-size: 150%; }
|
||||||
|
H2 { font-size: 140%; }
|
||||||
|
H3 { font-size: 110%; font-weight: bold; }
|
||||||
|
H4 { font-size: 110%; font-weight: bold;}
|
||||||
|
H5 { font-size: 100%; font-style: italic; }
|
||||||
|
H6 { font-size: 100%; font-style: italic; }
|
||||||
|
|
||||||
|
TT {
|
||||||
|
font-size: 90%;
|
||||||
|
font-family: "Courier New", Courier, monospace;
|
||||||
|
color: #000000;
|
||||||
|
}
|
||||||
|
|
||||||
|
PRE {
|
||||||
|
font-size: 100%;
|
||||||
|
padding: 5px;
|
||||||
|
border-style: solid;
|
||||||
|
border-width: 1px;
|
||||||
|
border-color: #CCCCCC;
|
||||||
|
background-color: #F4F4F4;
|
||||||
|
}
|
||||||
|
|
||||||
|
UL, OL, LI {
|
||||||
|
list-style: disc;
|
||||||
|
}
|
||||||
|
|
||||||
|
HR {
|
||||||
|
width: 100%;
|
||||||
|
height: 1px;
|
||||||
|
background-color: #CCCCCC;
|
||||||
|
border-width: 0px;
|
||||||
|
padding: 0px;
|
||||||
|
color: #CCCCCC;
|
||||||
|
}
|
||||||
|
|
||||||
|
.variablelist {
|
||||||
|
padding-top: 10;
|
||||||
|
padding-bottom:10;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.itemizedlist, UL {
|
||||||
|
padding-top: 0;
|
||||||
|
padding-bottom:0;
|
||||||
|
margin:0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.term {
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
This is the XSL HTML configuration file for the Hibernate
|
||||||
|
Reference Documentation.
|
||||||
|
|
||||||
|
It took me days to figure out this stuff and fix most of
|
||||||
|
the obvious bugs in the DocBook XSL distribution. Some of
|
||||||
|
the workarounds might not be appropriate with a newer version
|
||||||
|
of DocBook XSL. This file is released as part of Hibernate,
|
||||||
|
hence LGPL licensed.
|
||||||
|
|
||||||
|
christian@hibernate.org
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE xsl:stylesheet [
|
||||||
|
<!ENTITY db_xsl_path "../../support/docbook-xsl/">
|
||||||
|
]>
|
||||||
|
|
||||||
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
version="1.0"
|
||||||
|
xmlns="http://www.w3.org/TR/xhtml1/transitional"
|
||||||
|
exclude-result-prefixes="#default">
|
||||||
|
|
||||||
|
<xsl:import href="&db_xsl_path;/html/docbook.xsl"/>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
HTML Settings
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
|
||||||
|
|
||||||
|
<!-- These extensions are required for table printing and other stuff -->
|
||||||
|
<xsl:param name="use.extensions">1</xsl:param>
|
||||||
|
<xsl:param name="tablecolumns.extension">0</xsl:param>
|
||||||
|
<xsl:param name="callout.extensions">1</xsl:param>
|
||||||
|
<xsl:param name="graphicsize.extension">0</xsl:param>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Table Of Contents
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Generate the TOCs for named components only -->
|
||||||
|
<xsl:param name="generate.toc">
|
||||||
|
book toc
|
||||||
|
</xsl:param>
|
||||||
|
|
||||||
|
<!-- Show only Sections up to level 3 in the TOCs -->
|
||||||
|
<xsl:param name="toc.section.depth">3</xsl:param>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Labels
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Label Chapters and Sections (numbering) -->
|
||||||
|
<xsl:param name="chapter.autolabel">1</xsl:param>
|
||||||
|
<xsl:param name="section.autolabel" select="1"/>
|
||||||
|
<xsl:param name="section.label.includes.component.label" select="1"/>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Callouts
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Don't use graphics, use a simple number style -->
|
||||||
|
<xsl:param name="callout.graphics">0</xsl:param>
|
||||||
|
|
||||||
|
<!-- Place callout marks at this column in annotated areas -->
|
||||||
|
<xsl:param name="callout.defaultcolumn">90</xsl:param>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Misc
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Placement of titles -->
|
||||||
|
<xsl:param name="formal.title.placement">
|
||||||
|
figure after
|
||||||
|
example before
|
||||||
|
equation before
|
||||||
|
table before
|
||||||
|
procedure before
|
||||||
|
</xsl:param>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
|
@ -0,0 +1,86 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
This is the XSL HTML configuration file for the Hibernate
|
||||||
|
Reference Documentation.
|
||||||
|
|
||||||
|
It took me days to figure out this stuff and fix most of
|
||||||
|
the obvious bugs in the DocBook XSL distribution. Some of
|
||||||
|
the workarounds might not be appropriate with a newer version
|
||||||
|
of DocBook XSL. This file is released as part of Hibernate,
|
||||||
|
hence LGPL licensed.
|
||||||
|
|
||||||
|
christian@hibernate.org
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!DOCTYPE xsl:stylesheet [
|
||||||
|
<!ENTITY db_xsl_path "../../support/docbook-xsl/">
|
||||||
|
]>
|
||||||
|
|
||||||
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
version="1.0"
|
||||||
|
xmlns="http://www.w3.org/TR/xhtml1/transitional"
|
||||||
|
exclude-result-prefixes="#default">
|
||||||
|
|
||||||
|
<xsl:import href="&db_xsl_path;/html/chunk.xsl"/>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
HTML Settings
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<xsl:param name="chunk.section.depth">'5'</xsl:param>
|
||||||
|
<xsl:param name="use.id.as.filename">'1'</xsl:param>
|
||||||
|
<xsl:param name="html.stylesheet">../shared/css/html.css</xsl:param>
|
||||||
|
|
||||||
|
<!-- These extensions are required for table printing and other stuff -->
|
||||||
|
<xsl:param name="use.extensions">1</xsl:param>
|
||||||
|
<xsl:param name="tablecolumns.extension">0</xsl:param>
|
||||||
|
<xsl:param name="callout.extensions">1</xsl:param>
|
||||||
|
<xsl:param name="graphicsize.extension">0</xsl:param>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Table Of Contents
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Generate the TOCs for named components only -->
|
||||||
|
<xsl:param name="generate.toc">
|
||||||
|
book toc
|
||||||
|
</xsl:param>
|
||||||
|
|
||||||
|
<!-- Show only Sections up to level 3 in the TOCs -->
|
||||||
|
<xsl:param name="toc.section.depth">3</xsl:param>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Labels
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Label Chapters and Sections (numbering) -->
|
||||||
|
<xsl:param name="chapter.autolabel">1</xsl:param>
|
||||||
|
<xsl:param name="section.autolabel" select="1"/>
|
||||||
|
<xsl:param name="section.label.includes.component.label" select="1"/>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Callouts
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Don't use graphics, use a simple number style -->
|
||||||
|
<xsl:param name="callout.graphics">0</xsl:param>
|
||||||
|
|
||||||
|
<!-- Place callout marks at this column in annotated areas -->
|
||||||
|
<xsl:param name="callout.defaultcolumn">90</xsl:param>
|
||||||
|
|
||||||
|
<!--###################################################
|
||||||
|
Misc
|
||||||
|
################################################### -->
|
||||||
|
|
||||||
|
<!-- Placement of titles -->
|
||||||
|
<xsl:param name="formal.title.placement">
|
||||||
|
figure after
|
||||||
|
example before
|
||||||
|
equation before
|
||||||
|
table before
|
||||||
|
procedure before
|
||||||
|
</xsl:param>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
|
@ -0,0 +1,363 @@
|
||||||
|
2004-01-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, htmltblx.mod:
|
||||||
|
Changed version number to V4.3CR2
|
||||||
|
|
||||||
|
* dbpoolx.mod, htmltblx.mod: Make sure floatstyle is on table and informaltable
|
||||||
|
|
||||||
|
2003-12-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* Makefile, freshmeat.xsl: Support freshmeat target
|
||||||
|
|
||||||
|
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, htmltblx.mod:
|
||||||
|
Updated version numbers
|
||||||
|
|
||||||
|
* dbpoolx.mod: Refactor parameter entities for informaltable so that textobject is handled correctly; avoid duplicate ID on caption when HTML tables are allowed.
|
||||||
|
|
||||||
|
* docbookx.dtd: DocBook V4.3CR2 released
|
||||||
|
|
||||||
|
2003-12-20 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbpoolx.mod: Put HTML attributes on caption of HTML tables are allowed
|
||||||
|
|
||||||
|
2003-12-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* Makefile: Add doc target
|
||||||
|
|
||||||
|
* htmltblx.mod: Make sure textobject goes in the DocBook branch of informaltable
|
||||||
|
|
||||||
|
2003-12-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, htmltblx.mod:
|
||||||
|
Updated version number
|
||||||
|
|
||||||
|
* docbookx.dtd: Released 4.3CR1
|
||||||
|
|
||||||
|
2003-10-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, htmltblx.mod:
|
||||||
|
Released 4.3b5
|
||||||
|
|
||||||
|
* dbnotnx.mod: Added SWF notation
|
||||||
|
|
||||||
|
* dbpoolx.mod: Make firstterm isomorphic to glossterm
|
||||||
|
|
||||||
|
2003-09-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #573812: allow blockinfo on blockquote
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #564776: added process, service, server, and daemon to the class values of systemitem
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #571998: added initializer to paramdef
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #518074: added a number of new values to the class attribute of database
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #533734: allow void to be optional on {method|constructor|destructor}synopsis
|
||||||
|
|
||||||
|
* dbpoolx.mod: Added StepAlternatives
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #507975: revision should allow author or authorinitials
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #517604: allow optional title on glosslist
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #570068: added emailmessage, webpage, and newsposting as pubwork values for citetitle
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #571996: added prefix, namespace, and localname to class for sgmltag
|
||||||
|
|
||||||
|
2003-09-25 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, htmltblx.mod:
|
||||||
|
Changed V4.2b2 to V4.2b3
|
||||||
|
|
||||||
|
* dbhierx.mod: Allow Set to be recursive
|
||||||
|
|
||||||
|
* dbhierx.mod, dbpoolx.mod: Added type attribute to indexterm and index
|
||||||
|
|
||||||
|
* dbpoolx.mod: Added xml:base
|
||||||
|
|
||||||
|
* dbpoolx.mod: Added code
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #615473: added floatstyle to (informal)figure, (informal)example, and (informal)equation
|
||||||
|
|
||||||
|
* htmltblx.mod: Fixup some PEs so that we don't get duplicated attribute declarations
|
||||||
|
|
||||||
|
* htmltblx.mod: Put blockinfo and textobject back into the CALS table model
|
||||||
|
|
||||||
|
2003-08-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, htmltblx.mod:
|
||||||
|
Changed 4.2 to 4.3b2
|
||||||
|
|
||||||
|
* calstblx.dtd, dbpoolx.mod, htmltblx.mod, soextblx.dtd:
|
||||||
|
Allow HTML table models in addition to CALS or SOEx table models (2003 Apr)
|
||||||
|
|
||||||
|
* dbpoolx.mod: Task markup (2003 Jun)
|
||||||
|
|
||||||
|
2003-08-11 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbhierx.mod: Related to RFE 514435: allow multiple refnamediv elements in refentry (2003 Jul)
|
||||||
|
|
||||||
|
* dbnotnx.mod: RFE 698844: add PDF notation (2003 May)
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 660044: support continuation and startinglinenumber on verbatims (2003 Feb)
|
||||||
|
|
||||||
|
* dbpoolx.mod: Related to RFE 679316: add orgname to inlines (2003 Jul)
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 655526: support modifier in funcprototype (2003 Feb)
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 573419: add bidirectional text override (2003 Apr)
|
||||||
|
|
||||||
|
* dbpoolx.mod: Added function attribute to keycap for improved semantics (2003 Jul)
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 691762: add language attribute to verbatim environments (2003 May)
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 705885: add namespace attribute to sgmltag (2003 May)
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 565716: support for URI element (2003 Apr)
|
||||||
|
|
||||||
|
2003-08-09 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 582822: paramdef and varargs on funcprototype (2003 Feb)
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 638456: support translators (2003 Feb)
|
||||||
|
|
||||||
|
* dbpoolx.mod: Added xrefstyle (2002 Dec)
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 473365: choice attribute for paramdef (2003 Feb)
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 570068: new values for pubwork (2003 Jan)
|
||||||
|
|
||||||
|
* docbookx.dtd: Fix SDATA entity for euro
|
||||||
|
|
||||||
|
2002-07-17 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd:
|
||||||
|
DocBook XML V4.2 released
|
||||||
|
|
||||||
|
2002-05-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd:
|
||||||
|
Updated comments to reflect CR3
|
||||||
|
|
||||||
|
2002-05-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbnotnx.mod: SVG notation accidentally left out of notation.class
|
||||||
|
|
||||||
|
* docbookx.dtd: Fix syntactic error intentionally introduced behind mutually exclusive PEs. Now make the DTD useless, but not syntactically invalid
|
||||||
|
|
||||||
|
2002-05-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbpoolx.mod: Add accidentally missing local.info.class to info.class
|
||||||
|
|
||||||
|
2002-03-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod:
|
||||||
|
Prepare for CR1
|
||||||
|
|
||||||
|
* catalog.xml, docbook.cat: Prepare for CR1 and fix search-and-replace typos
|
||||||
|
|
||||||
|
* dbpoolx.mod: Make type other tokens in bibliorelation unique for SGML compatibility
|
||||||
|
|
||||||
|
* dbpoolx.mod: Make spatial/temporal other tokens unique for SGML compatibility
|
||||||
|
|
||||||
|
* dbpoolx.mod: Added bibliosource, bibliorelation, and bibliocoverage
|
||||||
|
|
||||||
|
* dbpoolx.mod: Move bibliorelation type attribute into a PE so that it can be expanded the way we want
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #480957
|
||||||
|
|
||||||
|
* dbpoolx.mod: Revise graphic attributes: add contentwidth, contentdepth, and valign
|
||||||
|
|
||||||
|
* dbpoolx.mod: Add class attribute to orgname
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #480954: add textdata element
|
||||||
|
|
||||||
|
* dbpoolx.mod: Added blockinfo element
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #513426: Text alternative for tables
|
||||||
|
|
||||||
|
* dbpoolx.mod: Add consortium to the list of classes on orgname
|
||||||
|
|
||||||
|
* docbookx.dtd: DocBook V4.2 Candidate Release 1 released
|
||||||
|
|
||||||
|
2002-02-05 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbhierx.mod: Implemented RFE #501363
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #492099
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #498848
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #480955
|
||||||
|
|
||||||
|
2002-01-06 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbcentx.mod: Added marked sections around character set entity references
|
||||||
|
|
||||||
|
2001-11-20 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd:
|
||||||
|
DocBook V4.2b1 released
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #482821
|
||||||
|
|
||||||
|
2001-11-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbhierx.mod, dbpoolx.mod: Implemented RFE #456460
|
||||||
|
|
||||||
|
2001-11-18 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE #482817: Add errortext element
|
||||||
|
|
||||||
|
2001-11-17 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 482821: Add extension to the list of class values on filename
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 482053: Add support for DOI in meta
|
||||||
|
|
||||||
|
* dbpoolx.mod: Removed bogus occurrence indicator in info.class; fixed typo in qandaset PEs
|
||||||
|
|
||||||
|
2001-11-13 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* 40chg.txt, 41chg.txt, LostLog: Removed old files
|
||||||
|
|
||||||
|
* Makefile: Fixed typo
|
||||||
|
|
||||||
|
* Makefile: Makefile
|
||||||
|
|
||||||
|
* README: Removed version information
|
||||||
|
|
||||||
|
* README, readme.txt: Renamed
|
||||||
|
|
||||||
|
* calstblx.dtd, catalog.xml, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd:
|
||||||
|
Removed 'XML' from public identifiers for files that will now be common to both XML and SGML
|
||||||
|
|
||||||
|
* catalog.xml: Fixed missing end tag
|
||||||
|
|
||||||
|
2001-11-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, dbcentx.mod, dbgenent.mod, dbnotnx.mod, readme.txt:
|
||||||
|
Updated version numbers
|
||||||
|
|
||||||
|
* catalog.xml, docbook.cat: Added XML Catalog; updated public identifiers in catalog
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #480956
|
||||||
|
|
||||||
|
* dbpoolx.mod: Former RFE 133: Added newsgroup class to systemitem
|
||||||
|
|
||||||
|
2001-11-09 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbhierx.mod: Implemented RFE #426382
|
||||||
|
|
||||||
|
* dbhierx.mod: Implemented RFE #417671
|
||||||
|
|
||||||
|
* dbhierx.mod, dbpoolx.mod: Implemented RFE #436072
|
||||||
|
|
||||||
|
* dbhierx.mod, dbpoolx.mod, docbookx.dtd: Changed version number
|
||||||
|
|
||||||
|
* dbnotnx.mod: Implemented RFE #440597
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #435485
|
||||||
|
|
||||||
|
* dbpoolx.mod: Expand the content model of the following elements from smallcptr.char.mix back to cptr.char.mix: interfacename, action, database, filename, hardware, keycap, option, parameter, property, and systemitem (command, interface, and literal were never reduced).
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #431418
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #431419
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #435466
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #439136
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #431415
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #431413
|
||||||
|
|
||||||
|
* dbpoolx.mod: Implemented RFE #434439
|
||||||
|
|
||||||
|
2001-11-07 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, dbcentx.mod, dbhierx.mod, dbpoolx.mod, docbookx.dtd:
|
||||||
|
Towards a 4.2 release: reparameterize so that the SGML DTD is just a customization of the XML DTD
|
||||||
|
|
||||||
|
* calstblx.dtd, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd:
|
||||||
|
Whitespace fixes
|
||||||
|
|
||||||
|
2001-08-07 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbhierx.mod: RFE 426382: Norm to allow SimpleSect inside Section
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 431419: Norm to add markup for FS type and partition
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 431418: Norm to add typing to funcdef and paramdef
|
||||||
|
|
||||||
|
* dbpoolx.mod: Fix comments; implement proposal of the TC to expand the content model of selected inlines
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 434439: Add language attribute to fieldsynopsis et al.
|
||||||
|
|
||||||
|
* dbpoolx.mod: RFE 431415: Norm to add markup for host identifiers
|
||||||
|
|
||||||
|
2001-06-18 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* 40chg.txt, 41chg.txt, LostLog, Makefile, calstblx.dtd, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.cat, docbookx.dtd, readme.txt:
|
||||||
|
Additional work on DocBook XML V5.0; I had the wrong CVS repository for a while so there's a bunch of changes lumped together here
|
||||||
|
|
||||||
|
* Makefile: branches: 1.1.2;
|
||||||
|
file Makefile was initially added on branch V50-devel.
|
||||||
|
|
||||||
|
2001-03-12 <ndw@users.sourceforge.net>
|
||||||
|
|
||||||
|
* calstblx.dtd, dbcentx.mod, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, readme.txt:
|
||||||
|
Updated version numbers
|
||||||
|
|
||||||
|
* dbcentx.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, soextblx.dtd:
|
||||||
|
New file.
|
||||||
|
|
||||||
|
* docbook.cat: New file.
|
||||||
|
|
||||||
|
* docbookx.cat: branches: 1.1.2;
|
||||||
|
file docbookx.cat was initially added on branch V50-devel.
|
||||||
|
|
||||||
|
* docbookx.cat: New file.
|
||||||
|
|
||||||
|
2001-01-14 <ndw@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbpoolx.mod: branches: 1.5.2;
|
||||||
|
RFE #140: Allow multiple MsgExplan inside SimpleMsgEntry
|
||||||
|
|
||||||
|
2000-11-12 <ndw@users.sourceforge.net>
|
||||||
|
|
||||||
|
* dbhierx.mod: branches: 1.6.2;
|
||||||
|
Add refentry; accidentally left out
|
||||||
|
|
||||||
|
* dbhierx.mod: Allow beginpage to be the first child of toc, lot, appendix, chapter,
|
||||||
|
part, preface, reference, and refentry. (It can't be at the start of
|
||||||
|
bibliography, glossary, index, or setindex because of ambiguity
|
||||||
|
problems.)
|
||||||
|
|
||||||
|
2000-09-19 <ndw@users.sourceforge.net>
|
||||||
|
|
||||||
|
* 40chg.txt, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbookx.dtd, readme.txt, soextblx.dtd:
|
||||||
|
DocBook XML V4.0
|
||||||
|
|
||||||
|
* 40chg.txt, soextblx.dtd: branches: 1.2.2;
|
||||||
|
DocBook XML V4.1
|
||||||
|
|
||||||
|
* 41chg.txt, LostLog, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbgenent.mod, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, readme.txt:
|
||||||
|
DocBook XML V4.1.1
|
||||||
|
|
||||||
|
* 41chg.txt, LostLog, calstblx.dtd, dbcentx.mod, dbgenent.ent, dbhierx.mod, dbnotnx.mod, dbpoolx.mod, docbook.cat, docbookx.dtd, readme.txt:
|
||||||
|
DocBook XML V4.1
|
||||||
|
|
||||||
|
* 41chg.txt, LostLog, docbook.cat: branches: 1.3.2;
|
||||||
|
DocBook XML V4.1.2
|
||||||
|
|
||||||
|
* calstblx.dtd, dbcentx.mod, dbnotnx.mod, docbookx.dtd, readme.txt:
|
||||||
|
branches: 1.4.2;
|
||||||
|
DocBook XML V4.1.2
|
||||||
|
|
||||||
|
* dbgenent.mod: branches: 1.2.2;
|
||||||
|
DocBook XML V4.1.2
|
||||||
|
|
||||||
|
* dbhierx.mod, dbpoolx.mod: DocBook XML V4.1.2
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
README for the DocBook XML DTD
|
||||||
|
|
||||||
|
For more information about DocBook, please see
|
||||||
|
|
||||||
|
http://www.oasis-open.org/docbook/
|
||||||
|
|
||||||
|
Please send all questions, comments, concerns, and bug reports to the
|
||||||
|
DocBook mailing list: docbook@lists.oasis-open.org
|
|
@ -0,0 +1,205 @@
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- DocBook CALS Table Model V4.3CR3 ........................................ -->
|
||||||
|
<!-- File calstblx.mod .................................................... -->
|
||||||
|
|
||||||
|
<!-- Copyright 1992-2002 HaL Computer Systems, Inc.,
|
||||||
|
O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
|
||||||
|
Corporation, Norman Walsh, Sun Microsystems, Inc., and the
|
||||||
|
Organization for the Advancement of Structured Information
|
||||||
|
Standards (OASIS).
|
||||||
|
|
||||||
|
This DTD is based on the CALS Table Model
|
||||||
|
PUBLIC "-//USA-DOD//DTD Table Model 951010//EN"
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
Permission to use, copy, modify and distribute the DocBook DTD
|
||||||
|
and its accompanying documentation for any purpose and without fee
|
||||||
|
is hereby granted in perpetuity, provided that the above copyright
|
||||||
|
notice and this paragraph appear in all copies. The copyright
|
||||||
|
holders make no representation about the suitability of the DTD for
|
||||||
|
any purpose. It is provided "as is" without expressed or implied
|
||||||
|
warranty.
|
||||||
|
|
||||||
|
If you modify the DocBook DTD in any way, except for declaring and
|
||||||
|
referencing additional sets of general entities and declaring
|
||||||
|
additional notations, label your DTD as a variant of DocBook. See
|
||||||
|
the maintenance documentation for more information.
|
||||||
|
|
||||||
|
Please direct all questions, bug reports, or suggestions for
|
||||||
|
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||||
|
information, see http://www.oasis-open.org/docbook/.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
|
||||||
|
<!-- This module contains the definitions for the CALS Table Model
|
||||||
|
converted to XML. It has been modified slightly for use in the
|
||||||
|
combined HTML/CALS models supported by DocBook V4.3.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- These definitions are not directly related to the table model, but are
|
||||||
|
used in the default CALS table model and are usually defined elsewhere
|
||||||
|
(and prior to the inclusion of this table module) in a CALS DTD. -->
|
||||||
|
|
||||||
|
<!ENTITY % bodyatt "">
|
||||||
|
<!ENTITY % secur "">
|
||||||
|
|
||||||
|
<!-- no if zero(s),
|
||||||
|
yes if any other digits value -->
|
||||||
|
|
||||||
|
<!ENTITY % yesorno 'CDATA'>
|
||||||
|
<!ENTITY % titles 'title?'>
|
||||||
|
|
||||||
|
<!-- default for use in entry content -->
|
||||||
|
|
||||||
|
<!ENTITY % paracon '#PCDATA'>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The parameter entities as defined below provide the CALS table model
|
||||||
|
as published (as part of the Example DTD) in MIL-HDBK-28001.
|
||||||
|
|
||||||
|
These following declarations provide the CALS-compliant default definitions
|
||||||
|
for these entities. However, these entities can and should be redefined
|
||||||
|
(by giving the appropriate parameter entity declaration(s) prior to the
|
||||||
|
reference to this Table Model declaration set entity) to fit the needs
|
||||||
|
of the current application.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ENTITY % tbl.table.name "(table|chart)">
|
||||||
|
<!ENTITY % tbl.table-titles.mdl "%titles;,">
|
||||||
|
<!ENTITY % tbl.table-main.mdl "(tgroup+|graphic+)">
|
||||||
|
<!ENTITY % tbl.table.mdl "%tbl.table-titles.mdl; %tbl.table-main.mdl;">
|
||||||
|
<!ENTITY % tbl.table.att '
|
||||||
|
tabstyle CDATA #IMPLIED
|
||||||
|
tocentry %yesorno; #IMPLIED
|
||||||
|
shortentry %yesorno; #IMPLIED
|
||||||
|
orient (port|land) #IMPLIED
|
||||||
|
pgwide %yesorno; #IMPLIED '>
|
||||||
|
<!ENTITY % tbl.tgroup.mdl "colspec*,spanspec*,thead?,tfoot?,tbody">
|
||||||
|
<!ENTITY % tbl.tgroup.att '
|
||||||
|
tgroupstyle CDATA #IMPLIED '>
|
||||||
|
<!ENTITY % tbl.hdft.mdl "colspec*,row+">
|
||||||
|
<!ENTITY % tbl.row.mdl "(entry|entrytbl)+">
|
||||||
|
<!ENTITY % tbl.entrytbl.mdl "colspec*,spanspec*,thead?,tbody">
|
||||||
|
<!ENTITY % tbl.entry.mdl "(para|warning|caution|note|legend|%paracon;)*">
|
||||||
|
|
||||||
|
<!ENTITY % tbl.frame.attval "top|bottom|topbot|all|sides|none">
|
||||||
|
<!ENTITY % tbl.tbody.mdl "row+">
|
||||||
|
|
||||||
|
<!-- ===== Element and attribute declarations follow. ===== -->
|
||||||
|
|
||||||
|
<!ELEMENT table %ho; (%tbl.table.mdl;)>
|
||||||
|
|
||||||
|
<!ATTLIST table
|
||||||
|
frame (%tbl.frame.attval;) #IMPLIED
|
||||||
|
colsep %yesorno; #IMPLIED
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
%tbl.table.att;
|
||||||
|
%bodyatt;
|
||||||
|
%secur;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ELEMENT tgroup %ho; (%tbl.tgroup.mdl;) >
|
||||||
|
|
||||||
|
<!ATTLIST tgroup
|
||||||
|
cols CDATA #REQUIRED
|
||||||
|
%tbl.tgroup.att;
|
||||||
|
colsep %yesorno; #IMPLIED
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
align (left|right|center|justify|char) #IMPLIED
|
||||||
|
char CDATA #IMPLIED
|
||||||
|
charoff CDATA #IMPLIED
|
||||||
|
%secur;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ELEMENT colspec %ho; EMPTY >
|
||||||
|
|
||||||
|
<!ATTLIST colspec
|
||||||
|
colnum CDATA #IMPLIED
|
||||||
|
colname CDATA #IMPLIED
|
||||||
|
colwidth CDATA #IMPLIED
|
||||||
|
colsep %yesorno; #IMPLIED
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
align (left|right|center|justify|char) #IMPLIED
|
||||||
|
char CDATA #IMPLIED
|
||||||
|
charoff CDATA #IMPLIED
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ELEMENT spanspec %ho; EMPTY >
|
||||||
|
|
||||||
|
<!ATTLIST spanspec
|
||||||
|
namest CDATA #REQUIRED
|
||||||
|
nameend CDATA #REQUIRED
|
||||||
|
spanname CDATA #REQUIRED
|
||||||
|
colsep %yesorno; #IMPLIED
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
align (left|right|center|justify|char) #IMPLIED
|
||||||
|
char CDATA #IMPLIED
|
||||||
|
charoff CDATA #IMPLIED
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ELEMENT thead %ho; (%tbl.hdft.mdl;)>
|
||||||
|
<!ATTLIST thead
|
||||||
|
valign (top|middle|bottom) #IMPLIED
|
||||||
|
%secur;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ELEMENT tfoot %ho; (%tbl.hdft.mdl;)>
|
||||||
|
<!ATTLIST tfoot
|
||||||
|
valign (top|middle|bottom) #IMPLIED
|
||||||
|
%secur;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ELEMENT tbody %ho; (%tbl.tbody.mdl;)>
|
||||||
|
|
||||||
|
<!ATTLIST tbody
|
||||||
|
valign (top|middle|bottom) #IMPLIED
|
||||||
|
%secur;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ELEMENT row %ho; (%tbl.row.mdl;)>
|
||||||
|
|
||||||
|
<!ATTLIST row
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
valign (top|middle|bottom) #IMPLIED
|
||||||
|
%secur;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ELEMENT entrytbl %ho; (%tbl.entrytbl.mdl;)>
|
||||||
|
|
||||||
|
<!ATTLIST entrytbl
|
||||||
|
cols CDATA #REQUIRED
|
||||||
|
%tbl.tgroup.att;
|
||||||
|
colname CDATA #IMPLIED
|
||||||
|
spanname CDATA #IMPLIED
|
||||||
|
namest CDATA #IMPLIED
|
||||||
|
nameend CDATA #IMPLIED
|
||||||
|
colsep %yesorno; #IMPLIED
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
align (left|right|center|justify|char) #IMPLIED
|
||||||
|
char CDATA #IMPLIED
|
||||||
|
charoff CDATA #IMPLIED
|
||||||
|
%secur;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ELEMENT entry %ho; (%tbl.entry.mdl;)*>
|
||||||
|
|
||||||
|
<!ATTLIST entry
|
||||||
|
colname CDATA #IMPLIED
|
||||||
|
namest CDATA #IMPLIED
|
||||||
|
nameend CDATA #IMPLIED
|
||||||
|
spanname CDATA #IMPLIED
|
||||||
|
morerows CDATA #IMPLIED
|
||||||
|
colsep %yesorno; #IMPLIED
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
align (left|right|center|justify|char) #IMPLIED
|
||||||
|
char CDATA #IMPLIED
|
||||||
|
charoff CDATA #IMPLIED
|
||||||
|
rotate %yesorno; #IMPLIED
|
||||||
|
valign (top|middle|bottom) #IMPLIED
|
||||||
|
%secur;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!-- End of DocBook CALS Table Model V4.3CR3 ................................. -->
|
||||||
|
<!-- ...................................................................... -->
|
|
@ -0,0 +1,115 @@
|
||||||
|
<?xml version='1.0'?>
|
||||||
|
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- XML Catalog data for DocBook XML V4.3CR3 ................................ -->
|
||||||
|
<!-- File catalog.xml ..................................................... -->
|
||||||
|
|
||||||
|
<!-- Please direct all questions, bug reports, or suggestions for
|
||||||
|
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||||
|
information, see http://www.oasis-open.org/.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- This is the catalog data file for DocBook V4.3CR3. It is provided as
|
||||||
|
a convenience in building your own catalog files. You need not use
|
||||||
|
the filenames listed here, and need not use the filename method of
|
||||||
|
identifying storage objects at all. See the documentation for
|
||||||
|
detailed information on the files associated with the DocBook DTD.
|
||||||
|
See XML Catalogs at http://www.oasis-open.org/committees/entity/ for
|
||||||
|
detailed information on supplying and using catalog data.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- DocBook driver file .................................................. -->
|
||||||
|
|
||||||
|
<public publicId="-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||||
|
uri="docbookx.dtd"/>
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- DocBook modules ...................................................... -->
|
||||||
|
|
||||||
|
<public publicId="-//OASIS//DTD DocBook CALS Table Model V4.3CR3//EN"
|
||||||
|
uri="calstblx.dtd"/>
|
||||||
|
|
||||||
|
<public publicId="-//OASIS//DTD XML Exchange Table Model 19990315//EN"
|
||||||
|
uri="soextblx.dtd"/>
|
||||||
|
|
||||||
|
<public publicId="-//OASIS//ELEMENTS DocBook Information Pool V4.3CR3//EN"
|
||||||
|
uri="dbpoolx.mod"/>
|
||||||
|
|
||||||
|
<public publicId="-//OASIS//ELEMENTS DocBook Document Hierarchy V4.3CR3//EN"
|
||||||
|
uri="dbhierx.mod"/>
|
||||||
|
|
||||||
|
<public publicId="-//OASIS//ENTITIES DocBook Additional General Entities V4.3CR3//EN"
|
||||||
|
uri="dbgenent.mod"/>
|
||||||
|
|
||||||
|
<public publicId="-//OASIS//ENTITIES DocBook Notations V4.3CR3//EN"
|
||||||
|
uri="dbnotnx.mod"/>
|
||||||
|
|
||||||
|
<public publicId="-//OASIS//ENTITIES DocBook Character Entities V4.3CR3//EN"
|
||||||
|
uri="dbcentx.mod"/>
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- ISO entity sets ...................................................... -->
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML"
|
||||||
|
uri="ent/iso-dia.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML"
|
||||||
|
uri="ent/iso-num.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Publishing//EN//XML"
|
||||||
|
uri="ent/iso-pub.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES General Technical//EN//XML"
|
||||||
|
uri="ent/iso-tech.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
|
||||||
|
uri="ent/iso-lat1.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Added Latin 2//EN//XML"
|
||||||
|
uri="ent/iso-lat2.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Greek Letters//EN//XML"
|
||||||
|
uri="ent/iso-grk1.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Monotoniko Greek//EN//XML"
|
||||||
|
uri="ent/iso-grk2.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Greek Symbols//EN//XML"
|
||||||
|
uri="ent/iso-grk3.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN//XML"
|
||||||
|
uri="ent/iso-grk4.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN//XML"
|
||||||
|
uri="ent/iso-amsa.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN//XML"
|
||||||
|
uri="ent/iso-amsb.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN//XML"
|
||||||
|
uri="ent/iso-amsc.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN//XML"
|
||||||
|
uri="ent/iso-amsn.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN//XML"
|
||||||
|
uri="ent/iso-amso.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN//XML"
|
||||||
|
uri="ent/iso-amsr.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Box and Line Drawing//EN//XML"
|
||||||
|
uri="ent/iso-box.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Russian Cyrillic//EN//XML"
|
||||||
|
uri="ent/iso-cyr1.ent"/>
|
||||||
|
|
||||||
|
<public publicId="ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN//XML"
|
||||||
|
uri="ent/iso-cyr2.ent"/>
|
||||||
|
|
||||||
|
<!-- End of catalog data for DocBook XML V4.3CR3 ............................. -->
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
|
||||||
|
</catalog>
|
|
@ -0,0 +1,384 @@
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- DocBook character entities module V4.3CR3 ............................... -->
|
||||||
|
<!-- File dbcentx.mod ..................................................... -->
|
||||||
|
|
||||||
|
<!-- Copyright 1992-2002 HaL Computer Systems, Inc.,
|
||||||
|
O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
|
||||||
|
Corporation, Norman Walsh, Sun Microsystems, Inc., and the
|
||||||
|
Organization for the Advancement of Structured Information
|
||||||
|
Standards (OASIS).
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
Permission to use, copy, modify and distribute the DocBook DTD
|
||||||
|
and its accompanying documentation for any purpose and without fee
|
||||||
|
is hereby granted in perpetuity, provided that the above copyright
|
||||||
|
notice and this paragraph appear in all copies. The copyright
|
||||||
|
holders make no representation about the suitability of the DTD for
|
||||||
|
any purpose. It is provided "as is" without expressed or implied
|
||||||
|
warranty.
|
||||||
|
|
||||||
|
If you modify the DocBook DTD in any way, except for declaring and
|
||||||
|
referencing additional sets of general entities and declaring
|
||||||
|
additional notations, label your DTD as a variant of DocBook. See
|
||||||
|
the maintenance documentation for more information.
|
||||||
|
|
||||||
|
Please direct all questions, bug reports, or suggestions for
|
||||||
|
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||||
|
information, see http://www.oasis-open.org/docbook/.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
|
||||||
|
<!-- This module contains the entity declarations for the standard ISO
|
||||||
|
entity sets used by DocBook.
|
||||||
|
|
||||||
|
In DTD driver files referring to this module, please use an entity
|
||||||
|
declaration that uses the public identifier shown below:
|
||||||
|
|
||||||
|
<!ENTITY % dbcent PUBLIC
|
||||||
|
"-//OASIS//ENTITIES DocBook Character Entities V4.3CR3//EN"
|
||||||
|
"dbcentx.mod">
|
||||||
|
%dbcent;
|
||||||
|
|
||||||
|
See the documentation for detailed information on the parameter
|
||||||
|
entity and module scheme used in DocBook, customizing DocBook and
|
||||||
|
planning for interchange, and changes made since the last release
|
||||||
|
of DocBook.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
|
||||||
|
<![%sgml.features;[
|
||||||
|
|
||||||
|
<!ENTITY % ISOamsa.module "INCLUDE">
|
||||||
|
<![ %ISOamsa.module; [
|
||||||
|
<!ENTITY % ISOamsa PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN">
|
||||||
|
<!--end of ISOamsa.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOamsb.module "INCLUDE">
|
||||||
|
<![ %ISOamsb.module; [
|
||||||
|
<!ENTITY % ISOamsb PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN">
|
||||||
|
<!--end of ISOamsb.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOamsc.module "INCLUDE">
|
||||||
|
<![ %ISOamsc.module; [
|
||||||
|
<!ENTITY % ISOamsc PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN">
|
||||||
|
<!--end of ISOamsc.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOamsn.module "INCLUDE">
|
||||||
|
<![ %ISOamsn.module; [
|
||||||
|
<!ENTITY % ISOamsn PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN">
|
||||||
|
<!--end of ISOamsn.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOamso.module "INCLUDE">
|
||||||
|
<![ %ISOamso.module; [
|
||||||
|
<!ENTITY % ISOamso PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN">
|
||||||
|
<!--end of ISOamso.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOamsr.module "INCLUDE">
|
||||||
|
<![ %ISOamsr.module; [
|
||||||
|
<!ENTITY % ISOamsr PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN">
|
||||||
|
<!--end of ISOamsr.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISObox.module "INCLUDE">
|
||||||
|
<![ %ISObox.module; [
|
||||||
|
<!ENTITY % ISObox PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Box and Line Drawing//EN">
|
||||||
|
<!--end of ISObox.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOcyr1.module "INCLUDE">
|
||||||
|
<![ %ISOcyr1.module; [
|
||||||
|
<!ENTITY % ISOcyr1 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Russian Cyrillic//EN">
|
||||||
|
<!--end of ISOcyr1.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOcyr2.module "INCLUDE">
|
||||||
|
<![ %ISOcyr2.module; [
|
||||||
|
<!ENTITY % ISOcyr2 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN">
|
||||||
|
<!--end of ISOcyr2.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOdia.module "INCLUDE">
|
||||||
|
<![ %ISOdia.module; [
|
||||||
|
<!ENTITY % ISOdia PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Diacritical Marks//EN">
|
||||||
|
<!--end of ISOdia.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOgrk1.module "INCLUDE">
|
||||||
|
<![ %ISOgrk1.module; [
|
||||||
|
<!ENTITY % ISOgrk1 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Greek Letters//EN">
|
||||||
|
<!--end of ISOgrk1.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOgrk2.module "INCLUDE">
|
||||||
|
<![ %ISOgrk2.module; [
|
||||||
|
<!ENTITY % ISOgrk2 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Monotoniko Greek//EN">
|
||||||
|
<!--end of ISOgrk2.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOgrk3.module "INCLUDE">
|
||||||
|
<![ %ISOgrk3.module; [
|
||||||
|
<!ENTITY % ISOgrk3 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Greek Symbols//EN">
|
||||||
|
<!--end of ISOgrk3.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOgrk4.module "INCLUDE">
|
||||||
|
<![ %ISOgrk4.module; [
|
||||||
|
<!ENTITY % ISOgrk4 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN">
|
||||||
|
<!--end of ISOgrk4.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOlat1.module "INCLUDE">
|
||||||
|
<![ %ISOlat1.module; [
|
||||||
|
<!ENTITY % ISOlat1 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Latin 1//EN">
|
||||||
|
<!--end of ISOlat1.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOlat2.module "INCLUDE">
|
||||||
|
<![ %ISOlat2.module; [
|
||||||
|
<!ENTITY % ISOlat2 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Latin 2//EN">
|
||||||
|
<!--end of ISOlat2.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOnum.module "INCLUDE">
|
||||||
|
<![ %ISOnum.module; [
|
||||||
|
<!ENTITY % ISOnum PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN">
|
||||||
|
<!--end of ISOnum.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOpub.module "INCLUDE">
|
||||||
|
<![ %ISOpub.module; [
|
||||||
|
<!ENTITY % ISOpub PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Publishing//EN">
|
||||||
|
<!--end of ISOpub.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOtech.module "INCLUDE">
|
||||||
|
<![ %ISOtech.module; [
|
||||||
|
<!ENTITY % ISOtech PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES General Technical//EN">
|
||||||
|
<!--end of ISOtech.module-->]]>
|
||||||
|
|
||||||
|
<!--end of sgml.features-->]]>
|
||||||
|
|
||||||
|
<![%xml.features;[
|
||||||
|
|
||||||
|
<!ENTITY % ISOamsa.module "INCLUDE">
|
||||||
|
<![%ISOamsa.module;[
|
||||||
|
<!ENTITY % ISOamsa PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN//XML"
|
||||||
|
"ent/iso-amsa.ent">
|
||||||
|
<!--end of ISOamsa.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOamsb.module "INCLUDE">
|
||||||
|
<![%ISOamsb.module;[
|
||||||
|
<!ENTITY % ISOamsb PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN//XML"
|
||||||
|
"ent/iso-amsb.ent">
|
||||||
|
<!--end of ISOamsb.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOamsc.module "INCLUDE">
|
||||||
|
<![%ISOamsc.module;[
|
||||||
|
<!ENTITY % ISOamsc PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN//XML"
|
||||||
|
"ent/iso-amsc.ent">
|
||||||
|
<!--end of ISOamsc.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOamsn.module "INCLUDE">
|
||||||
|
<![%ISOamsn.module;[
|
||||||
|
<!ENTITY % ISOamsn PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN//XML"
|
||||||
|
"ent/iso-amsn.ent">
|
||||||
|
<!--end of ISOamsn.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOamso.module "INCLUDE">
|
||||||
|
<![%ISOamso.module;[
|
||||||
|
<!ENTITY % ISOamso PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN//XML"
|
||||||
|
"ent/iso-amso.ent">
|
||||||
|
<!--end of ISOamso.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOamsr.module "INCLUDE">
|
||||||
|
<![%ISOamsr.module;[
|
||||||
|
<!ENTITY % ISOamsr PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN//XML"
|
||||||
|
"ent/iso-amsr.ent">
|
||||||
|
<!--end of ISOamsr.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISObox.module "INCLUDE">
|
||||||
|
<![%ISObox.module;[
|
||||||
|
<!ENTITY % ISObox PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Box and Line Drawing//EN//XML"
|
||||||
|
"ent/iso-box.ent">
|
||||||
|
<!--end of ISObox.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOcyr1.module "INCLUDE">
|
||||||
|
<![%ISOcyr1.module;[
|
||||||
|
<!ENTITY % ISOcyr1 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Russian Cyrillic//EN//XML"
|
||||||
|
"ent/iso-cyr1.ent">
|
||||||
|
<!--end of ISOcyr1.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOcyr2.module "INCLUDE">
|
||||||
|
<![%ISOcyr2.module;[
|
||||||
|
<!ENTITY % ISOcyr2 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN//XML"
|
||||||
|
"ent/iso-cyr2.ent">
|
||||||
|
<!--end of ISOcyr2.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOdia.module "INCLUDE">
|
||||||
|
<![%ISOdia.module;[
|
||||||
|
<!ENTITY % ISOdia PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML"
|
||||||
|
"ent/iso-dia.ent">
|
||||||
|
<!--end of ISOdia.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOgrk1.module "INCLUDE">
|
||||||
|
<![%ISOgrk1.module;[
|
||||||
|
<!ENTITY % ISOgrk1 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Greek Letters//EN//XML"
|
||||||
|
"ent/iso-grk1.ent">
|
||||||
|
<!--end of ISOgrk1.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOgrk2.module "INCLUDE">
|
||||||
|
<![%ISOgrk2.module;[
|
||||||
|
<!ENTITY % ISOgrk2 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Monotoniko Greek//EN//XML"
|
||||||
|
"ent/iso-grk2.ent">
|
||||||
|
<!--end of ISOgrk2.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOgrk3.module "INCLUDE">
|
||||||
|
<![%ISOgrk3.module;[
|
||||||
|
<!ENTITY % ISOgrk3 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Greek Symbols//EN//XML"
|
||||||
|
"ent/iso-grk3.ent">
|
||||||
|
<!--end of ISOgrk3.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOgrk4.module "INCLUDE">
|
||||||
|
<![%ISOgrk4.module;[
|
||||||
|
<!ENTITY % ISOgrk4 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN//XML"
|
||||||
|
"ent/iso-grk4.ent">
|
||||||
|
<!--end of ISOgrk4.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOlat1.module "INCLUDE">
|
||||||
|
<![%ISOlat1.module;[
|
||||||
|
<!ENTITY % ISOlat1 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
|
||||||
|
"ent/iso-lat1.ent">
|
||||||
|
<!--end of ISOlat1.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOlat2.module "INCLUDE">
|
||||||
|
<![%ISOlat2.module;[
|
||||||
|
<!ENTITY % ISOlat2 PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Added Latin 2//EN//XML"
|
||||||
|
"ent/iso-lat2.ent">
|
||||||
|
<!--end of ISOlat2.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOnum.module "INCLUDE">
|
||||||
|
<![%ISOnum.module;[
|
||||||
|
<!ENTITY % ISOnum PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML"
|
||||||
|
"ent/iso-num.ent">
|
||||||
|
<!--end of ISOnum.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOpub.module "INCLUDE">
|
||||||
|
<![%ISOpub.module;[
|
||||||
|
<!ENTITY % ISOpub PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES Publishing//EN//XML"
|
||||||
|
"ent/iso-pub.ent">
|
||||||
|
<!--end of ISOpub.module-->]]>
|
||||||
|
|
||||||
|
<!ENTITY % ISOtech.module "INCLUDE">
|
||||||
|
<![%ISOtech.module;[
|
||||||
|
<!ENTITY % ISOtech PUBLIC
|
||||||
|
"ISO 8879:1986//ENTITIES General Technical//EN//XML"
|
||||||
|
"ent/iso-tech.ent">
|
||||||
|
<!--end of ISOtech.module-->]]>
|
||||||
|
|
||||||
|
<!--end of xml.features-->]]>
|
||||||
|
|
||||||
|
<![ %ISOamsa.module; [
|
||||||
|
%ISOamsa;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOamsb.module; [
|
||||||
|
%ISOamsb;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOamsc.module; [
|
||||||
|
%ISOamsc;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOamsn.module; [
|
||||||
|
%ISOamsn;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOamso.module; [
|
||||||
|
%ISOamso;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOamsr.module; [
|
||||||
|
%ISOamsr;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISObox.module; [
|
||||||
|
%ISObox;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOcyr1.module; [
|
||||||
|
%ISOcyr1;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOcyr2.module; [
|
||||||
|
%ISOcyr2;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOdia.module; [
|
||||||
|
%ISOdia;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOgrk1.module; [
|
||||||
|
%ISOgrk1;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOgrk2.module; [
|
||||||
|
%ISOgrk2;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOgrk3.module; [
|
||||||
|
%ISOgrk3;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOgrk4.module; [
|
||||||
|
%ISOgrk4;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOlat1.module; [
|
||||||
|
%ISOlat1;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOlat2.module; [
|
||||||
|
%ISOlat2;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOnum.module; [
|
||||||
|
%ISOnum;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOpub.module; [
|
||||||
|
%ISOpub;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![ %ISOtech.module; [
|
||||||
|
%ISOtech;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<!-- End of DocBook character entity sets module V4.3CR3 ..................... -->
|
||||||
|
<!-- ...................................................................... -->
|
|
@ -0,0 +1,41 @@
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- DocBook additional general entities V4.3CR3 ............................. -->
|
||||||
|
|
||||||
|
<!-- Copyright 1992-2002 HaL Computer Systems, Inc.,
|
||||||
|
O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
|
||||||
|
Corporation, Norman Walsh, Sun Microsystems, Inc., and the
|
||||||
|
Organization for the Advancement of Structured Information
|
||||||
|
Standards (OASIS).
|
||||||
|
|
||||||
|
In DTD driver files referring to this module, please use an entity
|
||||||
|
declaration that uses the public identifier shown below:
|
||||||
|
|
||||||
|
<!ENTITY % dbgenent PUBLIC
|
||||||
|
"-//OASIS//ENTITIES DocBook Additional General Entities V4.3CR3//EN"
|
||||||
|
"dbgenent.mod">
|
||||||
|
%dbgenent;
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- File dbgenent.mod .................................................... -->
|
||||||
|
|
||||||
|
<!-- You can edit this file to add the following:
|
||||||
|
|
||||||
|
o General entity declarations of any kind. For example:
|
||||||
|
|
||||||
|
<!ENTITY productname "WinWidget"> (small boilerplate)
|
||||||
|
<!ENTITY legal-notice SYSTEM "notice.sgm"> (large boilerplate)
|
||||||
|
|
||||||
|
o Notation declarations. For example:
|
||||||
|
|
||||||
|
<!NOTATION chicken-scratch SYSTEM>
|
||||||
|
|
||||||
|
o Declarations for and references to external parameter entities
|
||||||
|
containing collections of any of the above. For example:
|
||||||
|
|
||||||
|
<!ENTITY % all-titles PUBLIC "-//DocTools//ELEMENTS Book Titles//EN"
|
||||||
|
"booktitles.ent">
|
||||||
|
%all-titles;
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- End of DocBook additional general entities V4.3CR3 ...................... -->
|
||||||
|
<!-- ...................................................................... -->
|
|
@ -0,0 +1,102 @@
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- DocBook notations module V4.3CR3 ........................................ -->
|
||||||
|
<!-- File dbnotnx.mod ..................................................... -->
|
||||||
|
|
||||||
|
<!-- Copyright 1992-2002 HaL Computer Systems, Inc.,
|
||||||
|
O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
|
||||||
|
Corporation, Norman Walsh, Sun Microsystems, Inc., and the
|
||||||
|
Organization for the Advancement of Structured Information
|
||||||
|
Standards (OASIS).
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
Permission to use, copy, modify and distribute the DocBook DTD
|
||||||
|
and its accompanying documentation for any purpose and without fee
|
||||||
|
is hereby granted in perpetuity, provided that the above copyright
|
||||||
|
notice and this paragraph appear in all copies. The copyright
|
||||||
|
holders make no representation about the suitability of the DTD for
|
||||||
|
any purpose. It is provided "as is" without expressed or implied
|
||||||
|
warranty.
|
||||||
|
|
||||||
|
If you modify the DocBook DTD in any way, except for declaring and
|
||||||
|
referencing additional sets of general entities and declaring
|
||||||
|
additional notations, label your DTD as a variant of DocBook. See
|
||||||
|
the maintenance documentation for more information.
|
||||||
|
|
||||||
|
Please direct all questions, bug reports, or suggestions for
|
||||||
|
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||||
|
information, see http://www.oasis-open.org/docbook/.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
|
||||||
|
<!-- This module contains the entity declarations for the standard ISO
|
||||||
|
entity sets used by DocBook.
|
||||||
|
|
||||||
|
In DTD driver files referring to this module, please use an entity
|
||||||
|
declaration that uses the public identifier shown below:
|
||||||
|
|
||||||
|
<!ENTITY % dbnotn PUBLIC
|
||||||
|
"-//OASIS//ENTITIES DocBook Notations V4.3CR3//EN"
|
||||||
|
"dbnotnx.mod">
|
||||||
|
%dbnotn;
|
||||||
|
|
||||||
|
See the documentation for detailed information on the parameter
|
||||||
|
entity and module scheme used in DocBook, customizing DocBook and
|
||||||
|
planning for interchange, and changes made since the last release
|
||||||
|
of DocBook.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ENTITY % local.notation.class "">
|
||||||
|
<!ENTITY % notation.class
|
||||||
|
"BMP| CGM-CHAR | CGM-BINARY | CGM-CLEAR | DITROFF | DVI
|
||||||
|
| EPS | EQN | FAX | GIF | GIF87a | GIF89a
|
||||||
|
| JPG | JPEG | IGES | PCX
|
||||||
|
| PIC | PNG | PS | SGML | TBL | TEX | TIFF | WMF | WPG
|
||||||
|
| SVG | PDF | SWF
|
||||||
|
| linespecific
|
||||||
|
%local.notation.class;">
|
||||||
|
|
||||||
|
<!NOTATION BMP PUBLIC
|
||||||
|
"+//ISBN 0-7923-94.2-1::Graphic Notation//NOTATION Microsoft Windows bitmap//EN">
|
||||||
|
<!NOTATION CGM-CHAR PUBLIC "ISO 8632/2//NOTATION Character encoding//EN">
|
||||||
|
<!NOTATION CGM-BINARY PUBLIC "ISO 8632/3//NOTATION Binary encoding//EN">
|
||||||
|
<!NOTATION CGM-CLEAR PUBLIC "ISO 8632/4//NOTATION Clear text encoding//EN">
|
||||||
|
<!NOTATION DITROFF SYSTEM "DITROFF">
|
||||||
|
<!NOTATION DVI SYSTEM "DVI">
|
||||||
|
<!NOTATION EPS PUBLIC
|
||||||
|
"+//ISBN 0-201-18127-4::Adobe//NOTATION PostScript Language Ref. Manual//EN">
|
||||||
|
<!NOTATION EQN SYSTEM "EQN">
|
||||||
|
<!NOTATION FAX PUBLIC
|
||||||
|
"-//USA-DOD//NOTATION CCITT Group 4 Facsimile Type 1 Untiled Raster//EN">
|
||||||
|
<!NOTATION GIF SYSTEM "GIF">
|
||||||
|
<!NOTATION GIF87a PUBLIC
|
||||||
|
"-//CompuServe//NOTATION Graphics Interchange Format 87a//EN">
|
||||||
|
|
||||||
|
<!NOTATION GIF89a PUBLIC
|
||||||
|
"-//CompuServe//NOTATION Graphics Interchange Format 89a//EN">
|
||||||
|
<!NOTATION JPG SYSTEM "JPG">
|
||||||
|
<!NOTATION JPEG SYSTEM "JPG">
|
||||||
|
<!NOTATION IGES PUBLIC
|
||||||
|
"-//USA-DOD//NOTATION (ASME/ANSI Y14.26M-1987) Initial Graphics Exchange Specification//EN">
|
||||||
|
<!NOTATION PCX PUBLIC
|
||||||
|
"+//ISBN 0-7923-94.2-1::Graphic Notation//NOTATION ZSoft PCX bitmap//EN">
|
||||||
|
<!NOTATION PIC SYSTEM "PIC">
|
||||||
|
<!NOTATION PNG SYSTEM "http://www.w3.org/TR/REC-png">
|
||||||
|
<!NOTATION PS SYSTEM "PS">
|
||||||
|
<!NOTATION SGML PUBLIC
|
||||||
|
"ISO 8879:1986//NOTATION Standard Generalized Markup Language//EN">
|
||||||
|
<!NOTATION TBL SYSTEM "TBL">
|
||||||
|
<!NOTATION TEX PUBLIC
|
||||||
|
"+//ISBN 0-201-13448-9::Knuth//NOTATION The TeXbook//EN">
|
||||||
|
<!NOTATION TIFF SYSTEM "TIFF">
|
||||||
|
<!NOTATION WMF PUBLIC
|
||||||
|
"+//ISBN 0-7923-94.2-1::Graphic Notation//NOTATION Microsoft Windows Metafile//EN">
|
||||||
|
<!NOTATION WPG SYSTEM "WPG"> <!--WordPerfect Graphic format-->
|
||||||
|
<!NOTATION SVG SYSTEM "http://www.w3.org/TR/SVG/">
|
||||||
|
<!NOTATION PDF SYSTEM "http://www.adobe.com/products/acrobat/adobepdf.html">
|
||||||
|
<!NOTATION SWF SYSTEM "http://www.macromedia.com/software/flash">
|
||||||
|
<!NOTATION linespecific SYSTEM "linespecific">
|
||||||
|
|
||||||
|
<!-- End of DocBook notations module V4.3CR3 ................................. -->
|
||||||
|
<!-- ...................................................................... -->
|
|
@ -0,0 +1,110 @@
|
||||||
|
-- ...................................................................... --
|
||||||
|
-- Catalog data for DocBook XML V4.3CR3 .................................... --
|
||||||
|
-- File docbook.cat ..................................................... --
|
||||||
|
|
||||||
|
-- Please direct all questions, bug reports, or suggestions for
|
||||||
|
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||||
|
information, see http://www.oasis-open.org/.
|
||||||
|
--
|
||||||
|
|
||||||
|
-- This is the catalog data file for DocBook XML V4.3CR3. It is provided as
|
||||||
|
a convenience in building your own catalog files. You need not use
|
||||||
|
the filenames listed here, and need not use the filename method of
|
||||||
|
identifying storage objects at all. See the documentation for
|
||||||
|
detailed information on the files associated with the DocBook DTD.
|
||||||
|
See SGML Open Technical Resolution 9401 for detailed information
|
||||||
|
on supplying and using catalog data.
|
||||||
|
--
|
||||||
|
|
||||||
|
-- ...................................................................... --
|
||||||
|
-- DocBook driver file .................................................. --
|
||||||
|
|
||||||
|
PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||||
|
"docbookx.dtd"
|
||||||
|
|
||||||
|
-- ...................................................................... --
|
||||||
|
-- DocBook modules ...................................................... --
|
||||||
|
|
||||||
|
PUBLIC "-//OASIS//DTD DocBook CALS Table Model V4.3CR3//EN"
|
||||||
|
"calstblx.dtd"
|
||||||
|
|
||||||
|
PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN"
|
||||||
|
"soextblx.dtd"
|
||||||
|
|
||||||
|
PUBLIC "-//OASIS//ELEMENTS DocBook Information Pool V4.3CR3//EN"
|
||||||
|
"dbpoolx.mod"
|
||||||
|
|
||||||
|
PUBLIC "-//OASIS//ELEMENTS DocBook Document Hierarchy V4.3CR3//EN"
|
||||||
|
"dbhierx.mod"
|
||||||
|
|
||||||
|
PUBLIC "-//OASIS//ENTITIES DocBook Additional General Entities V4.3CR3//EN"
|
||||||
|
"dbgenent.mod"
|
||||||
|
|
||||||
|
PUBLIC "-//OASIS//ENTITIES DocBook Notations V4.3CR3//EN"
|
||||||
|
"dbnotnx.mod"
|
||||||
|
|
||||||
|
PUBLIC "-//OASIS//ENTITIES DocBook Character Entities V4.3CR3//EN"
|
||||||
|
"dbcentx.mod"
|
||||||
|
|
||||||
|
-- ...................................................................... --
|
||||||
|
-- ISO entity sets ...................................................... --
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Diacritical Marks//EN//XML"
|
||||||
|
"ent/iso-dia.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Numeric and Special Graphic//EN//XML"
|
||||||
|
"ent/iso-num.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Publishing//EN//XML"
|
||||||
|
"ent/iso-pub.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES General Technical//EN//XML"
|
||||||
|
"ent/iso-tech.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Added Latin 1//EN//XML"
|
||||||
|
"ent/iso-lat1.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Added Latin 2//EN//XML"
|
||||||
|
"ent/iso-lat2.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Greek Letters//EN//XML"
|
||||||
|
"ent/iso-grk1.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Monotoniko Greek//EN//XML"
|
||||||
|
"ent/iso-grk2.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Greek Symbols//EN//XML"
|
||||||
|
"ent/iso-grk3.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Alternative Greek Symbols//EN//XML"
|
||||||
|
"ent/iso-grk4.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Arrow Relations//EN//XML"
|
||||||
|
"ent/iso-amsa.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Binary Operators//EN//XML"
|
||||||
|
"ent/iso-amsb.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Delimiters//EN//XML"
|
||||||
|
"ent/iso-amsc.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Negated Relations//EN//XML"
|
||||||
|
"ent/iso-amsn.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Ordinary//EN//XML"
|
||||||
|
"ent/iso-amso.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Added Math Symbols: Relations//EN//XML"
|
||||||
|
"ent/iso-amsr.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Box and Line Drawing//EN//XML"
|
||||||
|
"ent/iso-box.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Russian Cyrillic//EN//XML"
|
||||||
|
"ent/iso-cyr1.ent"
|
||||||
|
|
||||||
|
PUBLIC "ISO 8879:1986//ENTITIES Non-Russian Cyrillic//EN//XML"
|
||||||
|
"ent/iso-cyr2.ent"
|
||||||
|
|
||||||
|
-- End of catalog data for DocBook XML V4.3CR3 ............................. --
|
||||||
|
-- ...................................................................... --
|
|
@ -0,0 +1,165 @@
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- DocBook XML DTD V4.3CR3 ................................................. -->
|
||||||
|
<!-- File docbookx.dtd .................................................... -->
|
||||||
|
|
||||||
|
<!-- Copyright 1992-2002 HaL Computer Systems, Inc.,
|
||||||
|
O'Reilly & Associates, Inc., ArborText, Inc., Fujitsu Software
|
||||||
|
Corporation, Norman Walsh, Sun Microsystems, Inc., and the
|
||||||
|
Organization for the Advancement of Structured Information
|
||||||
|
Standards (OASIS).
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
Permission to use, copy, modify and distribute the DocBook XML DTD
|
||||||
|
and its accompanying documentation for any purpose and without fee
|
||||||
|
is hereby granted in perpetuity, provided that the above copyright
|
||||||
|
notice and this paragraph appear in all copies. The copyright
|
||||||
|
holders make no representation about the suitability of the DTD for
|
||||||
|
any purpose. It is provided "as is" without expressed or implied
|
||||||
|
warranty.
|
||||||
|
|
||||||
|
If you modify the DocBook DTD in any way, except for declaring and
|
||||||
|
referencing additional sets of general entities and declaring
|
||||||
|
additional notations, label your DTD as a variant of DocBook. See
|
||||||
|
the maintenance documentation for more information.
|
||||||
|
|
||||||
|
Please direct all questions, bug reports, or suggestions for
|
||||||
|
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||||
|
information, see http://www.oasis-open.org/docbook/.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
|
||||||
|
<!-- This is the driver file for V4.3CR3 of the DocBook DTD.
|
||||||
|
Please use the following formal public identifier to identify it:
|
||||||
|
|
||||||
|
"-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||||
|
|
||||||
|
For example, if your document's top-level element is Book, and
|
||||||
|
you are using DocBook directly, use the FPI in the DOCTYPE
|
||||||
|
declaration:
|
||||||
|
|
||||||
|
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3b2/docbookx.dtd"
|
||||||
|
[...]>
|
||||||
|
|
||||||
|
Or, if you have a higher-level driver file that customizes DocBook,
|
||||||
|
use the FPI in the parameter entity declaration:
|
||||||
|
|
||||||
|
<!ENTITY % DocBookDTD PUBLIC "-//OASIS//DTD DocBook XML V4.3CR3//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.3b2/docbookx.dtd">
|
||||||
|
%DocBookDTD;
|
||||||
|
|
||||||
|
See the documentation for detailed information on the parameter
|
||||||
|
entity and module scheme used in DocBook, customizing DocBook and
|
||||||
|
planning for interchange, and changes made since the last release
|
||||||
|
of DocBook.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- Enable SGML features ................................................. -->
|
||||||
|
|
||||||
|
<!ENTITY % sgml.features "IGNORE">
|
||||||
|
<![%sgml.features;[
|
||||||
|
<!ENTITY % xml.features "IGNORE">
|
||||||
|
]]>
|
||||||
|
<!ENTITY % xml.features "INCLUDE">
|
||||||
|
|
||||||
|
<![%sgml.features;[
|
||||||
|
<![%xml.features;[
|
||||||
|
|
||||||
|
<!-- ERROR: Exactly one of xml.features and sgml.features must be turned on! -->
|
||||||
|
<!ENTITY % dbnotn SYSTEM "http://www.oasis-open.org/docbook/xml/configerror.txt">
|
||||||
|
<!ENTITY % dbcent SYSTEM "http://www.oasis-open.org/docbook/xml/configerror.txt">
|
||||||
|
<!ENTITY % dbpool SYSTEM "http://www.oasis-open.org/docbook/xml/configerror.txt">
|
||||||
|
<!ENTITY % dbhier SYSTEM "http://www.oasis-open.org/docbook/xml/configerror.txt">
|
||||||
|
<!ENTITY % dbgenent SYSTEM "http://www.oasis-open.org/docbook/xml/configerror.txt">
|
||||||
|
|
||||||
|
]]>
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![%sgml.features;[
|
||||||
|
<!ENTITY % ho "- O">
|
||||||
|
<!ENTITY % hh "- -">
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<![%xml.features;[
|
||||||
|
<!ENTITY % ho "">
|
||||||
|
<!ENTITY % hh "">
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- Notation declarations ................................................ -->
|
||||||
|
|
||||||
|
<!ENTITY % dbnotn.module "INCLUDE">
|
||||||
|
<![%dbnotn.module;[
|
||||||
|
<!ENTITY % dbnotn PUBLIC
|
||||||
|
"-//OASIS//ENTITIES DocBook Notations V4.3CR3//EN"
|
||||||
|
"dbnotnx.mod">
|
||||||
|
%dbnotn;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- ISO character entity sets ............................................ -->
|
||||||
|
|
||||||
|
<!ENTITY % dbcent.module "INCLUDE">
|
||||||
|
<![%dbcent.module;[
|
||||||
|
|
||||||
|
<![%sgml.features;[
|
||||||
|
<!ENTITY euro SDATA "[euro ]"><!-- euro sign -->
|
||||||
|
]]>
|
||||||
|
<![%xml.features;[
|
||||||
|
<!ENTITY euro "€"><!-- euro sign, U+20AC NEW -->
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<!ENTITY % dbcent PUBLIC
|
||||||
|
"-//OASIS//ENTITIES DocBook Character Entities V4.3CR3//EN"
|
||||||
|
"dbcentx.mod">
|
||||||
|
%dbcent;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- DTD modules .......................................................... -->
|
||||||
|
|
||||||
|
<!-- Information pool .............. -->
|
||||||
|
|
||||||
|
<!ENTITY % dbpool.module "INCLUDE">
|
||||||
|
<![ %dbpool.module; [
|
||||||
|
<!ENTITY % dbpool PUBLIC
|
||||||
|
"-//OASIS//ELEMENTS DocBook Information Pool V4.3CR3//EN"
|
||||||
|
"dbpoolx.mod">
|
||||||
|
%dbpool;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<!-- Redeclaration placeholder ..... -->
|
||||||
|
|
||||||
|
<!ENTITY % intermod.redecl.module "IGNORE">
|
||||||
|
<![%intermod.redecl.module;[
|
||||||
|
<!-- Defining rdbmods here makes some buggy XML parsers happy. -->
|
||||||
|
<!ENTITY % rdbmods "">
|
||||||
|
%rdbmods;
|
||||||
|
<!--end of intermod.redecl.module-->]]>
|
||||||
|
|
||||||
|
<!-- Document hierarchy ............ -->
|
||||||
|
|
||||||
|
<!ENTITY % dbhier.module "INCLUDE">
|
||||||
|
<![ %dbhier.module; [
|
||||||
|
<!ENTITY % dbhier PUBLIC
|
||||||
|
"-//OASIS//ELEMENTS DocBook Document Hierarchy V4.3CR3//EN"
|
||||||
|
"dbhierx.mod">
|
||||||
|
%dbhier;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- Other general entities ............................................... -->
|
||||||
|
|
||||||
|
<!ENTITY % dbgenent.module "INCLUDE">
|
||||||
|
<![ %dbgenent.module; [
|
||||||
|
<!ENTITY % dbgenent PUBLIC
|
||||||
|
"-//OASIS//ENTITIES DocBook Additional General Entities V4.3CR3//EN"
|
||||||
|
"dbgenent.mod">
|
||||||
|
%dbgenent;
|
||||||
|
]]>
|
||||||
|
|
||||||
|
<!-- End of DocBook XML DTD V4.3CR3 .......................................... -->
|
||||||
|
<!-- ...................................................................... -->
|
|
@ -0,0 +1,63 @@
|
||||||
|
<!-- iso-amsa.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz
|
||||||
|
With additional derivations from
|
||||||
|
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||||
|
|
||||||
|
<!ENTITY cularr "↶"> <!-- ANTICLOCKWISE TOP SEMICIRCLE ARROW -->
|
||||||
|
<!ENTITY curarr "↷"> <!-- CLOCKWISE TOP SEMICIRCLE ARROW -->
|
||||||
|
<!ENTITY dArr "⇓"> <!-- DOWNWARDS DOUBLE ARROW -->
|
||||||
|
<!ENTITY darr2 "⇊"> <!-- DOWNWARDS PAIRED ARROWS -->
|
||||||
|
<!ENTITY dharl "⇃"> <!-- DOWNWARDS HARPOON WITH BARB LEFTWARDS -->
|
||||||
|
<!ENTITY dharr "⇂"> <!-- DOWNWARDS HARPOON WITH BARB RIGHTWARDS -->
|
||||||
|
<!ENTITY lAarr "⇚"> <!-- LEFTWARDS TRIPLE ARROW -->
|
||||||
|
<!ENTITY Larr "↞"> <!-- LEFTWARDS TWO HEADED ARROW -->
|
||||||
|
<!ENTITY larr2 "⇇"> <!-- LEFTWARDS PAIRED ARROWS -->
|
||||||
|
<!ENTITY larrhk "↩"> <!-- LEFTWARDS ARROW WITH HOOK -->
|
||||||
|
<!ENTITY larrlp "↫"> <!-- LEFTWARDS ARROW WITH LOOP -->
|
||||||
|
<!ENTITY larrtl "↢"> <!-- LEFTWARDS ARROW WITH TAIL -->
|
||||||
|
<!ENTITY lhard "↽"> <!-- LEFTWARDS HARPOON WITH BARB DOWNWARDS -->
|
||||||
|
<!ENTITY lharu "↼"> <!-- LEFTWARDS HARPOON WITH BARB UPWARDS -->
|
||||||
|
<!ENTITY hArr "⇔"> <!-- -->
|
||||||
|
<!ENTITY harr "↔"> <!-- LEFT RIGHT ARROW -->
|
||||||
|
<!ENTITY lrarr2 "⇆"> <!-- LEFTWARDS ARROW OVER RIGHTWARDS ARROW -->
|
||||||
|
<!ENTITY rlarr2 "⇄"> <!-- RIGHTWARDS ARROW OVER LEFTWARDS ARROW -->
|
||||||
|
<!ENTITY harrw "↭"> <!-- LEFT RIGHT WAVE ARROW -->
|
||||||
|
<!ENTITY rlhar2 "⇌"> <!-- RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON -->
|
||||||
|
<!ENTITY lrhar2 "⇋"> <!-- LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON -->
|
||||||
|
<!ENTITY lsh "↰"> <!-- UPWARDS ARROW WITH TIP LEFTWARDS -->
|
||||||
|
<!ENTITY map "↦"> <!-- RIGHTWARDS ARROW FROM BAR -->
|
||||||
|
<!ENTITY mumap "⊸"> <!-- MULTIMAP -->
|
||||||
|
<!ENTITY nearr "↗"> <!-- NORTH EAST ARROW -->
|
||||||
|
<!ENTITY nlArr "⇍"> <!-- LEFTWARDS DOUBLE ARROW WITH STROKE -->
|
||||||
|
<!ENTITY nlarr "↚"> <!-- LEFTWARDS ARROW WITH STROKE -->
|
||||||
|
<!ENTITY nhArr "⇎"> <!-- LEFT RIGHT DOUBLE ARROW WITH STROKE -->
|
||||||
|
<!ENTITY nharr "↮"> <!-- LEFT RIGHT ARROW WITH STROKE -->
|
||||||
|
<!ENTITY nrarr "↛"> <!-- RIGHTWARDS ARROW WITH STROKE -->
|
||||||
|
<!ENTITY nrArr "⇏"> <!-- RIGHTWARDS DOUBLE ARROW WITH STROKE -->
|
||||||
|
<!ENTITY nwarr "↖"> <!-- NORTH WEST ARROW -->
|
||||||
|
<!ENTITY olarr "↺"> <!-- ANTICLOCKWISE OPEN CIRCLE ARROW -->
|
||||||
|
<!ENTITY orarr "↻"> <!-- CLOCKWISE OPEN CIRCLE ARROW -->
|
||||||
|
<!ENTITY rAarr "⇛"> <!-- RIGHTWARDS TRIPLE ARROW -->
|
||||||
|
<!ENTITY Rarr "↠"> <!-- RIGHTWARDS TWO HEADED ARROW -->
|
||||||
|
<!ENTITY rarr2 "⇉"> <!-- RIGHTWARDS PAIRED ARROWS -->
|
||||||
|
<!ENTITY rarrhk "↪"> <!-- RIGHTWARDS ARROW WITH HOOK -->
|
||||||
|
<!ENTITY rarrlp "↬"> <!-- RIGHTWARDS ARROW WITH LOOP -->
|
||||||
|
<!ENTITY rarrtl "↣"> <!-- RIGHTWARDS ARROW WITH TAIL -->
|
||||||
|
<!ENTITY rarrw "↝"> <!-- RIGHTWARDS SQUIGGLE ARROW -->
|
||||||
|
<!ENTITY rhard "⇁"> <!-- RIGHTWARDS HARPOON WITH BARB DOWNWARDS -->
|
||||||
|
<!ENTITY rharu "⇀"> <!-- RIGHTWARDS HARPOON WITH BARB UPWARDS -->
|
||||||
|
<!ENTITY rsh "↱"> <!-- UPWARDS ARROW WITH TIP RIGHTWARDS -->
|
||||||
|
<!ENTITY drarr "↘"> <!-- SOUTH EAST ARROW -->
|
||||||
|
<!ENTITY dlarr "↙"> <!-- SOUTH WEST ARROW -->
|
||||||
|
<!ENTITY uArr "⇑"> <!-- UPWARDS DOUBLE ARROW -->
|
||||||
|
<!ENTITY uarr2 "⇈"> <!-- UPWARDS PAIRED ARROWS -->
|
||||||
|
<!ENTITY vArr "⇕"> <!-- UP DOWN DOUBLE ARROW -->
|
||||||
|
<!ENTITY varr "↕"> <!-- UP DOWN ARROW -->
|
||||||
|
<!ENTITY uharl "↿"> <!-- UPWARDS HARPOON WITH BARB LEFTWARDS -->
|
||||||
|
<!ENTITY uharr "↾"> <!-- UPWARDS HARPOON WITH BARB RIGHTWARDS -->
|
||||||
|
<!ENTITY xlArr "⇐"> <!-- LEFTWARDS DOUBLE ARROW -->
|
||||||
|
<!ENTITY xhArr "↔"> <!-- LEFT RIGHT ARROW -->
|
||||||
|
<!ENTITY xharr "↔"> <!-- LEFT RIGHT ARROW -->
|
||||||
|
<!ENTITY xrArr "⇒"> <!-- RIGHTWARDS DOUBLE ARROW -->
|
|
@ -0,0 +1,49 @@
|
||||||
|
<!-- iso-amsb.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz.
|
||||||
|
With additional derivations from
|
||||||
|
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||||
|
|
||||||
|
<!ENTITY amalg "∐"> <!-- N-ARY COPRODUCT -->
|
||||||
|
<!ENTITY Barwed "⌆"> <!-- PERSPECTIVE -->
|
||||||
|
<!ENTITY barwed "⊼"> <!-- NAND -->
|
||||||
|
<!ENTITY Cap "⋒"> <!-- DOUBLE INTERSECTION -->
|
||||||
|
<!ENTITY Cup "⋓"> <!-- DOUBLE UNION -->
|
||||||
|
<!ENTITY cuvee "⋎"> <!-- CURLY LOGICAL OR -->
|
||||||
|
<!ENTITY cuwed "⋏"> <!-- CURLY LOGICAL AND -->
|
||||||
|
<!ENTITY diam "⋄"> <!-- DIAMOND OPERATOR -->
|
||||||
|
<!ENTITY divonx "⋇"> <!-- DIVISION TIMES -->
|
||||||
|
<!ENTITY intcal "⊺"> <!-- INTERCALATE -->
|
||||||
|
<!ENTITY lthree "⋋"> <!-- LEFT SEMIDIRECT PRODUCT -->
|
||||||
|
<!ENTITY ltimes "⋉"> <!-- LEFT NORMAL FACTOR SEMIDIRECT PRODUCT -->
|
||||||
|
<!ENTITY minusb "⊟"> <!-- SQUARED MINUS -->
|
||||||
|
<!ENTITY oast "⊛"> <!-- CIRCLED ASTERISK OPERATOR -->
|
||||||
|
<!ENTITY ocir "⊚"> <!-- CIRCLED RING OPERATOR -->
|
||||||
|
<!ENTITY odash "⊝"> <!-- CIRCLED DASH -->
|
||||||
|
<!ENTITY odot "⊙"> <!-- CIRCLED DOT OPERATOR -->
|
||||||
|
<!ENTITY ominus "⊖"> <!-- CIRCLED MINUS -->
|
||||||
|
<!ENTITY oplus "⊕"> <!-- CIRCLED PLUS -->
|
||||||
|
<!ENTITY osol "⊘"> <!-- CIRCLED DIVISION SLASH -->
|
||||||
|
<!ENTITY otimes "⊗"> <!-- CIRCLED TIMES -->
|
||||||
|
<!ENTITY plusb "⊞"> <!-- SQUARED PLUS -->
|
||||||
|
<!ENTITY plusdo "∔"> <!-- DOT PLUS -->
|
||||||
|
<!ENTITY rthree "⋌"> <!-- RIGHT SEMIDIRECT PRODUCT -->
|
||||||
|
<!ENTITY rtimes "⋊"> <!-- RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT -->
|
||||||
|
<!ENTITY sdot "⋅"> <!-- DOT OPERATOR -->
|
||||||
|
<!ENTITY sdotb "⊡"> <!-- SQUARED DOT OPERATOR -->
|
||||||
|
<!ENTITY setmn "∖"> <!-- SET MINUS -->
|
||||||
|
<!ENTITY sqcap "⊓"> <!-- SQUARE CAP -->
|
||||||
|
<!ENTITY sqcup "⊔"> <!-- SQUARE CUP -->
|
||||||
|
<!ENTITY ssetmn "∖"> <!-- SET MINUS -->
|
||||||
|
<!ENTITY sstarf "⋆"> <!-- STAR OPERATOR -->
|
||||||
|
<!ENTITY timesb "⊠"> <!-- SQUARED TIMES -->
|
||||||
|
<!ENTITY top "⊤"> <!-- DOWN TACK -->
|
||||||
|
<!ENTITY uplus "⊎"> <!-- MULTISET UNION -->
|
||||||
|
<!ENTITY wreath "≀"> <!-- WREATH PRODUCT -->
|
||||||
|
<!ENTITY xcirc "○"> <!-- WHITE CIRCLE -->
|
||||||
|
<!ENTITY xdtri "▽"> <!-- WHITE DOWN-POINTING TRIANGLE -->
|
||||||
|
<!ENTITY xutri "△"> <!-- WHITE UP-POINTING TRIANGLE -->
|
||||||
|
<!ENTITY coprod "∐"> <!-- N-ARY COPRODUCT -->
|
||||||
|
<!ENTITY prod "∏"> <!-- N-ARY PRODUCT -->
|
||||||
|
<!ENTITY sum "∑"> <!-- N-ARY SUMMATION -->
|
|
@ -0,0 +1,15 @@
|
||||||
|
<!-- iso-amsc.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY rceil "⌉"> <!-- RIGHT CEILING -->
|
||||||
|
<!ENTITY rfloor "⌋"> <!-- RIGHT FLOOR -->
|
||||||
|
<!ENTITY rpargt ""> <!-- -->
|
||||||
|
<!ENTITY urcorn "⌝"> <!-- TOP RIGHT CORNER -->
|
||||||
|
<!ENTITY drcorn "⌟"> <!-- BOTTOM RIGHT CORNER -->
|
||||||
|
<!ENTITY lceil "⌈"> <!-- LEFT CEILING -->
|
||||||
|
<!ENTITY lfloor "⌊"> <!-- LEFT FLOOR -->
|
||||||
|
<!-- lpargt Unknown unicode character -->
|
||||||
|
<!ENTITY ulcorn "⌜"> <!-- TOP LEFT CORNER -->
|
||||||
|
<!ENTITY dlcorn "⌞"> <!-- BOTTOM LEFT CORNER -->
|
|
@ -0,0 +1,66 @@
|
||||||
|
<!-- iso-amsn.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz
|
||||||
|
With additional derivations from
|
||||||
|
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||||
|
|
||||||
|
<!ENTITY gnap ""> <!-- -->
|
||||||
|
<!ENTITY gne "≩"> <!-- -->
|
||||||
|
<!ENTITY gnE "≩"> <!-- -->
|
||||||
|
<!ENTITY gnsim "⋧"> <!-- GREATER-THAN BUT NOT EQUIVALENT TO -->
|
||||||
|
<!ENTITY gvnE "≩"> <!-- GREATER-THAN BUT NOT EQUAL TO -->
|
||||||
|
<!ENTITY lnap ""> <!-- -->
|
||||||
|
<!ENTITY lnE "≨"> <!-- -->
|
||||||
|
<!ENTITY lne "≨"> <!-- -->
|
||||||
|
<!ENTITY lnsim "⋦"> <!-- -->
|
||||||
|
<!ENTITY lvnE "≨"> <!-- LESS-THAN BUT NOT EQUAL TO -->
|
||||||
|
<!ENTITY nap "≉"> <!-- NOT ALMOST EQUAL TO -->
|
||||||
|
<!ENTITY ncong "≇"> <!-- NEITHER APPROXIMATELY NOR ACTUALLY EQUAL TO -->
|
||||||
|
<!ENTITY nequiv "≢"> <!-- NOT IDENTICAL TO -->
|
||||||
|
<!ENTITY ngE "≱"> <!-- -->
|
||||||
|
<!ENTITY nge "≱"> <!-- NEITHER GREATER-THAN NOR EQUAL TO -->
|
||||||
|
<!ENTITY nges "≱"> <!-- -->
|
||||||
|
<!ENTITY ngt "≯"> <!-- NOT GREATER-THAN -->
|
||||||
|
<!ENTITY nle "≰"> <!-- NEITHER LESS-THAN NOR EQUAL TO -->
|
||||||
|
<!ENTITY nlE "≰"> <!-- -->
|
||||||
|
<!ENTITY nles "≰"> <!-- -->
|
||||||
|
<!ENTITY nlt "≮"> <!-- NOT LESS-THAN -->
|
||||||
|
<!ENTITY nltri "⋪"> <!-- NOT NORMAL SUBGROUP OF -->
|
||||||
|
<!ENTITY nltrie "⋬"> <!-- NOT NORMAL SUBGROUP OF OR EQUAL TO -->
|
||||||
|
<!ENTITY nmid "∤"> <!-- DOES NOT DIVIDE -->
|
||||||
|
<!ENTITY npar "∦"> <!-- NOT PARALLEL TO -->
|
||||||
|
<!ENTITY npr "⊀"> <!-- DOES NOT PRECEDE -->
|
||||||
|
<!ENTITY npre "⋠"> <!-- DOES NOT PRECEDE OR EQUAL -->
|
||||||
|
<!ENTITY nrtri "⋫"> <!-- DOES NOT CONTAIN AS NORMAL SUBGROUP -->
|
||||||
|
<!ENTITY nrtrie "⋭"> <!-- DOES NOT CONTAIN AS NORMAL SUBGROUP OR EQUAL -->
|
||||||
|
<!ENTITY nsc "⊁"> <!-- DOES NOT SUCCEED -->
|
||||||
|
<!ENTITY nsce "⋡"> <!-- DOES NOT SUCCEED OR EQUAL -->
|
||||||
|
<!ENTITY nsim "≁"> <!-- -->
|
||||||
|
<!ENTITY nsime "≄"> <!-- -->
|
||||||
|
<!ENTITY nsmid ""> <!-- -->
|
||||||
|
<!ENTITY nspar "∦"> <!-- NOT PARALLEL TO -->
|
||||||
|
<!ENTITY nsub "⊄"> <!-- NOT A SUBSET OF -->
|
||||||
|
<!ENTITY nsube "⊈"> <!-- -->
|
||||||
|
<!ENTITY nsubE "⊈"> <!-- -->
|
||||||
|
<!ENTITY nsup "⊅"> <!-- NOT A SUPERSET OF -->
|
||||||
|
<!ENTITY nsupE "⊉"> <!-- -->
|
||||||
|
<!ENTITY nsupe "⊉"> <!-- -->
|
||||||
|
<!ENTITY nvdash "⊬"> <!-- DOES NOT PROVE -->
|
||||||
|
<!ENTITY nvDash "⊭"> <!-- NOT TRUE -->
|
||||||
|
<!ENTITY nVDash "⊯"> <!-- NEGATED DOUBLE VERTICAL BAR DOUBLE RIGHT TURNSTILE -->
|
||||||
|
<!ENTITY nVdash "⊮"> <!-- DOES NOT FORCE -->
|
||||||
|
<!ENTITY prnap "⋨"> <!-- -->
|
||||||
|
<!ENTITY prnE ""> <!-- -->
|
||||||
|
<!ENTITY prnsim "⋨"> <!-- -->
|
||||||
|
<!ENTITY scnap "⋩"> <!-- -->
|
||||||
|
<!ENTITY scnE ""> <!-- -->
|
||||||
|
<!ENTITY scnsim "⋩"> <!-- -->
|
||||||
|
<!ENTITY subne "⊊"> <!-- -->
|
||||||
|
<!ENTITY subnE "⊊"> <!-- SUBSET OF WITH NOT EQUAL TO -->
|
||||||
|
<!ENTITY supne "⊋"> <!-- -->
|
||||||
|
<!ENTITY supnE "⊋"> <!-- -->
|
||||||
|
<!ENTITY vsubnE ""> <!-- -->
|
||||||
|
<!ENTITY vsubne "⊊"> <!-- SUBSET OF WITH NOT EQUAL TO -->
|
||||||
|
<!ENTITY vsupne "⊋"> <!-- SUPERSET OF WITH NOT EQUAL TO -->
|
||||||
|
<!ENTITY vsupnE "⊋"> <!-- SUPERSET OF WITH NOT EQUAL TO -->
|
|
@ -0,0 +1,26 @@
|
||||||
|
<!-- iso-amso.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz
|
||||||
|
With additional derivations from
|
||||||
|
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||||
|
|
||||||
|
<!ENTITY ang "∠"> <!-- ANGLE -->
|
||||||
|
<!ENTITY angmsd "∡"> <!-- MEASURED ANGLE -->
|
||||||
|
<!ENTITY beth "ℶ"> <!-- BET SYMBOL -->
|
||||||
|
<!ENTITY bprime "‵"> <!-- REVERSED PRIME -->
|
||||||
|
<!ENTITY comp "∁"> <!-- COMPLEMENT -->
|
||||||
|
<!ENTITY daleth "ℸ"> <!-- DALET SYMBOL -->
|
||||||
|
<!ENTITY ell "ℓ"> <!-- SCRIPT SMALL L -->
|
||||||
|
<!ENTITY empty "∅"> <!-- -->
|
||||||
|
<!ENTITY gimel "ℷ"> <!-- GIMEL SYMBOL -->
|
||||||
|
<!ENTITY image "ℑ"> <!-- BLACK-LETTER CAPITAL I -->
|
||||||
|
<!ENTITY inodot "ı"> <!-- LATIN SMALL LETTER DOTLESS I -->
|
||||||
|
<!-- jnodot Unknown unicode character -->
|
||||||
|
<!ENTITY nexist "∄"> <!-- THERE DOES NOT EXIST -->
|
||||||
|
<!ENTITY oS "Ⓢ"> <!-- CIRCLED LATIN CAPITAL LETTER S -->
|
||||||
|
<!ENTITY planck "ℏ"> <!-- PLANCK CONSTANT OVER TWO PI -->
|
||||||
|
<!ENTITY real "ℜ"> <!-- BLACK-LETTER CAPITAL R -->
|
||||||
|
<!ENTITY sbsol "﹨"> <!-- SMALL REVERSE SOLIDUS -->
|
||||||
|
<!ENTITY vprime "′"> <!-- PRIME -->
|
||||||
|
<!ENTITY weierp "℘"> <!-- SCRIPT CAPITAL P -->
|
|
@ -0,0 +1,91 @@
|
||||||
|
<!-- iso-amsr.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz.
|
||||||
|
With additional derivations from
|
||||||
|
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||||
|
|
||||||
|
<!ENTITY ape "≊"> <!-- -->
|
||||||
|
<!ENTITY asymp "≍"> <!-- EQUIVALENT TO -->
|
||||||
|
<!ENTITY bcong "≌"> <!-- ALL EQUAL TO -->
|
||||||
|
<!ENTITY bepsi "∍"> <!-- SMALL CONTAINS AS MEMBER -->
|
||||||
|
<!ENTITY bowtie "⋈"> <!-- -->
|
||||||
|
<!ENTITY bsim "∽"> <!-- -->
|
||||||
|
<!ENTITY bsime "⋍"> <!-- -->
|
||||||
|
<!ENTITY bump "≎"> <!-- -->
|
||||||
|
<!ENTITY bumpe "≏"> <!-- -->
|
||||||
|
<!ENTITY cire "≗"> <!-- -->
|
||||||
|
<!ENTITY colone "≔"> <!-- -->
|
||||||
|
<!ENTITY cuepr "⋞"> <!-- -->
|
||||||
|
<!ENTITY cuesc "⋟"> <!-- -->
|
||||||
|
<!ENTITY cupre "≼"> <!-- -->
|
||||||
|
<!ENTITY dashv "⊣"> <!-- -->
|
||||||
|
<!ENTITY ecir "≖"> <!-- -->
|
||||||
|
<!ENTITY ecolon "≕"> <!-- -->
|
||||||
|
<!ENTITY eDot "≑"> <!-- -->
|
||||||
|
<!ENTITY esdot "≐"> <!-- -->
|
||||||
|
<!ENTITY efDot "≒"> <!-- -->
|
||||||
|
<!ENTITY egs "⋝"> <!-- -->
|
||||||
|
<!ENTITY els "⋜"> <!-- -->
|
||||||
|
<!ENTITY erDot "≓"> <!-- -->
|
||||||
|
<!ENTITY fork "⋔"> <!-- -->
|
||||||
|
<!ENTITY frown "⌢"> <!-- -->
|
||||||
|
<!ENTITY gap "≳"> <!-- GREATER-THAN OR EQUIVALENT TO -->
|
||||||
|
<!ENTITY gsdot "⋗"> <!-- -->
|
||||||
|
<!ENTITY gE "≧"> <!-- -->
|
||||||
|
<!ENTITY gel "⋛"> <!-- -->
|
||||||
|
<!ENTITY gEl "⋛"> <!-- -->
|
||||||
|
<!ENTITY ges "≥"> <!-- GREATER-THAN OR EQUAL TO -->
|
||||||
|
<!ENTITY Gg "⋙"> <!-- VERY MUCH GREATER-THAN -->
|
||||||
|
<!ENTITY gl "≷"> <!-- -->
|
||||||
|
<!ENTITY gsim "≳"> <!-- GREATER-THAN OR EQUIVALENT TO -->
|
||||||
|
<!ENTITY Gt "≫"> <!-- MUCH GREATER-THAN -->
|
||||||
|
<!ENTITY lap "≲"> <!-- LESS-THAN OR EQUIVALENT TO -->
|
||||||
|
<!ENTITY ldot "⋖"> <!-- -->
|
||||||
|
<!ENTITY lE "≦"> <!-- -->
|
||||||
|
<!ENTITY lEg "⋚"> <!-- -->
|
||||||
|
<!ENTITY leg "⋚"> <!-- -->
|
||||||
|
<!ENTITY les "≤"> <!-- LESS-THAN OR EQUAL TO -->
|
||||||
|
<!ENTITY lg "≶"> <!-- LESS-THAN OR GREATER-THAN -->
|
||||||
|
<!ENTITY Ll "⋘"> <!-- -->
|
||||||
|
<!ENTITY lsim "≲"> <!-- LESS-THAN OR EQUIVALENT TO -->
|
||||||
|
<!ENTITY Lt "≪"> <!-- MUCH LESS-THAN -->
|
||||||
|
<!ENTITY ltrie "⊴"> <!-- -->
|
||||||
|
<!ENTITY mid "∣"> <!-- -->
|
||||||
|
<!ENTITY models "⊧"> <!-- MODELS -->
|
||||||
|
<!ENTITY pr "≺"> <!-- -->
|
||||||
|
<!ENTITY prap "≾"> <!-- -->
|
||||||
|
<!ENTITY pre "≼"> <!-- -->
|
||||||
|
<!ENTITY prsim "≾"> <!-- -->
|
||||||
|
<!ENTITY rtrie "⊵"> <!-- -->
|
||||||
|
<!ENTITY samalg "∐"> <!-- -->
|
||||||
|
<!ENTITY sc "≻"> <!-- -->
|
||||||
|
<!ENTITY scap "≿"> <!-- -->
|
||||||
|
<!ENTITY sccue "≽"> <!-- -->
|
||||||
|
<!ENTITY sce "≽"> <!-- -->
|
||||||
|
<!ENTITY scsim "≿"> <!-- -->
|
||||||
|
<!ENTITY sfrown "⌢"> <!-- FROWN -->
|
||||||
|
<!ENTITY smid ""> <!-- -->
|
||||||
|
<!ENTITY smile "⌣"> <!-- -->
|
||||||
|
<!ENTITY spar "∥"> <!-- PARALLEL TO -->
|
||||||
|
<!ENTITY sqsub "⊏"> <!-- -->
|
||||||
|
<!ENTITY sqsube "⊑"> <!-- -->
|
||||||
|
<!ENTITY sqsup "⊐"> <!-- -->
|
||||||
|
<!ENTITY sqsupe "⊒"> <!-- -->
|
||||||
|
<!ENTITY ssmile "⌣"> <!-- SMILE -->
|
||||||
|
<!ENTITY Sub "⋐"> <!-- -->
|
||||||
|
<!ENTITY subE "⊆"> <!-- -->
|
||||||
|
<!ENTITY Sup "⋑"> <!-- -->
|
||||||
|
<!ENTITY supE "⊇"> <!-- -->
|
||||||
|
<!ENTITY thkap "≈"> <!-- ALMOST EQUAL TO -->
|
||||||
|
<!ENTITY thksim "∼"> <!-- TILDE OPERATOR -->
|
||||||
|
<!ENTITY trie "≜"> <!-- -->
|
||||||
|
<!ENTITY twixt "≬"> <!-- BETWEEN -->
|
||||||
|
<!ENTITY vdash "⊢"> <!-- -->
|
||||||
|
<!ENTITY Vdash "⊩"> <!-- -->
|
||||||
|
<!ENTITY vDash "⊨"> <!-- -->
|
||||||
|
<!ENTITY veebar "⊻"> <!-- -->
|
||||||
|
<!ENTITY vltri "⊲"> <!-- -->
|
||||||
|
<!ENTITY vprop "∝"> <!-- -->
|
||||||
|
<!ENTITY vrtri "⊳"> <!-- -->
|
||||||
|
<!ENTITY Vvdash "⊪"> <!-- -->
|
|
@ -0,0 +1,45 @@
|
||||||
|
<!-- iso-box.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY boxh "─"> <!-- BOX DRAWINGS LIGHT HORIZONTAL -->
|
||||||
|
<!ENTITY boxv "│"> <!-- BOX DRAWINGS LIGHT VERTICAL -->
|
||||||
|
<!ENTITY boxur "└"> <!-- BOX DRAWINGS LIGHT UP AND RIGHT -->
|
||||||
|
<!ENTITY boxul "┘"> <!-- BOX DRAWINGS LIGHT UP AND LEFT -->
|
||||||
|
<!ENTITY boxdl "┐"> <!-- BOX DRAWINGS LIGHT DOWN AND LEFT -->
|
||||||
|
<!ENTITY boxdr "┌"> <!-- BOX DRAWINGS LIGHT DOWN AND RIGHT -->
|
||||||
|
<!ENTITY boxvr "├"> <!-- BOX DRAWINGS LIGHT VERTICAL AND RIGHT -->
|
||||||
|
<!ENTITY boxhu "┴"> <!-- BOX DRAWINGS LIGHT UP AND HORIZONTAL -->
|
||||||
|
<!ENTITY boxvl "┤"> <!-- BOX DRAWINGS LIGHT VERTICAL AND LEFT -->
|
||||||
|
<!ENTITY boxhd "┬"> <!-- BOX DRAWINGS LIGHT DOWN AND HORIZONTAL -->
|
||||||
|
<!ENTITY boxvh "┼"> <!-- BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL -->
|
||||||
|
<!ENTITY boxvR "╞"> <!-- BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE -->
|
||||||
|
<!ENTITY boxhU "╧"> <!-- BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE -->
|
||||||
|
<!ENTITY boxvL "╡"> <!-- BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE -->
|
||||||
|
<!ENTITY boxhD "╤"> <!-- BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE -->
|
||||||
|
<!ENTITY boxvH "╪"> <!-- BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE -->
|
||||||
|
<!ENTITY boxH "═"> <!-- BOX DRAWINGS DOUBLE HORIZONTAL -->
|
||||||
|
<!ENTITY boxV "║"> <!-- BOX DRAWINGS DOUBLE VERTICAL -->
|
||||||
|
<!ENTITY boxUR "╘"> <!-- BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE -->
|
||||||
|
<!ENTITY boxUL "╛"> <!-- BOX DRAWINGS UP SINGLE AND LEFT DOUBLE -->
|
||||||
|
<!ENTITY boxDL "╕"> <!-- BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE -->
|
||||||
|
<!ENTITY boxDR "╒"> <!-- BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE -->
|
||||||
|
<!ENTITY boxVR "╟"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE -->
|
||||||
|
<!ENTITY boxHU "╨"> <!-- BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE -->
|
||||||
|
<!ENTITY boxVL "╢"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE -->
|
||||||
|
<!ENTITY boxHD "╥"> <!-- BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE -->
|
||||||
|
<!ENTITY boxVH "╫"> <!-- BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE -->
|
||||||
|
<!ENTITY boxVr "╠"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND RIGHT -->
|
||||||
|
<!ENTITY boxHu "╩"> <!-- BOX DRAWINGS DOUBLE UP AND HORIZONTAL -->
|
||||||
|
<!ENTITY boxVl "╣"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND LEFT -->
|
||||||
|
<!ENTITY boxHd "╦"> <!-- BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL -->
|
||||||
|
<!ENTITY boxVh "╬"> <!-- BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL -->
|
||||||
|
<!ENTITY boxuR "╙"> <!-- BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE -->
|
||||||
|
<!ENTITY boxUl "╜"> <!-- BOX DRAWINGS UP DOUBLE AND LEFT SINGLE -->
|
||||||
|
<!ENTITY boxdL "╖"> <!-- BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE -->
|
||||||
|
<!ENTITY boxDr "╓"> <!-- BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE -->
|
||||||
|
<!ENTITY boxUr "╚"> <!-- BOX DRAWINGS DOUBLE UP AND RIGHT -->
|
||||||
|
<!ENTITY boxuL "╝"> <!-- BOX DRAWINGS DOUBLE UP AND LEFT -->
|
||||||
|
<!ENTITY boxDl "╗"> <!-- BOX DRAWINGS DOUBLE DOWN AND LEFT -->
|
||||||
|
<!ENTITY boxdR "╔"> <!-- BOX DRAWINGS DOUBLE DOWN AND RIGHT -->
|
|
@ -0,0 +1,72 @@
|
||||||
|
<!-- iso-cyr1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY acy "а"> <!-- CYRILLIC SMALL LETTER A -->
|
||||||
|
<!ENTITY Acy "А"> <!-- CYRILLIC CAPITAL LETTER A -->
|
||||||
|
<!ENTITY bcy "б"> <!-- CYRILLIC SMALL LETTER BE -->
|
||||||
|
<!ENTITY Bcy "Б"> <!-- CYRILLIC CAPITAL LETTER BE -->
|
||||||
|
<!ENTITY vcy "в"> <!-- CYRILLIC SMALL LETTER VE -->
|
||||||
|
<!ENTITY Vcy "В"> <!-- CYRILLIC CAPITAL LETTER VE -->
|
||||||
|
<!ENTITY gcy "г"> <!-- CYRILLIC SMALL LETTER GHE -->
|
||||||
|
<!ENTITY Gcy "Г"> <!-- CYRILLIC CAPITAL LETTER GHE -->
|
||||||
|
<!ENTITY dcy "д"> <!-- CYRILLIC SMALL LETTER DE -->
|
||||||
|
<!ENTITY Dcy "Д"> <!-- CYRILLIC CAPITAL LETTER DE -->
|
||||||
|
<!ENTITY iecy "е"> <!-- CYRILLIC SMALL LETTER IE -->
|
||||||
|
<!ENTITY IEcy "Е"> <!-- CYRILLIC CAPITAL LETTER IE -->
|
||||||
|
<!ENTITY iocy "ё"> <!-- CYRILLIC SMALL LETTER IO -->
|
||||||
|
<!ENTITY IOcy "Ё"> <!-- CYRILLIC CAPITAL LETTER IO -->
|
||||||
|
<!ENTITY zhcy "ж"> <!-- CYRILLIC SMALL LETTER ZHE -->
|
||||||
|
<!ENTITY ZHcy "Ж"> <!-- CYRILLIC CAPITAL LETTER ZHE -->
|
||||||
|
<!ENTITY zcy "з"> <!-- CYRILLIC SMALL LETTER ZE -->
|
||||||
|
<!ENTITY Zcy "З"> <!-- CYRILLIC CAPITAL LETTER ZE -->
|
||||||
|
<!ENTITY icy "и"> <!-- CYRILLIC SMALL LETTER I -->
|
||||||
|
<!ENTITY Icy "И"> <!-- CYRILLIC CAPITAL LETTER I -->
|
||||||
|
<!ENTITY jcy "й"> <!-- CYRILLIC SMALL LETTER SHORT I -->
|
||||||
|
<!ENTITY Jcy "Й"> <!-- CYRILLIC CAPITAL LETTER SHORT I -->
|
||||||
|
<!ENTITY kcy "к"> <!-- CYRILLIC SMALL LETTER KA -->
|
||||||
|
<!ENTITY Kcy "К"> <!-- CYRILLIC CAPITAL LETTER KA -->
|
||||||
|
<!ENTITY lcy "л"> <!-- CYRILLIC SMALL LETTER EL -->
|
||||||
|
<!ENTITY Lcy "Л"> <!-- CYRILLIC CAPITAL LETTER EL -->
|
||||||
|
<!ENTITY mcy "м"> <!-- CYRILLIC SMALL LETTER EM -->
|
||||||
|
<!ENTITY Mcy "М"> <!-- CYRILLIC CAPITAL LETTER EM -->
|
||||||
|
<!ENTITY ncy "н"> <!-- CYRILLIC SMALL LETTER EN -->
|
||||||
|
<!ENTITY Ncy "Н"> <!-- CYRILLIC CAPITAL LETTER EN -->
|
||||||
|
<!ENTITY ocy "о"> <!-- CYRILLIC SMALL LETTER O -->
|
||||||
|
<!ENTITY Ocy "О"> <!-- CYRILLIC CAPITAL LETTER O -->
|
||||||
|
<!ENTITY pcy "п"> <!-- CYRILLIC SMALL LETTER PE -->
|
||||||
|
<!ENTITY Pcy "П"> <!-- CYRILLIC CAPITAL LETTER PE -->
|
||||||
|
<!ENTITY rcy "р"> <!-- CYRILLIC SMALL LETTER ER -->
|
||||||
|
<!ENTITY Rcy "Р"> <!-- CYRILLIC CAPITAL LETTER ER -->
|
||||||
|
<!ENTITY scy "с"> <!-- CYRILLIC SMALL LETTER ES -->
|
||||||
|
<!ENTITY Scy "С"> <!-- CYRILLIC CAPITAL LETTER ES -->
|
||||||
|
<!ENTITY tcy "т"> <!-- CYRILLIC SMALL LETTER TE -->
|
||||||
|
<!ENTITY Tcy "Т"> <!-- CYRILLIC CAPITAL LETTER TE -->
|
||||||
|
<!ENTITY ucy "у"> <!-- CYRILLIC SMALL LETTER U -->
|
||||||
|
<!ENTITY Ucy "У"> <!-- CYRILLIC CAPITAL LETTER U -->
|
||||||
|
<!ENTITY fcy "ф"> <!-- CYRILLIC SMALL LETTER EF -->
|
||||||
|
<!ENTITY Fcy "Ф"> <!-- CYRILLIC CAPITAL LETTER EF -->
|
||||||
|
<!ENTITY khcy "х"> <!-- CYRILLIC SMALL LETTER HA -->
|
||||||
|
<!ENTITY KHcy "Х"> <!-- CYRILLIC CAPITAL LETTER HA -->
|
||||||
|
<!ENTITY tscy "ц"> <!-- CYRILLIC SMALL LETTER TSE -->
|
||||||
|
<!ENTITY TScy "Ц"> <!-- CYRILLIC CAPITAL LETTER TSE -->
|
||||||
|
<!ENTITY chcy "ч"> <!-- CYRILLIC SMALL LETTER CHE -->
|
||||||
|
<!ENTITY CHcy "Ч"> <!-- CYRILLIC CAPITAL LETTER CHE -->
|
||||||
|
<!ENTITY shcy "ш"> <!-- CYRILLIC SMALL LETTER SHA -->
|
||||||
|
<!ENTITY SHcy "Ш"> <!-- CYRILLIC CAPITAL LETTER SHA -->
|
||||||
|
<!ENTITY shchcy "щ"> <!-- CYRILLIC SMALL LETTER SHCHA -->
|
||||||
|
<!ENTITY SHCHcy "Щ"> <!-- CYRILLIC CAPITAL LETTER SHCHA -->
|
||||||
|
<!ENTITY hardcy "ъ"> <!-- CYRILLIC SMALL LETTER HARD SIGN -->
|
||||||
|
<!ENTITY HARDcy "Ъ"> <!-- CYRILLIC CAPITAL LETTER HARD SIGN -->
|
||||||
|
<!ENTITY ycy "ы"> <!-- CYRILLIC SMALL LETTER YERU -->
|
||||||
|
<!ENTITY Ycy "Ы"> <!-- CYRILLIC CAPITAL LETTER YERU -->
|
||||||
|
<!ENTITY softcy "ь"> <!-- CYRILLIC SMALL LETTER SOFT SIGN -->
|
||||||
|
<!ENTITY SOFTcy "Ь"> <!-- CYRILLIC CAPITAL LETTER SOFT SIGN -->
|
||||||
|
<!ENTITY ecy "э"> <!-- CYRILLIC SMALL LETTER E -->
|
||||||
|
<!ENTITY Ecy "Э"> <!-- CYRILLIC CAPITAL LETTER E -->
|
||||||
|
<!ENTITY yucy "ю"> <!-- CYRILLIC SMALL LETTER YU -->
|
||||||
|
<!ENTITY YUcy "Ю"> <!-- CYRILLIC CAPITAL LETTER YU -->
|
||||||
|
<!ENTITY yacy "я"> <!-- CYRILLIC SMALL LETTER YA -->
|
||||||
|
<!ENTITY YAcy "Я"> <!-- CYRILLIC CAPITAL LETTER YA -->
|
||||||
|
<!ENTITY numero "№"> <!-- NUMERO SIGN -->
|
|
@ -0,0 +1,31 @@
|
||||||
|
<!-- iso-cyr2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY djcy "ђ"> <!-- CYRILLIC SMALL LETTER DJE -->
|
||||||
|
<!ENTITY DJcy "Ђ"> <!-- CYRILLIC CAPITAL LETTER DJE -->
|
||||||
|
<!ENTITY gjcy "ѓ"> <!-- CYRILLIC SMALL LETTER GJE -->
|
||||||
|
<!ENTITY GJcy "Ѓ"> <!-- CYRILLIC CAPITAL LETTER GJE -->
|
||||||
|
<!ENTITY jukcy "є"> <!-- CYRILLIC SMALL LETTER UKRAINIAN IE -->
|
||||||
|
<!ENTITY Jukcy "Є"> <!-- CYRILLIC CAPITAL LETTER UKRAINIAN IE -->
|
||||||
|
<!ENTITY dscy "ѕ"> <!-- CYRILLIC SMALL LETTER DZE -->
|
||||||
|
<!ENTITY DScy "Ѕ"> <!-- CYRILLIC CAPITAL LETTER DZE -->
|
||||||
|
<!ENTITY iukcy "і"> <!-- CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -->
|
||||||
|
<!ENTITY Iukcy "І"> <!-- CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -->
|
||||||
|
<!ENTITY yicy "ї"> <!-- CYRILLIC SMALL LETTER YI -->
|
||||||
|
<!ENTITY YIcy "Ї"> <!-- CYRILLIC CAPITAL LETTER YI -->
|
||||||
|
<!ENTITY jsercy "ј"> <!-- CYRILLIC SMALL LETTER JE -->
|
||||||
|
<!ENTITY Jsercy "Ј"> <!-- CYRILLIC CAPITAL LETTER JE -->
|
||||||
|
<!ENTITY ljcy "љ"> <!-- CYRILLIC SMALL LETTER LJE -->
|
||||||
|
<!ENTITY LJcy "Љ"> <!-- CYRILLIC CAPITAL LETTER LJE -->
|
||||||
|
<!ENTITY njcy "њ"> <!-- CYRILLIC SMALL LETTER NJE -->
|
||||||
|
<!ENTITY NJcy "Њ"> <!-- CYRILLIC CAPITAL LETTER NJE -->
|
||||||
|
<!ENTITY tshcy "ћ"> <!-- CYRILLIC SMALL LETTER TSHE -->
|
||||||
|
<!ENTITY TSHcy "Ћ"> <!-- CYRILLIC CAPITAL LETTER TSHE -->
|
||||||
|
<!ENTITY kjcy "ќ"> <!-- CYRILLIC SMALL LETTER KJE -->
|
||||||
|
<!ENTITY KJcy "Ќ"> <!-- CYRILLIC CAPITAL LETTER KJE -->
|
||||||
|
<!ENTITY ubrcy "ў"> <!-- CYRILLIC SMALL LETTER SHORT U -->
|
||||||
|
<!ENTITY Ubrcy "Ў"> <!-- CYRILLIC CAPITAL LETTER SHORT U -->
|
||||||
|
<!ENTITY dzcy "џ"> <!-- CYRILLIC SMALL LETTER DZHE -->
|
||||||
|
<!ENTITY DZcy "Џ"> <!-- CYRILLIC CAPITAL LETTER DZHE -->
|
|
@ -0,0 +1,19 @@
|
||||||
|
<!-- iso-dia.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY acute "´"> <!-- ACUTE ACCENT -->
|
||||||
|
<!ENTITY breve "˘"> <!-- BREVE -->
|
||||||
|
<!ENTITY caron "ˇ"> <!-- CARON -->
|
||||||
|
<!ENTITY cedil "¸"> <!-- CEDILLA -->
|
||||||
|
<!ENTITY circ "^"> <!-- RING OPERATOR -->
|
||||||
|
<!ENTITY dblac "˝"> <!-- DOUBLE ACUTE ACCENT -->
|
||||||
|
<!ENTITY die "¨"> <!-- -->
|
||||||
|
<!ENTITY dot "˙"> <!-- DOT ABOVE -->
|
||||||
|
<!ENTITY grave "`"> <!-- GRAVE ACCENT -->
|
||||||
|
<!ENTITY macr "¯"> <!-- MACRON -->
|
||||||
|
<!ENTITY ogon "˛"> <!-- OGONEK -->
|
||||||
|
<!ENTITY ring "˚"> <!-- RING ABOVE -->
|
||||||
|
<!ENTITY tilde "˜"> <!-- TILDE -->
|
||||||
|
<!ENTITY uml "¨"> <!-- -->
|
|
@ -0,0 +1,54 @@
|
||||||
|
<!-- iso-grk1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY agr "α"> <!-- -->
|
||||||
|
<!ENTITY Agr "Α"> <!-- GREEK CAPITAL LETTER ALPHA -->
|
||||||
|
<!ENTITY bgr "β"> <!-- GREEK SMALL LETTER BETA -->
|
||||||
|
<!ENTITY Bgr "Β"> <!-- GREEK CAPITAL LETTER BETA -->
|
||||||
|
<!ENTITY ggr "γ"> <!-- GREEK SMALL LETTER GAMMA -->
|
||||||
|
<!ENTITY Ggr "Γ"> <!-- GREEK CAPITAL LETTER GAMMA -->
|
||||||
|
<!ENTITY dgr "δ"> <!-- GREEK SMALL LETTER DELTA -->
|
||||||
|
<!ENTITY Dgr "Δ"> <!-- GREEK CAPITAL LETTER DELTA -->
|
||||||
|
<!ENTITY egr "ε"> <!-- -->
|
||||||
|
<!ENTITY Egr "Ε"> <!-- GREEK CAPITAL LETTER EPSILON -->
|
||||||
|
<!ENTITY zgr "ζ"> <!-- GREEK SMALL LETTER ZETA -->
|
||||||
|
<!ENTITY Zgr "Ζ"> <!-- GREEK CAPITAL LETTER ZETA -->
|
||||||
|
<!ENTITY eegr "η"> <!-- GREEK SMALL LETTER ETA -->
|
||||||
|
<!ENTITY EEgr "Η"> <!-- GREEK CAPITAL LETTER ETA -->
|
||||||
|
<!ENTITY thgr "θ"> <!-- -->
|
||||||
|
<!ENTITY THgr "Θ"> <!-- GREEK CAPITAL LETTER THETA -->
|
||||||
|
<!ENTITY igr "ι"> <!-- GREEK SMALL LETTER IOTA -->
|
||||||
|
<!ENTITY Igr "Ι"> <!-- GREEK CAPITAL LETTER IOTA -->
|
||||||
|
<!ENTITY kgr "κ"> <!-- GREEK SMALL LETTER KAPPA -->
|
||||||
|
<!ENTITY Kgr "Κ"> <!-- GREEK CAPITAL LETTER KAPPA -->
|
||||||
|
<!ENTITY lgr "λ"> <!-- GREEK SMALL LETTER LAMDA -->
|
||||||
|
<!ENTITY Lgr "Λ"> <!-- GREEK CAPITAL LETTER LAMDA -->
|
||||||
|
<!ENTITY mgr "μ"> <!-- GREEK SMALL LETTER MU -->
|
||||||
|
<!ENTITY Mgr "Μ"> <!-- GREEK CAPITAL LETTER MU -->
|
||||||
|
<!ENTITY ngr "ν"> <!-- GREEK SMALL LETTER NU -->
|
||||||
|
<!ENTITY Ngr "Ν"> <!-- GREEK CAPITAL LETTER NU -->
|
||||||
|
<!ENTITY xgr "ξ"> <!-- GREEK SMALL LETTER XI -->
|
||||||
|
<!ENTITY Xgr "Ξ"> <!-- GREEK CAPITAL LETTER XI -->
|
||||||
|
<!ENTITY ogr "ο"> <!-- GREEK SMALL LETTER OMICRON -->
|
||||||
|
<!ENTITY Ogr "Ο"> <!-- GREEK CAPITAL LETTER OMICRON -->
|
||||||
|
<!ENTITY pgr "π"> <!-- GREEK SMALL LETTER PI -->
|
||||||
|
<!ENTITY Pgr "Π"> <!-- GREEK CAPITAL LETTER PI -->
|
||||||
|
<!ENTITY rgr "ρ"> <!-- GREEK SMALL LETTER RHO -->
|
||||||
|
<!ENTITY Rgr "Ρ"> <!-- GREEK CAPITAL LETTER RHO -->
|
||||||
|
<!ENTITY sgr "σ"> <!-- GREEK SMALL LETTER SIGMA -->
|
||||||
|
<!ENTITY Sgr "Σ"> <!-- GREEK CAPITAL LETTER SIGMA -->
|
||||||
|
<!ENTITY sfgr "ς"> <!-- -->
|
||||||
|
<!ENTITY tgr "τ"> <!-- GREEK SMALL LETTER TAU -->
|
||||||
|
<!ENTITY Tgr "Τ"> <!-- GREEK CAPITAL LETTER TAU -->
|
||||||
|
<!ENTITY ugr "υ"> <!-- GREEK SMALL LETTER UPSILON -->
|
||||||
|
<!ENTITY Ugr "Υ"> <!-- -->
|
||||||
|
<!ENTITY phgr "φ"> <!-- GREEK SMALL LETTER PHI -->
|
||||||
|
<!ENTITY PHgr "Φ"> <!-- GREEK CAPITAL LETTER PHI -->
|
||||||
|
<!ENTITY khgr "χ"> <!-- GREEK SMALL LETTER CHI -->
|
||||||
|
<!ENTITY KHgr "Χ"> <!-- GREEK CAPITAL LETTER CHI -->
|
||||||
|
<!ENTITY psgr "ψ"> <!-- GREEK SMALL LETTER PSI -->
|
||||||
|
<!ENTITY PSgr "Ψ"> <!-- GREEK CAPITAL LETTER PSI -->
|
||||||
|
<!ENTITY ohgr "ω"> <!-- GREEK SMALL LETTER OMEGA -->
|
||||||
|
<!ENTITY OHgr "Ω"> <!-- GREEK CAPITAL LETTER OMEGA -->
|
|
@ -0,0 +1,25 @@
|
||||||
|
<!-- iso-grk2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY aacgr "ά"> <!-- GREEK SMALL LETTER ALPHA WITH TONOS -->
|
||||||
|
<!ENTITY Aacgr "Ά"> <!-- GREEK CAPITAL LETTER ALPHA WITH TONOS -->
|
||||||
|
<!ENTITY eacgr "έ"> <!-- GREEK SMALL LETTER EPSILON WITH TONOS -->
|
||||||
|
<!ENTITY Eacgr "Έ"> <!-- GREEK CAPITAL LETTER EPSILON WITH TONOS -->
|
||||||
|
<!ENTITY eeacgr "ή"> <!-- GREEK SMALL LETTER ETA WITH TONOS -->
|
||||||
|
<!ENTITY EEacgr "Ή"> <!-- GREEK CAPITAL LETTER ETA WITH TONOS -->
|
||||||
|
<!ENTITY idigr "ϊ"> <!-- GREEK SMALL LETTER IOTA WITH DIALYTIKA -->
|
||||||
|
<!ENTITY Idigr "Ϊ"> <!-- GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -->
|
||||||
|
<!ENTITY iacgr "ί"> <!-- GREEK SMALL LETTER IOTA WITH TONOS -->
|
||||||
|
<!ENTITY Iacgr "Ί"> <!-- GREEK CAPITAL LETTER IOTA WITH TONOS -->
|
||||||
|
<!ENTITY idiagr "ΐ"> <!-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -->
|
||||||
|
<!ENTITY oacgr "ό"> <!-- GREEK SMALL LETTER OMICRON WITH TONOS -->
|
||||||
|
<!ENTITY Oacgr "Ό"> <!-- GREEK CAPITAL LETTER OMICRON WITH TONOS -->
|
||||||
|
<!ENTITY udigr "ϋ"> <!-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA -->
|
||||||
|
<!ENTITY Udigr "Ϋ"> <!-- GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -->
|
||||||
|
<!ENTITY uacgr "ύ"> <!-- GREEK SMALL LETTER UPSILON WITH TONOS -->
|
||||||
|
<!ENTITY Uacgr "Ύ"> <!-- GREEK CAPITAL LETTER UPSILON WITH TONOS -->
|
||||||
|
<!ENTITY udiagr "ΰ"> <!-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -->
|
||||||
|
<!ENTITY ohacgr "ώ"> <!-- GREEK SMALL LETTER OMEGA WITH TONOS -->
|
||||||
|
<!ENTITY OHacgr "Ώ"> <!-- GREEK CAPITAL LETTER OMEGA WITH TONOS -->
|
|
@ -0,0 +1,48 @@
|
||||||
|
<!-- iso-grk3.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY alpha "α"> <!-- -->
|
||||||
|
<!ENTITY beta "β"> <!-- GREEK SMALL LETTER BETA -->
|
||||||
|
<!ENTITY gamma "γ"> <!-- GREEK SMALL LETTER GAMMA -->
|
||||||
|
<!ENTITY Gamma "Γ"> <!-- GREEK CAPITAL LETTER GAMMA -->
|
||||||
|
<!ENTITY gammad "Ϝ"> <!-- GREEK LETTER DIGAMMA -->
|
||||||
|
<!ENTITY delta "δ"> <!-- GREEK SMALL LETTER DELTA -->
|
||||||
|
<!ENTITY Delta "Δ"> <!-- GREEK CAPITAL LETTER DELTA -->
|
||||||
|
<!ENTITY epsi "∊"> <!-- -->
|
||||||
|
<!ENTITY epsiv "ε"> <!-- -->
|
||||||
|
<!ENTITY epsis "∊"> <!-- -->
|
||||||
|
<!ENTITY zeta "ζ"> <!-- GREEK SMALL LETTER ZETA -->
|
||||||
|
<!ENTITY eta "η"> <!-- GREEK SMALL LETTER ETA -->
|
||||||
|
<!ENTITY thetas "θ"> <!-- -->
|
||||||
|
<!ENTITY Theta "Θ"> <!-- GREEK CAPITAL LETTER THETA -->
|
||||||
|
<!ENTITY thetav "ϑ"> <!-- -->
|
||||||
|
<!ENTITY iota "ι"> <!-- GREEK SMALL LETTER IOTA -->
|
||||||
|
<!ENTITY kappa "κ"> <!-- GREEK SMALL LETTER KAPPA -->
|
||||||
|
<!ENTITY kappav "ϰ"> <!-- GREEK KAPPA SYMBOL -->
|
||||||
|
<!ENTITY lambda "λ"> <!-- GREEK SMALL LETTER LAMDA -->
|
||||||
|
<!ENTITY Lambda "Λ"> <!-- GREEK CAPITAL LETTER LAMDA -->
|
||||||
|
<!ENTITY mu "μ"> <!-- GREEK SMALL LETTER MU -->
|
||||||
|
<!ENTITY nu "ν"> <!-- GREEK SMALL LETTER NU -->
|
||||||
|
<!ENTITY xi "ξ"> <!-- GREEK SMALL LETTER XI -->
|
||||||
|
<!ENTITY Xi "Ξ"> <!-- GREEK CAPITAL LETTER XI -->
|
||||||
|
<!ENTITY pi "π"> <!-- GREEK SMALL LETTER PI -->
|
||||||
|
<!ENTITY piv "ϖ"> <!-- GREEK PI SYMBOL -->
|
||||||
|
<!ENTITY Pi "Π"> <!-- GREEK CAPITAL LETTER PI -->
|
||||||
|
<!ENTITY rho "ρ"> <!-- GREEK SMALL LETTER RHO -->
|
||||||
|
<!ENTITY rhov "ϱ"> <!-- GREEK RHO SYMBOL -->
|
||||||
|
<!ENTITY sigma "σ"> <!-- GREEK SMALL LETTER SIGMA -->
|
||||||
|
<!ENTITY Sigma "Σ"> <!-- GREEK CAPITAL LETTER SIGMA -->
|
||||||
|
<!ENTITY sigmav "ς"> <!-- -->
|
||||||
|
<!ENTITY tau "τ"> <!-- GREEK SMALL LETTER TAU -->
|
||||||
|
<!ENTITY upsi "υ"> <!-- GREEK SMALL LETTER UPSILON -->
|
||||||
|
<!ENTITY Upsi "ϒ"> <!-- -->
|
||||||
|
<!ENTITY phis "φ"> <!-- GREEK SMALL LETTER PHI -->
|
||||||
|
<!ENTITY Phi "Φ"> <!-- GREEK CAPITAL LETTER PHI -->
|
||||||
|
<!ENTITY phiv "ϕ"> <!-- GREEK PHI SYMBOL -->
|
||||||
|
<!ENTITY chi "χ"> <!-- GREEK SMALL LETTER CHI -->
|
||||||
|
<!ENTITY psi "ψ"> <!-- GREEK SMALL LETTER PSI -->
|
||||||
|
<!ENTITY Psi "Ψ"> <!-- GREEK CAPITAL LETTER PSI -->
|
||||||
|
<!ENTITY omega "ω"> <!-- GREEK SMALL LETTER OMEGA -->
|
||||||
|
<!ENTITY Omega "Ω"> <!-- GREEK CAPITAL LETTER OMEGA -->
|
|
@ -0,0 +1,48 @@
|
||||||
|
<!-- iso-grk4.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY b.alpha "α"> <!-- -->
|
||||||
|
<!ENTITY b.beta "β"> <!-- GREEK SMALL LETTER BETA -->
|
||||||
|
<!ENTITY b.gamma "γ"> <!-- GREEK SMALL LETTER GAMMA -->
|
||||||
|
<!ENTITY b.Gamma "Γ"> <!-- GREEK CAPITAL LETTER GAMMA -->
|
||||||
|
<!ENTITY b.gammad "Ϝ"> <!-- GREEK LETTER DIGAMMA -->
|
||||||
|
<!ENTITY b.delta "δ"> <!-- GREEK SMALL LETTER DELTA -->
|
||||||
|
<!ENTITY b.Delta "Δ"> <!-- GREEK CAPITAL LETTER DELTA -->
|
||||||
|
<!ENTITY b.epsi "ε"> <!-- -->
|
||||||
|
<!ENTITY b.epsiv "ε"> <!-- -->
|
||||||
|
<!ENTITY b.epsis "ε"> <!-- -->
|
||||||
|
<!ENTITY b.zeta "ζ"> <!-- GREEK SMALL LETTER ZETA -->
|
||||||
|
<!ENTITY b.eta "η"> <!-- GREEK SMALL LETTER ETA -->
|
||||||
|
<!ENTITY b.thetas "θ"> <!-- -->
|
||||||
|
<!ENTITY b.Theta "Θ"> <!-- GREEK CAPITAL LETTER THETA -->
|
||||||
|
<!ENTITY b.thetav "ϑ"> <!-- -->
|
||||||
|
<!ENTITY b.iota "ι"> <!-- GREEK SMALL LETTER IOTA -->
|
||||||
|
<!ENTITY b.kappa "κ"> <!-- GREEK SMALL LETTER KAPPA -->
|
||||||
|
<!ENTITY b.kappav "ϰ"> <!-- GREEK KAPPA SYMBOL -->
|
||||||
|
<!ENTITY b.lambda "λ"> <!-- GREEK SMALL LETTER LAMDA -->
|
||||||
|
<!ENTITY b.Lambda "Λ"> <!-- GREEK CAPITAL LETTER LAMDA -->
|
||||||
|
<!ENTITY b.mu "μ"> <!-- GREEK SMALL LETTER MU -->
|
||||||
|
<!ENTITY b.nu "ν"> <!-- GREEK SMALL LETTER NU -->
|
||||||
|
<!ENTITY b.xi "ξ"> <!-- GREEK SMALL LETTER XI -->
|
||||||
|
<!ENTITY b.Xi "Ξ"> <!-- GREEK CAPITAL LETTER XI -->
|
||||||
|
<!ENTITY b.pi "π"> <!-- GREEK SMALL LETTER PI -->
|
||||||
|
<!ENTITY b.Pi "Π"> <!-- GREEK CAPITAL LETTER PI -->
|
||||||
|
<!ENTITY b.piv "ϖ"> <!-- GREEK PI SYMBOL -->
|
||||||
|
<!ENTITY b.rho "ρ"> <!-- GREEK SMALL LETTER RHO -->
|
||||||
|
<!ENTITY b.rhov "ϱ"> <!-- GREEK RHO SYMBOL -->
|
||||||
|
<!ENTITY b.sigma "σ"> <!-- GREEK SMALL LETTER SIGMA -->
|
||||||
|
<!ENTITY b.Sigma "Σ"> <!-- GREEK CAPITAL LETTER SIGMA -->
|
||||||
|
<!ENTITY b.sigmav "ς"> <!-- -->
|
||||||
|
<!ENTITY b.tau "τ"> <!-- GREEK SMALL LETTER TAU -->
|
||||||
|
<!ENTITY b.upsi "υ"> <!-- GREEK SMALL LETTER UPSILON -->
|
||||||
|
<!ENTITY b.Upsi "ϒ"> <!-- -->
|
||||||
|
<!ENTITY b.phis "φ"> <!-- GREEK SMALL LETTER PHI -->
|
||||||
|
<!ENTITY b.Phi "Φ"> <!-- GREEK CAPITAL LETTER PHI -->
|
||||||
|
<!ENTITY b.phiv "ϕ"> <!-- GREEK PHI SYMBOL -->
|
||||||
|
<!ENTITY b.chi "χ"> <!-- GREEK SMALL LETTER CHI -->
|
||||||
|
<!ENTITY b.psi "ψ"> <!-- GREEK SMALL LETTER PSI -->
|
||||||
|
<!ENTITY b.Psi "Ψ"> <!-- GREEK CAPITAL LETTER PSI -->
|
||||||
|
<!ENTITY b.omega "ω"> <!-- GREEK SMALL LETTER OMEGA -->
|
||||||
|
<!ENTITY b.Omega "Ω"> <!-- GREEK CAPITAL LETTER OMEGA -->
|
|
@ -0,0 +1,67 @@
|
||||||
|
<!-- iso-lat1.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY aacute "á"> <!-- LATIN SMALL LETTER A WITH ACUTE -->
|
||||||
|
<!ENTITY Aacute "Á"> <!-- LATIN CAPITAL LETTER A WITH ACUTE -->
|
||||||
|
<!ENTITY acirc "â"> <!-- LATIN SMALL LETTER A WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Acirc "Â"> <!-- LATIN CAPITAL LETTER A WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY agrave "à"> <!-- LATIN SMALL LETTER A WITH GRAVE -->
|
||||||
|
<!ENTITY Agrave "À"> <!-- LATIN CAPITAL LETTER A WITH GRAVE -->
|
||||||
|
<!ENTITY aring "å"> <!-- LATIN SMALL LETTER A WITH RING ABOVE -->
|
||||||
|
<!ENTITY Aring "Å"> <!-- LATIN CAPITAL LETTER A WITH RING ABOVE -->
|
||||||
|
<!ENTITY atilde "ã"> <!-- LATIN SMALL LETTER A WITH TILDE -->
|
||||||
|
<!ENTITY Atilde "Ã"> <!-- LATIN CAPITAL LETTER A WITH TILDE -->
|
||||||
|
<!ENTITY auml "ä"> <!-- LATIN SMALL LETTER A WITH DIAERESIS -->
|
||||||
|
<!ENTITY Auml "Ä"> <!-- LATIN CAPITAL LETTER A WITH DIAERESIS -->
|
||||||
|
<!ENTITY aelig "æ"> <!-- LATIN SMALL LETTER AE -->
|
||||||
|
<!ENTITY AElig "Æ"> <!-- LATIN CAPITAL LETTER AE -->
|
||||||
|
<!ENTITY ccedil "ç"> <!-- LATIN SMALL LETTER C WITH CEDILLA -->
|
||||||
|
<!ENTITY Ccedil "Ç"> <!-- LATIN CAPITAL LETTER C WITH CEDILLA -->
|
||||||
|
<!ENTITY eth "ð"> <!-- LATIN SMALL LETTER ETH -->
|
||||||
|
<!ENTITY ETH "Ð"> <!-- LATIN CAPITAL LETTER ETH -->
|
||||||
|
<!ENTITY eacute "é"> <!-- LATIN SMALL LETTER E WITH ACUTE -->
|
||||||
|
<!ENTITY Eacute "É"> <!-- LATIN CAPITAL LETTER E WITH ACUTE -->
|
||||||
|
<!ENTITY ecirc "ê"> <!-- LATIN SMALL LETTER E WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Ecirc "Ê"> <!-- LATIN CAPITAL LETTER E WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY egrave "è"> <!-- LATIN SMALL LETTER E WITH GRAVE -->
|
||||||
|
<!ENTITY Egrave "È"> <!-- LATIN CAPITAL LETTER E WITH GRAVE -->
|
||||||
|
<!ENTITY euml "ë"> <!-- LATIN SMALL LETTER E WITH DIAERESIS -->
|
||||||
|
<!ENTITY Euml "Ë"> <!-- LATIN CAPITAL LETTER E WITH DIAERESIS -->
|
||||||
|
<!ENTITY iacute "í"> <!-- LATIN SMALL LETTER I WITH ACUTE -->
|
||||||
|
<!ENTITY Iacute "Í"> <!-- LATIN CAPITAL LETTER I WITH ACUTE -->
|
||||||
|
<!ENTITY icirc "î"> <!-- LATIN SMALL LETTER I WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Icirc "Î"> <!-- LATIN CAPITAL LETTER I WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY igrave "ì"> <!-- LATIN SMALL LETTER I WITH GRAVE -->
|
||||||
|
<!ENTITY Igrave "Ì"> <!-- LATIN CAPITAL LETTER I WITH GRAVE -->
|
||||||
|
<!ENTITY iuml "ï"> <!-- LATIN SMALL LETTER I WITH DIAERESIS -->
|
||||||
|
<!ENTITY Iuml "Ï"> <!-- LATIN CAPITAL LETTER I WITH DIAERESIS -->
|
||||||
|
<!ENTITY ntilde "ñ"> <!-- LATIN SMALL LETTER N WITH TILDE -->
|
||||||
|
<!ENTITY Ntilde "Ñ"> <!-- LATIN CAPITAL LETTER N WITH TILDE -->
|
||||||
|
<!ENTITY oacute "ó"> <!-- LATIN SMALL LETTER O WITH ACUTE -->
|
||||||
|
<!ENTITY Oacute "Ó"> <!-- LATIN CAPITAL LETTER O WITH ACUTE -->
|
||||||
|
<!ENTITY ocirc "ô"> <!-- LATIN SMALL LETTER O WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Ocirc "Ô"> <!-- LATIN CAPITAL LETTER O WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY ograve "ò"> <!-- LATIN SMALL LETTER O WITH GRAVE -->
|
||||||
|
<!ENTITY Ograve "Ò"> <!-- LATIN CAPITAL LETTER O WITH GRAVE -->
|
||||||
|
<!ENTITY oslash "ø"> <!-- CIRCLED DIVISION SLASH -->
|
||||||
|
<!ENTITY Oslash "Ø"> <!-- LATIN CAPITAL LETTER O WITH STROKE -->
|
||||||
|
<!ENTITY otilde "õ"> <!-- LATIN SMALL LETTER O WITH TILDE -->
|
||||||
|
<!ENTITY Otilde "Õ"> <!-- LATIN CAPITAL LETTER O WITH TILDE -->
|
||||||
|
<!ENTITY ouml "ö"> <!-- LATIN SMALL LETTER O WITH DIAERESIS -->
|
||||||
|
<!ENTITY Ouml "Ö"> <!-- LATIN CAPITAL LETTER O WITH DIAERESIS -->
|
||||||
|
<!ENTITY szlig "ß"> <!-- LATIN SMALL LETTER SHARP S -->
|
||||||
|
<!ENTITY thorn "þ"> <!-- LATIN SMALL LETTER THORN -->
|
||||||
|
<!ENTITY THORN "Þ"> <!-- LATIN CAPITAL LETTER THORN -->
|
||||||
|
<!ENTITY uacute "ú"> <!-- LATIN SMALL LETTER U WITH ACUTE -->
|
||||||
|
<!ENTITY Uacute "Ú"> <!-- LATIN CAPITAL LETTER U WITH ACUTE -->
|
||||||
|
<!ENTITY ucirc "û"> <!-- LATIN SMALL LETTER U WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Ucirc "Û"> <!-- LATIN CAPITAL LETTER U WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY ugrave "ù"> <!-- LATIN SMALL LETTER U WITH GRAVE -->
|
||||||
|
<!ENTITY Ugrave "Ù"> <!-- LATIN CAPITAL LETTER U WITH GRAVE -->
|
||||||
|
<!ENTITY uuml "ü"> <!-- LATIN SMALL LETTER U WITH DIAERESIS -->
|
||||||
|
<!ENTITY Uuml "Ü"> <!-- LATIN CAPITAL LETTER U WITH DIAERESIS -->
|
||||||
|
<!ENTITY yacute "ý"> <!-- LATIN SMALL LETTER Y WITH ACUTE -->
|
||||||
|
<!ENTITY Yacute "Ý"> <!-- LATIN CAPITAL LETTER Y WITH ACUTE -->
|
||||||
|
<!ENTITY yuml "ÿ"> <!-- LATIN SMALL LETTER Y WITH DIAERESIS -->
|
|
@ -0,0 +1,126 @@
|
||||||
|
<!-- iso-lat2.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY abreve "ă"> <!-- LATIN SMALL LETTER A WITH BREVE -->
|
||||||
|
<!ENTITY Abreve "Ă"> <!-- LATIN CAPITAL LETTER A WITH BREVE -->
|
||||||
|
<!ENTITY amacr "ā"> <!-- LATIN SMALL LETTER A WITH MACRON -->
|
||||||
|
<!ENTITY Amacr "Ā"> <!-- LATIN CAPITAL LETTER A WITH MACRON -->
|
||||||
|
<!ENTITY aogon "ą"> <!-- LATIN SMALL LETTER A WITH OGONEK -->
|
||||||
|
<!ENTITY Aogon "Ą"> <!-- LATIN CAPITAL LETTER A WITH OGONEK -->
|
||||||
|
<!ENTITY cacute "ć"> <!-- LATIN SMALL LETTER C WITH ACUTE -->
|
||||||
|
<!ENTITY Cacute "Ć"> <!-- LATIN CAPITAL LETTER C WITH ACUTE -->
|
||||||
|
<!ENTITY ccaron "č"> <!-- LATIN SMALL LETTER C WITH CARON -->
|
||||||
|
<!ENTITY Ccaron "Č"> <!-- LATIN CAPITAL LETTER C WITH CARON -->
|
||||||
|
<!ENTITY ccirc "ĉ"> <!-- LATIN SMALL LETTER C WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Ccirc "Ĉ"> <!-- LATIN CAPITAL LETTER C WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY cdot "ċ"> <!-- DOT OPERATOR -->
|
||||||
|
<!ENTITY Cdot "Ċ"> <!-- LATIN CAPITAL LETTER C WITH DOT ABOVE -->
|
||||||
|
<!ENTITY dcaron "ď"> <!-- LATIN SMALL LETTER D WITH CARON -->
|
||||||
|
<!ENTITY Dcaron "Ď"> <!-- LATIN CAPITAL LETTER D WITH CARON -->
|
||||||
|
<!ENTITY dstrok "đ"> <!-- LATIN SMALL LETTER D WITH STROKE -->
|
||||||
|
<!ENTITY Dstrok "Đ"> <!-- LATIN CAPITAL LETTER D WITH STROKE -->
|
||||||
|
<!ENTITY ecaron "ě"> <!-- LATIN SMALL LETTER E WITH CARON -->
|
||||||
|
<!ENTITY Ecaron "Ě"> <!-- LATIN CAPITAL LETTER E WITH CARON -->
|
||||||
|
<!ENTITY edot "ė"> <!-- LATIN SMALL LETTER E WITH DOT ABOVE -->
|
||||||
|
<!ENTITY Edot "Ė"> <!-- LATIN CAPITAL LETTER E WITH DOT ABOVE -->
|
||||||
|
<!ENTITY emacr "ē"> <!-- LATIN SMALL LETTER E WITH MACRON -->
|
||||||
|
<!ENTITY Emacr "Ē"> <!-- LATIN CAPITAL LETTER E WITH MACRON -->
|
||||||
|
<!ENTITY eogon "ę"> <!-- LATIN SMALL LETTER E WITH OGONEK -->
|
||||||
|
<!ENTITY Eogon "Ę"> <!-- LATIN CAPITAL LETTER E WITH OGONEK -->
|
||||||
|
<!ENTITY gacute "ǵ"> <!-- LATIN SMALL LETTER G WITH ACUTE -->
|
||||||
|
<!ENTITY gbreve "ğ"> <!-- LATIN SMALL LETTER G WITH BREVE -->
|
||||||
|
<!ENTITY Gbreve "Ğ"> <!-- LATIN CAPITAL LETTER G WITH BREVE -->
|
||||||
|
<!ENTITY Gcedil "Ģ"> <!-- LATIN CAPITAL LETTER G WITH CEDILLA -->
|
||||||
|
<!ENTITY gcirc "ĝ"> <!-- LATIN SMALL LETTER G WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Gcirc "Ĝ"> <!-- LATIN CAPITAL LETTER G WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY gdot "ġ"> <!-- LATIN SMALL LETTER G WITH DOT ABOVE -->
|
||||||
|
<!ENTITY Gdot "Ġ"> <!-- LATIN CAPITAL LETTER G WITH DOT ABOVE -->
|
||||||
|
<!ENTITY hcirc "ĥ"> <!-- LATIN SMALL LETTER H WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Hcirc "Ĥ"> <!-- LATIN CAPITAL LETTER H WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY hstrok "ħ"> <!-- LATIN SMALL LETTER H WITH STROKE -->
|
||||||
|
<!ENTITY Hstrok "Ħ"> <!-- LATIN CAPITAL LETTER H WITH STROKE -->
|
||||||
|
<!ENTITY Idot "İ"> <!-- LATIN CAPITAL LETTER I WITH DOT ABOVE -->
|
||||||
|
<!ENTITY Imacr "Ī"> <!-- LATIN CAPITAL LETTER I WITH MACRON -->
|
||||||
|
<!ENTITY imacr "ī"> <!-- LATIN SMALL LETTER I WITH MACRON -->
|
||||||
|
<!ENTITY ijlig "ij"> <!-- LATIN SMALL LIGATURE IJ -->
|
||||||
|
<!ENTITY IJlig "IJ"> <!-- LATIN CAPITAL LIGATURE IJ -->
|
||||||
|
<!ENTITY inodot "ı"> <!-- LATIN SMALL LETTER DOTLESS I -->
|
||||||
|
<!ENTITY iogon "į"> <!-- LATIN SMALL LETTER I WITH OGONEK -->
|
||||||
|
<!ENTITY Iogon "Į"> <!-- LATIN CAPITAL LETTER I WITH OGONEK -->
|
||||||
|
<!ENTITY itilde "ĩ"> <!-- LATIN SMALL LETTER I WITH TILDE -->
|
||||||
|
<!ENTITY Itilde "Ĩ"> <!-- LATIN CAPITAL LETTER I WITH TILDE -->
|
||||||
|
<!ENTITY jcirc "ĵ"> <!-- LATIN SMALL LETTER J WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Jcirc "Ĵ"> <!-- LATIN CAPITAL LETTER J WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY kcedil "ķ"> <!-- LATIN SMALL LETTER K WITH CEDILLA -->
|
||||||
|
<!ENTITY Kcedil "Ķ"> <!-- LATIN CAPITAL LETTER K WITH CEDILLA -->
|
||||||
|
<!ENTITY kgreen "ĸ"> <!-- LATIN SMALL LETTER KRA -->
|
||||||
|
<!ENTITY lacute "ĺ"> <!-- LATIN SMALL LETTER L WITH ACUTE -->
|
||||||
|
<!ENTITY Lacute "Ĺ"> <!-- LATIN CAPITAL LETTER L WITH ACUTE -->
|
||||||
|
<!ENTITY lcaron "ľ"> <!-- LATIN SMALL LETTER L WITH CARON -->
|
||||||
|
<!ENTITY Lcaron "Ľ"> <!-- LATIN CAPITAL LETTER L WITH CARON -->
|
||||||
|
<!ENTITY lcedil "ļ"> <!-- LATIN SMALL LETTER L WITH CEDILLA -->
|
||||||
|
<!ENTITY Lcedil "Ļ"> <!-- LATIN CAPITAL LETTER L WITH CEDILLA -->
|
||||||
|
<!ENTITY lmidot "ŀ"> <!-- LATIN SMALL LETTER L WITH MIDDLE DOT -->
|
||||||
|
<!ENTITY Lmidot "Ŀ"> <!-- LATIN CAPITAL LETTER L WITH MIDDLE DOT -->
|
||||||
|
<!ENTITY lstrok "ł"> <!-- LATIN SMALL LETTER L WITH STROKE -->
|
||||||
|
<!ENTITY Lstrok "Ł"> <!-- LATIN CAPITAL LETTER L WITH STROKE -->
|
||||||
|
<!ENTITY nacute "ń"> <!-- LATIN SMALL LETTER N WITH ACUTE -->
|
||||||
|
<!ENTITY Nacute "Ń"> <!-- LATIN CAPITAL LETTER N WITH ACUTE -->
|
||||||
|
<!ENTITY eng "ŋ"> <!-- LATIN SMALL LETTER ENG -->
|
||||||
|
<!ENTITY ENG "Ŋ"> <!-- LATIN CAPITAL LETTER ENG -->
|
||||||
|
<!ENTITY napos "ʼn"> <!-- LATIN SMALL LETTER N PRECEDED BY APOSTROPHE -->
|
||||||
|
<!ENTITY ncaron "ň"> <!-- LATIN SMALL LETTER N WITH CARON -->
|
||||||
|
<!ENTITY Ncaron "Ň"> <!-- LATIN CAPITAL LETTER N WITH CARON -->
|
||||||
|
<!ENTITY ncedil "ņ"> <!-- LATIN SMALL LETTER N WITH CEDILLA -->
|
||||||
|
<!ENTITY Ncedil "Ņ"> <!-- LATIN CAPITAL LETTER N WITH CEDILLA -->
|
||||||
|
<!ENTITY odblac "ő"> <!-- LATIN SMALL LETTER O WITH DOUBLE ACUTE -->
|
||||||
|
<!ENTITY Odblac "Ő"> <!-- LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -->
|
||||||
|
<!ENTITY Omacr "Ō"> <!-- LATIN CAPITAL LETTER O WITH MACRON -->
|
||||||
|
<!ENTITY omacr "ō"> <!-- LATIN SMALL LETTER O WITH MACRON -->
|
||||||
|
<!ENTITY oelig "œ"> <!-- LATIN SMALL LIGATURE OE -->
|
||||||
|
<!ENTITY OElig "Œ"> <!-- LATIN CAPITAL LIGATURE OE -->
|
||||||
|
<!ENTITY racute "ŕ"> <!-- LATIN SMALL LETTER R WITH ACUTE -->
|
||||||
|
<!ENTITY Racute "Ŕ"> <!-- LATIN CAPITAL LETTER R WITH ACUTE -->
|
||||||
|
<!ENTITY rcaron "ř"> <!-- LATIN SMALL LETTER R WITH CARON -->
|
||||||
|
<!ENTITY Rcaron "Ř"> <!-- LATIN CAPITAL LETTER R WITH CARON -->
|
||||||
|
<!ENTITY rcedil "ŗ"> <!-- LATIN SMALL LETTER R WITH CEDILLA -->
|
||||||
|
<!ENTITY Rcedil "Ŗ"> <!-- LATIN CAPITAL LETTER R WITH CEDILLA -->
|
||||||
|
<!ENTITY sacute "ś"> <!-- LATIN SMALL LETTER S WITH ACUTE -->
|
||||||
|
<!ENTITY Sacute "Ś"> <!-- LATIN CAPITAL LETTER S WITH ACUTE -->
|
||||||
|
<!ENTITY scaron "š"> <!-- LATIN SMALL LETTER S WITH CARON -->
|
||||||
|
<!ENTITY Scaron "Š"> <!-- LATIN CAPITAL LETTER S WITH CARON -->
|
||||||
|
<!ENTITY scedil "ş"> <!-- LATIN SMALL LETTER S WITH CEDILLA -->
|
||||||
|
<!ENTITY Scedil "Ş"> <!-- LATIN CAPITAL LETTER S WITH CEDILLA -->
|
||||||
|
<!ENTITY scirc "ŝ"> <!-- LATIN SMALL LETTER S WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Scirc "Ŝ"> <!-- LATIN CAPITAL LETTER S WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY tcaron "ť"> <!-- LATIN SMALL LETTER T WITH CARON -->
|
||||||
|
<!ENTITY Tcaron "Ť"> <!-- LATIN CAPITAL LETTER T WITH CARON -->
|
||||||
|
<!ENTITY tcedil "ţ"> <!-- LATIN SMALL LETTER T WITH CEDILLA -->
|
||||||
|
<!ENTITY Tcedil "Ţ"> <!-- LATIN CAPITAL LETTER T WITH CEDILLA -->
|
||||||
|
<!ENTITY tstrok "ŧ"> <!-- LATIN SMALL LETTER T WITH STROKE -->
|
||||||
|
<!ENTITY Tstrok "Ŧ"> <!-- LATIN CAPITAL LETTER T WITH STROKE -->
|
||||||
|
<!ENTITY ubreve "ŭ"> <!-- LATIN SMALL LETTER U WITH BREVE -->
|
||||||
|
<!ENTITY Ubreve "Ŭ"> <!-- LATIN CAPITAL LETTER U WITH BREVE -->
|
||||||
|
<!ENTITY udblac "ű"> <!-- LATIN SMALL LETTER U WITH DOUBLE ACUTE -->
|
||||||
|
<!ENTITY Udblac "Ű"> <!-- LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -->
|
||||||
|
<!ENTITY umacr "ū"> <!-- LATIN SMALL LETTER U WITH MACRON -->
|
||||||
|
<!ENTITY Umacr "Ū"> <!-- LATIN CAPITAL LETTER U WITH MACRON -->
|
||||||
|
<!ENTITY uogon "ų"> <!-- LATIN SMALL LETTER U WITH OGONEK -->
|
||||||
|
<!ENTITY Uogon "Ų"> <!-- LATIN CAPITAL LETTER U WITH OGONEK -->
|
||||||
|
<!ENTITY uring "ů"> <!-- LATIN SMALL LETTER U WITH RING ABOVE -->
|
||||||
|
<!ENTITY Uring "Ů"> <!-- LATIN CAPITAL LETTER U WITH RING ABOVE -->
|
||||||
|
<!ENTITY utilde "ũ"> <!-- LATIN SMALL LETTER U WITH TILDE -->
|
||||||
|
<!ENTITY Utilde "Ũ"> <!-- LATIN CAPITAL LETTER U WITH TILDE -->
|
||||||
|
<!ENTITY wcirc "ŵ"> <!-- LATIN SMALL LETTER W WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Wcirc "Ŵ"> <!-- LATIN CAPITAL LETTER W WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY ycirc "ŷ"> <!-- LATIN SMALL LETTER Y WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Ycirc "Ŷ"> <!-- LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -->
|
||||||
|
<!ENTITY Yuml "Ÿ"> <!-- LATIN CAPITAL LETTER Y WITH DIAERESIS -->
|
||||||
|
<!ENTITY zacute "ź"> <!-- LATIN SMALL LETTER Z WITH ACUTE -->
|
||||||
|
<!ENTITY Zacute "Ź"> <!-- LATIN CAPITAL LETTER Z WITH ACUTE -->
|
||||||
|
<!ENTITY zcaron "ž"> <!-- LATIN SMALL LETTER Z WITH CARON -->
|
||||||
|
<!ENTITY Zcaron "Ž"> <!-- LATIN CAPITAL LETTER Z WITH CARON -->
|
||||||
|
<!ENTITY zdot "ż"> <!-- LATIN SMALL LETTER Z WITH DOT ABOVE -->
|
||||||
|
<!ENTITY Zdot "Ż"> <!-- LATIN CAPITAL LETTER Z WITH DOT ABOVE -->
|
|
@ -0,0 +1,81 @@
|
||||||
|
<!-- iso-num.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY half "½"> <!-- VULGAR FRACTION ONE HALF -->
|
||||||
|
<!ENTITY frac12 "½"> <!-- VULGAR FRACTION ONE HALF -->
|
||||||
|
<!ENTITY frac14 "¼"> <!-- VULGAR FRACTION ONE QUARTER -->
|
||||||
|
<!ENTITY frac34 "¾"> <!-- VULGAR FRACTION THREE QUARTERS -->
|
||||||
|
<!ENTITY frac18 "⅛"> <!-- -->
|
||||||
|
<!ENTITY frac38 "⅜"> <!-- -->
|
||||||
|
<!ENTITY frac58 "⅝"> <!-- -->
|
||||||
|
<!ENTITY frac78 "⅞"> <!-- -->
|
||||||
|
<!ENTITY sup1 "¹"> <!-- SUPERSCRIPT ONE -->
|
||||||
|
<!ENTITY sup2 "²"> <!-- SUPERSCRIPT TWO -->
|
||||||
|
<!ENTITY sup3 "³"> <!-- SUPERSCRIPT THREE -->
|
||||||
|
<!ENTITY plus "+"> <!-- PLUS SIGN -->
|
||||||
|
<!ENTITY plusmn "±"> <!-- PLUS-MINUS SIGN -->
|
||||||
|
<!ENTITY lt "&#60;"> <!-- LESS-THAN SIGN -->
|
||||||
|
<!ENTITY equals "="> <!-- EQUALS SIGN -->
|
||||||
|
<!ENTITY gt ">"> <!-- GREATER-THAN SIGN -->
|
||||||
|
<!ENTITY divide "÷"> <!-- DIVISION SIGN -->
|
||||||
|
<!ENTITY times "×"> <!-- MULTIPLICATION SIGN -->
|
||||||
|
<!ENTITY curren "¤"> <!-- CURRENCY SIGN -->
|
||||||
|
<!ENTITY pound "£"> <!-- POUND SIGN -->
|
||||||
|
<!ENTITY dollar "$"> <!-- DOLLAR SIGN -->
|
||||||
|
<!ENTITY cent "¢"> <!-- CENT SIGN -->
|
||||||
|
<!ENTITY yen "¥"> <!-- YEN SIGN -->
|
||||||
|
<!ENTITY num "#"> <!-- NUMBER SIGN -->
|
||||||
|
<!ENTITY percnt "%"> <!-- PERCENT SIGN -->
|
||||||
|
<!ENTITY amp "&#38;"> <!-- AMPERSAND -->
|
||||||
|
<!ENTITY ast "*"> <!-- ASTERISK OPERATOR -->
|
||||||
|
<!ENTITY commat "@"> <!-- COMMERCIAL AT -->
|
||||||
|
<!ENTITY lsqb "["> <!-- LEFT SQUARE BRACKET -->
|
||||||
|
<!ENTITY bsol "\"> <!-- REVERSE SOLIDUS -->
|
||||||
|
<!ENTITY rsqb "]"> <!-- RIGHT SQUARE BRACKET -->
|
||||||
|
<!ENTITY lcub "{"> <!-- LEFT CURLY BRACKET -->
|
||||||
|
<!ENTITY horbar "―"> <!-- HORIZONTAL BAR -->
|
||||||
|
<!ENTITY verbar "|"> <!-- VERTICAL LINE -->
|
||||||
|
<!ENTITY rcub "}"> <!-- RIGHT CURLY BRACKET -->
|
||||||
|
<!ENTITY micro "µ"> <!-- MICRO SIGN -->
|
||||||
|
<!ENTITY ohm "Ω"> <!-- OHM SIGN -->
|
||||||
|
<!ENTITY deg "°"> <!-- DEGREE SIGN -->
|
||||||
|
<!ENTITY ordm "º"> <!-- MASCULINE ORDINAL INDICATOR -->
|
||||||
|
<!ENTITY ordf "ª"> <!-- FEMININE ORDINAL INDICATOR -->
|
||||||
|
<!ENTITY sect "§"> <!-- SECTION SIGN -->
|
||||||
|
<!ENTITY para "¶"> <!-- PILCROW SIGN -->
|
||||||
|
<!ENTITY middot "·"> <!-- MIDDLE DOT -->
|
||||||
|
<!ENTITY larr "←"> <!-- LEFTWARDS DOUBLE ARROW -->
|
||||||
|
<!ENTITY rarr "→"> <!-- RIGHTWARDS DOUBLE ARROW -->
|
||||||
|
<!ENTITY uarr "↑"> <!-- UPWARDS ARROW -->
|
||||||
|
<!ENTITY darr "↓"> <!-- DOWNWARDS ARROW -->
|
||||||
|
<!ENTITY copy "©"> <!-- COPYRIGHT SIGN -->
|
||||||
|
<!ENTITY reg "®"> <!-- REG TRADE MARK SIGN -->
|
||||||
|
<!ENTITY trade "™"> <!-- TRADE MARK SIGN -->
|
||||||
|
<!ENTITY brvbar "¦"> <!-- BROKEN BAR -->
|
||||||
|
<!ENTITY not "¬"> <!-- NOT SIGN -->
|
||||||
|
<!ENTITY sung "♩"> <!-- -->
|
||||||
|
<!ENTITY excl "!"> <!-- EXCLAMATION MARK -->
|
||||||
|
<!ENTITY iexcl "¡"> <!-- INVERTED EXCLAMATION MARK -->
|
||||||
|
<!ENTITY quot """> <!-- QUOTATION MARK -->
|
||||||
|
<!ENTITY apos "'"> <!-- APOSTROPHE -->
|
||||||
|
<!ENTITY lpar "("> <!-- LEFT PARENTHESIS -->
|
||||||
|
<!ENTITY rpar ")"> <!-- RIGHT PARENTHESIS -->
|
||||||
|
<!ENTITY comma ","> <!-- COMMA -->
|
||||||
|
<!ENTITY lowbar "_"> <!-- LOW LINE -->
|
||||||
|
<!ENTITY hyphen "-"> <!-- HYPHEN-MINUS -->
|
||||||
|
<!ENTITY period "."> <!-- FULL STOP -->
|
||||||
|
<!ENTITY sol "/"> <!-- SOLIDUS -->
|
||||||
|
<!ENTITY colon ":"> <!-- COLON -->
|
||||||
|
<!ENTITY semi ";"> <!-- SEMICOLON -->
|
||||||
|
<!ENTITY quest "?"> <!-- QUESTION MARK -->
|
||||||
|
<!ENTITY iquest "¿"> <!-- INVERTED QUESTION MARK -->
|
||||||
|
<!ENTITY laquo "«"> <!-- LEFT-POINTING DOUBLE ANGLE QUOTATION MARK -->
|
||||||
|
<!ENTITY raquo "»"> <!-- RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK -->
|
||||||
|
<!ENTITY lsquo "‘"> <!-- -->
|
||||||
|
<!ENTITY rsquo "’"> <!-- RIGHT SINGLE QUOTATION MARK -->
|
||||||
|
<!ENTITY ldquo "“"> <!-- -->
|
||||||
|
<!ENTITY rdquo "”"> <!-- RIGHT DOUBLE QUOTATION MARK -->
|
||||||
|
<!ENTITY nbsp " "> <!-- NO-BREAK SPACE -->
|
||||||
|
<!ENTITY shy "­"> <!-- SOFT HYPHEN -->
|
|
@ -0,0 +1,90 @@
|
||||||
|
<!-- iso-pub.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz -->
|
||||||
|
|
||||||
|
<!ENTITY emsp " "> <!-- EM SPACE -->
|
||||||
|
<!ENTITY ensp " "> <!-- EN SPACE -->
|
||||||
|
<!ENTITY emsp13 " "> <!-- THREE-PER-EM SPACE -->
|
||||||
|
<!ENTITY emsp14 " "> <!-- FOUR-PER-EM SPACE -->
|
||||||
|
<!ENTITY numsp " "> <!-- FIGURE SPACE -->
|
||||||
|
<!ENTITY puncsp " "> <!-- PUNCTUATION SPACE -->
|
||||||
|
<!ENTITY thinsp " "> <!-- THIN SPACE -->
|
||||||
|
<!ENTITY hairsp " "> <!-- HAIR SPACE -->
|
||||||
|
<!ENTITY mdash "—"> <!-- EM DASH -->
|
||||||
|
<!ENTITY ndash "–"> <!-- EN DASH -->
|
||||||
|
<!ENTITY dash "‐"> <!-- HYPHEN -->
|
||||||
|
<!ENTITY blank "␣"> <!-- OPEN BOX -->
|
||||||
|
<!ENTITY hellip "…"> <!-- HORIZONTAL ELLIPSIS -->
|
||||||
|
<!ENTITY nldr "‥"> <!-- TWO DOT LEADER -->
|
||||||
|
<!ENTITY frac13 "⅓"> <!-- VULGAR FRACTION ONE THIRD -->
|
||||||
|
<!ENTITY frac23 "⅔"> <!-- VULGAR FRACTION TWO THIRDS -->
|
||||||
|
<!ENTITY frac15 "⅕"> <!-- VULGAR FRACTION ONE FIFTH -->
|
||||||
|
<!ENTITY frac25 "⅖"> <!-- VULGAR FRACTION TWO FIFTHS -->
|
||||||
|
<!ENTITY frac35 "⅗"> <!-- VULGAR FRACTION THREE FIFTHS -->
|
||||||
|
<!ENTITY frac45 "⅘"> <!-- VULGAR FRACTION FOUR FIFTHS -->
|
||||||
|
<!ENTITY frac16 "⅙"> <!-- VULGAR FRACTION ONE SIXTH -->
|
||||||
|
<!ENTITY frac56 "⅚"> <!-- VULGAR FRACTION FIVE SIXTHS -->
|
||||||
|
<!ENTITY incare "℅"> <!-- CARE OF -->
|
||||||
|
<!ENTITY block "█"> <!-- FULL BLOCK -->
|
||||||
|
<!ENTITY uhblk "▀"> <!-- UPPER HALF BLOCK -->
|
||||||
|
<!ENTITY lhblk "▄"> <!-- LOWER HALF BLOCK -->
|
||||||
|
<!ENTITY blk14 "░"> <!-- LIGHT SHADE -->
|
||||||
|
<!ENTITY blk12 "▒"> <!-- MEDIUM SHADE -->
|
||||||
|
<!ENTITY blk34 "▓"> <!-- DARK SHADE -->
|
||||||
|
<!ENTITY marker "▮"> <!-- BLACK VERTICAL RECTANGLE -->
|
||||||
|
<!ENTITY cir "○"> <!-- WHITE CIRCLE -->
|
||||||
|
<!ENTITY squ "□"> <!-- WHITE SQUARE -->
|
||||||
|
<!ENTITY rect "▭"> <!-- WHITE RECTANGLE -->
|
||||||
|
<!ENTITY utri "▵"> <!-- WHITE UP-POINTING TRIANGLE -->
|
||||||
|
<!ENTITY dtri "▿"> <!-- WHITE DOWN-POINTING TRIANGLE -->
|
||||||
|
<!ENTITY star "⋆"> <!-- STAR OPERATOR -->
|
||||||
|
<!ENTITY bull "•"> <!-- BULLET -->
|
||||||
|
<!ENTITY squf "▪"> <!-- -->
|
||||||
|
<!ENTITY utrif "▴"> <!-- BLACK UP-POINTING TRIANGLE -->
|
||||||
|
<!ENTITY dtrif "▾"> <!-- BLACK DOWN-POINTING TRIANGLE -->
|
||||||
|
<!ENTITY ltrif "◂"> <!-- BLACK LEFT-POINTING TRIANGLE -->
|
||||||
|
<!ENTITY rtrif "▸"> <!-- BLACK RIGHT-POINTING TRIANGLE -->
|
||||||
|
<!ENTITY clubs "♣"> <!-- BLACK CLUB SUIT -->
|
||||||
|
<!ENTITY diams "♦"> <!-- BLACK DIAMOND SUIT -->
|
||||||
|
<!ENTITY hearts "♥"> <!-- BLACK HEART SUIT -->
|
||||||
|
<!ENTITY spades "♠"> <!-- BLACK SPADE SUIT -->
|
||||||
|
<!ENTITY malt "✠"> <!-- MALTESE CROSS -->
|
||||||
|
<!ENTITY dagger "†"> <!-- DAGGER -->
|
||||||
|
<!ENTITY Dagger "‡"> <!-- DOUBLE DAGGER -->
|
||||||
|
<!ENTITY check "✓"> <!-- CHECK MARK -->
|
||||||
|
<!ENTITY cross "✗"> <!-- BALLOT X -->
|
||||||
|
<!ENTITY sharp "♯"> <!-- MUSIC SHARP SIGN -->
|
||||||
|
<!ENTITY flat "♭"> <!-- MUSIC FLAT SIGN -->
|
||||||
|
<!ENTITY male "♂"> <!-- MALE SIGN -->
|
||||||
|
<!ENTITY female "♀"> <!-- -->
|
||||||
|
<!ENTITY phone "☎"> <!-- TELEPHONE SIGN -->
|
||||||
|
<!ENTITY telrec "⌕"> <!-- TELEPHONE RECORDER -->
|
||||||
|
<!ENTITY copysr "℗"> <!-- SOUND RECORDING COPYRIGHT -->
|
||||||
|
<!ENTITY caret "⁁"> <!-- CARET -->
|
||||||
|
<!ENTITY lsquor "‚"> <!-- SINGLE LOW-9 QUOTATION MARK -->
|
||||||
|
<!ENTITY ldquor "„"> <!-- DOUBLE LOW-9 QUOTATION MARK -->
|
||||||
|
<!ENTITY fflig "ff"> <!-- -->
|
||||||
|
<!ENTITY filig "fi"> <!-- -->
|
||||||
|
<!-- fjlig Unknown unicode character -->
|
||||||
|
<!ENTITY ffilig "ffi"> <!-- -->
|
||||||
|
<!ENTITY ffllig "ffl"> <!-- -->
|
||||||
|
<!ENTITY fllig "fl"> <!-- -->
|
||||||
|
<!ENTITY mldr "…"> <!-- HORIZONTAL ELLIPSIS -->
|
||||||
|
<!ENTITY rdquor "“"> <!-- -->
|
||||||
|
<!ENTITY rsquor "‘"> <!-- -->
|
||||||
|
<!ENTITY vellip "⋮"> <!-- -->
|
||||||
|
<!ENTITY hybull "⁃"> <!-- HYPHEN BULLET -->
|
||||||
|
<!ENTITY loz "◊"> <!-- LOZENGE -->
|
||||||
|
<!ENTITY lozf "✦"> <!-- -->
|
||||||
|
<!ENTITY ltri "◃"> <!-- WHITE LEFT-POINTING TRIANGLE -->
|
||||||
|
<!ENTITY rtri "▹"> <!-- WHITE RIGHT-POINTING TRIANGLE -->
|
||||||
|
<!ENTITY starf "★"> <!-- BLACK STAR -->
|
||||||
|
<!ENTITY natur "♮"> <!-- MUSIC NATURAL SIGN -->
|
||||||
|
<!ENTITY rx "℞"> <!-- PRESCRIPTION TAKE -->
|
||||||
|
<!ENTITY sext "✶"> <!-- SIX POINTED BLACK STAR -->
|
||||||
|
<!ENTITY target "⌖"> <!-- POSITION INDICATOR -->
|
||||||
|
<!ENTITY dlcrop "⌍"> <!-- BOTTOM LEFT CROP -->
|
||||||
|
<!ENTITY drcrop "⌌"> <!-- BOTTOM RIGHT CROP -->
|
||||||
|
<!ENTITY ulcrop "⌏"> <!-- TOP LEFT CROP -->
|
||||||
|
<!ENTITY urcrop "⌎"> <!-- TOP RIGHT CROP -->
|
|
@ -0,0 +1,69 @@
|
||||||
|
<!-- iso-tech.ent (initially distributed with DocBook XML DTD V4.1.1beta1) -->
|
||||||
|
|
||||||
|
<!-- Derived from the corresponding ISO 8879 standard entity set
|
||||||
|
and the Unicode character mappings provided by Sebastian Rahtz.
|
||||||
|
With additional derivations from
|
||||||
|
ftp://ftp.unicode.org/Public/MAPPINGS/VENDORS/MISC/SGML.TXT -->
|
||||||
|
|
||||||
|
<!ENTITY aleph "ℵ"> <!-- ALEF SYMBOL -->
|
||||||
|
<!ENTITY and "∧"> <!-- -->
|
||||||
|
<!ENTITY ang90 "∟"> <!-- RIGHT ANGLE -->
|
||||||
|
<!ENTITY angsph "∢"> <!-- -->
|
||||||
|
<!ENTITY ap "≈"> <!-- -->
|
||||||
|
<!ENTITY becaus "∵"> <!-- BECAUSE -->
|
||||||
|
<!ENTITY bottom "⊥"> <!-- -->
|
||||||
|
<!ENTITY cap "∩"> <!-- -->
|
||||||
|
<!ENTITY cong "≅"> <!-- -->
|
||||||
|
<!ENTITY conint "∮"> <!-- -->
|
||||||
|
<!ENTITY cup "∪"> <!-- -->
|
||||||
|
<!ENTITY equiv "≡"> <!-- -->
|
||||||
|
<!ENTITY exist "∃"> <!-- -->
|
||||||
|
<!ENTITY forall "∀"> <!-- -->
|
||||||
|
<!ENTITY fnof "ƒ"> <!-- LATIN SMALL LETTER F WITH HOOK -->
|
||||||
|
<!ENTITY ge "≥"> <!-- GREATER-THAN OR EQUAL TO -->
|
||||||
|
<!ENTITY iff "⇔"> <!-- LEFT RIGHT DOUBLE ARROW -->
|
||||||
|
<!ENTITY infin "∞"> <!-- -->
|
||||||
|
<!ENTITY int "∫"> <!-- -->
|
||||||
|
<!ENTITY isin "∊"> <!-- -->
|
||||||
|
<!ENTITY lang "〈"> <!-- -->
|
||||||
|
<!ENTITY lArr "⇐"> <!-- LEFTWARDS ARROW -->
|
||||||
|
<!ENTITY le "≤"> <!-- -->
|
||||||
|
<!ENTITY minus "−"> <!-- MINUS SIGN -->
|
||||||
|
<!ENTITY mnplus "∓"> <!-- -->
|
||||||
|
<!ENTITY nabla "∇"> <!-- NABLA -->
|
||||||
|
<!ENTITY ne "≠"> <!-- -->
|
||||||
|
<!ENTITY ni "∍"> <!-- -->
|
||||||
|
<!ENTITY or "∨"> <!-- -->
|
||||||
|
<!ENTITY par "∥"> <!-- PARALLEL TO -->
|
||||||
|
<!ENTITY part "∂"> <!-- -->
|
||||||
|
<!ENTITY permil "‰"> <!-- PER MILLE SIGN -->
|
||||||
|
<!ENTITY perp "⊥"> <!-- -->
|
||||||
|
<!ENTITY prime "′"> <!-- PRIME -->
|
||||||
|
<!ENTITY Prime "″"> <!-- DOUBLE PRIME -->
|
||||||
|
<!ENTITY prop "∝"> <!-- -->
|
||||||
|
<!ENTITY radic "√"> <!-- -->
|
||||||
|
<!ENTITY rang "〉"> <!-- -->
|
||||||
|
<!ENTITY rArr "⇒"> <!-- RIGHTWARDS ARROW -->
|
||||||
|
<!ENTITY sim "∼"> <!-- -->
|
||||||
|
<!ENTITY sime "≃"> <!-- -->
|
||||||
|
<!ENTITY square "□"> <!-- WHITE SQUARE -->
|
||||||
|
<!ENTITY sub "⊂"> <!-- -->
|
||||||
|
<!ENTITY sube "⊆"> <!-- -->
|
||||||
|
<!ENTITY sup "⊃"> <!-- -->
|
||||||
|
<!ENTITY supe "⊇"> <!-- -->
|
||||||
|
<!ENTITY there4 "∴"> <!-- -->
|
||||||
|
<!ENTITY Verbar "‖"> <!-- DOUBLE VERTICAL LINE -->
|
||||||
|
<!ENTITY angst "Å"> <!-- ANGSTROM SIGN -->
|
||||||
|
<!ENTITY bernou "ℬ"> <!-- SCRIPT CAPITAL B -->
|
||||||
|
<!ENTITY compfn "∘"> <!-- RING OPERATOR -->
|
||||||
|
<!ENTITY Dot "¨"> <!-- -->
|
||||||
|
<!ENTITY DotDot "⃜"> <!-- COMBINING FOUR DOTS ABOVE -->
|
||||||
|
<!ENTITY hamilt "ℋ"> <!-- SCRIPT CAPITAL H -->
|
||||||
|
<!ENTITY lagran "ℒ"> <!-- SCRIPT CAPITAL L -->
|
||||||
|
<!ENTITY lowast "∗"> <!-- ASTERISK OPERATOR -->
|
||||||
|
<!ENTITY notin "∉"> <!-- -->
|
||||||
|
<!ENTITY order "ℴ"> <!-- SCRIPT SMALL O -->
|
||||||
|
<!ENTITY phmmat "ℳ"> <!-- SCRIPT CAPITAL M -->
|
||||||
|
<!ENTITY tdot "⃛"> <!-- COMBINING THREE DOTS ABOVE -->
|
||||||
|
<!ENTITY tprime "‴"> <!-- TRIPLE PRIME -->
|
||||||
|
<!ENTITY wedgeq "≙"> <!-- ESTIMATES -->
|
|
@ -0,0 +1,228 @@
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
<!-- DocBook XML HTML Table Module V4.3CR3 ................................... -->
|
||||||
|
<!-- File htmltblx.mod .................................................... -->
|
||||||
|
|
||||||
|
<!-- Copyright 2003 ArborText, Inc., Norman Walsh, Sun Microsystems, Inc.,
|
||||||
|
and the Organization for the Advancement of Structured Information
|
||||||
|
Standards (OASIS).
|
||||||
|
|
||||||
|
$Id$
|
||||||
|
|
||||||
|
Permission to use, copy, modify and distribute the DocBook XML DTD
|
||||||
|
and its accompanying documentation for any purpose and without fee
|
||||||
|
is hereby granted in perpetuity, provided that the above copyright
|
||||||
|
notice and this paragraph appear in all copies. The copyright
|
||||||
|
holders make no representation about the suitability of the DTD for
|
||||||
|
any purpose. It is provided "as is" without expressed or implied
|
||||||
|
warranty.
|
||||||
|
|
||||||
|
If you modify the DocBook XML DTD in any way, except for declaring and
|
||||||
|
referencing additional sets of general entities and declaring
|
||||||
|
additional notations, label your DTD as a variant of DocBook. See
|
||||||
|
the maintenance documentation for more information.
|
||||||
|
|
||||||
|
Please direct all questions, bug reports, or suggestions for
|
||||||
|
changes to the docbook@lists.oasis-open.org mailing list. For more
|
||||||
|
information, see http://www.oasis-open.org/docbook/.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- ...................................................................... -->
|
||||||
|
|
||||||
|
<!-- This module contains the definitions for elements that are
|
||||||
|
isomorphic to the HTML elements. One could argue we should
|
||||||
|
instead have based ourselves on the XHTML Table Module, but the
|
||||||
|
HTML one is more like what browsers are likely to accept today
|
||||||
|
and users are likely to use.
|
||||||
|
|
||||||
|
This module has been developed for use with the DocBook V4.3
|
||||||
|
"union table model" in which elements and attlists common to both
|
||||||
|
models are defined (as the union) in the CALS table module by
|
||||||
|
setting various parameter entities appropriately in this file.
|
||||||
|
|
||||||
|
In DTD driver files referring to this module, please use an entity
|
||||||
|
declaration that uses the public identifier shown below:
|
||||||
|
|
||||||
|
<!ENTITY % htmltbl PUBLIC
|
||||||
|
"-//OASIS//ELEMENTS DocBook XML HTML Tables V4.3CR3//EN"
|
||||||
|
"htmltblx.mod">
|
||||||
|
%htmltbl;
|
||||||
|
|
||||||
|
See the documentation for detailed information on the parameter
|
||||||
|
entity and module scheme used in DocBook, customizing DocBook and
|
||||||
|
planning for interchange, and changes made since the last release
|
||||||
|
of DocBook.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!--======================= XHTML Tables =======================================-->
|
||||||
|
|
||||||
|
<!ENTITY % html.coreattrs
|
||||||
|
"id ID #IMPLIED
|
||||||
|
class CDATA #IMPLIED
|
||||||
|
style CDATA #IMPLIED
|
||||||
|
title CDATA #IMPLIED"
|
||||||
|
>
|
||||||
|
|
||||||
|
<!-- Does not contain lang or dir because they are in %common.attribs -->
|
||||||
|
<!ENTITY % i18n
|
||||||
|
"xml:lang NMTOKEN #IMPLIED"
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ENTITY % events
|
||||||
|
"onclick CDATA #IMPLIED
|
||||||
|
ondblclick CDATA #IMPLIED
|
||||||
|
onmousedown CDATA #IMPLIED
|
||||||
|
onmouseup CDATA #IMPLIED
|
||||||
|
onmouseover CDATA #IMPLIED
|
||||||
|
onmousemove CDATA #IMPLIED
|
||||||
|
onmouseout CDATA #IMPLIED
|
||||||
|
onkeypress CDATA #IMPLIED
|
||||||
|
onkeydown CDATA #IMPLIED
|
||||||
|
onkeyup CDATA #IMPLIED"
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ENTITY % attrs "%html.coreattrs; %i18n; %events;">
|
||||||
|
|
||||||
|
<!ENTITY % cellhalign
|
||||||
|
"align (left|center|right|justify|char) #IMPLIED
|
||||||
|
char CDATA #IMPLIED
|
||||||
|
charoff CDATA #IMPLIED"
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ENTITY % cellvalign
|
||||||
|
"valign (top|middle|bottom|baseline) #IMPLIED"
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ELEMENT colgroup (col)*>
|
||||||
|
<!ELEMENT col EMPTY>
|
||||||
|
<!ELEMENT tr (th|td)+>
|
||||||
|
<!ELEMENT th (%para.char.mix; | %tabentry.mix;)*>
|
||||||
|
<!ELEMENT td (%para.char.mix; | %tabentry.mix;)*>
|
||||||
|
|
||||||
|
<!ATTLIST colgroup
|
||||||
|
%attrs;
|
||||||
|
span CDATA "1"
|
||||||
|
width CDATA #IMPLIED
|
||||||
|
%cellhalign;
|
||||||
|
%cellvalign;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ATTLIST col
|
||||||
|
%attrs;
|
||||||
|
span CDATA "1"
|
||||||
|
width CDATA #IMPLIED
|
||||||
|
%cellhalign;
|
||||||
|
%cellvalign;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ATTLIST tr
|
||||||
|
%attrs;
|
||||||
|
%cellhalign;
|
||||||
|
%cellvalign;
|
||||||
|
bgcolor CDATA #IMPLIED
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ATTLIST th
|
||||||
|
%attrs;
|
||||||
|
abbr CDATA #IMPLIED
|
||||||
|
axis CDATA #IMPLIED
|
||||||
|
headers IDREFS #IMPLIED
|
||||||
|
scope (row|col|rowgroup|colgroup) #IMPLIED
|
||||||
|
rowspan CDATA "1"
|
||||||
|
colspan CDATA "1"
|
||||||
|
%cellhalign;
|
||||||
|
%cellvalign;
|
||||||
|
nowrap (nowrap) #IMPLIED
|
||||||
|
bgcolor CDATA #IMPLIED
|
||||||
|
width CDATA #IMPLIED
|
||||||
|
height CDATA #IMPLIED
|
||||||
|
>
|
||||||
|
|
||||||
|
<!ATTLIST td
|
||||||
|
%attrs;
|
||||||
|
abbr CDATA #IMPLIED
|
||||||
|
axis CDATA #IMPLIED
|
||||||
|
headers IDREFS #IMPLIED
|
||||||
|
scope (row|col|rowgroup|colgroup) #IMPLIED
|
||||||
|
rowspan CDATA "1"
|
||||||
|
colspan CDATA "1"
|
||||||
|
%cellhalign;
|
||||||
|
%cellvalign;
|
||||||
|
nowrap (nowrap) #IMPLIED
|
||||||
|
bgcolor CDATA #IMPLIED
|
||||||
|
width CDATA #IMPLIED
|
||||||
|
height CDATA #IMPLIED
|
||||||
|
>
|
||||||
|
|
||||||
|
<!-- ====================================================== -->
|
||||||
|
<!-- Set up to read in the CALS model configured to
|
||||||
|
merge with the XHTML table model -->
|
||||||
|
<!-- ====================================================== -->
|
||||||
|
|
||||||
|
<!ENTITY % tables.role.attrib "%role.attrib;">
|
||||||
|
|
||||||
|
<!-- Add label and role attributes to table and informaltable -->
|
||||||
|
<!ENTITY % bodyatt "
|
||||||
|
floatstyle CDATA #IMPLIED
|
||||||
|
%label.attrib;"
|
||||||
|
>
|
||||||
|
|
||||||
|
<!-- Add common attributes to Table, TGroup, TBody, THead, TFoot, Row,
|
||||||
|
EntryTbl, and Entry (and InformalTable element). -->
|
||||||
|
|
||||||
|
<!ENTITY % secur "
|
||||||
|
%common.attrib;
|
||||||
|
class CDATA #IMPLIED
|
||||||
|
style CDATA #IMPLIED
|
||||||
|
title CDATA #IMPLIED
|
||||||
|
%i18n;
|
||||||
|
%events;
|
||||||
|
%tables.role.attrib;">
|
||||||
|
|
||||||
|
<!ENTITY % common.table.attribs
|
||||||
|
"%bodyatt;
|
||||||
|
%secur;">
|
||||||
|
|
||||||
|
<!-- Content model for Table (that also allows HTML tables) -->
|
||||||
|
<!ENTITY % tbl.table.mdl
|
||||||
|
"((blockinfo?,
|
||||||
|
(%formalobject.title.content;),
|
||||||
|
(%ndxterm.class;)*,
|
||||||
|
textobject*,
|
||||||
|
(graphic+|mediaobject+|tgroup+))
|
||||||
|
|(caption, (col*|colgroup*), thead?, tfoot?, (tbody+|tr+)))">
|
||||||
|
|
||||||
|
<!ENTITY % informal.tbl.table.mdl
|
||||||
|
"(textobject*,
|
||||||
|
(graphic+|mediaobject+|tgroup+))
|
||||||
|
| ((col*|colgroup*), thead?, tfoot?, (tbody+|tr+))">
|
||||||
|
|
||||||
|
<!-- Attributes for Table (including HTML ones) -->
|
||||||
|
<!ENTITY % tbl.table.att '
|
||||||
|
tabstyle CDATA #IMPLIED
|
||||||
|
tocentry %yesorno.attvals; #IMPLIED
|
||||||
|
shortentry %yesorno.attvals; #IMPLIED
|
||||||
|
orient (port|land) #IMPLIED
|
||||||
|
pgwide %yesorno.attvals; #IMPLIED
|
||||||
|
summary CDATA #IMPLIED
|
||||||
|
width CDATA #IMPLIED
|
||||||
|
border CDATA #IMPLIED
|
||||||
|
rules (none | groups | rows | cols | all) #IMPLIED
|
||||||
|
cellspacing CDATA #IMPLIED
|
||||||
|
cellpadding CDATA #IMPLIED
|
||||||
|
align (left|center|right) #IMPLIED
|
||||||
|
bgcolor CDATA #IMPLIED
|
||||||
|
'>
|
||||||
|
|
||||||
|
<!ENTITY % tbl.frame.attval "void|above|below|hsides|lhs|rhs|vsides|box|border|
|
||||||
|
top|bottom|topbot|all|sides|none">
|
||||||
|
|
||||||
|
<!-- Allow either objects or inlines; beware of REs between elements. -->
|
||||||
|
<!ENTITY % tbl.entry.mdl "%para.char.mix; | %tabentry.mix;">
|
||||||
|
|
||||||
|
<!-- thead, tfoot, and tbody are defined in both table models,
|
||||||
|
so we set up parameter entities to define union models for them
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ENTITY % tbl.hdft.mdl "(tr+|(colspec*,row+))">
|
||||||
|
<!ENTITY % tbl.tbody.mdl "(tr+|row+)">
|
||||||
|
<!ENTITY % tbl.valign.attval "top|middle|bottom|baseline">
|
|
@ -0,0 +1,314 @@
|
||||||
|
<!-- XML EXCHANGE TABLE MODEL DECLARATION MODULE -->
|
||||||
|
|
||||||
|
<!-- This set of declarations defines the XML version of the Exchange
|
||||||
|
Table Model as of the date shown in the Formal Public Identifier
|
||||||
|
(FPI) for this entity.
|
||||||
|
|
||||||
|
This set of declarations may be referred to using a public external
|
||||||
|
entity declaration and reference as shown in the following three
|
||||||
|
lines:
|
||||||
|
|
||||||
|
<!ENTITY % calstblx
|
||||||
|
PUBLIC "-//OASIS//DTD XML Exchange Table Model 19990315//EN">
|
||||||
|
%calstblx;
|
||||||
|
|
||||||
|
If various parameter entities used within this set of declarations
|
||||||
|
are to be given non-default values, the appropriate declarations
|
||||||
|
should be given before calling in this package (i.e., before the
|
||||||
|
"%calstblx;" reference).
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- The motivation for this XML version of the Exchange Table Model
|
||||||
|
is simply to create an XML version of the SGML Exchange Table
|
||||||
|
Model. By design, no effort has been made to "improve" the model.
|
||||||
|
|
||||||
|
This XML version incorporates the logical bare minimum changes
|
||||||
|
necessary to make the Exchange Table Model a valid XML DTD.
|
||||||
|
|
||||||
|
It has been modified slightly for use in the combined HTML/CALS models
|
||||||
|
supported by DocBook V4.3.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- The XML version of the Exchange Table Model differs from
|
||||||
|
the SGML version in the following ways:
|
||||||
|
|
||||||
|
The following parameter entities have been removed:
|
||||||
|
|
||||||
|
- tbl.table.excep, tbl.hdft.excep, tbl.row.excep, tbl.entry.excep
|
||||||
|
There are no exceptions in XML. The following normative statement
|
||||||
|
is made in lieu of exceptions: the exchange table model explicitly
|
||||||
|
forbids a table from occurring within another table. If the
|
||||||
|
content model of an entry includes a table element, then this
|
||||||
|
cannot be enforced by the DTD, but it is a deviation from the
|
||||||
|
exchange table model to include a table within a table.
|
||||||
|
|
||||||
|
- tbl.hdft.name, tbl.hdft.mdl, tbl.hdft.excep, tbl.hdft.att
|
||||||
|
The motivation for these elements was to change the table
|
||||||
|
header/footer elements. Since XML does not allow element declarations
|
||||||
|
to contain name groups, and the exchange table model does not
|
||||||
|
allow a table to contain footers, the continued presence of these
|
||||||
|
attributes seems unnecessary.
|
||||||
|
|
||||||
|
The following parameter entity has been added:
|
||||||
|
|
||||||
|
- tbl.thead.att
|
||||||
|
This entity parameterizes the attributes on thead. It replaces
|
||||||
|
the tbl.hdft.att parameter entity.
|
||||||
|
|
||||||
|
Other miscellaneous changes:
|
||||||
|
|
||||||
|
- Tag ommission indicators have been removed
|
||||||
|
- Comments have been removed from declarations
|
||||||
|
- NUMBER attributes have been changed to NMTOKEN
|
||||||
|
- NUTOKEN attributes have been to changed to NMTOKEN
|
||||||
|
- Removed the grouping characters around the content model
|
||||||
|
parameter entry for the 'entry' element. This is necessary
|
||||||
|
so that an entry can contain #PCDATA and be defined as an
|
||||||
|
optional, repeatable OR group beginning with #PCDATA.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- This entity includes a set of element and attribute declarations
|
||||||
|
that partially defines the Exchange table model. However, the model
|
||||||
|
is not well-defined without the accompanying natural language
|
||||||
|
description of the semantics (meanings) of these various elements,
|
||||||
|
attributes, and attribute values. The semantic writeup, also available
|
||||||
|
from SGML Open, should be used in conjunction with this entity.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- In order to use the Exchange table model, various parameter entity
|
||||||
|
declarations are required. A brief description is as follows:
|
||||||
|
|
||||||
|
ENTITY NAME WHERE USED WHAT IT IS
|
||||||
|
|
||||||
|
%yesorno In ATTLIST of: An attribute declared value
|
||||||
|
almost all elements for a "boolean" attribute
|
||||||
|
|
||||||
|
%paracon In content model of: The "text" (logical content)
|
||||||
|
<entry> of the model group for <entry>
|
||||||
|
|
||||||
|
%titles In content model of: The "title" part of the model
|
||||||
|
table element group for the table element
|
||||||
|
|
||||||
|
%tbl.table.name In declaration of: The name of the "table"
|
||||||
|
table element element
|
||||||
|
|
||||||
|
%tbl.table-titles.mdl In content model of: The model group for the title
|
||||||
|
table elements part of the content model for
|
||||||
|
table element
|
||||||
|
|
||||||
|
%tbl.table.mdl In content model of: The model group for the content
|
||||||
|
table elements model for table element,
|
||||||
|
often (and by default) defined
|
||||||
|
in terms of %tbl.table-titles.mdl
|
||||||
|
and tgroup
|
||||||
|
|
||||||
|
%tbl.table.att In ATTLIST of: Additional attributes on the
|
||||||
|
table element table element
|
||||||
|
|
||||||
|
%bodyatt In ATTLIST of: Additional attributes on the
|
||||||
|
table element table element (for backward
|
||||||
|
compatibility with the SGML
|
||||||
|
model)
|
||||||
|
|
||||||
|
%tbl.tgroup.mdl In content model of: The model group for the content
|
||||||
|
<tgroup> model for <tgroup>
|
||||||
|
|
||||||
|
%tbl.tgroup.att In ATTLIST of: Additional attributes on the
|
||||||
|
<tgroup> <tgroup> element
|
||||||
|
|
||||||
|
%tbl.thead.att In ATTLIST of: Additional attributes on the
|
||||||
|
<thead> <thead> element
|
||||||
|
|
||||||
|
%tbl.tbody.att In ATTLIST of: Additional attributes on the
|
||||||
|
<tbody> <tbody> element
|
||||||
|
|
||||||
|
%tbl.colspec.att In ATTLIST of: Additional attributes on the
|
||||||
|
<colspec> <colspec> element
|
||||||
|
|
||||||
|
%tbl.row.mdl In content model of: The model group for the content
|
||||||
|
<row> model for <row>
|
||||||
|
|
||||||
|
%tbl.row.att In ATTLIST of: Additional attributes on the
|
||||||
|
<row> <row> element
|
||||||
|
|
||||||
|
%tbl.entry.mdl In content model of: The model group for the content
|
||||||
|
<entry> model for <entry>
|
||||||
|
|
||||||
|
%tbl.entry.att In ATTLIST of: Additional attributes on the
|
||||||
|
<entry> <entry> element
|
||||||
|
|
||||||
|
This set of declarations will use the default definitions shown below
|
||||||
|
for any of these parameter entities that are not declared before this
|
||||||
|
set of declarations is referenced.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- These definitions are not directly related to the table model, but are
|
||||||
|
used in the default CALS table model and may be defined elsewhere (and
|
||||||
|
prior to the inclusion of this table module) in the referencing DTD. -->
|
||||||
|
|
||||||
|
<!ENTITY % yesorno 'NMTOKEN'> <!-- no if zero(s), yes if any other value -->
|
||||||
|
<!ENTITY % titles 'title?'>
|
||||||
|
<!ENTITY % pcd "#PCDATA">
|
||||||
|
<!ENTITY % paracon '%pcd;'> <!-- default for use in entry content -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
The parameter entities as defined below change and simplify the CALS table
|
||||||
|
model as published (as part of the Example DTD) in MIL-HDBK-28001. The
|
||||||
|
resulting simplified DTD has support from the SGML Open vendors and is
|
||||||
|
therefore more interoperable among different systems.
|
||||||
|
|
||||||
|
These following declarations provide the Exchange default definitions
|
||||||
|
for these entities. However, these entities can be redefined (by giving
|
||||||
|
the appropriate parameter entity declaration(s) prior to the reference
|
||||||
|
to this Table Model declaration set entity) to fit the needs of the
|
||||||
|
current application.
|
||||||
|
|
||||||
|
Note, however, that changes may have significant effect on the ability to
|
||||||
|
interchange table information. These changes may manifest themselves
|
||||||
|
in useability, presentation, and possible structure information degradation.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ENTITY % tbl.table.name "table">
|
||||||
|
<!ENTITY % tbl.table-titles.mdl "%titles;,">
|
||||||
|
<!ENTITY % tbl.table-main.mdl "tgroup+">
|
||||||
|
<!ENTITY % tbl.table.mdl "%tbl.table-titles.mdl; %tbl.table-main.mdl;">
|
||||||
|
<!ENTITY % tbl.table.att "
|
||||||
|
pgwide %yesorno; #IMPLIED ">
|
||||||
|
<!ENTITY % bodyatt "">
|
||||||
|
<!ENTITY % tbl.tgroup.mdl "colspec*,thead?,tbody">
|
||||||
|
<!ENTITY % tbl.tgroup.att "">
|
||||||
|
<!ENTITY % tbl.thead.att "">
|
||||||
|
<!ENTITY % tbl.tbody.att "">
|
||||||
|
<!ENTITY % tbl.colspec.att "">
|
||||||
|
<!ENTITY % tbl.row.mdl "entry+">
|
||||||
|
<!ENTITY % tbl.row.att "">
|
||||||
|
<!ENTITY % tbl.entry.mdl "(%paracon;)*">
|
||||||
|
<!ENTITY % tbl.entry.att "">
|
||||||
|
|
||||||
|
<!ENTITY % tbl.frame.attval "top|bottom|topbot|all|sides|none">
|
||||||
|
<!ENTITY % tbl.tbody.mdl "row+">
|
||||||
|
|
||||||
|
<!-- ===== Element and attribute declarations follow. ===== -->
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Default declarations previously defined in this entity and
|
||||||
|
referenced below include:
|
||||||
|
ENTITY % tbl.table.name "table"
|
||||||
|
ENTITY % tbl.table-titles.mdl "%titles;,"
|
||||||
|
ENTITY % tbl.table.mdl "%tbl.table-titles; tgroup+"
|
||||||
|
ENTITY % tbl.table.att "
|
||||||
|
pgwide %yesorno; #IMPLIED "
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ELEMENT %tbl.table.name; (%tbl.table.mdl;)>
|
||||||
|
|
||||||
|
<!ATTLIST %tbl.table.name;
|
||||||
|
frame (%tbl.frame.attval;) #IMPLIED
|
||||||
|
colsep %yesorno; #IMPLIED
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
%tbl.table.att;
|
||||||
|
%bodyatt;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Default declarations previously defined in this entity and
|
||||||
|
referenced below include:
|
||||||
|
ENTITY % tbl.tgroup.mdl "colspec*,thead?,tbody"
|
||||||
|
ENTITY % tbl.tgroup.att ""
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ELEMENT tgroup (%tbl.tgroup.mdl;) >
|
||||||
|
|
||||||
|
<!ATTLIST tgroup
|
||||||
|
cols NMTOKEN #REQUIRED
|
||||||
|
colsep %yesorno; #IMPLIED
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
align (left|right|center|justify|char) #IMPLIED
|
||||||
|
%tbl.tgroup.att;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Default declarations previously defined in this entity and
|
||||||
|
referenced below include:
|
||||||
|
ENTITY % tbl.colspec.att ""
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ELEMENT colspec EMPTY >
|
||||||
|
|
||||||
|
<!ATTLIST colspec
|
||||||
|
colnum NMTOKEN #IMPLIED
|
||||||
|
colname NMTOKEN #IMPLIED
|
||||||
|
colwidth CDATA #IMPLIED
|
||||||
|
colsep %yesorno; #IMPLIED
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
align (left|right|center|justify|char) #IMPLIED
|
||||||
|
char CDATA #IMPLIED
|
||||||
|
charoff NMTOKEN #IMPLIED
|
||||||
|
%tbl.colspec.att;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Default declarations previously defined in this entity and
|
||||||
|
referenced below include:
|
||||||
|
ENTITY % tbl.thead.att ""
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ELEMENT thead (row+)>
|
||||||
|
|
||||||
|
<!ATTLIST thead
|
||||||
|
valign (top|middle|bottom) #IMPLIED
|
||||||
|
%tbl.thead.att;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Default declarations previously defined in this entity and
|
||||||
|
referenced below include:
|
||||||
|
ENTITY % tbl.tbody.att ""
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ELEMENT tbody (%tbl.tbody.mdl;)>
|
||||||
|
|
||||||
|
<!ATTLIST tbody
|
||||||
|
valign (top|middle|bottom) #IMPLIED
|
||||||
|
%tbl.tbody.att;
|
||||||
|
>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Default declarations previously defined in this entity and
|
||||||
|
referenced below include:
|
||||||
|
ENTITY % tbl.row.mdl "entry+"
|
||||||
|
ENTITY % tbl.row.att ""
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ELEMENT row (%tbl.row.mdl;)>
|
||||||
|
|
||||||
|
<!ATTLIST row
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
valign (top|middle|bottom) #IMPLIED
|
||||||
|
%tbl.row.att;
|
||||||
|
>
|
||||||
|
|
||||||
|
|
||||||
|
<!--
|
||||||
|
Default declarations previously defined in this entity and
|
||||||
|
referenced below include:
|
||||||
|
ENTITY % paracon "#PCDATA"
|
||||||
|
ENTITY % tbl.entry.mdl "(%paracon;)*"
|
||||||
|
ENTITY % tbl.entry.att ""
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!ELEMENT entry (%tbl.entry.mdl;)*>
|
||||||
|
|
||||||
|
<!ATTLIST entry
|
||||||
|
colname NMTOKEN #IMPLIED
|
||||||
|
namest NMTOKEN #IMPLIED
|
||||||
|
nameend NMTOKEN #IMPLIED
|
||||||
|
morerows NMTOKEN #IMPLIED
|
||||||
|
colsep %yesorno; #IMPLIED
|
||||||
|
rowsep %yesorno; #IMPLIED
|
||||||
|
align (left|right|center|justify|char) #IMPLIED
|
||||||
|
char CDATA #IMPLIED
|
||||||
|
charoff NMTOKEN #IMPLIED
|
||||||
|
valign (top|middle|bottom) #IMPLIED
|
||||||
|
%tbl.entry.att;
|
||||||
|
>
|
|
@ -0,0 +1,107 @@
|
||||||
|
README for the DocBook Stylesheets
|
||||||
|
|
||||||
|
These are XSL stylesheets for the DocBook XML DTD. (They would
|
||||||
|
also work for the DocBook DTD, modulo certain namecase problems
|
||||||
|
and the fact that there aren't (yet) any XSL implementations
|
||||||
|
that work with SGML source documents.)
|
||||||
|
|
||||||
|
As of version 1.0, most of the elements in DocBook are handled
|
||||||
|
in some way or another, usually reasonably, but there's still
|
||||||
|
lots of work to be done.
|
||||||
|
|
||||||
|
For more information, see http://docbook.sourceforge.net/
|
||||||
|
|
||||||
|
Manifest
|
||||||
|
--------
|
||||||
|
|
||||||
|
README this file
|
||||||
|
TODO planned features not yet implemented (may be incomplete :-)
|
||||||
|
BUGS known problems (may also be incomplete :-)
|
||||||
|
VERSION the current version number (note that this is an XSL stylesheet,
|
||||||
|
included by both fo/docbook.xsl and html/docbook.xsl)
|
||||||
|
WhatsNew changes since the last public release (for a complete list
|
||||||
|
of changes, see the ChangeLog file(s))
|
||||||
|
common/ contains code common to both stylesheets
|
||||||
|
doc/ documentation
|
||||||
|
docsrc/ documentation sources
|
||||||
|
extensions/ Java extensions
|
||||||
|
fo/ stylesheets that produce XSL FO
|
||||||
|
html/ stylesheets that produce HTML
|
||||||
|
htmlhelp/ stylesheets that produce HTML Help
|
||||||
|
images/ images
|
||||||
|
javahelp/ stylesheets that produce Java Help
|
||||||
|
lib/ contains schema-independent functions
|
||||||
|
template/ contains templates for building stylesheet customization layers
|
||||||
|
xhtml/ stylesheets that produce XHTML
|
||||||
|
|
||||||
|
Changes
|
||||||
|
-------
|
||||||
|
|
||||||
|
See the ChangeLog in each directory for additional information
|
||||||
|
about the specific changes.
|
||||||
|
|
||||||
|
See WhatsNew for changes since the last release.
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
Unpack the distribution somewhere.
|
||||||
|
|
||||||
|
Use
|
||||||
|
---
|
||||||
|
|
||||||
|
Process your DocBook documents with one of the following stylesheets
|
||||||
|
using your favorite XSLT processor:
|
||||||
|
|
||||||
|
xhtml/docbook.xsl - for XHTML
|
||||||
|
html/docbook.xsl - for HTML (as a single file)
|
||||||
|
html/chunk.xsl - for HTML (multiple files)
|
||||||
|
fo/docbook.xsl - for XSL FO
|
||||||
|
htmlhelp/htmlhelp.xsl - for HTML Help
|
||||||
|
javahelp/javahelp.xsl - for JavaHelp
|
||||||
|
|
||||||
|
Copyright
|
||||||
|
---------
|
||||||
|
|
||||||
|
Copyright (C) 1999, 2000, 2001, 2002 Norman Walsh
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person
|
||||||
|
obtaining a copy of this software and associated documentation
|
||||||
|
files (the ``Software''), to deal in the Software without
|
||||||
|
restriction, including without limitation the rights to use,
|
||||||
|
copy, modify, merge, publish, distribute, sublicense, and/or
|
||||||
|
sell copies of the Software, and to permit persons to whom the
|
||||||
|
Software is furnished to do so, subject to the following
|
||||||
|
conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be
|
||||||
|
included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
Except as contained in this notice, the names of individuals
|
||||||
|
credited with contribution to this software shall not be used in
|
||||||
|
advertising or otherwise to promote the sale, use or other
|
||||||
|
dealings in this Software without prior written authorization
|
||||||
|
from the individuals in question.
|
||||||
|
|
||||||
|
Any stylesheet derived from this Software that is publically
|
||||||
|
distributed will be identified with a different name and the
|
||||||
|
version strings in any derived Software will be changed so that
|
||||||
|
no possibility of confusion between the derived package and this
|
||||||
|
Software will exist.
|
||||||
|
|
||||||
|
Warranty
|
||||||
|
--------
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
NONINFRINGEMENT. IN NO EVENT SHALL NORMAN WALSH OR ANY OTHER
|
||||||
|
CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
Contacting the Author
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
These stylesheets are maintained by Norman Walsh, <ndw@nwalsh.com>.
|
|
@ -0,0 +1,84 @@
|
||||||
|
<?xml version='1.0'?> <!-- -*- nxml -*- -->
|
||||||
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
xmlns:fm="http://freshmeat.net/projects/freshmeat-submit/"
|
||||||
|
xmlns:sf="http://sourceforge.net/"
|
||||||
|
exclude-result-prefixes="fm sf"
|
||||||
|
version='1.0'>
|
||||||
|
|
||||||
|
<xsl:param name="VERSION" select="string(document('')//fm:Version[1])"/>
|
||||||
|
<xsl:param name="sf-relid" select="0"/>
|
||||||
|
<xsl:strip-space elements="fm:*"/>
|
||||||
|
|
||||||
|
<fm:project>
|
||||||
|
<fm:Project>DocBook</fm:Project>
|
||||||
|
<fm:Branch>XSL Stylesheets</fm:Branch>
|
||||||
|
<fm:Version>1.65.1</fm:Version>
|
||||||
|
<!--
|
||||||
|
<fm:License>MIT/X Consortium License</fm:License>
|
||||||
|
-->
|
||||||
|
<fm:Release-Focus>
|
||||||
|
<!-- initial freshmeat announcement -->
|
||||||
|
<!-- documentation -->
|
||||||
|
<!-- code cleanup -->
|
||||||
|
<!-- Minor feature enhancements -->
|
||||||
|
<!-- major feature enhancements -->
|
||||||
|
Minor bugfixes
|
||||||
|
<!-- major bugfixes -->
|
||||||
|
<!-- minor security fixes -->
|
||||||
|
<!-- major security fixes -->
|
||||||
|
</fm:Release-Focus>
|
||||||
|
<fm:Home-Page-URL>http://sourceforge.net/projects/docbook/</fm:Home-Page-URL>
|
||||||
|
<fm:Gzipped-Tar-URL>http://prdownloads.sourceforge.net/docbook/docbook-xsl-{VERSION}.tar.gz?download</fm:Gzipped-Tar-URL>
|
||||||
|
<fm:Zipped-Tar-URL>http://prdownloads.sourceforge.net/docbook/docbook-xsl-{VERSION}.zip?download</fm:Zipped-Tar-URL>
|
||||||
|
<fm:Changelog-URL>http://sourceforge.net/project/shownotes.php?release_id={SFRELID}</fm:Changelog-URL>
|
||||||
|
<fm:CVS-URL>http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/xsl/</fm:CVS-URL>
|
||||||
|
<fm:Mailing-List-URL>http://lists.oasis-open.org/archives/docbook-apps/</fm:Mailing-List-URL>
|
||||||
|
<fm:Changes>Small bug fixes. Fixed CA localization.
|
||||||
|
</fm:Changes>
|
||||||
|
</fm:project>
|
||||||
|
|
||||||
|
<xsl:template match="/" priority="-100">
|
||||||
|
<xsl:if test="$sf-relid = 0">
|
||||||
|
<xsl:message terminate="yes">
|
||||||
|
<xsl:text>You must specify the sf-relid as a parameter.</xsl:text>
|
||||||
|
</xsl:message>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:apply-templates select="//fm:project"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="fm:project">
|
||||||
|
<xsl:text> </xsl:text>
|
||||||
|
<xsl:apply-templates/>
|
||||||
|
<xsl:text> </xsl:text>
|
||||||
|
<xsl:apply-templates select="fm:Changes" mode="text"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="fm:Changes"/>
|
||||||
|
|
||||||
|
<xsl:template match="fm:Gzipped-Tar-URL|fm:Zipped-Tar-URL">
|
||||||
|
<xsl:value-of select="local-name(.)"/>
|
||||||
|
<xsl:text>: </xsl:text>
|
||||||
|
<xsl:value-of select="substring-before(., '{VERSION}')"/>
|
||||||
|
<xsl:value-of select="$VERSION"/>
|
||||||
|
<xsl:value-of select="substring-after(., '{VERSION}')"/>
|
||||||
|
<xsl:text> </xsl:text>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="fm:Changelog-URL">
|
||||||
|
<xsl:value-of select="local-name(.)"/>
|
||||||
|
<xsl:text>: </xsl:text>
|
||||||
|
<xsl:value-of select="substring-before(., '{SFRELID}')"/>
|
||||||
|
<xsl:value-of select="$sf-relid"/>
|
||||||
|
<xsl:value-of select="substring-after(., '{SFRELID}')"/>
|
||||||
|
<xsl:text> </xsl:text>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="fm:*">
|
||||||
|
<xsl:value-of select="local-name(.)"/>
|
||||||
|
<xsl:text>: </xsl:text>
|
||||||
|
<xsl:value-of select="normalize-space(.)"/>
|
||||||
|
<xsl:text> </xsl:text>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
|
@ -0,0 +1,624 @@
|
||||||
|
2004-02-18 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* labels.xsl: Turn off procedure number when formal.procedures = 0.
|
||||||
|
|
||||||
|
2004-01-29 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* subtitles.xsl, titles.xsl: Support 'info'
|
||||||
|
|
||||||
|
2004-01-26 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* targets.xsl: Pass empty doctype parameters to write.chunk so the
|
||||||
|
output can be used as an entity without DOCTYPE.
|
||||||
|
|
||||||
|
2003-12-31 Jirka Kosek <kosek@users.sourceforge.net>
|
||||||
|
|
||||||
|
* autoidx-ng.xsl, l10n.dtd: Added support for new i18n friendly indexing method
|
||||||
|
|
||||||
|
2003-12-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile: Support sr_Latn locale
|
||||||
|
|
||||||
|
2003-12-13 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.xml: Added sr_Latn.xml for Serbian in Latin script.
|
||||||
|
|
||||||
|
2003-12-06 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Fixed bug #851603 infinite recursion in copyright.year when
|
||||||
|
no <year> elements at all.
|
||||||
|
|
||||||
|
2003-12-05 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: section.level now computes refentry sections relative to container element.
|
||||||
|
|
||||||
|
2003-11-30 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl, labels.xsl, subtitles.xsl, table.xsl, targets.xsl, titles.xsl:
|
||||||
|
Added CVS $Id$ comment.
|
||||||
|
|
||||||
|
2003-11-17 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* labels.xsl: Fixed bug where sect1 generated infinite loop when root element
|
||||||
|
and $section.label.includes.component.label is non zero.
|
||||||
|
|
||||||
|
2003-10-12 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl: Fixed cut-and-paste typo in substitute.markup template.
|
||||||
|
|
||||||
|
2003-09-23 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* pi.xsl: Fixed dbdatetime PI, which was using context
|
||||||
|
datetime-abbrev for format "B" rather than datetime-full.
|
||||||
|
|
||||||
|
2003-08-27 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* titles.xsl: Support HTML tables
|
||||||
|
|
||||||
|
2003-08-18 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore: Ignore generate XML documents for Latin and Bangla
|
||||||
|
|
||||||
|
* Makefile, l10n.xml: Add support for Latin
|
||||||
|
|
||||||
|
2003-07-31 Jirka Kosek <kosek@users.sourceforge.net>
|
||||||
|
|
||||||
|
* Makefile: Update Makefile to new gentext mechanism
|
||||||
|
|
||||||
|
2003-07-31 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl: Added template for question in object.xref.markup mode
|
||||||
|
to handle case of defaultlabel = qanda.
|
||||||
|
|
||||||
|
* labels.xsl: Removed processing of @label on qandadiv since that is
|
||||||
|
not an allowed attribute of qandadiv.
|
||||||
|
|
||||||
|
2003-07-25 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* Makefile, l10n.xml: Added bn.xml Bangla language.
|
||||||
|
|
||||||
|
* gentext.xsl: Handles new xref contexts and the new xrefstyle attribute
|
||||||
|
on xref elements.
|
||||||
|
|
||||||
|
* pi.xsl: Now uses new datetime-full and datetime-abbrev gentext
|
||||||
|
contexts for certain date components.
|
||||||
|
|
||||||
|
2003-07-08 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.xsl: Removed extraneous variable l10n.name which is not used.
|
||||||
|
|
||||||
|
2003-06-24 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.xsl: Fixed bug in l10n.language template where $target parameter
|
||||||
|
was missing from xpath expression.
|
||||||
|
|
||||||
|
2003-06-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile: Added Croatian
|
||||||
|
|
||||||
|
2003-05-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile: Added Arabic
|
||||||
|
|
||||||
|
2003-05-08 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* titles.xsl: Support 'title.markup' on glossentry
|
||||||
|
|
||||||
|
2003-04-29 Jirka Kosek <kosek@users.sourceforge.net>
|
||||||
|
|
||||||
|
* pi.xsl: Added localization support for datetime PI
|
||||||
|
|
||||||
|
2003-04-27 <dcramer@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Added level 6 to test for section depth in section.level template so that section.title.level6.properties will be used for sections that are 6 deep or deeper. This should also cause a h6 to be created in html output.
|
||||||
|
|
||||||
|
2003-04-16 Jirka Kosek <kosek@users.sourceforge.net>
|
||||||
|
|
||||||
|
* pi.xsl: Changed PI name from <?timestamp?> to <?dbtimestamp?>
|
||||||
|
|
||||||
|
2003-04-14 Jirka Kosek <kosek@users.sourceforge.net>
|
||||||
|
|
||||||
|
* pi.xsl: New file.
|
||||||
|
|
||||||
|
2003-04-13 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* table.xsl: A few bug fixes for the colsep/rowsep code
|
||||||
|
|
||||||
|
2003-04-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Don't use SVG graphics if use.svg=0
|
||||||
|
|
||||||
|
* table.xsl: Support template to find out if there are more columns in the current row of a table
|
||||||
|
|
||||||
|
2003-04-05 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl: Now uses number-and-title-template for sections only
|
||||||
|
if $section.autolabel is not zero.
|
||||||
|
|
||||||
|
2003-03-02 Jirka Kosek <kosek@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Fixed several errors related to TeX math processing
|
||||||
|
|
||||||
|
2003-02-25 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.dtd: Added missing 'english-language-name' attribute to the l10n
|
||||||
|
element, and the missing 'style' attribute to the template
|
||||||
|
element so the current gentext documents will validate.
|
||||||
|
|
||||||
|
2003-01-30 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Corrected several references to parameter $qanda.defaultlabel
|
||||||
|
that were missing the "$".
|
||||||
|
|
||||||
|
2003-01-23 Adam Di Carlo <adicarlo@users.sourceforge.net>
|
||||||
|
|
||||||
|
* Makefile: make use of cvstools/Makefile.incl
|
||||||
|
|
||||||
|
2003-01-20 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl: Support experimental parameter to specify that number-and-title xrefs should be used even when things are numbered
|
||||||
|
|
||||||
|
* gentext.xsl: Added object.titleabbrev.markup for consistency
|
||||||
|
|
||||||
|
* l10n.xsl: Added gentext.template.exists to test if a gentext template exists. Clever name, huh?
|
||||||
|
|
||||||
|
* titles.xsl: Expanded support for obtaining titleabbrevs
|
||||||
|
|
||||||
|
2003-01-10 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, l10n.xml: Added bg.xml
|
||||||
|
|
||||||
|
* Makefile: Add Bulgarian
|
||||||
|
|
||||||
|
2003-01-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* labels.xsl, titles.xsl: Support setindex (there were all sorts of things wrong with it)
|
||||||
|
|
||||||
|
2003-01-01 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* table.xsl: CALS says the default for colsep and rowsep is 1.
|
||||||
|
|
||||||
|
* table.xsl: Fix variable scoping problem
|
||||||
|
|
||||||
|
* titles.xsl: Support titleabbrev (outside of info elements anyway)
|
||||||
|
|
||||||
|
2002-12-18 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: The select.mediaobject.index template now uses the
|
||||||
|
$stylesheet.result.type parameter to choose the role
|
||||||
|
value, with xhtml falling back to html if needed.
|
||||||
|
|
||||||
|
2002-12-17 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Changed selection of mediaobject to be more consistent using
|
||||||
|
a separate select.mediaobject.index template. Also added
|
||||||
|
text-align to block containing external-graphic in fo output.
|
||||||
|
|
||||||
|
2002-11-23 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Fixed bug in orderedlist-starting-number test when
|
||||||
|
@continuation not set.
|
||||||
|
|
||||||
|
2002-11-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Handle nested refsections in section.level
|
||||||
|
|
||||||
|
* gentext.xsl: Pass full xpath name to gentext.template instead of just the local-name
|
||||||
|
|
||||||
|
* l10n.xsl: Make gentext.template search through /-separated names
|
||||||
|
|
||||||
|
2002-10-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.xsl: Support output of language attribute
|
||||||
|
|
||||||
|
2002-10-09 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.xsl: Make 3166 language codes work in upper or lowercase
|
||||||
|
|
||||||
|
2002-10-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Added orderedlist-starting-number and orderedlist-item-number templates
|
||||||
|
|
||||||
|
2002-10-01 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Changed the section.level template to return a number that matches
|
||||||
|
the section level (sect1 = 1, etc.).
|
||||||
|
|
||||||
|
2002-09-27 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.xml: Add Thai
|
||||||
|
|
||||||
|
2002-09-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile, l10n.xml: Added LT and VI localizations
|
||||||
|
|
||||||
|
2002-09-04 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Refactor person.name templates so that it's easy to override them
|
||||||
|
|
||||||
|
* l10n.xsl: Move l10n.* parameters into ../params so they can be properly documented; made l10n.gentext.use.xref.language a numeric boolean parameter instead of a proper boolean
|
||||||
|
|
||||||
|
2002-09-03 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Remove spurious character on line 432
|
||||||
|
|
||||||
|
* table.xsl: Make sure row-level colsep and rowsep values are 'inherited' onto missing cells
|
||||||
|
|
||||||
|
2002-09-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Support person-name style from localization data in personal names
|
||||||
|
|
||||||
|
2002-08-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* table.xsl: Make inherited attributes work for 'missing' table cells
|
||||||
|
|
||||||
|
2002-07-29 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* targetdatabase.dtd: Forgot to fix the attribute on the <obj> element
|
||||||
|
as well.
|
||||||
|
|
||||||
|
* targetdatabase.dtd: Changed the targetptr attribute from #REQUIRED to #IMPLIED
|
||||||
|
since it is not required on all objects.
|
||||||
|
|
||||||
|
* targetdatabase.dtd: Replaced targetid attribute on document with targetptr
|
||||||
|
per the decision of the DocBook Technical Committee.
|
||||||
|
|
||||||
|
2002-07-17 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* labels.xsl: Fixed thinko
|
||||||
|
|
||||||
|
* labels.xsl: Don't count equations without titles when labelling equations
|
||||||
|
|
||||||
|
2002-07-13 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* targets.xsl: Fixed output encoding to utf-8 so a targets database
|
||||||
|
can handle mixed languages.
|
||||||
|
Added omit-xml-declaration to get around the standalone
|
||||||
|
attribute in the XML declaration not being permitted
|
||||||
|
in system entities.
|
||||||
|
|
||||||
|
2002-07-09 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* labels.xsl: Bug #558333: use containing section for the label of a bridgehead if section.autolabel is non-zero
|
||||||
|
|
||||||
|
2002-07-07 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Changed the name of the second-order itemizedlist mark
|
||||||
|
from 'round' (not supported in browsers' <ul> 'type' attribute)
|
||||||
|
to 'circle', which is supported.
|
||||||
|
Both are already supported in FO stylesheet.
|
||||||
|
|
||||||
|
2002-07-06 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* targets.xsl: The default.encoding parameter has been renamed chunker.output.encoding
|
||||||
|
|
||||||
|
2002-07-05 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* labels.xsl, titles.xsl: Added 'verbose' parameter to default templates in
|
||||||
|
title.markup mode and label.markup mode, and made
|
||||||
|
the error message conditional on that parameter. The
|
||||||
|
default value is 1, so the message will still be
|
||||||
|
there for normal usage. But the targets.xsl
|
||||||
|
stylesheet sets verbose to 0 when trolling for
|
||||||
|
cross reference targets to eliminate useless noise
|
||||||
|
on elements that have an id attribute but no title or label.
|
||||||
|
|
||||||
|
* targetdatabase.dtd: New file.
|
||||||
|
|
||||||
|
* targets.xsl: New file.
|
||||||
|
|
||||||
|
2002-06-11 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Augmented debugging message (commented out)
|
||||||
|
|
||||||
|
* gentext.xsl: Experimental support for xrefstyle; support for %d in templates
|
||||||
|
|
||||||
|
* l10n.xsl: Experimental support for xrefstyle
|
||||||
|
|
||||||
|
* titles.xsl: Support refsynopsisdiv in title.markup mode
|
||||||
|
|
||||||
|
2002-05-23 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Support for SVG in HTML
|
||||||
|
|
||||||
|
2002-05-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl: Whitespace
|
||||||
|
|
||||||
|
* labels.xsl: Don't generate '. ' after QandA labels
|
||||||
|
|
||||||
|
2002-05-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Fix bugs in extension checking in mediaobject.filename
|
||||||
|
|
||||||
|
* l10n.xsl: Reworked test in gentext.template; should have no user-visible changes
|
||||||
|
|
||||||
|
* table.xsl: Removed some obsolete templates; reworked inheritance for improved border support (still implements old DocBook semantics which aren't quite CALS)
|
||||||
|
|
||||||
|
* titles.xsl: Improved error message
|
||||||
|
|
||||||
|
2002-04-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile, l10n.xml: Add support for Hebrew localization
|
||||||
|
|
||||||
|
2002-03-24 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Change comment: personname is no longer experimental
|
||||||
|
|
||||||
|
2002-03-18 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Replace generate.*.toc and generate.*.lot with single generate.toc parameter.
|
||||||
|
|
||||||
|
2002-03-18 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl: Replaced the substitute-markup template with one
|
||||||
|
using simpler logic. Added params for the content
|
||||||
|
to be substituted so it can be used with olinks
|
||||||
|
where the content is supplied from a data file.
|
||||||
|
|
||||||
|
2002-03-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Handle revisionflag a little better on copyrights
|
||||||
|
|
||||||
|
* common.xsl, gentext.xsl, l10n.xsl, labels.xsl, subtitles.xsl, table.xsl, titles.xsl:
|
||||||
|
Whitespace only: change CR/LF back to LF. Norm was a total moron.
|
||||||
|
|
||||||
|
* common.xsl, gentext.xsl, l10n.xsl, labels.xsl, subtitles.xsl, table.xsl, titles.xsl:
|
||||||
|
Whitespace changes only: use PC-style CR/LF because Unix clients choke on this far less often than PC clients choke on the reverse. Grrr.
|
||||||
|
|
||||||
|
2002-03-07 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* titles.xsl: refentry title in title.markup mode now follows $allow-anchors setting
|
||||||
|
to prevent index entries from appearing in the TOC.
|
||||||
|
|
||||||
|
2002-01-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.dtd, l10n.xml: Tweaks to the l10n.dtd to make it as namespace aware as DTDs can be
|
||||||
|
|
||||||
|
2002-01-25 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* table.xsl: Fix bug that caused rowsep and colsep to be ignored on empty cells
|
||||||
|
|
||||||
|
2002-01-10 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.xsl: Don't rely on the order of attribute nodes cause they don't have one
|
||||||
|
|
||||||
|
2002-01-03 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile: Added Thai localization
|
||||||
|
|
||||||
|
* common.xsl: Calculate itemized list symbol based on depth analagous to orderedlist numeration
|
||||||
|
|
||||||
|
* gentext.xsl: Use unnumbered gentext keys appropriately
|
||||||
|
|
||||||
|
2001-12-15 Jirka Kosek <kosek@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Improved support for TeX math inside equations.
|
||||||
|
|
||||||
|
2001-12-04 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* labels.xsl: Bug #435320: Poor enumeration of LoTs and LoFs
|
||||||
|
|
||||||
|
* titles.xsl: Bug! Can't put HTML here. But what does this break?
|
||||||
|
|
||||||
|
2001-12-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* titles.xsl: Make no.anchor.mode 'sticky'. This is really necessary because otherwise title inlines effectively turn it off
|
||||||
|
|
||||||
|
2001-12-01 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* labels.xsl: Improve FAQ labeling
|
||||||
|
|
||||||
|
2001-11-29 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.xsl: Fixed error message for missing localization so that if
|
||||||
|
missing in en.xml, it doesn't say 'using en'.
|
||||||
|
|
||||||
|
2001-11-28 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Added punct.honorific parameter
|
||||||
|
|
||||||
|
* l10n.xsl: Removed crufty gentext.xref.text template
|
||||||
|
|
||||||
|
2001-11-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Support experimental personname wrapper
|
||||||
|
|
||||||
|
2001-11-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile, l10n.xml: Added Basque
|
||||||
|
|
||||||
|
2001-11-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Support well-formed documents, use key() instead of id()
|
||||||
|
|
||||||
|
2001-11-09 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile, l10n.xml: Added Nynorsk
|
||||||
|
|
||||||
|
2001-11-06 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* labels.xsl: Why did I assume sections should always be labelled in articles?
|
||||||
|
|
||||||
|
2001-11-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Support FAMILY Given style personal names
|
||||||
|
|
||||||
|
2001-10-30 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile, l10n.xml: Added Xhosa
|
||||||
|
|
||||||
|
2001-10-16 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* table.xsl: Table support improvements
|
||||||
|
|
||||||
|
2001-10-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile, l10n.xml: Added Ukranian
|
||||||
|
|
||||||
|
* table.xsl: Fix calculation of rowsep and colsep; added experimental support for table.borders.with.css in HTML; calculation of alignments needs to be added along the same lines
|
||||||
|
|
||||||
|
2001-10-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* table.xsl: New file.
|
||||||
|
|
||||||
|
2001-09-25 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Support automatic collation of year ranges in copyright
|
||||||
|
|
||||||
|
* l10n.xsl: Fix gentext.nav.* templates
|
||||||
|
|
||||||
|
2001-09-22 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl: Rewrote substitute-markup to support %p
|
||||||
|
|
||||||
|
* gentext.xsl, labels.xsl: Bug #463033: allow xref to list items (in orderedlists) and varlistentrys
|
||||||
|
|
||||||
|
* titles.xsl: Support title.markup for legal notices
|
||||||
|
|
||||||
|
2001-08-29 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Fix orderedlist numerations
|
||||||
|
|
||||||
|
2001-08-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.xsl: Calculation of the dingbat nodeset was simply broken
|
||||||
|
|
||||||
|
2001-08-13 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* Makefile: Added stylesheet as a dependency
|
||||||
|
|
||||||
|
2001-08-04 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.dtd: Rename internationalization to i18n, localization to l10n
|
||||||
|
|
||||||
|
* l10n.xml: Rename internationalization to i18n, localization to l10n, add namespace declaration
|
||||||
|
|
||||||
|
* l10n.xsl: Support a local i18n override, rename internationalization to i18n, localization to l10n, add namespace declaration
|
||||||
|
|
||||||
|
* labels.xsl: PartIntros never get a label
|
||||||
|
|
||||||
|
2001-08-01 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl: Pass allow-anchors through properly
|
||||||
|
|
||||||
|
* labels.xsl: Fix question labelling
|
||||||
|
|
||||||
|
* titles.xsl: Output anchors for titles if the titles have ids
|
||||||
|
|
||||||
|
2001-07-31 Robert Stayton <bobstayton@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.xsl: Reverted the change from [last()] to [1] back to [last()]
|
||||||
|
because that is the correct code.
|
||||||
|
|
||||||
|
* l10n.xsl: Added code to the "l10n.language" template to fall
|
||||||
|
back to the two-letter lang code if a longer lang
|
||||||
|
does not have a <lang>.xml localization file.
|
||||||
|
And it falls back to the default lang if it can't
|
||||||
|
find that either.
|
||||||
|
|
||||||
|
Also fixed a bug for finding the lang attribute.
|
||||||
|
It was using the last() function, but in an
|
||||||
|
ancestor-or-self node set you want the first ancestor
|
||||||
|
(closest) with a lang value.
|
||||||
|
|
||||||
|
49c49
|
||||||
|
< |ancestor-or-self::*/@xml:lang)[last()]"/>
|
||||||
|
---
|
||||||
|
> |ancestor-or-self::*/@xml:lang)[1]"/>
|
||||||
|
|
||||||
|
2001-07-17 Jirka Kosek <kosek@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Fixed bug #442160. Parameter graphic.default.extension is now used also for <graphic> and <inlinegraphic> not only for <imagedata>.
|
||||||
|
|
||||||
|
2001-07-08 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl, titles.xsl: Support xref to bridgehead
|
||||||
|
|
||||||
|
2001-07-04 <uid48421@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile, l10n.xml: Added support for Turkish
|
||||||
|
|
||||||
|
* .cvsignore, Makefile, l10n.xml: Added Afrikaans
|
||||||
|
|
||||||
|
* common.xsl, titles.xsl: Bug #429011, fix xref to qandset elements
|
||||||
|
|
||||||
|
* labels.xsl: Bug #426188, fix question/answer labels
|
||||||
|
|
||||||
|
2001-06-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl, gentext.xsl, labels.xsl, titles.xsl: Use common code to calculate step numbers; support xref to procedures and steps; added formal.procedures parameter
|
||||||
|
|
||||||
|
2001-06-20 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* l10n.xsl: Xalan debugging; harmless changes
|
||||||
|
|
||||||
|
2001-06-14 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* subtitles.xsl: Support subtitle on article
|
||||||
|
|
||||||
|
2001-05-23 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Fix dup. template bug with is.graphic.*
|
||||||
|
|
||||||
|
* gentext.xsl: Workaround article/appendix formatting bug (HACK)
|
||||||
|
|
||||||
|
* labels.xsl: Label appendixes correctly in books and articles
|
||||||
|
|
||||||
|
2001-05-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* labels.xsl: Tweak for section labels in articles
|
||||||
|
|
||||||
|
2001-05-12 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: Added refsect* to the section.level template
|
||||||
|
|
||||||
|
2001-05-04 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile, l10n.xml: Add Serbian localization
|
||||||
|
|
||||||
|
2001-04-21 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* common.xsl: My first crude attempts at support for qandaset
|
||||||
|
|
||||||
|
2001-04-19 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl, titles.xsl: Fix bug #417193, make sure allow-anchors is properly propagated through substitute-markup
|
||||||
|
|
||||||
|
2001-04-18 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* titles.xsl: Suppress indexterms in no.anchor.mode
|
||||||
|
|
||||||
|
2001-04-17 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* labels.xsl: Move label.from.part parameter into param.xsl; default it to 0 so that chapters and appendixes are numbered monotonically throughout a book by default. Moved param.xsl up in the include list, just for good measure
|
||||||
|
|
||||||
|
2001-04-16 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl: Fix bug in processing of subtitle content
|
||||||
|
|
||||||
|
* labels.xsl: Only label.from.part if there actually is a part
|
||||||
|
|
||||||
|
* titles.xsl: Don't put ulink, link, olink, or xref in titles if anchor's aren't allowed
|
||||||
|
|
||||||
|
2001-04-15 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl: Localize the textonly calculations by creating a object.title.markup.textonly mode
|
||||||
|
|
||||||
|
2001-04-03 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* gentext.xsl, labels.xsl, titles.xsl: Fix bug 412487, make XSL-generated callout marks honor callout mark parameters
|
||||||
|
|
||||||
|
* titles.xsl: Restore no.anchor.mode and suppress footnotes in no.anchor.mode
|
||||||
|
|
||||||
|
2001-04-02 Norman Walsh <nwalsh@users.sourceforge.net>
|
||||||
|
|
||||||
|
* .cvsignore, Makefile: New file.
|
||||||
|
|
||||||
|
* common.xsl, gentext.xsl, l10n.xml, l10n.xsl, labels.xsl, subtitles.xsl, titles.xsl:
|
||||||
|
New file.
|
||||||
|
|
||||||
|
* gentext.xsl: Commented out debugging messages
|
||||||
|
|
||||||
|
* l10n.dtd: New file.
|
||||||
|
|
|
@ -0,0 +1,135 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<!DOCTYPE xsl:stylesheet [
|
||||||
|
<!ENTITY primary 'normalize-space(concat(primary/@sortas, primary[not(@sortas)]))'>
|
||||||
|
]>
|
||||||
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
version="1.0"
|
||||||
|
xmlns:func="http://exslt.org/functions"
|
||||||
|
xmlns:exslt="http://exslt.org/common"
|
||||||
|
xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0"
|
||||||
|
extension-element-prefixes="func exslt"
|
||||||
|
exclude-result-prefixes="func exslt i l"
|
||||||
|
xmlns:i="urn:cz-kosek:functions:index">
|
||||||
|
|
||||||
|
<!-- ********************************************************************
|
||||||
|
$Id$
|
||||||
|
********************************************************************
|
||||||
|
|
||||||
|
This file is part of the DocBook XSL Stylesheet distribution.
|
||||||
|
See ../README or http://docbook.sf.net/ for copyright
|
||||||
|
and other information.
|
||||||
|
|
||||||
|
******************************************************************** -->
|
||||||
|
|
||||||
|
<!-- Returns index group code for given term -->
|
||||||
|
<func:function name="i:group-index">
|
||||||
|
<xsl:param name="term"/>
|
||||||
|
|
||||||
|
<xsl:variable name="letters-rtf">
|
||||||
|
<xsl:variable name="lang">
|
||||||
|
<xsl:call-template name="l10n.language"/>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:variable name="local.l10n.letters"
|
||||||
|
select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/>
|
||||||
|
|
||||||
|
<xsl:variable name="l10n.letters"
|
||||||
|
select="($l10n.xml/l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/>
|
||||||
|
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="count($local.l10n.letters) > 0">
|
||||||
|
<xsl:copy-of select="$local.l10n.letters"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="count($l10n.letters) > 0">
|
||||||
|
<xsl:copy-of select="$l10n.letters"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:message>
|
||||||
|
<xsl:text>No "</xsl:text>
|
||||||
|
<xsl:value-of select="$lang"/>
|
||||||
|
<xsl:text>" localization of index grouping letters exists</xsl:text>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$lang = 'en'">
|
||||||
|
<xsl:text>.</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:text>; using "en".</xsl:text>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:message>
|
||||||
|
|
||||||
|
<xsl:copy-of select="($l10n.xml/l:i18n/l:l10n[@language='en']/l:letters)[1]"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:variable name="letters" select="exslt:node-set($letters-rtf)/*"/>
|
||||||
|
|
||||||
|
<xsl:variable name="long-letter-index" select="$letters/l:l[. = substring($term,1,2)]/@i"/>
|
||||||
|
<xsl:variable name="short-letter-index" select="$letters/l:l[. = substring($term,1,1)]/@i"/>
|
||||||
|
<xsl:variable name="letter-index">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$long-letter-index">
|
||||||
|
<xsl:value-of select="$long-letter-index"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$short-letter-index">
|
||||||
|
<xsl:value-of select="$short-letter-index"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>0</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
<func:result select="number($letter-index)"/>
|
||||||
|
</func:function>
|
||||||
|
|
||||||
|
<!-- Return index group letter for given group code -->
|
||||||
|
<func:function name="i:group-letter">
|
||||||
|
<xsl:param name="index"/>
|
||||||
|
|
||||||
|
<xsl:variable name="letters-rtf">
|
||||||
|
<xsl:variable name="lang">
|
||||||
|
<xsl:call-template name="l10n.language"/>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:variable name="local.l10n.letters"
|
||||||
|
select="($local.l10n.xml//l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/>
|
||||||
|
|
||||||
|
<xsl:variable name="l10n.letters"
|
||||||
|
select="($l10n.xml/l:i18n/l:l10n[@language=$lang]/l:letters)[1]"/>
|
||||||
|
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="count($local.l10n.letters) > 0">
|
||||||
|
<xsl:copy-of select="$local.l10n.letters"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="count($l10n.letters) > 0">
|
||||||
|
<xsl:copy-of select="$l10n.letters"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:message>
|
||||||
|
<xsl:text>No "</xsl:text>
|
||||||
|
<xsl:value-of select="$lang"/>
|
||||||
|
<xsl:text>" localization of index grouping letters exists</xsl:text>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$lang = 'en'">
|
||||||
|
<xsl:text>.</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:text>; using "en".</xsl:text>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:message>
|
||||||
|
|
||||||
|
<xsl:copy-of select="($l10n.xml/l:i18n/l:l10n[@language='en']/l:letters)[1]"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:variable name="letters" select="exslt:node-set($letters-rtf)/*"/>
|
||||||
|
|
||||||
|
<func:result select="$letters/l:l[@i=$index][1]"/>
|
||||||
|
</func:function>
|
||||||
|
|
||||||
|
<xsl:key name="group-code"
|
||||||
|
match="indexterm"
|
||||||
|
use="i:group-index(&primary;)"/>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|
|
@ -0,0 +1,624 @@
|
||||||
|
<?xml version="1.0" encoding="US-ASCII"?>
|
||||||
|
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="cs" english-language-name="Czech">
|
||||||
|
|
||||||
|
<!-- This file is generated automatically. -->
|
||||||
|
<!-- Do not edit this file by hand! -->
|
||||||
|
<!-- See http://docbook.sourceforge.net/ -->
|
||||||
|
<!-- To update this file: edit the corresponding document at -->
|
||||||
|
<!-- http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/gentext/locale/ -->
|
||||||
|
|
||||||
|
<l:gentext key="Abstract" text="Abstrakt"/>
|
||||||
|
<l:gentext key="abstract" text="Abstrakt"/>
|
||||||
|
<l:gentext key="Answer" text="Odpověď:"/>
|
||||||
|
<l:gentext key="answer" text="Odpověď:"/>
|
||||||
|
<l:gentext key="Appendix" text="Příloha"/>
|
||||||
|
<l:gentext key="appendix" text="Příloha"/>
|
||||||
|
<l:gentext key="Article" text="Článek"/>
|
||||||
|
<l:gentext key="article" text="Článek"/>
|
||||||
|
<l:gentext key="Bibliography" text="Bibliografie"/>
|
||||||
|
<l:gentext key="bibliography" text="Bibliografie"/>
|
||||||
|
<l:gentext key="Book" text="Kniha"/>
|
||||||
|
<l:gentext key="book" text="Kniha"/>
|
||||||
|
<l:gentext key="CAUTION" text="Výstraha"/>
|
||||||
|
<l:gentext key="Caution" text="Výstraha"/>
|
||||||
|
<l:gentext key="caution" text="Výstraha"/>
|
||||||
|
<l:gentext key="Chapter" text="Kapitola"/>
|
||||||
|
<l:gentext key="chapter" text="Kapitola"/>
|
||||||
|
<l:gentext key="Colophon" text="Tiráž"/>
|
||||||
|
<l:gentext key="colophon" text="Tiráž"/>
|
||||||
|
<l:gentext key="Copyright" text="Copyright"/>
|
||||||
|
<l:gentext key="copyright" text="Copyright"/>
|
||||||
|
<l:gentext key="Dedication" text="Věnování"/>
|
||||||
|
<l:gentext key="dedication" text="Věnování"/>
|
||||||
|
<l:gentext key="Edition" text="Vydání"/>
|
||||||
|
<l:gentext key="edition" text="Vydání"/>
|
||||||
|
<l:gentext key="Equation" text="Rovnice"/>
|
||||||
|
<l:gentext key="equation" text="Rovnice"/>
|
||||||
|
<l:gentext key="Example" text="Příklad"/>
|
||||||
|
<l:gentext key="example" text="Příklad"/>
|
||||||
|
<l:gentext key="Figure" text="Obrázek"/>
|
||||||
|
<l:gentext key="figure" text="Obrázek"/>
|
||||||
|
<l:gentext key="Glossary" text="Slovník"/>
|
||||||
|
<l:gentext key="glossary" text="Slovník"/>
|
||||||
|
<l:gentext key="GlossSee" text="Viz"/>
|
||||||
|
<l:gentext key="glosssee" text="Viz"/>
|
||||||
|
<l:gentext key="GlossSeeAlso" text="Viz též"/>
|
||||||
|
<l:gentext key="glossseealso" text="Viz též"/>
|
||||||
|
<l:gentext key="IMPORTANT" text="Důležité"/>
|
||||||
|
<l:gentext key="important" text="Důležité"/>
|
||||||
|
<l:gentext key="Important" text="Důležité"/>
|
||||||
|
<l:gentext key="Index" text="Rejstřík"/>
|
||||||
|
<l:gentext key="index" text="Rejstřík"/>
|
||||||
|
<l:gentext key="ISBN" text="ISBN"/>
|
||||||
|
<l:gentext key="isbn" text="ISBN"/>
|
||||||
|
<l:gentext key="LegalNotice" text="Právní doložka"/>
|
||||||
|
<l:gentext key="legalnotice" text="Právní doložka"/>
|
||||||
|
<l:gentext key="MsgAud" text="Publikum"/>
|
||||||
|
<l:gentext key="msgaud" text="Publikum"/>
|
||||||
|
<l:gentext key="MsgLevel" text="Úroveň"/>
|
||||||
|
<l:gentext key="msglevel" text="Úroveň"/>
|
||||||
|
<l:gentext key="MsgOrig" text="Původ"/>
|
||||||
|
<l:gentext key="msgorig" text="Původ"/>
|
||||||
|
<l:gentext key="NOTE" text="Poznámka"/>
|
||||||
|
<l:gentext key="Note" text="Poznámka"/>
|
||||||
|
<l:gentext key="note" text="Poznámka"/>
|
||||||
|
<l:gentext key="Part" text="Část"/>
|
||||||
|
<l:gentext key="part" text="Část"/>
|
||||||
|
<l:gentext key="Preface" text="Předmluva"/>
|
||||||
|
<l:gentext key="preface" text="Předmluva"/>
|
||||||
|
<l:gentext key="Procedure" text="Postup"/>
|
||||||
|
<l:gentext key="procedure" text="Postup"/>
|
||||||
|
<l:gentext key="ProductionSet" text="Produkce"/>
|
||||||
|
<l:gentext key="PubDate" text="Publication Date" lang="en"/>
|
||||||
|
<l:gentext key="pubdate" text="Publication date" lang="en"/>
|
||||||
|
<l:gentext key="Published" text="Vydáno"/>
|
||||||
|
<l:gentext key="published" text="Vydáno"/>
|
||||||
|
<l:gentext key="Qandadiv" text="Q & A" lang="en"/>
|
||||||
|
<l:gentext key="qandadiv" text="Q & A" lang="en"/>
|
||||||
|
<l:gentext key="Question" text="Otázka:"/>
|
||||||
|
<l:gentext key="question" text="Otázka:"/>
|
||||||
|
<l:gentext key="RefEntry" text=""/>
|
||||||
|
<l:gentext key="refentry" text=""/>
|
||||||
|
<l:gentext key="Reference" text="Odkaz"/>
|
||||||
|
<l:gentext key="reference" text="Odkaz"/>
|
||||||
|
<l:gentext key="RefName" text="Jméno"/>
|
||||||
|
<l:gentext key="refname" text="Jméno"/>
|
||||||
|
<l:gentext key="RefSection" text=""/>
|
||||||
|
<l:gentext key="refsection" text=""/>
|
||||||
|
<l:gentext key="RefSynopsisDiv" text="Přehled"/>
|
||||||
|
<l:gentext key="refsynopsisdiv" text="Přehled"/>
|
||||||
|
<l:gentext key="RevHistory" text="Přehled revizí"/>
|
||||||
|
<l:gentext key="revhistory" text="Přehled revizí"/>
|
||||||
|
<l:gentext key="revision" text="Revize"/>
|
||||||
|
<l:gentext key="Revision" text="Revize"/>
|
||||||
|
<l:gentext key="sect1" text="Oddíl"/>
|
||||||
|
<l:gentext key="sect2" text="Oddíl"/>
|
||||||
|
<l:gentext key="sect3" text="Oddíl"/>
|
||||||
|
<l:gentext key="sect4" text="Oddíl"/>
|
||||||
|
<l:gentext key="sect5" text="Oddíl"/>
|
||||||
|
<l:gentext key="section" text="Oddíl"/>
|
||||||
|
<l:gentext key="Section" text="Oddíl"/>
|
||||||
|
<l:gentext key="see" text="Viz"/>
|
||||||
|
<l:gentext key="See" text="Viz"/>
|
||||||
|
<l:gentext key="seealso" text="Viz též"/>
|
||||||
|
<l:gentext key="Seealso" text="Viz též"/>
|
||||||
|
<l:gentext key="SeeAlso" text="Viz též"/>
|
||||||
|
<l:gentext key="set" text="Sada"/>
|
||||||
|
<l:gentext key="Set" text="Sada"/>
|
||||||
|
<l:gentext key="setindex" text="Rejstřík sady"/>
|
||||||
|
<l:gentext key="SetIndex" text="Rejstřík sady"/>
|
||||||
|
<l:gentext key="Sidebar" text="Marginálie"/>
|
||||||
|
<l:gentext key="sidebar" text="Marginálie"/>
|
||||||
|
<l:gentext key="step" text="krok"/>
|
||||||
|
<l:gentext key="Step" text="Krok"/>
|
||||||
|
<l:gentext key="Table" text="Tabulka"/>
|
||||||
|
<l:gentext key="table" text="Tabulka"/>
|
||||||
|
<l:gentext key="tip" text="Tip"/>
|
||||||
|
<l:gentext key="TIP" text="Tip"/>
|
||||||
|
<l:gentext key="Tip" text="Tip"/>
|
||||||
|
<l:gentext key="Warning" text="Varování"/>
|
||||||
|
<l:gentext key="warning" text="Varování"/>
|
||||||
|
<l:gentext key="WARNING" text="Varování"/>
|
||||||
|
<l:gentext key="and" text="a"/>
|
||||||
|
<l:gentext key="by" text="by"/>
|
||||||
|
<l:gentext key="called" text="called" lang="en"/>
|
||||||
|
<l:gentext key="Edited" text="Vydáno"/>
|
||||||
|
<l:gentext key="edited" text="Vydáno"/>
|
||||||
|
<l:gentext key="Editedby" text="Sestavil"/>
|
||||||
|
<l:gentext key="editedby" text="Sestavil"/>
|
||||||
|
<l:gentext key="in" text="v"/>
|
||||||
|
<l:gentext key="lastlistcomma" text=","/>
|
||||||
|
<l:gentext key="listcomma" text=","/>
|
||||||
|
<l:gentext key="nonexistantelement" text="neexistující prvek"/>
|
||||||
|
<l:gentext key="notes" text="Poznámky"/>
|
||||||
|
<l:gentext key="Notes" text="Poznámky"/>
|
||||||
|
<l:gentext key="Pgs" text="Str."/>
|
||||||
|
<l:gentext key="pgs" text="Str."/>
|
||||||
|
<l:gentext key="Revisedby" text="Revidoval: "/>
|
||||||
|
<l:gentext key="revisedby" text="Revidoval: "/>
|
||||||
|
<l:gentext key="TableNotes" text="Poznámky"/>
|
||||||
|
<l:gentext key="tablenotes" text="Poznámky"/>
|
||||||
|
<l:gentext key="TableofContents" text="Obsah"/>
|
||||||
|
<l:gentext key="tableofcontents" text="Obsah"/>
|
||||||
|
<l:gentext key="the" text="" lang="en"/>
|
||||||
|
<l:gentext key="unexpectedelementname" text="Neočekávané jméno prvku"/>
|
||||||
|
<l:gentext key="unsupported" text="nepodporovaný"/>
|
||||||
|
<l:gentext key="xrefto" text="xref k"/>
|
||||||
|
<l:gentext key="listofequations" text="Seznam rovnic"/>
|
||||||
|
<l:gentext key="ListofEquations" text="Seznam rovnic"/>
|
||||||
|
<l:gentext key="ListofExamples" text="Seznam příkladů"/>
|
||||||
|
<l:gentext key="listofexamples" text="Seznam příkladů"/>
|
||||||
|
<l:gentext key="ListofFigures" text="Seznam obrázků"/>
|
||||||
|
<l:gentext key="listoffigures" text="Seznam obrázků"/>
|
||||||
|
<l:gentext key="ListofProcedures" text="List of Procedures" lang="en"/>
|
||||||
|
<l:gentext key="listofprocedures" text="List of Procedures" lang="en"/>
|
||||||
|
<l:gentext key="listoftables" text="Seznam tabulek"/>
|
||||||
|
<l:gentext key="ListofTables" text="Seznam tabulek"/>
|
||||||
|
<l:gentext key="ListofUnknown" text="Seznam neznámého"/>
|
||||||
|
<l:gentext key="listofunknown" text="Seznam neznámého"/>
|
||||||
|
<l:gentext key="nav-home" text="Domů"/>
|
||||||
|
<l:gentext key="nav-next" text="Další"/>
|
||||||
|
<l:gentext key="nav-next-sibling" text="Rychle dopředu"/>
|
||||||
|
<l:gentext key="nav-prev" text="Předcházející"/>
|
||||||
|
<l:gentext key="nav-prev-sibling" text="Rychle zpět"/>
|
||||||
|
<l:gentext key="nav-up" text="Nahoru"/>
|
||||||
|
<l:gentext key="nav-toc" text="ToC" lang="en"/>
|
||||||
|
<l:gentext key="Draft" text="Návrh"/>
|
||||||
|
<l:gentext key="above" text="nad"/>
|
||||||
|
<l:gentext key="below" text="pod"/>
|
||||||
|
<l:gentext key="sectioncalled" text="oddíl nazvaný"/>
|
||||||
|
<l:gentext key="index symbols" text="Symboly"/>
|
||||||
|
<l:gentext key="lowercase.alpha" text="aábcčdďeéěfghiíjklmnoópqrřsštťuúůvwxyýzž"/>
|
||||||
|
<l:gentext key="uppercase.alpha" text="AÁBCČDĎEÉĚFGHIÍJKLMNOÓPQRŘSŠTŤUÚŮVWXYÝZŽ"/>
|
||||||
|
<l:dingbat key="startquote" text="„"/>
|
||||||
|
<l:dingbat key="endquote" text="“"/>
|
||||||
|
<l:dingbat key="nestedstartquote" text="‚"/>
|
||||||
|
<l:dingbat key="nestedendquote" text="‘"/>
|
||||||
|
<l:dingbat key="singlestartquote" text="‘" lang="en"/>
|
||||||
|
<l:dingbat key="singleendquote" text="’" lang="en"/>
|
||||||
|
<l:dingbat key="bullet" text="•"/>
|
||||||
|
<l:gentext key="hyphenation-character" text="-" lang="en"/>
|
||||||
|
<l:gentext key="hyphenation-push-character-count" text="2" lang="en"/>
|
||||||
|
<l:gentext key="hyphenation-remain-character-count" text="2" lang="en"/>
|
||||||
|
|
||||||
|
<l:context name="styles">
|
||||||
|
<l:template name="person-name" text="first-last"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title">
|
||||||
|
<l:template name="abstract" text="%t"/>
|
||||||
|
<l:template name="answer" text="%t"/>
|
||||||
|
<l:template name="appendix" text="Příloha %n. %t"/>
|
||||||
|
<l:template name="article" text="%t"/>
|
||||||
|
<l:template name="authorblurb" text="%t"/>
|
||||||
|
<l:template name="bibliodiv" text="%t"/>
|
||||||
|
<l:template name="biblioentry" text="%t"/>
|
||||||
|
<l:template name="bibliography" text="%t"/>
|
||||||
|
<l:template name="bibliolist" text="%t" lang="en"/>
|
||||||
|
<l:template name="bibliomixed" text="%t"/>
|
||||||
|
<l:template name="bibliomset" text="%t"/>
|
||||||
|
<l:template name="biblioset" text="%t"/>
|
||||||
|
<l:template name="blockquote" text="%t"/>
|
||||||
|
<l:template name="book" text="%t"/>
|
||||||
|
<l:template name="calloutlist" text="%t"/>
|
||||||
|
<l:template name="caution" text="%t"/>
|
||||||
|
<l:template name="chapter" text="Kapitola %n. %t"/>
|
||||||
|
<l:template name="colophon" text="%t"/>
|
||||||
|
<l:template name="dedication" text="%t"/>
|
||||||
|
<l:template name="equation" text="Rovnice %n. %t"/>
|
||||||
|
<l:template name="example" text="Příklad %n. %t"/>
|
||||||
|
<l:template name="figure" text="Obrázek %n. %t"/>
|
||||||
|
<l:template name="formalpara" text="%t"/>
|
||||||
|
<l:template name="glossary" text="%t"/>
|
||||||
|
<l:template name="glossdiv" text="%t"/>
|
||||||
|
<l:template name="glosslist" text="%t" lang="en"/>
|
||||||
|
<l:template name="glossentry" text="%t" lang="en"/>
|
||||||
|
<l:template name="important" text="%t"/>
|
||||||
|
<l:template name="index" text="%t"/>
|
||||||
|
<l:template name="indexdiv" text="%t"/>
|
||||||
|
<l:template name="itemizedlist" text="%t"/>
|
||||||
|
<l:template name="legalnotice" text="%t"/>
|
||||||
|
<l:template name="listitem" text=""/>
|
||||||
|
<l:template name="lot" text="%t"/>
|
||||||
|
<l:template name="msg" text="%t"/>
|
||||||
|
<l:template name="msgexplan" text="%t"/>
|
||||||
|
<l:template name="msgmain" text="%t"/>
|
||||||
|
<l:template name="msgrel" text="%t"/>
|
||||||
|
<l:template name="msgset" text="%t"/>
|
||||||
|
<l:template name="msgsub" text="%t"/>
|
||||||
|
<l:template name="note" text="%t"/>
|
||||||
|
<l:template name="orderedlist" text="%t"/>
|
||||||
|
<l:template name="part" text="Část %n. %t"/>
|
||||||
|
<l:template name="partintro" text="%t"/>
|
||||||
|
<l:template name="preface" text="%t"/>
|
||||||
|
<l:template name="procedure" text="%t"/>
|
||||||
|
<l:template name="procedure.formal" text="Postup %n. %t"/>
|
||||||
|
<l:template name="productionset" text="%t"/>
|
||||||
|
<l:template name="productionset.formal" text="Produkce %n"/>
|
||||||
|
<l:template name="qandadiv" text="%t"/>
|
||||||
|
<l:template name="qandaentry" text="%t"/>
|
||||||
|
<l:template name="qandaset" text="%t"/>
|
||||||
|
<l:template name="question" text="%t"/>
|
||||||
|
<l:template name="refentry" text="%t"/>
|
||||||
|
<l:template name="reference" text="%t"/>
|
||||||
|
<l:template name="refsection" text="%t"/>
|
||||||
|
<l:template name="refsect1" text="%t"/>
|
||||||
|
<l:template name="refsect2" text="%t"/>
|
||||||
|
<l:template name="refsect3" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdivinfo" text="%t"/>
|
||||||
|
<l:template name="segmentedlist" text="%t"/>
|
||||||
|
<l:template name="set" text="%t"/>
|
||||||
|
<l:template name="setindex" text="%t"/>
|
||||||
|
<l:template name="sidebar" text="%t"/>
|
||||||
|
<l:template name="step" text="%t"/>
|
||||||
|
<l:template name="table" text="Tabulka %n. %t"/>
|
||||||
|
<l:template name="task" text="%t" lang="en"/>
|
||||||
|
<l:template name="tip" text="%t"/>
|
||||||
|
<l:template name="toc" text="%t"/>
|
||||||
|
<l:template name="variablelist" text="%t"/>
|
||||||
|
<l:template name="varlistentry" text=""/>
|
||||||
|
<l:template name="warning" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title-unnumbered">
|
||||||
|
<l:template name="appendix" text="%t"/>
|
||||||
|
<l:template name="article/appendix" text="%t" lang="en"/>
|
||||||
|
<l:template name="bridgehead" text="%t"/>
|
||||||
|
<l:template name="chapter" text="%t"/>
|
||||||
|
<l:template name="sect1" text="%t"/>
|
||||||
|
<l:template name="sect2" text="%t"/>
|
||||||
|
<l:template name="sect3" text="%t"/>
|
||||||
|
<l:template name="sect4" text="%t"/>
|
||||||
|
<l:template name="sect5" text="%t"/>
|
||||||
|
<l:template name="section" text="%t"/>
|
||||||
|
<l:template name="simplesect" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title-numbered">
|
||||||
|
<l:template name="appendix" text="Příloha %n. %t"/>
|
||||||
|
<l:template name="article/appendix" text="%n. %t" lang="en"/>
|
||||||
|
<l:template name="bridgehead" text="%n. %t"/>
|
||||||
|
<l:template name="chapter" text="Kapitola %n. %t"/>
|
||||||
|
<l:template name="sect1" text="%n. %t"/>
|
||||||
|
<l:template name="sect2" text="%n. %t"/>
|
||||||
|
<l:template name="sect3" text="%n. %t"/>
|
||||||
|
<l:template name="sect4" text="%n. %t"/>
|
||||||
|
<l:template name="sect5" text="%n. %t"/>
|
||||||
|
<l:template name="section" text="%n. %t"/>
|
||||||
|
<l:template name="simplesect" text="%n. %t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="subtitle">
|
||||||
|
<l:template name="appendix" text="%s"/>
|
||||||
|
<l:template name="article" text="%s"/>
|
||||||
|
<l:template name="bibliodiv" text="%s"/>
|
||||||
|
<l:template name="biblioentry" text="%s"/>
|
||||||
|
<l:template name="bibliography" text="%s"/>
|
||||||
|
<l:template name="bibliomixed" text="%s"/>
|
||||||
|
<l:template name="bibliomset" text="%s"/>
|
||||||
|
<l:template name="biblioset" text="%s"/>
|
||||||
|
<l:template name="book" text="%s"/>
|
||||||
|
<l:template name="chapter" text="%s"/>
|
||||||
|
<l:template name="colophon" text="%s"/>
|
||||||
|
<l:template name="dedication" text="%s"/>
|
||||||
|
<l:template name="glossary" text="%s"/>
|
||||||
|
<l:template name="glossdiv" text="%s"/>
|
||||||
|
<l:template name="index" text="%s"/>
|
||||||
|
<l:template name="indexdiv" text="%s"/>
|
||||||
|
<l:template name="lot" text="%s"/>
|
||||||
|
<l:template name="part" text="%s"/>
|
||||||
|
<l:template name="partintro" text="%s"/>
|
||||||
|
<l:template name="preface" text="%s"/>
|
||||||
|
<l:template name="refentry" text="%s"/>
|
||||||
|
<l:template name="reference" text="%s"/>
|
||||||
|
<l:template name="refsection" text="%s"/>
|
||||||
|
<l:template name="refsect1" text="%s"/>
|
||||||
|
<l:template name="refsect2" text="%s"/>
|
||||||
|
<l:template name="refsect3" text="%s"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%s"/>
|
||||||
|
<l:template name="sect1" text="%s"/>
|
||||||
|
<l:template name="sect2" text="%s"/>
|
||||||
|
<l:template name="sect3" text="%s"/>
|
||||||
|
<l:template name="sect4" text="%s"/>
|
||||||
|
<l:template name="sect5" text="%s"/>
|
||||||
|
<l:template name="section" text="%s"/>
|
||||||
|
<l:template name="set" text="%s"/>
|
||||||
|
<l:template name="setindex" text="%s"/>
|
||||||
|
<l:template name="sidebar" text="%s"/>
|
||||||
|
<l:template name="simplesect" text="%s"/>
|
||||||
|
<l:template name="toc" text="%s"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref">
|
||||||
|
<l:template name="abstract" text="%t"/>
|
||||||
|
<l:template name="answer" text="%n"/>
|
||||||
|
<l:template name="appendix" text="%t"/>
|
||||||
|
<l:template name="article" text="%t"/>
|
||||||
|
<l:template name="authorblurb" text="%t"/>
|
||||||
|
<l:template name="bibliodiv" text="%t"/>
|
||||||
|
<l:template name="bibliography" text="%t"/>
|
||||||
|
<l:template name="bibliomset" text="%t"/>
|
||||||
|
<l:template name="biblioset" text="%t"/>
|
||||||
|
<l:template name="blockquote" text="%t"/>
|
||||||
|
<l:template name="book" text="%t"/>
|
||||||
|
<l:template name="calloutlist" text="%t"/>
|
||||||
|
<l:template name="caution" text="%t"/>
|
||||||
|
<l:template name="chapter" text="%t"/>
|
||||||
|
<l:template name="colophon" text="%t"/>
|
||||||
|
<l:template name="constraintdef" text="%t"/>
|
||||||
|
<l:template name="dedication" text="%t"/>
|
||||||
|
<l:template name="equation" text="%t"/>
|
||||||
|
<l:template name="example" text="%t"/>
|
||||||
|
<l:template name="figure" text="%t"/>
|
||||||
|
<l:template name="formalpara" text="%t"/>
|
||||||
|
<l:template name="glossary" text="%t"/>
|
||||||
|
<l:template name="glossdiv" text="%t"/>
|
||||||
|
<l:template name="important" text="%t"/>
|
||||||
|
<l:template name="index" text="%t"/>
|
||||||
|
<l:template name="indexdiv" text="%t"/>
|
||||||
|
<l:template name="itemizedlist" text="%t"/>
|
||||||
|
<l:template name="legalnotice" text="%t"/>
|
||||||
|
<l:template name="listitem" text="%n"/>
|
||||||
|
<l:template name="lot" text="%t"/>
|
||||||
|
<l:template name="msg" text="%t"/>
|
||||||
|
<l:template name="msgexplan" text="%t"/>
|
||||||
|
<l:template name="msgmain" text="%t"/>
|
||||||
|
<l:template name="msgrel" text="%t"/>
|
||||||
|
<l:template name="msgset" text="%t"/>
|
||||||
|
<l:template name="msgsub" text="%t"/>
|
||||||
|
<l:template name="note" text="%t"/>
|
||||||
|
<l:template name="orderedlist" text="%t"/>
|
||||||
|
<l:template name="part" text="%t"/>
|
||||||
|
<l:template name="partintro" text="%t"/>
|
||||||
|
<l:template name="preface" text="%t"/>
|
||||||
|
<l:template name="procedure" text="%t"/>
|
||||||
|
<l:template name="productionset" text="%t"/>
|
||||||
|
<l:template name="qandadiv" text="%t"/>
|
||||||
|
<l:template name="qandaentry" text="%n"/>
|
||||||
|
<l:template name="qandaset" text="%t"/>
|
||||||
|
<l:template name="question" text="%n"/>
|
||||||
|
<l:template name="reference" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%t"/>
|
||||||
|
<l:template name="segmentedlist" text="%t"/>
|
||||||
|
<l:template name="set" text="%t"/>
|
||||||
|
<l:template name="setindex" text="%t"/>
|
||||||
|
<l:template name="sidebar" text="%t"/>
|
||||||
|
<l:template name="table" text="%t"/>
|
||||||
|
<l:template name="tip" text="%t"/>
|
||||||
|
<l:template name="toc" text="%t"/>
|
||||||
|
<l:template name="variablelist" text="%t"/>
|
||||||
|
<l:template name="varlistentry" text="%n"/>
|
||||||
|
<l:template name="warning" text="%t"/>
|
||||||
|
<l:template name="page.citation" text=" [%p]"/>
|
||||||
|
<l:template name="page" text="(page %p)" lang="en"/>
|
||||||
|
<l:template name="pageabbrev" text="(p. %p)" lang="en"/>
|
||||||
|
<l:template name="Page" text="Page %p" lang="en"/>
|
||||||
|
<l:template name="bridgehead" text="„%t“"/>
|
||||||
|
<l:template name="refsection" text="„%t“"/>
|
||||||
|
<l:template name="refsect1" text="„%t“"/>
|
||||||
|
<l:template name="refsect2" text="„%t“"/>
|
||||||
|
<l:template name="refsect3" text="„%t“"/>
|
||||||
|
<l:template name="sect1" text="„%t“"/>
|
||||||
|
<l:template name="sect2" text="„%t“"/>
|
||||||
|
<l:template name="sect3" text="„%t“"/>
|
||||||
|
<l:template name="sect4" text="„%t“"/>
|
||||||
|
<l:template name="sect5" text="„%t“"/>
|
||||||
|
<l:template name="section" text="„%t“"/>
|
||||||
|
<l:template name="simplesect" text="„%t“"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref-number">
|
||||||
|
<l:template name="answer" text="%n"/>
|
||||||
|
<l:template name="appendix" text="%n"/>
|
||||||
|
<l:template name="bridgehead" text="%n"/>
|
||||||
|
<l:template name="chapter" text="%n"/>
|
||||||
|
<l:template name="equation" text="%n"/>
|
||||||
|
<l:template name="example" text="%n"/>
|
||||||
|
<l:template name="figure" text="%n"/>
|
||||||
|
<l:template name="part" text="%n"/>
|
||||||
|
<l:template name="procedure" text="%n"/>
|
||||||
|
<l:template name="productionset" text="%n"/>
|
||||||
|
<l:template name="qandadiv" text="%n"/>
|
||||||
|
<l:template name="qandaentry" text="%n"/>
|
||||||
|
<l:template name="question" text="%n"/>
|
||||||
|
<l:template name="sect1" text="%n"/>
|
||||||
|
<l:template name="sect2" text="%n"/>
|
||||||
|
<l:template name="sect3" text="%n"/>
|
||||||
|
<l:template name="sect4" text="%n"/>
|
||||||
|
<l:template name="sect5" text="%n"/>
|
||||||
|
<l:template name="section" text="%n"/>
|
||||||
|
<l:template name="table" text="%n"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref-number-and-title">
|
||||||
|
<l:template name="appendix" text="%n – „%t“"/>
|
||||||
|
<l:template name="bridgehead" text="%n – „%t“"/>
|
||||||
|
<l:template name="chapter" text="%n – „%t“"/>
|
||||||
|
<l:template name="equation" text="%n – „%t“"/>
|
||||||
|
<l:template name="example" text="%n – „%t“"/>
|
||||||
|
<l:template name="figure" text="%n – „%t“"/>
|
||||||
|
<l:template name="part" text="%n – „%t“"/>
|
||||||
|
<l:template name="procedure" text="%n – „%t“"/>
|
||||||
|
<l:template name="productionset" text="%n – „%t“"/>
|
||||||
|
<l:template name="qandadiv" text="%n – „%t“"/>
|
||||||
|
<l:template name="refsect1" text="„%t“"/>
|
||||||
|
<l:template name="refsect2" text="„%t“"/>
|
||||||
|
<l:template name="refsect3" text="„%t“"/>
|
||||||
|
<l:template name="refsection" text="„%t“"/>
|
||||||
|
<l:template name="sect1" text="%n – „%t“"/>
|
||||||
|
<l:template name="sect2" text="%n – „%t“"/>
|
||||||
|
<l:template name="sect3" text="%n – „%t“"/>
|
||||||
|
<l:template name="sect4" text="%n – „%t“"/>
|
||||||
|
<l:template name="sect5" text="%n – „%t“"/>
|
||||||
|
<l:template name="section" text="%n – „%t“"/>
|
||||||
|
<l:template name="simplesect" text="%n – „%t“"/>
|
||||||
|
<l:template name="table" text="%n – „%t“"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="authorgroup">
|
||||||
|
<l:template name="sep" text=", "/>
|
||||||
|
<l:template name="sep2" text=" a "/>
|
||||||
|
<l:template name="seplast" text=" a "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="glossary">
|
||||||
|
<l:template name="see" text="Viz "/>
|
||||||
|
<l:template name="seealso" text="Viz též "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="msgset">
|
||||||
|
<l:template name="MsgAud" text="Publikum: "/>
|
||||||
|
<l:template name="MsgLevel" text="Úroveň: "/>
|
||||||
|
<l:template name="MsgOrig" text="Původ: "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime">
|
||||||
|
<l:template name="format" text="d. B Y"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime-full">
|
||||||
|
<l:template name="January" text="ledna"/>
|
||||||
|
<l:template name="February" text="února"/>
|
||||||
|
<l:template name="March" text="března"/>
|
||||||
|
<l:template name="April" text="dubna"/>
|
||||||
|
<l:template name="May" text="května"/>
|
||||||
|
<l:template name="June" text="června"/>
|
||||||
|
<l:template name="July" text="července"/>
|
||||||
|
<l:template name="August" text="srpna"/>
|
||||||
|
<l:template name="September" text="září"/>
|
||||||
|
<l:template name="October" text="října"/>
|
||||||
|
<l:template name="November" text="listopadu"/>
|
||||||
|
<l:template name="December" text="prosince"/>
|
||||||
|
<l:template name="Monday" text="pondělí"/>
|
||||||
|
<l:template name="Tuesday" text="úterý"/>
|
||||||
|
<l:template name="Wednesday" text="středa"/>
|
||||||
|
<l:template name="Thursday" text="čtvrtek"/>
|
||||||
|
<l:template name="Friday" text="pátek"/>
|
||||||
|
<l:template name="Saturday" text="sobota"/>
|
||||||
|
<l:template name="Sunday" text="neděle"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime-abbrev">
|
||||||
|
<l:template name="Jan" text="led"/>
|
||||||
|
<l:template name="Feb" text="úno"/>
|
||||||
|
<l:template name="Mar" text="bře"/>
|
||||||
|
<l:template name="Apr" text="dub"/>
|
||||||
|
<l:template name="May" text="kvě"/>
|
||||||
|
<l:template name="Jun" text="čer"/>
|
||||||
|
<l:template name="Jul" text="čnc"/>
|
||||||
|
<l:template name="Aug" text="srp"/>
|
||||||
|
<l:template name="Sep" text="zář"/>
|
||||||
|
<l:template name="Oct" text="řij"/>
|
||||||
|
<l:template name="Nov" text="lis"/>
|
||||||
|
<l:template name="Dec" text="pro"/>
|
||||||
|
<l:template name="Mon" text="po"/>
|
||||||
|
<l:template name="Tue" text="út"/>
|
||||||
|
<l:template name="Wed" text="st"/>
|
||||||
|
<l:template name="Thu" text="čt"/>
|
||||||
|
<l:template name="Fri" text="pá"/>
|
||||||
|
<l:template name="Sat" text="so"/>
|
||||||
|
<l:template name="Sun" text="ne"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="htmlhelp">
|
||||||
|
<l:template name="langcode" text="0x0405 Czech"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:letters>
|
||||||
|
<l:l i="-1"/>
|
||||||
|
<l:l i="0">Symboly</l:l>
|
||||||
|
<l:l i="1">A</l:l>
|
||||||
|
<l:l i="1">a</l:l>
|
||||||
|
<l:l i="1">Á</l:l>
|
||||||
|
<l:l i="1">á</l:l>
|
||||||
|
<l:l i="2">B</l:l>
|
||||||
|
<l:l i="2">b</l:l>
|
||||||
|
<l:l i="3">C</l:l>
|
||||||
|
<l:l i="3">c</l:l>
|
||||||
|
<l:l i="4">Č</l:l>
|
||||||
|
<l:l i="4">č</l:l>
|
||||||
|
<l:l i="5">D</l:l>
|
||||||
|
<l:l i="5">d</l:l>
|
||||||
|
<l:l i="5">Ď</l:l>
|
||||||
|
<l:l i="5">ď</l:l>
|
||||||
|
<l:l i="7">E</l:l>
|
||||||
|
<l:l i="7">e</l:l>
|
||||||
|
<l:l i="7">É</l:l>
|
||||||
|
<l:l i="7">é</l:l>
|
||||||
|
<l:l i="7">Ě</l:l>
|
||||||
|
<l:l i="7">ě</l:l>
|
||||||
|
<l:l i="7">Ë</l:l>
|
||||||
|
<l:l i="7">ë</l:l>
|
||||||
|
<l:l i="8">F</l:l>
|
||||||
|
<l:l i="8">f</l:l>
|
||||||
|
<l:l i="9">G</l:l>
|
||||||
|
<l:l i="9">g</l:l>
|
||||||
|
<l:l i="10">H</l:l>
|
||||||
|
<l:l i="10">h</l:l>
|
||||||
|
<l:l i="11">Ch</l:l>
|
||||||
|
<l:l i="11">ch</l:l>
|
||||||
|
<l:l i="11">cH</l:l>
|
||||||
|
<l:l i="11">CH</l:l>
|
||||||
|
<l:l i="12">I</l:l>
|
||||||
|
<l:l i="12">i</l:l>
|
||||||
|
<l:l i="12">Í</l:l>
|
||||||
|
<l:l i="12">í</l:l>
|
||||||
|
<l:l i="13">J</l:l>
|
||||||
|
<l:l i="13">j</l:l>
|
||||||
|
<l:l i="14">K</l:l>
|
||||||
|
<l:l i="14">k</l:l>
|
||||||
|
<l:l i="15">L</l:l>
|
||||||
|
<l:l i="15">l</l:l>
|
||||||
|
<l:l i="16">M</l:l>
|
||||||
|
<l:l i="16">m</l:l>
|
||||||
|
<l:l i="17">N</l:l>
|
||||||
|
<l:l i="17">n</l:l>
|
||||||
|
<l:l i="17">Ň</l:l>
|
||||||
|
<l:l i="17">ň</l:l>
|
||||||
|
<l:l i="19">O</l:l>
|
||||||
|
<l:l i="19">o</l:l>
|
||||||
|
<l:l i="19">Ó</l:l>
|
||||||
|
<l:l i="19">ó</l:l>
|
||||||
|
<l:l i="19">Ö</l:l>
|
||||||
|
<l:l i="19">ö</l:l>
|
||||||
|
<l:l i="20">P</l:l>
|
||||||
|
<l:l i="20">p</l:l>
|
||||||
|
<l:l i="21">Q</l:l>
|
||||||
|
<l:l i="21">q</l:l>
|
||||||
|
<l:l i="22">R</l:l>
|
||||||
|
<l:l i="22">r</l:l>
|
||||||
|
<l:l i="23">Ř</l:l>
|
||||||
|
<l:l i="23">ř</l:l>
|
||||||
|
<l:l i="24">S</l:l>
|
||||||
|
<l:l i="24">s</l:l>
|
||||||
|
<l:l i="25">Š</l:l>
|
||||||
|
<l:l i="25">š</l:l>
|
||||||
|
<l:l i="26">T</l:l>
|
||||||
|
<l:l i="26">t</l:l>
|
||||||
|
<l:l i="26">Ť</l:l>
|
||||||
|
<l:l i="26">ť</l:l>
|
||||||
|
<l:l i="28">U</l:l>
|
||||||
|
<l:l i="28">u</l:l>
|
||||||
|
<l:l i="28">Ú</l:l>
|
||||||
|
<l:l i="28">ú</l:l>
|
||||||
|
<l:l i="28">Ů</l:l>
|
||||||
|
<l:l i="28">ů</l:l>
|
||||||
|
<l:l i="28">Ü</l:l>
|
||||||
|
<l:l i="28">ü</l:l>
|
||||||
|
<l:l i="29">V</l:l>
|
||||||
|
<l:l i="29">v</l:l>
|
||||||
|
<l:l i="30">W</l:l>
|
||||||
|
<l:l i="30">w</l:l>
|
||||||
|
<l:l i="31">X</l:l>
|
||||||
|
<l:l i="31">x</l:l>
|
||||||
|
<l:l i="32">Y</l:l>
|
||||||
|
<l:l i="32">y</l:l>
|
||||||
|
<l:l i="32">Ý</l:l>
|
||||||
|
<l:l i="32">ý</l:l>
|
||||||
|
<l:l i="33">Z</l:l>
|
||||||
|
<l:l i="33">z</l:l>
|
||||||
|
<l:l i="34">Ž</l:l>
|
||||||
|
<l:l i="34">ž</l:l>
|
||||||
|
</l:letters>
|
||||||
|
</l:l10n>
|
|
@ -0,0 +1,588 @@
|
||||||
|
<?xml version="1.0" encoding="US-ASCII"?>
|
||||||
|
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="da" english-language-name="Danish">
|
||||||
|
|
||||||
|
<!-- This file is generated automatically. -->
|
||||||
|
<!-- Do not edit this file by hand! -->
|
||||||
|
<!-- See http://docbook.sourceforge.net/ -->
|
||||||
|
<!-- To update this file: edit the corresponding document at -->
|
||||||
|
<!-- http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/gentext/locale/ -->
|
||||||
|
|
||||||
|
<l:gentext key="Abstract" text="Resumé"/>
|
||||||
|
<l:gentext key="abstract" text="resumé"/>
|
||||||
|
<l:gentext key="Answer" text="Svar"/>
|
||||||
|
<l:gentext key="answer" text="svar"/>
|
||||||
|
<l:gentext key="Appendix" text="Appendiks"/>
|
||||||
|
<l:gentext key="appendix" text="appendiks"/>
|
||||||
|
<l:gentext key="Article" text="Artikel"/>
|
||||||
|
<l:gentext key="article" text="artikel"/>
|
||||||
|
<l:gentext key="Bibliography" text="Litteraturliste"/>
|
||||||
|
<l:gentext key="bibliography" text="litteraturliste"/>
|
||||||
|
<l:gentext key="Book" text="Bog"/>
|
||||||
|
<l:gentext key="book" text="bog"/>
|
||||||
|
<l:gentext key="CAUTION" text="PAS PÅ"/>
|
||||||
|
<l:gentext key="Caution" text="Pas på"/>
|
||||||
|
<l:gentext key="caution" text="pas på"/>
|
||||||
|
<l:gentext key="Chapter" text="Kapitel"/>
|
||||||
|
<l:gentext key="chapter" text="kapitel"/>
|
||||||
|
<l:gentext key="Colophon" text="Kolofon"/>
|
||||||
|
<l:gentext key="colophon" text="kolofon"/>
|
||||||
|
<l:gentext key="Copyright" text="Ophavsret"/>
|
||||||
|
<l:gentext key="copyright" text="ophavsret"/>
|
||||||
|
<l:gentext key="Dedication" text="Tilegnet"/>
|
||||||
|
<l:gentext key="dedication" text="tilegnet"/>
|
||||||
|
<l:gentext key="Edition" text="Udgave"/>
|
||||||
|
<l:gentext key="edition" text="udgave"/>
|
||||||
|
<l:gentext key="Equation" text="Ligning"/>
|
||||||
|
<l:gentext key="equation" text="ligning"/>
|
||||||
|
<l:gentext key="Example" text="Eksempel"/>
|
||||||
|
<l:gentext key="example" text="eksempel"/>
|
||||||
|
<l:gentext key="Figure" text="Figur"/>
|
||||||
|
<l:gentext key="figure" text="figur"/>
|
||||||
|
<l:gentext key="Glossary" text="Ordliste"/>
|
||||||
|
<l:gentext key="glossary" text="ordliste"/>
|
||||||
|
<l:gentext key="GlossSee" text="Se"/>
|
||||||
|
<l:gentext key="glosssee" text="se"/>
|
||||||
|
<l:gentext key="GlossSeeAlso" text="Se også"/>
|
||||||
|
<l:gentext key="glossseealso" text="se også"/>
|
||||||
|
<l:gentext key="IMPORTANT" text="VIGTIGT"/>
|
||||||
|
<l:gentext key="important" text="vigtigt"/>
|
||||||
|
<l:gentext key="Important" text="Vigtigt"/>
|
||||||
|
<l:gentext key="Index" text="Stikordsregister"/>
|
||||||
|
<l:gentext key="index" text="stikordsregister"/>
|
||||||
|
<l:gentext key="ISBN" text="ISBN"/>
|
||||||
|
<l:gentext key="isbn" text="ISBN"/>
|
||||||
|
<l:gentext key="LegalNotice" text="Retslig note"/>
|
||||||
|
<l:gentext key="legalnotice" text="retslig note"/>
|
||||||
|
<l:gentext key="MsgAud" text="Målgruppe"/>
|
||||||
|
<l:gentext key="msgaud" text="målgruppe"/>
|
||||||
|
<l:gentext key="MsgLevel" text="Niveau"/>
|
||||||
|
<l:gentext key="msglevel" text="niveau"/>
|
||||||
|
<l:gentext key="MsgOrig" text="Grundlag"/>
|
||||||
|
<l:gentext key="msgorig" text="grundlag"/>
|
||||||
|
<l:gentext key="NOTE" text="BEMÆRK"/>
|
||||||
|
<l:gentext key="Note" text="Bemærk"/>
|
||||||
|
<l:gentext key="note" text="bemærk"/>
|
||||||
|
<l:gentext key="Part" text="Del"/>
|
||||||
|
<l:gentext key="part" text="del"/>
|
||||||
|
<l:gentext key="Preface" text="Forord"/>
|
||||||
|
<l:gentext key="preface" text="forord"/>
|
||||||
|
<l:gentext key="Procedure" text="Procedure"/>
|
||||||
|
<l:gentext key="procedure" text="procedure"/>
|
||||||
|
<l:gentext key="ProductionSet" text="Produktion"/>
|
||||||
|
<l:gentext key="PubDate" text="Publication Date" lang="en"/>
|
||||||
|
<l:gentext key="pubdate" text="Publication date" lang="en"/>
|
||||||
|
<l:gentext key="Published" text="Udgivet"/>
|
||||||
|
<l:gentext key="published" text="udgivet"/>
|
||||||
|
<l:gentext key="Qandadiv" text="Q & A" lang="en"/>
|
||||||
|
<l:gentext key="qandadiv" text="Q & A" lang="en"/>
|
||||||
|
<l:gentext key="Question" text="Spørgsmål"/>
|
||||||
|
<l:gentext key="question" text="spørgsmål"/>
|
||||||
|
<l:gentext key="RefEntry" text="Punkt"/>
|
||||||
|
<l:gentext key="refentry" text="punkt"/>
|
||||||
|
<l:gentext key="Reference" text="Henvisning"/>
|
||||||
|
<l:gentext key="reference" text="henvisning"/>
|
||||||
|
<l:gentext key="RefName" text="Navn"/>
|
||||||
|
<l:gentext key="refname" text="navn"/>
|
||||||
|
<l:gentext key="RefSection" text="Afsnit"/>
|
||||||
|
<l:gentext key="refsection" text="afsnit"/>
|
||||||
|
<l:gentext key="RefSynopsisDiv" text="Synopsis"/>
|
||||||
|
<l:gentext key="refsynopsisdiv" text="synopsis"/>
|
||||||
|
<l:gentext key="RevHistory" text="Revisionshistorie"/>
|
||||||
|
<l:gentext key="revhistory" text="revisionshistorie"/>
|
||||||
|
<l:gentext key="revision" text="revision"/>
|
||||||
|
<l:gentext key="Revision" text="Revision"/>
|
||||||
|
<l:gentext key="sect1" text="Afsnit"/>
|
||||||
|
<l:gentext key="sect2" text="Afsnit"/>
|
||||||
|
<l:gentext key="sect3" text="Afsnit"/>
|
||||||
|
<l:gentext key="sect4" text="Afsnit"/>
|
||||||
|
<l:gentext key="sect5" text="Afsnit"/>
|
||||||
|
<l:gentext key="section" text="afsnit"/>
|
||||||
|
<l:gentext key="Section" text="Afsnit"/>
|
||||||
|
<l:gentext key="see" text="se"/>
|
||||||
|
<l:gentext key="See" text="Se"/>
|
||||||
|
<l:gentext key="seealso" text="se også"/>
|
||||||
|
<l:gentext key="Seealso" text="Se også"/>
|
||||||
|
<l:gentext key="SeeAlso" text="Se også"/>
|
||||||
|
<l:gentext key="set" text="sæt"/>
|
||||||
|
<l:gentext key="Set" text="Sæt"/>
|
||||||
|
<l:gentext key="setindex" text="sæt indeks"/>
|
||||||
|
<l:gentext key="SetIndex" text="Sæt indeks"/>
|
||||||
|
<l:gentext key="Sidebar" text="Sidebjælke"/>
|
||||||
|
<l:gentext key="sidebar" text="sidebjælke"/>
|
||||||
|
<l:gentext key="step" text="trin"/>
|
||||||
|
<l:gentext key="Step" text="Trin"/>
|
||||||
|
<l:gentext key="Table" text="Tabel"/>
|
||||||
|
<l:gentext key="table" text="tabel"/>
|
||||||
|
<l:gentext key="tip" text="vink"/>
|
||||||
|
<l:gentext key="TIP" text="VINK"/>
|
||||||
|
<l:gentext key="Tip" text="Vink"/>
|
||||||
|
<l:gentext key="Warning" text="Advarsel"/>
|
||||||
|
<l:gentext key="warning" text="advarsel"/>
|
||||||
|
<l:gentext key="WARNING" text="ADVARSEL"/>
|
||||||
|
<l:gentext key="and" text="og"/>
|
||||||
|
<l:gentext key="by" text="af"/>
|
||||||
|
<l:gentext key="called" text="called" lang="en"/>
|
||||||
|
<l:gentext key="Edited" text="Redigeret"/>
|
||||||
|
<l:gentext key="edited" text="redigeret"/>
|
||||||
|
<l:gentext key="Editedby" text="Redigeret af"/>
|
||||||
|
<l:gentext key="editedby" text="redigeret af"/>
|
||||||
|
<l:gentext key="in" text="i"/>
|
||||||
|
<l:gentext key="lastlistcomma" text=" og "/>
|
||||||
|
<l:gentext key="listcomma" text=", "/>
|
||||||
|
<l:gentext key="nonexistantelement" text="ikke-eksisterende element"/>
|
||||||
|
<l:gentext key="notes" text="slutbemærkning:"/>
|
||||||
|
<l:gentext key="Notes" text="Slutbemærkning:"/>
|
||||||
|
<l:gentext key="Pgs" text="Siderne"/>
|
||||||
|
<l:gentext key="pgs" text="siderne"/>
|
||||||
|
<l:gentext key="Revisedby" text="Revideret af: "/>
|
||||||
|
<l:gentext key="revisedby" text="revideret af: "/>
|
||||||
|
<l:gentext key="TableNotes" text="Noter:"/>
|
||||||
|
<l:gentext key="tablenotes" text="noter:"/>
|
||||||
|
<l:gentext key="TableofContents" text="Indholdsfortegnelse"/>
|
||||||
|
<l:gentext key="tableofcontents" text="indholdsfortegnelse"/>
|
||||||
|
<l:gentext key="the" text="" lang="en"/>
|
||||||
|
<l:gentext key="unexpectedelementname" text="uventet elementnavn"/>
|
||||||
|
<l:gentext key="unsupported" text="ikke understøttet"/>
|
||||||
|
<l:gentext key="xrefto" text="krydshenvisning til"/>
|
||||||
|
<l:gentext key="listofequations" text="ligningsliste"/>
|
||||||
|
<l:gentext key="ListofEquations" text="Ligningsliste"/>
|
||||||
|
<l:gentext key="ListofExamples" text="Eksempelliste"/>
|
||||||
|
<l:gentext key="listofexamples" text="eksempelliste"/>
|
||||||
|
<l:gentext key="ListofFigures" text="Figurliste"/>
|
||||||
|
<l:gentext key="listoffigures" text="figurliste"/>
|
||||||
|
<l:gentext key="ListofProcedures" text="List of Procedures" lang="en"/>
|
||||||
|
<l:gentext key="listofprocedures" text="List of Procedures" lang="en"/>
|
||||||
|
<l:gentext key="listoftables" text="tabelliste"/>
|
||||||
|
<l:gentext key="ListofTables" text="Tabelliste"/>
|
||||||
|
<l:gentext key="ListofUnknown" text="Liste over ukendte"/>
|
||||||
|
<l:gentext key="listofunknown" text="liste over ukendte"/>
|
||||||
|
<l:gentext key="nav-home" text="hjem"/>
|
||||||
|
<l:gentext key="nav-next" text="næste"/>
|
||||||
|
<l:gentext key="nav-next-sibling" text="hurtigt fremad"/>
|
||||||
|
<l:gentext key="nav-prev" text="forrige"/>
|
||||||
|
<l:gentext key="nav-prev-sibling" text="hurtigt tilbage"/>
|
||||||
|
<l:gentext key="nav-up" text="op"/>
|
||||||
|
<l:gentext key="nav-toc" text="ToC" lang="en"/>
|
||||||
|
<l:gentext key="Draft" text="Kladde"/>
|
||||||
|
<l:gentext key="above" text="over"/>
|
||||||
|
<l:gentext key="below" text="under"/>
|
||||||
|
<l:gentext key="sectioncalled" text="afsnittet der hedder"/>
|
||||||
|
<l:gentext key="index symbols" text="symboler"/>
|
||||||
|
<l:gentext key="lowercase.alpha" text="abcdefghijklmnopqrstuvwxyzæøå"/>
|
||||||
|
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZÆØÅ"/>
|
||||||
|
<l:dingbat key="startquote" text="“"/>
|
||||||
|
<l:dingbat key="endquote" text="”"/>
|
||||||
|
<l:dingbat key="nestedstartquote" text="‘"/>
|
||||||
|
<l:dingbat key="nestedendquote" text="’"/>
|
||||||
|
<l:dingbat key="singlestartquote" text="‘" lang="en"/>
|
||||||
|
<l:dingbat key="singleendquote" text="’" lang="en"/>
|
||||||
|
<l:dingbat key="bullet" text="•"/>
|
||||||
|
<l:gentext key="hyphenation-character" text="-"/>
|
||||||
|
<l:gentext key="hyphenation-push-character-count" text="2"/>
|
||||||
|
<l:gentext key="hyphenation-remain-character-count" text="2"/>
|
||||||
|
|
||||||
|
<l:context name="styles">
|
||||||
|
<l:template name="person-name" text="first-last"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title">
|
||||||
|
<l:template name="abstract" text="%t"/>
|
||||||
|
<l:template name="answer" text="%t"/>
|
||||||
|
<l:template name="appendix" text="Appendiks %n. %t"/>
|
||||||
|
<l:template name="article" text="%t"/>
|
||||||
|
<l:template name="authorblurb" text="%t"/>
|
||||||
|
<l:template name="bibliodiv" text="%t"/>
|
||||||
|
<l:template name="biblioentry" text="%t"/>
|
||||||
|
<l:template name="bibliography" text="%t"/>
|
||||||
|
<l:template name="bibliolist" text="%t" lang="en"/>
|
||||||
|
<l:template name="bibliomixed" text="%t"/>
|
||||||
|
<l:template name="bibliomset" text="%t"/>
|
||||||
|
<l:template name="biblioset" text="%t"/>
|
||||||
|
<l:template name="blockquote" text="%t"/>
|
||||||
|
<l:template name="book" text="%t"/>
|
||||||
|
<l:template name="calloutlist" text="%t"/>
|
||||||
|
<l:template name="caution" text="%t"/>
|
||||||
|
<l:template name="chapter" text="Kapitel %n. %t"/>
|
||||||
|
<l:template name="colophon" text="%t"/>
|
||||||
|
<l:template name="dedication" text="%t"/>
|
||||||
|
<l:template name="equation" text="Ligning %n. %t"/>
|
||||||
|
<l:template name="example" text="Eksempel %n. %t"/>
|
||||||
|
<l:template name="figure" text="Figur %n. %t"/>
|
||||||
|
<l:template name="formalpara" text="%t"/>
|
||||||
|
<l:template name="glossary" text="%t"/>
|
||||||
|
<l:template name="glossdiv" text="%t"/>
|
||||||
|
<l:template name="glosslist" text="%t" lang="en"/>
|
||||||
|
<l:template name="glossentry" text="%t" lang="en"/>
|
||||||
|
<l:template name="important" text="%t"/>
|
||||||
|
<l:template name="index" text="%t"/>
|
||||||
|
<l:template name="indexdiv" text="%t"/>
|
||||||
|
<l:template name="itemizedlist" text="%t"/>
|
||||||
|
<l:template name="legalnotice" text="%t"/>
|
||||||
|
<l:template name="listitem" text=""/>
|
||||||
|
<l:template name="lot" text="%t"/>
|
||||||
|
<l:template name="msg" text="%t"/>
|
||||||
|
<l:template name="msgexplan" text="%t"/>
|
||||||
|
<l:template name="msgmain" text="%t"/>
|
||||||
|
<l:template name="msgrel" text="%t"/>
|
||||||
|
<l:template name="msgset" text="%t"/>
|
||||||
|
<l:template name="msgsub" text="%t"/>
|
||||||
|
<l:template name="note" text="%t"/>
|
||||||
|
<l:template name="orderedlist" text="%t"/>
|
||||||
|
<l:template name="part" text="Del %n. %t"/>
|
||||||
|
<l:template name="partintro" text="%t"/>
|
||||||
|
<l:template name="preface" text="%t"/>
|
||||||
|
<l:template name="procedure" text="%t"/>
|
||||||
|
<l:template name="procedure.formal" text="Procedure %n. %t"/>
|
||||||
|
<l:template name="productionset" text="%t"/>
|
||||||
|
<l:template name="productionset.formal" text="Produktion %n"/>
|
||||||
|
<l:template name="qandadiv" text="%t"/>
|
||||||
|
<l:template name="qandaentry" text="%t"/>
|
||||||
|
<l:template name="qandaset" text="%t"/>
|
||||||
|
<l:template name="question" text="Spørgsmål %n"/>
|
||||||
|
<l:template name="refentry" text="%t"/>
|
||||||
|
<l:template name="reference" text="%t"/>
|
||||||
|
<l:template name="refsection" text="%t"/>
|
||||||
|
<l:template name="refsect1" text="%t"/>
|
||||||
|
<l:template name="refsect2" text="%t"/>
|
||||||
|
<l:template name="refsect3" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdivinfo" text="%t"/>
|
||||||
|
<l:template name="segmentedlist" text="%t"/>
|
||||||
|
<l:template name="set" text="%t"/>
|
||||||
|
<l:template name="setindex" text="%t"/>
|
||||||
|
<l:template name="sidebar" text="%t"/>
|
||||||
|
<l:template name="step" text="%t"/>
|
||||||
|
<l:template name="table" text="Tabel %n. %t"/>
|
||||||
|
<l:template name="task" text="%t" lang="en"/>
|
||||||
|
<l:template name="tip" text="%t"/>
|
||||||
|
<l:template name="toc" text="%t"/>
|
||||||
|
<l:template name="variablelist" text="%t"/>
|
||||||
|
<l:template name="varlistentry" text=""/>
|
||||||
|
<l:template name="warning" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title-unnumbered">
|
||||||
|
<l:template name="appendix" text="%t"/>
|
||||||
|
<l:template name="article/appendix" text="%t" lang="en"/>
|
||||||
|
<l:template name="bridgehead" text="%t"/>
|
||||||
|
<l:template name="chapter" text="%t"/>
|
||||||
|
<l:template name="sect1" text="%t"/>
|
||||||
|
<l:template name="sect2" text="%t"/>
|
||||||
|
<l:template name="sect3" text="%t"/>
|
||||||
|
<l:template name="sect4" text="%t"/>
|
||||||
|
<l:template name="sect5" text="%t"/>
|
||||||
|
<l:template name="section" text="%t"/>
|
||||||
|
<l:template name="simplesect" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title-numbered">
|
||||||
|
<l:template name="appendix" text="Appendiks %n. %t"/>
|
||||||
|
<l:template name="article/appendix" text="%n. %t" lang="en"/>
|
||||||
|
<l:template name="bridgehead" text="%n. %t"/>
|
||||||
|
<l:template name="chapter" text="Kapitel %n. %t"/>
|
||||||
|
<l:template name="sect1" text="%n. %t"/>
|
||||||
|
<l:template name="sect2" text="%n. %t"/>
|
||||||
|
<l:template name="sect3" text="%n. %t"/>
|
||||||
|
<l:template name="sect4" text="%n. %t"/>
|
||||||
|
<l:template name="sect5" text="%n. %t"/>
|
||||||
|
<l:template name="section" text="%n. %t"/>
|
||||||
|
<l:template name="simplesect" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="subtitle">
|
||||||
|
<l:template name="appendix" text="%s"/>
|
||||||
|
<l:template name="article" text="%s"/>
|
||||||
|
<l:template name="bibliodiv" text="%s"/>
|
||||||
|
<l:template name="biblioentry" text="%s"/>
|
||||||
|
<l:template name="bibliography" text="%s"/>
|
||||||
|
<l:template name="bibliomixed" text="%s"/>
|
||||||
|
<l:template name="bibliomset" text="%s"/>
|
||||||
|
<l:template name="biblioset" text="%s"/>
|
||||||
|
<l:template name="book" text="%s"/>
|
||||||
|
<l:template name="chapter" text="%s"/>
|
||||||
|
<l:template name="colophon" text="%s"/>
|
||||||
|
<l:template name="dedication" text="%s"/>
|
||||||
|
<l:template name="glossary" text="%s"/>
|
||||||
|
<l:template name="glossdiv" text="%s"/>
|
||||||
|
<l:template name="index" text="%s"/>
|
||||||
|
<l:template name="indexdiv" text="%s"/>
|
||||||
|
<l:template name="lot" text="%s"/>
|
||||||
|
<l:template name="part" text="%s"/>
|
||||||
|
<l:template name="partintro" text="%s"/>
|
||||||
|
<l:template name="preface" text="%s"/>
|
||||||
|
<l:template name="refentry" text="%s"/>
|
||||||
|
<l:template name="reference" text="%s"/>
|
||||||
|
<l:template name="refsection" text="%s"/>
|
||||||
|
<l:template name="refsect1" text="%s"/>
|
||||||
|
<l:template name="refsect2" text="%s"/>
|
||||||
|
<l:template name="refsect3" text="%s"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%s"/>
|
||||||
|
<l:template name="sect1" text="%s"/>
|
||||||
|
<l:template name="sect2" text="%s"/>
|
||||||
|
<l:template name="sect3" text="%s"/>
|
||||||
|
<l:template name="sect4" text="%s"/>
|
||||||
|
<l:template name="sect5" text="%s"/>
|
||||||
|
<l:template name="section" text="%s"/>
|
||||||
|
<l:template name="set" text="%s"/>
|
||||||
|
<l:template name="setindex" text="%s"/>
|
||||||
|
<l:template name="sidebar" text="%s"/>
|
||||||
|
<l:template name="simplesect" text="%s"/>
|
||||||
|
<l:template name="toc" text="%s"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref">
|
||||||
|
<l:template name="abstract" text="%t"/>
|
||||||
|
<l:template name="answer" text="Svar %n"/>
|
||||||
|
<l:template name="appendix" text="%t"/>
|
||||||
|
<l:template name="article" text="%t"/>
|
||||||
|
<l:template name="authorblurb" text="%t"/>
|
||||||
|
<l:template name="bibliodiv" text="%t"/>
|
||||||
|
<l:template name="bibliography" text="%t"/>
|
||||||
|
<l:template name="bibliomset" text="%t"/>
|
||||||
|
<l:template name="biblioset" text="%t"/>
|
||||||
|
<l:template name="blockquote" text="%t"/>
|
||||||
|
<l:template name="book" text="%t"/>
|
||||||
|
<l:template name="calloutlist" text="%t"/>
|
||||||
|
<l:template name="caution" text="%t"/>
|
||||||
|
<l:template name="chapter" text="%t"/>
|
||||||
|
<l:template name="colophon" text="%t"/>
|
||||||
|
<l:template name="constraintdef" text="%t"/>
|
||||||
|
<l:template name="dedication" text="%t"/>
|
||||||
|
<l:template name="equation" text="%t"/>
|
||||||
|
<l:template name="example" text="%t"/>
|
||||||
|
<l:template name="figure" text="%t"/>
|
||||||
|
<l:template name="formalpara" text="%t"/>
|
||||||
|
<l:template name="glossary" text="%t"/>
|
||||||
|
<l:template name="glossdiv" text="%t"/>
|
||||||
|
<l:template name="important" text="%t"/>
|
||||||
|
<l:template name="index" text="%t"/>
|
||||||
|
<l:template name="indexdiv" text="%t"/>
|
||||||
|
<l:template name="itemizedlist" text="%t"/>
|
||||||
|
<l:template name="legalnotice" text="%t"/>
|
||||||
|
<l:template name="listitem" text="%n"/>
|
||||||
|
<l:template name="lot" text="%t"/>
|
||||||
|
<l:template name="msg" text="%t"/>
|
||||||
|
<l:template name="msgexplan" text="%t"/>
|
||||||
|
<l:template name="msgmain" text="%t"/>
|
||||||
|
<l:template name="msgrel" text="%t"/>
|
||||||
|
<l:template name="msgset" text="%t"/>
|
||||||
|
<l:template name="msgsub" text="%t"/>
|
||||||
|
<l:template name="note" text="%t"/>
|
||||||
|
<l:template name="orderedlist" text="%t"/>
|
||||||
|
<l:template name="part" text="%t"/>
|
||||||
|
<l:template name="partintro" text="%t"/>
|
||||||
|
<l:template name="preface" text="%t"/>
|
||||||
|
<l:template name="procedure" text="%t"/>
|
||||||
|
<l:template name="productionset" text="%t"/>
|
||||||
|
<l:template name="qandadiv" text="%t"/>
|
||||||
|
<l:template name="qandaentry" text="Spørgsmål %n"/>
|
||||||
|
<l:template name="qandaset" text="%t"/>
|
||||||
|
<l:template name="question" text="Spørgsmål %n"/>
|
||||||
|
<l:template name="reference" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%t"/>
|
||||||
|
<l:template name="segmentedlist" text="%t"/>
|
||||||
|
<l:template name="set" text="%t"/>
|
||||||
|
<l:template name="setindex" text="%t"/>
|
||||||
|
<l:template name="sidebar" text="%t"/>
|
||||||
|
<l:template name="table" text="%t"/>
|
||||||
|
<l:template name="tip" text="%t"/>
|
||||||
|
<l:template name="toc" text="%t"/>
|
||||||
|
<l:template name="variablelist" text="%t"/>
|
||||||
|
<l:template name="varlistentry" text="%n"/>
|
||||||
|
<l:template name="warning" text="%t"/>
|
||||||
|
<l:template name="page.citation" text=" [%p]"/>
|
||||||
|
<l:template name="page" text="(page %p)" lang="en"/>
|
||||||
|
<l:template name="pageabbrev" text="(p. %p)" lang="en"/>
|
||||||
|
<l:template name="Page" text="Page %p" lang="en"/>
|
||||||
|
<l:template name="bridgehead" text="afsnittet der hedder “%t”"/>
|
||||||
|
<l:template name="refsection" text="“%t”"/>
|
||||||
|
<l:template name="refsect1" text="“%t”"/>
|
||||||
|
<l:template name="refsect2" text="“%t”"/>
|
||||||
|
<l:template name="refsect3" text="“%t”"/>
|
||||||
|
<l:template name="sect1" text="“%t”"/>
|
||||||
|
<l:template name="sect2" text="“%t”"/>
|
||||||
|
<l:template name="sect3" text="“%t”"/>
|
||||||
|
<l:template name="sect4" text="“%t”"/>
|
||||||
|
<l:template name="sect5" text="“%t”"/>
|
||||||
|
<l:template name="section" text="“%t”"/>
|
||||||
|
<l:template name="simplesect" text="“%t”"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref-number">
|
||||||
|
<l:template name="answer" text="Svar %n"/>
|
||||||
|
<l:template name="appendix" text="Appendiks %n"/>
|
||||||
|
<l:template name="bridgehead" text="Afsnit %n"/>
|
||||||
|
<l:template name="chapter" text="Kapitel %n"/>
|
||||||
|
<l:template name="equation" text="Ligning %n"/>
|
||||||
|
<l:template name="example" text="Eksempel %n"/>
|
||||||
|
<l:template name="figure" text="Figur %n"/>
|
||||||
|
<l:template name="part" text="Del %n"/>
|
||||||
|
<l:template name="procedure" text="Procedure %n"/>
|
||||||
|
<l:template name="productionset" text="Produktion %n"/>
|
||||||
|
<l:template name="qandadiv" text="Q & A %n"/>
|
||||||
|
<l:template name="qandaentry" text="Spørgsmål %n"/>
|
||||||
|
<l:template name="question" text="Spørgsmål %n"/>
|
||||||
|
<l:template name="sect1" text="Afsnit %n"/>
|
||||||
|
<l:template name="sect2" text="Afsnit %n"/>
|
||||||
|
<l:template name="sect3" text="Afsnit %n"/>
|
||||||
|
<l:template name="sect4" text="Afsnit %n"/>
|
||||||
|
<l:template name="sect5" text="Afsnit %n"/>
|
||||||
|
<l:template name="section" text="Afsnit %n"/>
|
||||||
|
<l:template name="table" text="Tabel %n"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref-number-and-title">
|
||||||
|
<l:template name="appendix" text="Appendiks %n, %t"/>
|
||||||
|
<l:template name="bridgehead" text="Afsnit %n, “%t”"/>
|
||||||
|
<l:template name="chapter" text="Kapitel %n, %t"/>
|
||||||
|
<l:template name="equation" text="Ligning %n, “%t”"/>
|
||||||
|
<l:template name="example" text="Eksempel %n, “%t”"/>
|
||||||
|
<l:template name="figure" text="Figur %n, “%t”"/>
|
||||||
|
<l:template name="part" text="Del %n, “%t”"/>
|
||||||
|
<l:template name="procedure" text="Procedure %n, “%t”"/>
|
||||||
|
<l:template name="productionset" text="Produktion %n, “%t”"/>
|
||||||
|
<l:template name="qandadiv" text="Q & A %n, “%t”"/>
|
||||||
|
<l:template name="refsect1" text="afsnittet der hedder “%t”"/>
|
||||||
|
<l:template name="refsect2" text="afsnittet der hedder “%t”"/>
|
||||||
|
<l:template name="refsect3" text="afsnittet der hedder “%t”"/>
|
||||||
|
<l:template name="refsection" text="afsnittet der hedder “%t”"/>
|
||||||
|
<l:template name="sect1" text="Afsnit %n, “%t”"/>
|
||||||
|
<l:template name="sect2" text="Afsnit %n, “%t”"/>
|
||||||
|
<l:template name="sect3" text="Afsnit %n, “%t”"/>
|
||||||
|
<l:template name="sect4" text="Afsnit %n, “%t”"/>
|
||||||
|
<l:template name="sect5" text="Afsnit %n, “%t”"/>
|
||||||
|
<l:template name="section" text="Afsnit %n, “%t”"/>
|
||||||
|
<l:template name="simplesect" text="afsnittet der hedder “%t”"/>
|
||||||
|
<l:template name="table" text="Tabel %n, “%t”"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="authorgroup">
|
||||||
|
<l:template name="sep" text=", "/>
|
||||||
|
<l:template name="sep2" text=" og "/>
|
||||||
|
<l:template name="seplast" text=" og og "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="glossary">
|
||||||
|
<l:template name="see" text="Se "/>
|
||||||
|
<l:template name="seealso" text="Se også "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="msgset">
|
||||||
|
<l:template name="MsgAud" text="Målgruppe: "/>
|
||||||
|
<l:template name="MsgLevel" text="Niveau: "/>
|
||||||
|
<l:template name="MsgOrig" text="Grundlag: "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime">
|
||||||
|
<l:template name="format" text="d/m/Y"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime-full">
|
||||||
|
<l:template name="January" text="Januar"/>
|
||||||
|
<l:template name="February" text="Februar"/>
|
||||||
|
<l:template name="March" text="Marts"/>
|
||||||
|
<l:template name="April" text="April"/>
|
||||||
|
<l:template name="May" text="Maj"/>
|
||||||
|
<l:template name="June" text="Juni"/>
|
||||||
|
<l:template name="July" text="July"/>
|
||||||
|
<l:template name="August" text="August"/>
|
||||||
|
<l:template name="September" text="September"/>
|
||||||
|
<l:template name="October" text="Oktober"/>
|
||||||
|
<l:template name="November" text="November"/>
|
||||||
|
<l:template name="December" text="December"/>
|
||||||
|
<l:template name="Monday" text="Mandag"/>
|
||||||
|
<l:template name="Tuesday" text="Tirsdag"/>
|
||||||
|
<l:template name="Wednesday" text="Onsdag"/>
|
||||||
|
<l:template name="Thursday" text="Torsdag"/>
|
||||||
|
<l:template name="Friday" text="Fredag"/>
|
||||||
|
<l:template name="Saturday" text="Lørdag"/>
|
||||||
|
<l:template name="Sunday" text="Søndag"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime-abbrev">
|
||||||
|
<l:template name="Jan" text="Jan"/>
|
||||||
|
<l:template name="Feb" text="Feb"/>
|
||||||
|
<l:template name="Mar" text="Mar"/>
|
||||||
|
<l:template name="Apr" text="Apr"/>
|
||||||
|
<l:template name="May" text="Maj"/>
|
||||||
|
<l:template name="Jun" text="Jun"/>
|
||||||
|
<l:template name="Jul" text="Jul"/>
|
||||||
|
<l:template name="Aug" text="Aug"/>
|
||||||
|
<l:template name="Sep" text="Sep"/>
|
||||||
|
<l:template name="Oct" text="Okt"/>
|
||||||
|
<l:template name="Nov" text="Nov"/>
|
||||||
|
<l:template name="Dec" text="Dec"/>
|
||||||
|
<l:template name="Mon" text="Man"/>
|
||||||
|
<l:template name="Tue" text="Tir"/>
|
||||||
|
<l:template name="Wed" text="ins"/>
|
||||||
|
<l:template name="Thu" text="Tor"/>
|
||||||
|
<l:template name="Fri" text="Fre"/>
|
||||||
|
<l:template name="Sat" text="Lør"/>
|
||||||
|
<l:template name="Sun" text="Søn"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="htmlhelp">
|
||||||
|
<l:template name="langcode" text="0x0406 Danish"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:letters>
|
||||||
|
<l:l i="1">A</l:l>
|
||||||
|
<l:l i="1">a</l:l>
|
||||||
|
<l:l i="2">B</l:l>
|
||||||
|
<l:l i="2">b</l:l>
|
||||||
|
<l:l i="3">C</l:l>
|
||||||
|
<l:l i="3">c</l:l>
|
||||||
|
<l:l i="4">D</l:l>
|
||||||
|
<l:l i="4">d</l:l>
|
||||||
|
<l:l i="5">E</l:l>
|
||||||
|
<l:l i="5">e</l:l>
|
||||||
|
<l:l i="6">F</l:l>
|
||||||
|
<l:l i="6">f</l:l>
|
||||||
|
<l:l i="7">G</l:l>
|
||||||
|
<l:l i="7">g</l:l>
|
||||||
|
<l:l i="8">H</l:l>
|
||||||
|
<l:l i="8">h</l:l>
|
||||||
|
<l:l i="9">I</l:l>
|
||||||
|
<l:l i="9">i</l:l>
|
||||||
|
<l:l i="10">J</l:l>
|
||||||
|
<l:l i="10">j</l:l>
|
||||||
|
<l:l i="11">K</l:l>
|
||||||
|
<l:l i="11">k</l:l>
|
||||||
|
<l:l i="12">L</l:l>
|
||||||
|
<l:l i="12">l</l:l>
|
||||||
|
<l:l i="13">M</l:l>
|
||||||
|
<l:l i="13">m</l:l>
|
||||||
|
<l:l i="14">N</l:l>
|
||||||
|
<l:l i="14">n</l:l>
|
||||||
|
<l:l i="15">O</l:l>
|
||||||
|
<l:l i="15">o</l:l>
|
||||||
|
<l:l i="16">P</l:l>
|
||||||
|
<l:l i="16">p</l:l>
|
||||||
|
<l:l i="17">Q</l:l>
|
||||||
|
<l:l i="17">q</l:l>
|
||||||
|
<l:l i="18">R</l:l>
|
||||||
|
<l:l i="18">r</l:l>
|
||||||
|
<l:l i="19">S</l:l>
|
||||||
|
<l:l i="19">s</l:l>
|
||||||
|
<l:l i="20">T</l:l>
|
||||||
|
<l:l i="20">t</l:l>
|
||||||
|
<l:l i="21">U</l:l>
|
||||||
|
<l:l i="21">u</l:l>
|
||||||
|
<l:l i="22">V</l:l>
|
||||||
|
<l:l i="22">v</l:l>
|
||||||
|
<l:l i="23">W</l:l>
|
||||||
|
<l:l i="23">w</l:l>
|
||||||
|
<l:l i="24">X</l:l>
|
||||||
|
<l:l i="24">x</l:l>
|
||||||
|
<l:l i="25">Y</l:l>
|
||||||
|
<l:l i="25">y</l:l>
|
||||||
|
<l:l i="26">Z</l:l>
|
||||||
|
<l:l i="26">z</l:l>
|
||||||
|
<l:l i="27">Æ</l:l>
|
||||||
|
<l:l i="27">æ</l:l>
|
||||||
|
<l:l i="28">Ø</l:l>
|
||||||
|
<l:l i="28">ø</l:l>
|
||||||
|
<l:l i="29">Å</l:l>
|
||||||
|
<l:l i="29">å</l:l>
|
||||||
|
</l:letters>
|
||||||
|
</l:l10n>
|
|
@ -0,0 +1,590 @@
|
||||||
|
<?xml version="1.0" encoding="US-ASCII"?>
|
||||||
|
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="de" english-language-name="German">
|
||||||
|
|
||||||
|
<!-- This file is generated automatically. -->
|
||||||
|
<!-- Do not edit this file by hand! -->
|
||||||
|
<!-- See http://docbook.sourceforge.net/ -->
|
||||||
|
<!-- To update this file: edit the corresponding document at -->
|
||||||
|
<!-- http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/gentext/locale/ -->
|
||||||
|
|
||||||
|
<l:gentext key="Abstract" text="Zusammenfassung"/>
|
||||||
|
<l:gentext key="abstract" text="Zusammenfassung"/>
|
||||||
|
<l:gentext key="Answer" text="A:"/>
|
||||||
|
<l:gentext key="answer" text="A:"/>
|
||||||
|
<l:gentext key="Appendix" text="Anhang"/>
|
||||||
|
<l:gentext key="appendix" text="Anhang"/>
|
||||||
|
<l:gentext key="Article" text="Artikel"/>
|
||||||
|
<l:gentext key="article" text="Artikel"/>
|
||||||
|
<l:gentext key="Bibliography" text="Literaturverzeichnis"/>
|
||||||
|
<l:gentext key="bibliography" text="Literaturverzeichnis"/>
|
||||||
|
<l:gentext key="Book" text="Buch"/>
|
||||||
|
<l:gentext key="book" text="Buch"/>
|
||||||
|
<l:gentext key="CAUTION" text="ACHTUNG"/>
|
||||||
|
<l:gentext key="Caution" text="Achtung"/>
|
||||||
|
<l:gentext key="caution" text="Achtung"/>
|
||||||
|
<l:gentext key="Chapter" text="Kapitel"/>
|
||||||
|
<l:gentext key="chapter" text="Kapitel"/>
|
||||||
|
<l:gentext key="Colophon" text="Kolophon"/>
|
||||||
|
<l:gentext key="colophon" text="Kolophon"/>
|
||||||
|
<l:gentext key="Copyright" text="Copyright"/>
|
||||||
|
<l:gentext key="copyright" text="Copyright"/>
|
||||||
|
<l:gentext key="Dedication" text="Widmung"/>
|
||||||
|
<l:gentext key="dedication" text="Widmung"/>
|
||||||
|
<l:gentext key="Edition" text="Ausgabe"/>
|
||||||
|
<l:gentext key="edition" text="Ausgabe"/>
|
||||||
|
<l:gentext key="Equation" text="Gleichung"/>
|
||||||
|
<l:gentext key="equation" text="Gleichung"/>
|
||||||
|
<l:gentext key="Example" text="Beispiel"/>
|
||||||
|
<l:gentext key="example" text="Beispiel"/>
|
||||||
|
<l:gentext key="Figure" text="Abbildung"/>
|
||||||
|
<l:gentext key="figure" text="Abbildung"/>
|
||||||
|
<l:gentext key="Glossary" text="Glossar"/>
|
||||||
|
<l:gentext key="glossary" text="Glossar"/>
|
||||||
|
<l:gentext key="GlossSee" text="Siehe"/>
|
||||||
|
<l:gentext key="glosssee" text="Siehe"/>
|
||||||
|
<l:gentext key="GlossSeeAlso" text="Siehe auch"/>
|
||||||
|
<l:gentext key="glossseealso" text="Siehe auch"/>
|
||||||
|
<l:gentext key="IMPORTANT" text="WICHTIG"/>
|
||||||
|
<l:gentext key="important" text="Wichtig"/>
|
||||||
|
<l:gentext key="Important" text="Wichtig"/>
|
||||||
|
<l:gentext key="Index" text="Stichwortverzeichnis"/>
|
||||||
|
<l:gentext key="index" text="Stichwortverzeichnis"/>
|
||||||
|
<l:gentext key="ISBN" text="ISBN"/>
|
||||||
|
<l:gentext key="isbn" text="ISBN"/>
|
||||||
|
<l:gentext key="LegalNotice" text="Rechtlicher Hinweis"/>
|
||||||
|
<l:gentext key="legalnotice" text="Rechtlicher Hinweis"/>
|
||||||
|
<l:gentext key="MsgAud" text="Zielgruppe"/>
|
||||||
|
<l:gentext key="msgaud" text="Zielgruppe"/>
|
||||||
|
<l:gentext key="MsgLevel" text="Dringlichkeit"/>
|
||||||
|
<l:gentext key="msglevel" text="Dringlichkeit"/>
|
||||||
|
<l:gentext key="MsgOrig" text="Ursprung"/>
|
||||||
|
<l:gentext key="msgorig" text="Ursprung"/>
|
||||||
|
<l:gentext key="NOTE" text="ANMERKUNG"/>
|
||||||
|
<l:gentext key="Note" text="Anmerkung"/>
|
||||||
|
<l:gentext key="note" text="Anmerkung"/>
|
||||||
|
<l:gentext key="Part" text="Teil"/>
|
||||||
|
<l:gentext key="part" text="Teil"/>
|
||||||
|
<l:gentext key="Preface" text="Vorwort"/>
|
||||||
|
<l:gentext key="preface" text="Vorwort"/>
|
||||||
|
<l:gentext key="Procedure" text="Prozedur"/>
|
||||||
|
<l:gentext key="procedure" text="Prozedur"/>
|
||||||
|
<l:gentext key="ProductionSet" text="Produktion"/>
|
||||||
|
<l:gentext key="PubDate" text="Veröffentlicht"/>
|
||||||
|
<l:gentext key="pubdate" text="Veröffentlicht"/>
|
||||||
|
<l:gentext key="Published" text="Veröffentlicht"/>
|
||||||
|
<l:gentext key="published" text="Veröffentlicht"/>
|
||||||
|
<l:gentext key="Qandadiv" text="F & A"/>
|
||||||
|
<l:gentext key="qandadiv" text="F & A"/>
|
||||||
|
<l:gentext key="Question" text="F:"/>
|
||||||
|
<l:gentext key="question" text="F:"/>
|
||||||
|
<l:gentext key="RefEntry" text=""/>
|
||||||
|
<l:gentext key="refentry" text=""/>
|
||||||
|
<l:gentext key="Reference" text="Verweis"/>
|
||||||
|
<l:gentext key="reference" text="Verweis"/>
|
||||||
|
<l:gentext key="RefName" text="Name"/>
|
||||||
|
<l:gentext key="refname" text="Name"/>
|
||||||
|
<l:gentext key="RefSection" text="Abschnitt"/>
|
||||||
|
<l:gentext key="refsection" text="Abschnitt"/>
|
||||||
|
<l:gentext key="RefSynopsisDiv" text="Synopsis"/>
|
||||||
|
<l:gentext key="refsynopsisdiv" text="Synopsis"/>
|
||||||
|
<l:gentext key="RevHistory" text="Versionsgeschichte"/>
|
||||||
|
<l:gentext key="revhistory" text="Versionsgeschichte"/>
|
||||||
|
<l:gentext key="revision" text="Version"/>
|
||||||
|
<l:gentext key="Revision" text="Version"/>
|
||||||
|
<l:gentext key="sect1" text="Abschnitt"/>
|
||||||
|
<l:gentext key="sect2" text="Abschnitt"/>
|
||||||
|
<l:gentext key="sect3" text="Abschnitt"/>
|
||||||
|
<l:gentext key="sect4" text="Abschnitt"/>
|
||||||
|
<l:gentext key="sect5" text="Abschnitt"/>
|
||||||
|
<l:gentext key="section" text="Abschnitt"/>
|
||||||
|
<l:gentext key="Section" text="Abschnitt"/>
|
||||||
|
<l:gentext key="see" text="Siehe"/>
|
||||||
|
<l:gentext key="See" text="Siehe"/>
|
||||||
|
<l:gentext key="seealso" text="Siehe auch"/>
|
||||||
|
<l:gentext key="Seealso" text="Siehe auch"/>
|
||||||
|
<l:gentext key="SeeAlso" text="Siehe auch"/>
|
||||||
|
<l:gentext key="set" text="Satz"/>
|
||||||
|
<l:gentext key="Set" text="Satz"/>
|
||||||
|
<l:gentext key="setindex" text="Stichwortverzeichnis"/>
|
||||||
|
<l:gentext key="SetIndex" text="Stichwortverzeichnis"/>
|
||||||
|
<l:gentext key="Sidebar" text="Randnotiz"/>
|
||||||
|
<l:gentext key="sidebar" text="randnotiz"/>
|
||||||
|
<l:gentext key="step" text="Schritt"/>
|
||||||
|
<l:gentext key="Step" text="Schritt"/>
|
||||||
|
<l:gentext key="Table" text="Tabelle"/>
|
||||||
|
<l:gentext key="table" text="Tabelle"/>
|
||||||
|
<l:gentext key="tip" text="Tipp"/>
|
||||||
|
<l:gentext key="TIP" text="TIPP"/>
|
||||||
|
<l:gentext key="Tip" text="Tipp"/>
|
||||||
|
<l:gentext key="Warning" text="Warnung"/>
|
||||||
|
<l:gentext key="warning" text="Warnung"/>
|
||||||
|
<l:gentext key="WARNING" text="WARNUNG"/>
|
||||||
|
<l:gentext key="and" text="und"/>
|
||||||
|
<l:gentext key="by" text="von"/>
|
||||||
|
<l:gentext key="called" text="called" lang="en"/>
|
||||||
|
<l:gentext key="Edited" text="Herausgegeben"/>
|
||||||
|
<l:gentext key="edited" text="Herausgegeben"/>
|
||||||
|
<l:gentext key="Editedby" text="Herausgegeben von"/>
|
||||||
|
<l:gentext key="editedby" text="Herausgegeben von"/>
|
||||||
|
<l:gentext key="in" text="in"/>
|
||||||
|
<l:gentext key="lastlistcomma" text=","/>
|
||||||
|
<l:gentext key="listcomma" text=","/>
|
||||||
|
<l:gentext key="nonexistantelement" text="nicht existierendes Element"/>
|
||||||
|
<l:gentext key="notes" text="Fußnoten"/>
|
||||||
|
<l:gentext key="Notes" text="Fußnoten"/>
|
||||||
|
<l:gentext key="Pgs" text="Seiten"/>
|
||||||
|
<l:gentext key="pgs" text="Seiten"/>
|
||||||
|
<l:gentext key="Revisedby" text="Geändert durch: "/>
|
||||||
|
<l:gentext key="revisedby" text="Geändert durch: "/>
|
||||||
|
<l:gentext key="TableNotes" text="Bemerkungen"/>
|
||||||
|
<l:gentext key="tablenotes" text="Bemerkungen"/>
|
||||||
|
<l:gentext key="TableofContents" text="Inhaltsverzeichnis"/>
|
||||||
|
<l:gentext key="tableofcontents" text="Inhaltsverzeichnis"/>
|
||||||
|
<l:gentext key="the" text=""/>
|
||||||
|
<l:gentext key="unexpectedelementname" text="Unerwarteter Elementname"/>
|
||||||
|
<l:gentext key="unsupported" text="wird nicht unterstützt"/>
|
||||||
|
<l:gentext key="xrefto" text="xref auf"/>
|
||||||
|
<l:gentext key="listofequations" text="Gleichungen"/>
|
||||||
|
<l:gentext key="ListofEquations" text="Gleichungen"/>
|
||||||
|
<l:gentext key="ListofExamples" text="Beispiele"/>
|
||||||
|
<l:gentext key="listofexamples" text="Beispiele"/>
|
||||||
|
<l:gentext key="ListofFigures" text="Abbildungsverzeichnis"/>
|
||||||
|
<l:gentext key="listoffigures" text="Abbildungsverzeichnis"/>
|
||||||
|
<l:gentext key="ListofProcedures" text="List of Procedures" lang="en"/>
|
||||||
|
<l:gentext key="listofprocedures" text="List of Procedures" lang="en"/>
|
||||||
|
<l:gentext key="listoftables" text="Tabellenverzeichnis"/>
|
||||||
|
<l:gentext key="ListofTables" text="Tabellenverzeichnis"/>
|
||||||
|
<l:gentext key="ListofUnknown" text="???-Verzeichnis"/>
|
||||||
|
<l:gentext key="listofunknown" text="???-Verzeichnis"/>
|
||||||
|
<l:gentext key="nav-home" text="Zum Anfang"/>
|
||||||
|
<l:gentext key="nav-next" text="Weiter"/>
|
||||||
|
<l:gentext key="nav-next-sibling" text="Schnell weiter"/>
|
||||||
|
<l:gentext key="nav-prev" text="Zurück"/>
|
||||||
|
<l:gentext key="nav-prev-sibling" text="Schnell zurück"/>
|
||||||
|
<l:gentext key="nav-up" text="Nach oben"/>
|
||||||
|
<l:gentext key="nav-toc" text="InhV"/>
|
||||||
|
<l:gentext key="Draft" text="Entwurf"/>
|
||||||
|
<l:gentext key="above" text="oben"/>
|
||||||
|
<l:gentext key="below" text="unten"/>
|
||||||
|
<l:gentext key="sectioncalled" text="der Abschnitt namens"/>
|
||||||
|
<l:gentext key="index symbols" text="Symbole"/>
|
||||||
|
<l:gentext key="lowercase.alpha" text="abcdefghijklmnopqrstuvwxyzäöüß"/>
|
||||||
|
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜß"/>
|
||||||
|
<l:dingbat key="startquote" text="„"/>
|
||||||
|
<l:dingbat key="endquote" text="“"/>
|
||||||
|
<l:dingbat key="nestedstartquote" text="‚"/>
|
||||||
|
<l:dingbat key="nestedendquote" text="‘"/>
|
||||||
|
<l:dingbat key="singlestartquote" text="‚"/>
|
||||||
|
<l:dingbat key="singleendquote" text="‘"/>
|
||||||
|
<l:dingbat key="bullet" text="•"/>
|
||||||
|
<l:gentext key="hyphenation-character" text="-"/>
|
||||||
|
<l:gentext key="hyphenation-push-character-count" text="2"/>
|
||||||
|
<l:gentext key="hyphenation-remain-character-count" text="3"/>
|
||||||
|
|
||||||
|
<l:context name="styles">
|
||||||
|
<l:template name="person-name" text="first-last"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title">
|
||||||
|
<l:template name="abstract" text="%t"/>
|
||||||
|
<l:template name="answer" text="%t"/>
|
||||||
|
<l:template name="appendix" text="Anhang %n. %t"/>
|
||||||
|
<l:template name="article" text="%t"/>
|
||||||
|
<l:template name="authorblurb" text="%t"/>
|
||||||
|
<l:template name="bibliodiv" text="%t"/>
|
||||||
|
<l:template name="biblioentry" text="%t"/>
|
||||||
|
<l:template name="bibliography" text="%t"/>
|
||||||
|
<l:template name="bibliolist" text="%t" lang="en"/>
|
||||||
|
<l:template name="bibliomixed" text="%t"/>
|
||||||
|
<l:template name="bibliomset" text="%t"/>
|
||||||
|
<l:template name="biblioset" text="%t"/>
|
||||||
|
<l:template name="blockquote" text="%t"/>
|
||||||
|
<l:template name="book" text="%t"/>
|
||||||
|
<l:template name="calloutlist" text="%t"/>
|
||||||
|
<l:template name="caution" text="%t"/>
|
||||||
|
<l:template name="chapter" text="Kapitel %n. %t"/>
|
||||||
|
<l:template name="colophon" text="%t"/>
|
||||||
|
<l:template name="dedication" text="%t"/>
|
||||||
|
<l:template name="equation" text="Gleichung %n. %t"/>
|
||||||
|
<l:template name="example" text="Beispiel %n. %t"/>
|
||||||
|
<l:template name="figure" text="Abbildung %n. %t"/>
|
||||||
|
<l:template name="formalpara" text="%t"/>
|
||||||
|
<l:template name="glossary" text="%t"/>
|
||||||
|
<l:template name="glossdiv" text="%t"/>
|
||||||
|
<l:template name="glosslist" text="%t" lang="en"/>
|
||||||
|
<l:template name="glossentry" text="%t"/>
|
||||||
|
<l:template name="important" text="%t"/>
|
||||||
|
<l:template name="index" text="%t"/>
|
||||||
|
<l:template name="indexdiv" text="%t"/>
|
||||||
|
<l:template name="itemizedlist" text="%t"/>
|
||||||
|
<l:template name="legalnotice" text="%t"/>
|
||||||
|
<l:template name="listitem" text=""/>
|
||||||
|
<l:template name="lot" text="%t"/>
|
||||||
|
<l:template name="msg" text="%t"/>
|
||||||
|
<l:template name="msgexplan" text="%t"/>
|
||||||
|
<l:template name="msgmain" text="%t"/>
|
||||||
|
<l:template name="msgrel" text="%t"/>
|
||||||
|
<l:template name="msgset" text="%t"/>
|
||||||
|
<l:template name="msgsub" text="%t"/>
|
||||||
|
<l:template name="note" text="%t"/>
|
||||||
|
<l:template name="orderedlist" text="%t"/>
|
||||||
|
<l:template name="part" text="Teil %n. %t"/>
|
||||||
|
<l:template name="partintro" text="%t"/>
|
||||||
|
<l:template name="preface" text="%t"/>
|
||||||
|
<l:template name="procedure" text="%t"/>
|
||||||
|
<l:template name="procedure.formal" text="Prozedur %n. %t"/>
|
||||||
|
<l:template name="productionset" text="%t"/>
|
||||||
|
<l:template name="productionset.formal" text="Produktion %n"/>
|
||||||
|
<l:template name="qandadiv" text="%t"/>
|
||||||
|
<l:template name="qandaentry" text="%t"/>
|
||||||
|
<l:template name="qandaset" text="%t"/>
|
||||||
|
<l:template name="question" text="F: %n"/>
|
||||||
|
<l:template name="refentry" text="%t"/>
|
||||||
|
<l:template name="reference" text="%t"/>
|
||||||
|
<l:template name="refsection" text="%t"/>
|
||||||
|
<l:template name="refsect1" text="%t"/>
|
||||||
|
<l:template name="refsect2" text="%t"/>
|
||||||
|
<l:template name="refsect3" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdivinfo" text="%t"/>
|
||||||
|
<l:template name="segmentedlist" text="%t"/>
|
||||||
|
<l:template name="set" text="%t"/>
|
||||||
|
<l:template name="setindex" text="%t"/>
|
||||||
|
<l:template name="sidebar" text="%t"/>
|
||||||
|
<l:template name="step" text="%t"/>
|
||||||
|
<l:template name="table" text="Tabelle %n. %t"/>
|
||||||
|
<l:template name="task" text="%t"/>
|
||||||
|
<l:template name="tip" text="%t"/>
|
||||||
|
<l:template name="toc" text="%t"/>
|
||||||
|
<l:template name="variablelist" text="%t"/>
|
||||||
|
<l:template name="varlistentry" text="" lang="en"/>
|
||||||
|
<l:template name="warning" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title-unnumbered">
|
||||||
|
<l:template name="appendix" text="%t"/>
|
||||||
|
<l:template name="article/appendix" text="%t"/>
|
||||||
|
<l:template name="bridgehead" text="%t"/>
|
||||||
|
<l:template name="chapter" text="%t"/>
|
||||||
|
<l:template name="sect1" text="%t"/>
|
||||||
|
<l:template name="sect2" text="%t"/>
|
||||||
|
<l:template name="sect3" text="%t"/>
|
||||||
|
<l:template name="sect4" text="%t"/>
|
||||||
|
<l:template name="sect5" text="%t"/>
|
||||||
|
<l:template name="section" text="%t"/>
|
||||||
|
<l:template name="simplesect" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title-numbered">
|
||||||
|
<l:template name="appendix" text="Anhang %n. %t"/>
|
||||||
|
<l:template name="article/appendix" text="%n. %t"/>
|
||||||
|
<l:template name="bridgehead" text="%n. %t"/>
|
||||||
|
<l:template name="chapter" text="Kapitel %n. %t"/>
|
||||||
|
<l:template name="sect1" text="%n. %t"/>
|
||||||
|
<l:template name="sect2" text="%n. %t"/>
|
||||||
|
<l:template name="sect3" text="%n. %t"/>
|
||||||
|
<l:template name="sect4" text="%n. %t"/>
|
||||||
|
<l:template name="sect5" text="%n. %t"/>
|
||||||
|
<l:template name="section" text="%n. %t"/>
|
||||||
|
<l:template name="simplesect" text="%n. %t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="subtitle">
|
||||||
|
<l:template name="appendix" text="%s"/>
|
||||||
|
<l:template name="article" text="%s"/>
|
||||||
|
<l:template name="bibliodiv" text="%s"/>
|
||||||
|
<l:template name="biblioentry" text="%s"/>
|
||||||
|
<l:template name="bibliography" text="%s"/>
|
||||||
|
<l:template name="bibliomixed" text="%s"/>
|
||||||
|
<l:template name="bibliomset" text="%s"/>
|
||||||
|
<l:template name="biblioset" text="%s"/>
|
||||||
|
<l:template name="book" text="%s"/>
|
||||||
|
<l:template name="chapter" text="%s"/>
|
||||||
|
<l:template name="colophon" text="%s"/>
|
||||||
|
<l:template name="dedication" text="%s"/>
|
||||||
|
<l:template name="glossary" text="%s"/>
|
||||||
|
<l:template name="glossdiv" text="%s"/>
|
||||||
|
<l:template name="index" text="%s"/>
|
||||||
|
<l:template name="indexdiv" text="%s"/>
|
||||||
|
<l:template name="lot" text="%s"/>
|
||||||
|
<l:template name="part" text="%s"/>
|
||||||
|
<l:template name="partintro" text="%s"/>
|
||||||
|
<l:template name="preface" text="%s"/>
|
||||||
|
<l:template name="refentry" text="%s"/>
|
||||||
|
<l:template name="reference" text="%s"/>
|
||||||
|
<l:template name="refsection" text="%s"/>
|
||||||
|
<l:template name="refsect1" text="%s"/>
|
||||||
|
<l:template name="refsect2" text="%s"/>
|
||||||
|
<l:template name="refsect3" text="%s"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%s"/>
|
||||||
|
<l:template name="sect1" text="%s"/>
|
||||||
|
<l:template name="sect2" text="%s"/>
|
||||||
|
<l:template name="sect3" text="%s"/>
|
||||||
|
<l:template name="sect4" text="%s"/>
|
||||||
|
<l:template name="sect5" text="%s"/>
|
||||||
|
<l:template name="section" text="%s"/>
|
||||||
|
<l:template name="set" text="%s"/>
|
||||||
|
<l:template name="setindex" text="%s"/>
|
||||||
|
<l:template name="sidebar" text="%s"/>
|
||||||
|
<l:template name="simplesect" text="%s"/>
|
||||||
|
<l:template name="toc" text="%s"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref">
|
||||||
|
<l:template name="abstract" text="%t"/>
|
||||||
|
<l:template name="answer" text="A: %n"/>
|
||||||
|
<l:template name="appendix" text="%t"/>
|
||||||
|
<l:template name="article" text="%t"/>
|
||||||
|
<l:template name="authorblurb" text="%t"/>
|
||||||
|
<l:template name="bibliodiv" text="%t"/>
|
||||||
|
<l:template name="bibliography" text="%t"/>
|
||||||
|
<l:template name="bibliomset" text="%t"/>
|
||||||
|
<l:template name="biblioset" text="%t"/>
|
||||||
|
<l:template name="blockquote" text="%t"/>
|
||||||
|
<l:template name="book" text="%t"/>
|
||||||
|
<l:template name="calloutlist" text="%t"/>
|
||||||
|
<l:template name="caution" text="%t"/>
|
||||||
|
<l:template name="chapter" text="%t"/>
|
||||||
|
<l:template name="colophon" text="%t"/>
|
||||||
|
<l:template name="constraintdef" text="%t"/>
|
||||||
|
<l:template name="dedication" text="%t"/>
|
||||||
|
<l:template name="equation" text="%t"/>
|
||||||
|
<l:template name="example" text="%t"/>
|
||||||
|
<l:template name="figure" text="%t"/>
|
||||||
|
<l:template name="formalpara" text="%t"/>
|
||||||
|
<l:template name="glossary" text="%t"/>
|
||||||
|
<l:template name="glossdiv" text="%t"/>
|
||||||
|
<l:template name="important" text="%t"/>
|
||||||
|
<l:template name="index" text="%t"/>
|
||||||
|
<l:template name="indexdiv" text="%t"/>
|
||||||
|
<l:template name="itemizedlist" text="%t"/>
|
||||||
|
<l:template name="legalnotice" text="%t"/>
|
||||||
|
<l:template name="listitem" text="%n"/>
|
||||||
|
<l:template name="lot" text="%t"/>
|
||||||
|
<l:template name="msg" text="%t"/>
|
||||||
|
<l:template name="msgexplan" text="%t"/>
|
||||||
|
<l:template name="msgmain" text="%t"/>
|
||||||
|
<l:template name="msgrel" text="%t"/>
|
||||||
|
<l:template name="msgset" text="%t"/>
|
||||||
|
<l:template name="msgsub" text="%t"/>
|
||||||
|
<l:template name="note" text="%t"/>
|
||||||
|
<l:template name="orderedlist" text="%t"/>
|
||||||
|
<l:template name="part" text="%t"/>
|
||||||
|
<l:template name="partintro" text="%t"/>
|
||||||
|
<l:template name="preface" text="%t"/>
|
||||||
|
<l:template name="procedure" text="%t"/>
|
||||||
|
<l:template name="productionset" text="%t"/>
|
||||||
|
<l:template name="qandadiv" text="%t"/>
|
||||||
|
<l:template name="qandaentry" text="F: %n"/>
|
||||||
|
<l:template name="qandaset" text="%t"/>
|
||||||
|
<l:template name="question" text="F: %n"/>
|
||||||
|
<l:template name="reference" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%t"/>
|
||||||
|
<l:template name="segmentedlist" text="%t"/>
|
||||||
|
<l:template name="set" text="%t"/>
|
||||||
|
<l:template name="setindex" text="%t"/>
|
||||||
|
<l:template name="sidebar" text="%t"/>
|
||||||
|
<l:template name="table" text="%t"/>
|
||||||
|
<l:template name="tip" text="%t"/>
|
||||||
|
<l:template name="toc" text="%t"/>
|
||||||
|
<l:template name="variablelist" text="%t"/>
|
||||||
|
<l:template name="varlistentry" text="%n"/>
|
||||||
|
<l:template name="warning" text="%t"/>
|
||||||
|
<l:template name="page.citation" text=" [%p]"/>
|
||||||
|
<l:template name="page" text="(Seite %p)"/>
|
||||||
|
<l:template name="pageabbrev" text="(S. %p)"/>
|
||||||
|
<l:template name="Page" text="Seite %p"/>
|
||||||
|
<l:template name="bridgehead" text="„%t“"/>
|
||||||
|
<l:template name="refsection" text="„%t“"/>
|
||||||
|
<l:template name="refsect1" text="„%t“"/>
|
||||||
|
<l:template name="refsect2" text="„%t“"/>
|
||||||
|
<l:template name="refsect3" text="„%t“"/>
|
||||||
|
<l:template name="sect1" text="„%t“"/>
|
||||||
|
<l:template name="sect2" text="„%t“"/>
|
||||||
|
<l:template name="sect3" text="„%t“"/>
|
||||||
|
<l:template name="sect4" text="„%t“"/>
|
||||||
|
<l:template name="sect5" text="„%t“"/>
|
||||||
|
<l:template name="section" text="„%t“"/>
|
||||||
|
<l:template name="simplesect" text="„%t“"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref-number">
|
||||||
|
<l:template name="answer" text="A: %n"/>
|
||||||
|
<l:template name="appendix" text="Anhang %n"/>
|
||||||
|
<l:template name="bridgehead" text="Abschnitt %n"/>
|
||||||
|
<l:template name="chapter" text="Kapitel %n"/>
|
||||||
|
<l:template name="equation" text="Gleichung %n"/>
|
||||||
|
<l:template name="example" text="Beispiel %n"/>
|
||||||
|
<l:template name="figure" text="Abbildung %n"/>
|
||||||
|
<l:template name="part" text="Teil %n"/>
|
||||||
|
<l:template name="procedure" text="Prozedur %n"/>
|
||||||
|
<l:template name="productionset" text="Produktion %n"/>
|
||||||
|
<l:template name="qandadiv" text="F & A %n"/>
|
||||||
|
<l:template name="qandaentry" text="F: %n"/>
|
||||||
|
<l:template name="question" text="F: %n"/>
|
||||||
|
<l:template name="sect1" text="Abschnitt %n"/>
|
||||||
|
<l:template name="sect2" text="Abschnitt %n"/>
|
||||||
|
<l:template name="sect3" text="Abschnitt %n"/>
|
||||||
|
<l:template name="sect4" text="Abschnitt %n"/>
|
||||||
|
<l:template name="sect5" text="Abschnitt %n"/>
|
||||||
|
<l:template name="section" text="Abschnitt %n"/>
|
||||||
|
<l:template name="table" text="Tabelle %n"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref-number-and-title">
|
||||||
|
<l:template name="appendix" text="Anhang %n, %t"/>
|
||||||
|
<l:template name="bridgehead" text="Abschnitt %n, „%t“"/>
|
||||||
|
<l:template name="chapter" text="Kapitel %n, %t"/>
|
||||||
|
<l:template name="equation" text="Gleichung %n, „%t“"/>
|
||||||
|
<l:template name="example" text="Beispiel %n, „%t“"/>
|
||||||
|
<l:template name="figure" text="Abbildung %n, „%t“"/>
|
||||||
|
<l:template name="part" text="Teil %n, „%t“"/>
|
||||||
|
<l:template name="procedure" text="Prozedur %n, „%t“"/>
|
||||||
|
<l:template name="productionset" text="Produktion %n, „%t“"/>
|
||||||
|
<l:template name="qandadiv" text="F & A %n, „%t“"/>
|
||||||
|
<l:template name="refsect1" text="der Abschnitt namens „%t“"/>
|
||||||
|
<l:template name="refsect2" text="der Abschnitt namens „%t“"/>
|
||||||
|
<l:template name="refsect3" text="der Abschnitt namens „%t“"/>
|
||||||
|
<l:template name="refsection" text="der Abschnitt namens „%t“"/>
|
||||||
|
<l:template name="sect1" text="Abschnitt %n, „%t“"/>
|
||||||
|
<l:template name="sect2" text="Abschnitt %n, „%t“"/>
|
||||||
|
<l:template name="sect3" text="Abschnitt %n, „%t“"/>
|
||||||
|
<l:template name="sect4" text="Abschnitt %n, „%t“"/>
|
||||||
|
<l:template name="sect5" text="Abschnitt %n, „%t“"/>
|
||||||
|
<l:template name="section" text="Abschnitt %n, „%t“"/>
|
||||||
|
<l:template name="simplesect" text="der Abschnitt namens „%t“"/>
|
||||||
|
<l:template name="table" text="Tabelle %n, „%t“"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="authorgroup">
|
||||||
|
<l:template name="sep" text=", "/>
|
||||||
|
<l:template name="sep2" text=" und "/>
|
||||||
|
<l:template name="seplast" text=" und "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="glossary">
|
||||||
|
<l:template name="see" text="Siehe "/>
|
||||||
|
<l:template name="seealso" text="Siehe auch "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="msgset">
|
||||||
|
<l:template name="MsgAud" text="Zielgruppe: "/>
|
||||||
|
<l:template name="MsgLevel" text="Dringlichkeit: "/>
|
||||||
|
<l:template name="MsgOrig" text="Ursprung: "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime">
|
||||||
|
<l:template name="format" text="d.M.Y"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime-full">
|
||||||
|
<l:template name="January" text="Januar"/>
|
||||||
|
<l:template name="February" text="Februar"/>
|
||||||
|
<l:template name="March" text="März"/>
|
||||||
|
<l:template name="April" text="April"/>
|
||||||
|
<l:template name="May" text="Mai"/>
|
||||||
|
<l:template name="June" text="Juni"/>
|
||||||
|
<l:template name="July" text="Juli"/>
|
||||||
|
<l:template name="August" text="August"/>
|
||||||
|
<l:template name="September" text="September"/>
|
||||||
|
<l:template name="October" text="Oktober"/>
|
||||||
|
<l:template name="November" text="November"/>
|
||||||
|
<l:template name="December" text="Dezember"/>
|
||||||
|
<l:template name="Monday" text="Montag"/>
|
||||||
|
<l:template name="Tuesday" text="Dienstag"/>
|
||||||
|
<l:template name="Wednesday" text="Mittwoch"/>
|
||||||
|
<l:template name="Thursday" text="Donnerstag"/>
|
||||||
|
<l:template name="Friday" text="Freitag"/>
|
||||||
|
<l:template name="Saturday" text="Samstag"/>
|
||||||
|
<l:template name="Sunday" text="Sonntag"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime-abbrev">
|
||||||
|
<l:template name="Jan" text="Jan"/>
|
||||||
|
<l:template name="Feb" text="Feb"/>
|
||||||
|
<l:template name="Mar" text="Mar"/>
|
||||||
|
<l:template name="Apr" text="Apr"/>
|
||||||
|
<l:template name="May" text="Mai"/>
|
||||||
|
<l:template name="Jun" text="Jun"/>
|
||||||
|
<l:template name="Jul" text="Jul"/>
|
||||||
|
<l:template name="Aug" text="Aug"/>
|
||||||
|
<l:template name="Sep" text="Sep"/>
|
||||||
|
<l:template name="Oct" text="Okt"/>
|
||||||
|
<l:template name="Nov" text="Nov"/>
|
||||||
|
<l:template name="Dec" text="Dez"/>
|
||||||
|
<l:template name="Mon" text="Mo"/>
|
||||||
|
<l:template name="Tue" text="Di"/>
|
||||||
|
<l:template name="Wed" text="Mi"/>
|
||||||
|
<l:template name="Thu" text="Do"/>
|
||||||
|
<l:template name="Fri" text="Fr"/>
|
||||||
|
<l:template name="Sat" text="Sa"/>
|
||||||
|
<l:template name="Sun" text="So"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="htmlhelp">
|
||||||
|
<l:template name="langcode" text="0x0407 German (GERMANY)"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:letters>
|
||||||
|
<l:l i="-1"/>
|
||||||
|
<l:l i="0">Symbole</l:l>
|
||||||
|
<l:l i="1">A</l:l>
|
||||||
|
<l:l i="1">a</l:l>
|
||||||
|
<l:l i="1">Ä</l:l>
|
||||||
|
<l:l i="1">ä</l:l>
|
||||||
|
<l:l i="2">B</l:l>
|
||||||
|
<l:l i="2">b</l:l>
|
||||||
|
<l:l i="3">C</l:l>
|
||||||
|
<l:l i="3">c</l:l>
|
||||||
|
<l:l i="4">D</l:l>
|
||||||
|
<l:l i="4">d</l:l>
|
||||||
|
<l:l i="5">E</l:l>
|
||||||
|
<l:l i="5">e</l:l>
|
||||||
|
<l:l i="6">F</l:l>
|
||||||
|
<l:l i="6">f</l:l>
|
||||||
|
<l:l i="7">G</l:l>
|
||||||
|
<l:l i="7">g</l:l>
|
||||||
|
<l:l i="8">H</l:l>
|
||||||
|
<l:l i="8">h</l:l>
|
||||||
|
<l:l i="9">I</l:l>
|
||||||
|
<l:l i="9">i</l:l>
|
||||||
|
<l:l i="10">J</l:l>
|
||||||
|
<l:l i="10">j</l:l>
|
||||||
|
<l:l i="11">K</l:l>
|
||||||
|
<l:l i="11">k</l:l>
|
||||||
|
<l:l i="12">L</l:l>
|
||||||
|
<l:l i="12">l</l:l>
|
||||||
|
<l:l i="13">M</l:l>
|
||||||
|
<l:l i="13">m</l:l>
|
||||||
|
<l:l i="14">N</l:l>
|
||||||
|
<l:l i="14">n</l:l>
|
||||||
|
<l:l i="15">O</l:l>
|
||||||
|
<l:l i="15">o</l:l>
|
||||||
|
<l:l i="15">Ö</l:l>
|
||||||
|
<l:l i="15">ö</l:l>
|
||||||
|
<l:l i="16">P</l:l>
|
||||||
|
<l:l i="16">p</l:l>
|
||||||
|
<l:l i="17">Q</l:l>
|
||||||
|
<l:l i="17">q</l:l>
|
||||||
|
<l:l i="18">R</l:l>
|
||||||
|
<l:l i="18">r</l:l>
|
||||||
|
<l:l i="19">S</l:l>
|
||||||
|
<l:l i="19">s</l:l>
|
||||||
|
<l:l i="20">T</l:l>
|
||||||
|
<l:l i="20">t</l:l>
|
||||||
|
<l:l i="21">U</l:l>
|
||||||
|
<l:l i="21">u</l:l>
|
||||||
|
<l:l i="21">Ü</l:l>
|
||||||
|
<l:l i="21">ü</l:l>
|
||||||
|
<l:l i="22">V</l:l>
|
||||||
|
<l:l i="22">v</l:l>
|
||||||
|
<l:l i="23">W</l:l>
|
||||||
|
<l:l i="23">w</l:l>
|
||||||
|
<l:l i="24">X</l:l>
|
||||||
|
<l:l i="24">x</l:l>
|
||||||
|
<l:l i="25">Y</l:l>
|
||||||
|
<l:l i="25">y</l:l>
|
||||||
|
<l:l i="26">Z</l:l>
|
||||||
|
<l:l i="26">z</l:l>
|
||||||
|
</l:letters>
|
||||||
|
</l:l10n>
|
|
@ -0,0 +1,600 @@
|
||||||
|
<?xml version="1.0" encoding="US-ASCII"?>
|
||||||
|
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="es" english-language-name="Spanish">
|
||||||
|
|
||||||
|
<!-- This file is generated automatically. -->
|
||||||
|
<!-- Do not edit this file by hand! -->
|
||||||
|
<!-- See http://docbook.sourceforge.net/ -->
|
||||||
|
<!-- To update this file: edit the corresponding document at -->
|
||||||
|
<!-- http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/gentext/locale/ -->
|
||||||
|
|
||||||
|
<l:gentext key="Abstract" text="Resumen"/>
|
||||||
|
<l:gentext key="abstract" text="resumen"/>
|
||||||
|
<l:gentext key="Answer" text="R:"/>
|
||||||
|
<l:gentext key="answer" text="r:"/>
|
||||||
|
<l:gentext key="Appendix" text="Apéndice"/>
|
||||||
|
<l:gentext key="appendix" text="apéndice"/>
|
||||||
|
<l:gentext key="Article" text="Artículo"/>
|
||||||
|
<l:gentext key="article" text="artículo"/>
|
||||||
|
<l:gentext key="Bibliography" text="Bibliografía"/>
|
||||||
|
<l:gentext key="bibliography" text="bibliografía"/>
|
||||||
|
<l:gentext key="Book" text="Libro"/>
|
||||||
|
<l:gentext key="book" text="libro"/>
|
||||||
|
<l:gentext key="CAUTION" text="ATENCIÓN"/>
|
||||||
|
<l:gentext key="Caution" text="Atención"/>
|
||||||
|
<l:gentext key="caution" text="atención"/>
|
||||||
|
<l:gentext key="Chapter" text="Capítulo"/>
|
||||||
|
<l:gentext key="chapter" text="capítulo"/>
|
||||||
|
<l:gentext key="Colophon" text="Colofón"/>
|
||||||
|
<l:gentext key="colophon" text="colofón"/>
|
||||||
|
<l:gentext key="Copyright" text="Copyright"/>
|
||||||
|
<l:gentext key="copyright" text="copyright"/>
|
||||||
|
<l:gentext key="Dedication" text="Dedicatoria"/>
|
||||||
|
<l:gentext key="dedication" text="dedicatoria"/>
|
||||||
|
<l:gentext key="Edition" text="Edición"/>
|
||||||
|
<l:gentext key="edition" text="edición"/>
|
||||||
|
<l:gentext key="Equation" text="Ecuación"/>
|
||||||
|
<l:gentext key="equation" text="ecuación"/>
|
||||||
|
<l:gentext key="Example" text="Ejemplo"/>
|
||||||
|
<l:gentext key="example" text="ejemplo"/>
|
||||||
|
<l:gentext key="Figure" text="Figura"/>
|
||||||
|
<l:gentext key="figure" text="figura"/>
|
||||||
|
<l:gentext key="Glossary" text="Glosario"/>
|
||||||
|
<l:gentext key="glossary" text="glosario"/>
|
||||||
|
<l:gentext key="GlossSee" text="Ver"/>
|
||||||
|
<l:gentext key="glosssee" text="ver"/>
|
||||||
|
<l:gentext key="GlossSeeAlso" text="Ver también"/>
|
||||||
|
<l:gentext key="glossseealso" text="ver también"/>
|
||||||
|
<l:gentext key="IMPORTANT" text="IMPORTANTE"/>
|
||||||
|
<l:gentext key="important" text="importante"/>
|
||||||
|
<l:gentext key="Important" text="Importante"/>
|
||||||
|
<l:gentext key="Index" text="Índice"/>
|
||||||
|
<l:gentext key="index" text="índice"/>
|
||||||
|
<l:gentext key="ISBN" text="ISBN"/>
|
||||||
|
<l:gentext key="isbn" text="isbn"/>
|
||||||
|
<l:gentext key="LegalNotice" text="Aviso Legal"/>
|
||||||
|
<l:gentext key="legalnotice" text="aviso legal"/>
|
||||||
|
<l:gentext key="MsgAud" text="Audiencia"/>
|
||||||
|
<l:gentext key="msgaud" text="audiencia"/>
|
||||||
|
<l:gentext key="MsgLevel" text="Nivel"/>
|
||||||
|
<l:gentext key="msglevel" text="nivel"/>
|
||||||
|
<l:gentext key="MsgOrig" text="Origen"/>
|
||||||
|
<l:gentext key="msgorig" text="origen"/>
|
||||||
|
<l:gentext key="NOTE" text="NOTA"/>
|
||||||
|
<l:gentext key="Note" text="Nota"/>
|
||||||
|
<l:gentext key="note" text="nota"/>
|
||||||
|
<l:gentext key="Part" text="Parte"/>
|
||||||
|
<l:gentext key="part" text="parte"/>
|
||||||
|
<l:gentext key="Preface" text="Prefacio"/>
|
||||||
|
<l:gentext key="preface" text="prefacio"/>
|
||||||
|
<l:gentext key="Procedure" text="Procedimiento"/>
|
||||||
|
<l:gentext key="procedure" text="procedimiento"/>
|
||||||
|
<l:gentext key="ProductionSet" text="Producción"/>
|
||||||
|
<l:gentext key="PubDate" text="Fecha de publicación"/>
|
||||||
|
<l:gentext key="pubdate" text="fecha de publicación"/>
|
||||||
|
<l:gentext key="Published" text="Publicado"/>
|
||||||
|
<l:gentext key="published" text="publicado"/>
|
||||||
|
<l:gentext key="Qandadiv" text="Q & A" lang="en"/>
|
||||||
|
<l:gentext key="qandadiv" text="Q & A" lang="en"/>
|
||||||
|
<l:gentext key="Question" text="P:"/>
|
||||||
|
<l:gentext key="question" text="p:"/>
|
||||||
|
<l:gentext key="RefEntry" text="Entrada de referencia"/>
|
||||||
|
<l:gentext key="refentry" text="entrada de referencia"/>
|
||||||
|
<l:gentext key="Reference" text="Referencia"/>
|
||||||
|
<l:gentext key="reference" text="referencia"/>
|
||||||
|
<l:gentext key="RefName" text="Nombre de referencia"/>
|
||||||
|
<l:gentext key="refname" text="nombre de referencia"/>
|
||||||
|
<l:gentext key="RefSection" text="Sección de referencia"/>
|
||||||
|
<l:gentext key="refsection" text="sección de referencia"/>
|
||||||
|
<l:gentext key="RefSynopsisDiv" text="Sinopsis"/>
|
||||||
|
<l:gentext key="refsynopsisdiv" text="sinopsis"/>
|
||||||
|
<l:gentext key="RevHistory" text="Historial de revisiones"/>
|
||||||
|
<l:gentext key="revhistory" text="Historial de revisiones"/>
|
||||||
|
<l:gentext key="revision" text="revisión"/>
|
||||||
|
<l:gentext key="Revision" text="Revisión"/>
|
||||||
|
<l:gentext key="sect1" text="Sección"/>
|
||||||
|
<l:gentext key="sect2" text="Sección"/>
|
||||||
|
<l:gentext key="sect3" text="Sección"/>
|
||||||
|
<l:gentext key="sect4" text="Sección"/>
|
||||||
|
<l:gentext key="sect5" text="Sección"/>
|
||||||
|
<l:gentext key="section" text="sección"/>
|
||||||
|
<l:gentext key="Section" text="Sección"/>
|
||||||
|
<l:gentext key="see" text="ver"/>
|
||||||
|
<l:gentext key="See" text="Ver"/>
|
||||||
|
<l:gentext key="seealso" text="ver también"/>
|
||||||
|
<l:gentext key="Seealso" text="Ver también"/>
|
||||||
|
<l:gentext key="SeeAlso" text="Ver También"/>
|
||||||
|
<l:gentext key="set" text="conjunto"/>
|
||||||
|
<l:gentext key="Set" text="Conjunto"/>
|
||||||
|
<l:gentext key="setindex" text="índice del conjunto"/>
|
||||||
|
<l:gentext key="SetIndex" text="Índice del Conjunto"/>
|
||||||
|
<l:gentext key="Sidebar" text="Barra lateral"/>
|
||||||
|
<l:gentext key="sidebar" text="barra lateral"/>
|
||||||
|
<l:gentext key="step" text="paso"/>
|
||||||
|
<l:gentext key="Step" text="Paso"/>
|
||||||
|
<l:gentext key="Table" text="Tabla"/>
|
||||||
|
<l:gentext key="table" text="tabla"/>
|
||||||
|
<l:gentext key="tip" text="sugerencia"/>
|
||||||
|
<l:gentext key="TIP" text="SUGERENCIA"/>
|
||||||
|
<l:gentext key="Tip" text="Sugerencia"/>
|
||||||
|
<l:gentext key="Warning" text="Aviso"/>
|
||||||
|
<l:gentext key="warning" text="aviso"/>
|
||||||
|
<l:gentext key="WARNING" text="AVISO"/>
|
||||||
|
<l:gentext key="and" text="y"/>
|
||||||
|
<l:gentext key="by" text="por"/>
|
||||||
|
<l:gentext key="called" text="called" lang="en"/>
|
||||||
|
<l:gentext key="Edited" text="Editado"/>
|
||||||
|
<l:gentext key="edited" text="editado"/>
|
||||||
|
<l:gentext key="Editedby" text="Editado por"/>
|
||||||
|
<l:gentext key="editedby" text="editado por"/>
|
||||||
|
<l:gentext key="in" text="en"/>
|
||||||
|
<l:gentext key="lastlistcomma" text=","/>
|
||||||
|
<l:gentext key="listcomma" text=","/>
|
||||||
|
<l:gentext key="nonexistantelement" text="elemento inexistente"/>
|
||||||
|
<l:gentext key="notes" text="notas"/>
|
||||||
|
<l:gentext key="Notes" text="Notas"/>
|
||||||
|
<l:gentext key="Pgs" text="Pags."/>
|
||||||
|
<l:gentext key="pgs" text="pags."/>
|
||||||
|
<l:gentext key="Revisedby" text="Revisado por: "/>
|
||||||
|
<l:gentext key="revisedby" text="revisado por: "/>
|
||||||
|
<l:gentext key="TableNotes" text="Notas de Tabla"/>
|
||||||
|
<l:gentext key="tablenotes" text="notas de tabla"/>
|
||||||
|
<l:gentext key="TableofContents" text="Tabla de contenidos"/>
|
||||||
|
<l:gentext key="tableofcontents" text="tabla de contenidos"/>
|
||||||
|
<l:gentext key="the" text="" lang="en"/>
|
||||||
|
<l:gentext key="unexpectedelementname" text="nombre de elemento inesperado"/>
|
||||||
|
<l:gentext key="unsupported" text="no soportado"/>
|
||||||
|
<l:gentext key="xrefto" text="referencia a"/>
|
||||||
|
<l:gentext key="listofequations" text="lista de ecuaciones"/>
|
||||||
|
<l:gentext key="ListofEquations" text="Lista de ecuaciones"/>
|
||||||
|
<l:gentext key="ListofExamples" text="Lista de ejemplos"/>
|
||||||
|
<l:gentext key="listofexamples" text="lista de ejemplos"/>
|
||||||
|
<l:gentext key="ListofFigures" text="Lista de figuras"/>
|
||||||
|
<l:gentext key="listoffigures" text="lista de figuras"/>
|
||||||
|
<l:gentext key="ListofProcedures" text="List of Procedures" lang="en"/>
|
||||||
|
<l:gentext key="listofprocedures" text="List of Procedures" lang="en"/>
|
||||||
|
<l:gentext key="listoftables" text="lista de tablas"/>
|
||||||
|
<l:gentext key="ListofTables" text="Lista de tablas"/>
|
||||||
|
<l:gentext key="ListofUnknown" text="Lista de desconocido"/>
|
||||||
|
<l:gentext key="listofunknown" text="lista de desconocido"/>
|
||||||
|
<l:gentext key="nav-home" text="Inicio"/>
|
||||||
|
<l:gentext key="nav-next" text="Siguiente"/>
|
||||||
|
<l:gentext key="nav-next-sibling" text="Avanzar"/>
|
||||||
|
<l:gentext key="nav-prev" text="Anterior"/>
|
||||||
|
<l:gentext key="nav-prev-sibling" text="Retroceder"/>
|
||||||
|
<l:gentext key="nav-up" text="Subir"/>
|
||||||
|
<l:gentext key="nav-toc" text="ToC" lang="en"/>
|
||||||
|
<l:gentext key="Draft" text="Borrador"/>
|
||||||
|
<l:gentext key="above" text="arriba"/>
|
||||||
|
<l:gentext key="below" text="abajo"/>
|
||||||
|
<l:gentext key="sectioncalled" text="sección llamada"/>
|
||||||
|
<l:gentext key="index symbols" text="Símbolos"/>
|
||||||
|
<l:gentext key="lowercase.alpha" text="abcdefghijklmnopqrstuvwxyzáéíóúñ"/>
|
||||||
|
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZÁÉÍÓÚÑ"/>
|
||||||
|
<l:dingbat key="startquote" text="“"/>
|
||||||
|
<l:dingbat key="endquote" text="”"/>
|
||||||
|
<l:dingbat key="nestedstartquote" text="‘"/>
|
||||||
|
<l:dingbat key="nestedendquote" text="’"/>
|
||||||
|
<l:dingbat key="singlestartquote" text="‘" lang="en"/>
|
||||||
|
<l:dingbat key="singleendquote" text="’" lang="en"/>
|
||||||
|
<l:dingbat key="bullet" text="•"/>
|
||||||
|
<l:gentext key="hyphenation-character" text="-" lang="en"/>
|
||||||
|
<l:gentext key="hyphenation-push-character-count" text="2" lang="en"/>
|
||||||
|
<l:gentext key="hyphenation-remain-character-count" text="2" lang="en"/>
|
||||||
|
|
||||||
|
<l:context name="styles">
|
||||||
|
<l:template name="person-name" text="first-last"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title">
|
||||||
|
<l:template name="abstract" text="%t"/>
|
||||||
|
<l:template name="answer" text="%t"/>
|
||||||
|
<l:template name="appendix" text="Apéndice %n. %t"/>
|
||||||
|
<l:template name="article" text="%t"/>
|
||||||
|
<l:template name="authorblurb" text="%t"/>
|
||||||
|
<l:template name="bibliodiv" text="%t"/>
|
||||||
|
<l:template name="biblioentry" text="%t"/>
|
||||||
|
<l:template name="bibliography" text="%t"/>
|
||||||
|
<l:template name="bibliolist" text="%t" lang="en"/>
|
||||||
|
<l:template name="bibliomixed" text="%t"/>
|
||||||
|
<l:template name="bibliomset" text="%t"/>
|
||||||
|
<l:template name="biblioset" text="%t"/>
|
||||||
|
<l:template name="blockquote" text="%t"/>
|
||||||
|
<l:template name="book" text="%t"/>
|
||||||
|
<l:template name="calloutlist" text="%t"/>
|
||||||
|
<l:template name="caution" text="%t"/>
|
||||||
|
<l:template name="chapter" text="Capítulo %n. %t"/>
|
||||||
|
<l:template name="colophon" text="%t"/>
|
||||||
|
<l:template name="dedication" text="%t"/>
|
||||||
|
<l:template name="equation" text="Ecuación %n. %t"/>
|
||||||
|
<l:template name="example" text="Ejemplo %n. %t"/>
|
||||||
|
<l:template name="figure" text="Figura %n. %t"/>
|
||||||
|
<l:template name="formalpara" text="%t"/>
|
||||||
|
<l:template name="glossary" text="%t"/>
|
||||||
|
<l:template name="glossdiv" text="%t"/>
|
||||||
|
<l:template name="glosslist" text="%t" lang="en"/>
|
||||||
|
<l:template name="glossentry" text="%t" lang="en"/>
|
||||||
|
<l:template name="important" text="%t"/>
|
||||||
|
<l:template name="index" text="%t"/>
|
||||||
|
<l:template name="indexdiv" text="%t"/>
|
||||||
|
<l:template name="itemizedlist" text="%t"/>
|
||||||
|
<l:template name="legalnotice" text="%t"/>
|
||||||
|
<l:template name="listitem" text=""/>
|
||||||
|
<l:template name="lot" text="%t"/>
|
||||||
|
<l:template name="msg" text="%t"/>
|
||||||
|
<l:template name="msgexplan" text="%t"/>
|
||||||
|
<l:template name="msgmain" text="%t"/>
|
||||||
|
<l:template name="msgrel" text="%t"/>
|
||||||
|
<l:template name="msgset" text="%t"/>
|
||||||
|
<l:template name="msgsub" text="%t"/>
|
||||||
|
<l:template name="note" text="%t"/>
|
||||||
|
<l:template name="orderedlist" text="%t"/>
|
||||||
|
<l:template name="part" text="Parte %n. %t"/>
|
||||||
|
<l:template name="partintro" text="%t"/>
|
||||||
|
<l:template name="preface" text="%t"/>
|
||||||
|
<l:template name="procedure" text="%t"/>
|
||||||
|
<l:template name="procedure.formal" text="Procedimiento %n. %t"/>
|
||||||
|
<l:template name="productionset" text="%t"/>
|
||||||
|
<l:template name="productionset.formal" text="Producción %n"/>
|
||||||
|
<l:template name="qandadiv" text="%t"/>
|
||||||
|
<l:template name="qandaentry" text="%t"/>
|
||||||
|
<l:template name="qandaset" text="%t"/>
|
||||||
|
<l:template name="question" text="%t"/>
|
||||||
|
<l:template name="refentry" text="%t"/>
|
||||||
|
<l:template name="reference" text="%t"/>
|
||||||
|
<l:template name="refsection" text="%t"/>
|
||||||
|
<l:template name="refsect1" text="%t"/>
|
||||||
|
<l:template name="refsect2" text="%t"/>
|
||||||
|
<l:template name="refsect3" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdivinfo" text="%t"/>
|
||||||
|
<l:template name="segmentedlist" text="%t"/>
|
||||||
|
<l:template name="set" text="%t"/>
|
||||||
|
<l:template name="setindex" text="%t"/>
|
||||||
|
<l:template name="sidebar" text="%t"/>
|
||||||
|
<l:template name="step" text="%t"/>
|
||||||
|
<l:template name="table" text="Tabla %n. %t"/>
|
||||||
|
<l:template name="task" text="%t" lang="en"/>
|
||||||
|
<l:template name="tip" text="%t"/>
|
||||||
|
<l:template name="toc" text="%t"/>
|
||||||
|
<l:template name="variablelist" text="%t"/>
|
||||||
|
<l:template name="varlistentry" text="" lang="en"/>
|
||||||
|
<l:template name="warning" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title-unnumbered">
|
||||||
|
<l:template name="appendix" text="%t"/>
|
||||||
|
<l:template name="article/appendix" text="%t" lang="en"/>
|
||||||
|
<l:template name="bridgehead" text="%t"/>
|
||||||
|
<l:template name="chapter" text="%t"/>
|
||||||
|
<l:template name="sect1" text="%t"/>
|
||||||
|
<l:template name="sect2" text="%t"/>
|
||||||
|
<l:template name="sect3" text="%t"/>
|
||||||
|
<l:template name="sect4" text="%t"/>
|
||||||
|
<l:template name="sect5" text="%t"/>
|
||||||
|
<l:template name="section" text="%t"/>
|
||||||
|
<l:template name="simplesect" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title-numbered">
|
||||||
|
<l:template name="appendix" text="Apéndice %n. %t"/>
|
||||||
|
<l:template name="article/appendix" text="%n. %t" lang="en"/>
|
||||||
|
<l:template name="bridgehead" text="%n. %t"/>
|
||||||
|
<l:template name="chapter" text="Capítulo %n. %t"/>
|
||||||
|
<l:template name="sect1" text="%n. %t"/>
|
||||||
|
<l:template name="sect2" text="%n. %t"/>
|
||||||
|
<l:template name="sect3" text="%n. %t"/>
|
||||||
|
<l:template name="sect4" text="%n. %t"/>
|
||||||
|
<l:template name="sect5" text="%n. %t"/>
|
||||||
|
<l:template name="section" text="%n. %t"/>
|
||||||
|
<l:template name="simplesect" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="subtitle">
|
||||||
|
<l:template name="appendix" text="%s"/>
|
||||||
|
<l:template name="article" text="%s"/>
|
||||||
|
<l:template name="bibliodiv" text="%s"/>
|
||||||
|
<l:template name="biblioentry" text="%s"/>
|
||||||
|
<l:template name="bibliography" text="%s"/>
|
||||||
|
<l:template name="bibliomixed" text="%s"/>
|
||||||
|
<l:template name="bibliomset" text="%s"/>
|
||||||
|
<l:template name="biblioset" text="%s"/>
|
||||||
|
<l:template name="book" text="%s"/>
|
||||||
|
<l:template name="chapter" text="%s"/>
|
||||||
|
<l:template name="colophon" text="%s"/>
|
||||||
|
<l:template name="dedication" text="%s"/>
|
||||||
|
<l:template name="glossary" text="%s"/>
|
||||||
|
<l:template name="glossdiv" text="%s"/>
|
||||||
|
<l:template name="index" text="%s"/>
|
||||||
|
<l:template name="indexdiv" text="%s"/>
|
||||||
|
<l:template name="lot" text="%s"/>
|
||||||
|
<l:template name="part" text="%s"/>
|
||||||
|
<l:template name="partintro" text="%s"/>
|
||||||
|
<l:template name="preface" text="%s"/>
|
||||||
|
<l:template name="refentry" text="%s"/>
|
||||||
|
<l:template name="reference" text="%s"/>
|
||||||
|
<l:template name="refsection" text="%s"/>
|
||||||
|
<l:template name="refsect1" text="%s"/>
|
||||||
|
<l:template name="refsect2" text="%s"/>
|
||||||
|
<l:template name="refsect3" text="%s"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%s"/>
|
||||||
|
<l:template name="sect1" text="%s"/>
|
||||||
|
<l:template name="sect2" text="%s"/>
|
||||||
|
<l:template name="sect3" text="%s"/>
|
||||||
|
<l:template name="sect4" text="%s"/>
|
||||||
|
<l:template name="sect5" text="%s"/>
|
||||||
|
<l:template name="section" text="%s"/>
|
||||||
|
<l:template name="set" text="%s"/>
|
||||||
|
<l:template name="setindex" text="%s"/>
|
||||||
|
<l:template name="sidebar" text="%s"/>
|
||||||
|
<l:template name="simplesect" text="%s"/>
|
||||||
|
<l:template name="toc" text="%s"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref">
|
||||||
|
<l:template name="abstract" text="%t"/>
|
||||||
|
<l:template name="answer" text="R: %n"/>
|
||||||
|
<l:template name="appendix" text="%t"/>
|
||||||
|
<l:template name="article" text="%t"/>
|
||||||
|
<l:template name="authorblurb" text="%t"/>
|
||||||
|
<l:template name="bibliodiv" text="%t"/>
|
||||||
|
<l:template name="bibliography" text="%t"/>
|
||||||
|
<l:template name="bibliomset" text="%t"/>
|
||||||
|
<l:template name="biblioset" text="%t"/>
|
||||||
|
<l:template name="blockquote" text="%t"/>
|
||||||
|
<l:template name="book" text="%t"/>
|
||||||
|
<l:template name="calloutlist" text="%t"/>
|
||||||
|
<l:template name="caution" text="%t"/>
|
||||||
|
<l:template name="chapter" text="%t"/>
|
||||||
|
<l:template name="colophon" text="%t"/>
|
||||||
|
<l:template name="constraintdef" text="%t"/>
|
||||||
|
<l:template name="dedication" text="%t"/>
|
||||||
|
<l:template name="equation" text="%t"/>
|
||||||
|
<l:template name="example" text="%t"/>
|
||||||
|
<l:template name="figure" text="%t"/>
|
||||||
|
<l:template name="formalpara" text="%t"/>
|
||||||
|
<l:template name="glossary" text="%t"/>
|
||||||
|
<l:template name="glossdiv" text="%t"/>
|
||||||
|
<l:template name="important" text="%t"/>
|
||||||
|
<l:template name="index" text="%t"/>
|
||||||
|
<l:template name="indexdiv" text="%t"/>
|
||||||
|
<l:template name="itemizedlist" text="%t"/>
|
||||||
|
<l:template name="legalnotice" text="%t"/>
|
||||||
|
<l:template name="listitem" text="%n"/>
|
||||||
|
<l:template name="lot" text="%t"/>
|
||||||
|
<l:template name="msg" text="%t"/>
|
||||||
|
<l:template name="msgexplan" text="%t"/>
|
||||||
|
<l:template name="msgmain" text="%t"/>
|
||||||
|
<l:template name="msgrel" text="%t"/>
|
||||||
|
<l:template name="msgset" text="%t"/>
|
||||||
|
<l:template name="msgsub" text="%t"/>
|
||||||
|
<l:template name="note" text="%t"/>
|
||||||
|
<l:template name="orderedlist" text="%t"/>
|
||||||
|
<l:template name="part" text="%t"/>
|
||||||
|
<l:template name="partintro" text="%t"/>
|
||||||
|
<l:template name="preface" text="%t"/>
|
||||||
|
<l:template name="procedure" text="%t"/>
|
||||||
|
<l:template name="productionset" text="%t"/>
|
||||||
|
<l:template name="qandadiv" text="%t"/>
|
||||||
|
<l:template name="qandaentry" text="P: %n"/>
|
||||||
|
<l:template name="qandaset" text="%t"/>
|
||||||
|
<l:template name="question" text="P: %n"/>
|
||||||
|
<l:template name="reference" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%t"/>
|
||||||
|
<l:template name="segmentedlist" text="%t"/>
|
||||||
|
<l:template name="set" text="%t"/>
|
||||||
|
<l:template name="setindex" text="%t"/>
|
||||||
|
<l:template name="sidebar" text="%t"/>
|
||||||
|
<l:template name="table" text="%t"/>
|
||||||
|
<l:template name="tip" text="%t"/>
|
||||||
|
<l:template name="toc" text="%t"/>
|
||||||
|
<l:template name="variablelist" text="%t"/>
|
||||||
|
<l:template name="varlistentry" text="%n"/>
|
||||||
|
<l:template name="warning" text="%t"/>
|
||||||
|
<l:template name="page.citation" text=" [%p]"/>
|
||||||
|
<l:template name="page" text="(page %p)" lang="en"/>
|
||||||
|
<l:template name="pageabbrev" text="(p. %p)" lang="en"/>
|
||||||
|
<l:template name="Page" text="Page %p" lang="en"/>
|
||||||
|
<l:template name="bridgehead" text="“%t”"/>
|
||||||
|
<l:template name="refsection" text="“%t”"/>
|
||||||
|
<l:template name="refsect1" text="“%t”"/>
|
||||||
|
<l:template name="refsect2" text="“%t”"/>
|
||||||
|
<l:template name="refsect3" text="“%t”"/>
|
||||||
|
<l:template name="sect1" text="“%t”"/>
|
||||||
|
<l:template name="sect2" text="“%t”"/>
|
||||||
|
<l:template name="sect3" text="“%t”"/>
|
||||||
|
<l:template name="sect4" text="“%t”"/>
|
||||||
|
<l:template name="sect5" text="“%t”"/>
|
||||||
|
<l:template name="section" text="“%t”"/>
|
||||||
|
<l:template name="simplesect" text="“%t”"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref-number">
|
||||||
|
<l:template name="answer" text="R: %n"/>
|
||||||
|
<l:template name="appendix" text="Apéndice %n"/>
|
||||||
|
<l:template name="bridgehead" text="Sección %n"/>
|
||||||
|
<l:template name="chapter" text="Capítulo %n"/>
|
||||||
|
<l:template name="equation" text="Ecuación %n"/>
|
||||||
|
<l:template name="example" text="Ejemplo %n"/>
|
||||||
|
<l:template name="figure" text="Figura %n"/>
|
||||||
|
<l:template name="part" text="Parte %n"/>
|
||||||
|
<l:template name="procedure" text="Procedimiento %n"/>
|
||||||
|
<l:template name="productionset" text="Producción %n"/>
|
||||||
|
<l:template name="qandadiv" text="Q & A %n"/>
|
||||||
|
<l:template name="qandaentry" text="P: %n"/>
|
||||||
|
<l:template name="question" text="P: %n"/>
|
||||||
|
<l:template name="sect1" text="Sección %n"/>
|
||||||
|
<l:template name="sect2" text="Sección %n"/>
|
||||||
|
<l:template name="sect3" text="Sección %n"/>
|
||||||
|
<l:template name="sect4" text="Sección %n"/>
|
||||||
|
<l:template name="sect5" text="Sección %n"/>
|
||||||
|
<l:template name="section" text="Sección %n"/>
|
||||||
|
<l:template name="table" text="Tabla %n"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref-number-and-title">
|
||||||
|
<l:template name="appendix" text="Apéndice %n, %t"/>
|
||||||
|
<l:template name="bridgehead" text="Sección %n, “%t”"/>
|
||||||
|
<l:template name="chapter" text="Capítulo %n, %t"/>
|
||||||
|
<l:template name="equation" text="Ecuación %n, “%t”"/>
|
||||||
|
<l:template name="example" text="Ejemplo %n, “%t”"/>
|
||||||
|
<l:template name="figure" text="Figura %n, “%t”"/>
|
||||||
|
<l:template name="part" text="Parte %n, “%t”"/>
|
||||||
|
<l:template name="procedure" text="Procedimiento %n, “%t”"/>
|
||||||
|
<l:template name="productionset" text="Producción %n, “%t”"/>
|
||||||
|
<l:template name="qandadiv" text="Q & A %n, “%t”"/>
|
||||||
|
<l:template name="refsect1" text="sección llamada “%t”"/>
|
||||||
|
<l:template name="refsect2" text="sección llamada “%t”"/>
|
||||||
|
<l:template name="refsect3" text="sección llamada “%t”"/>
|
||||||
|
<l:template name="refsection" text="sección llamada “%t”"/>
|
||||||
|
<l:template name="sect1" text="Sección %n, “%t”"/>
|
||||||
|
<l:template name="sect2" text="Sección %n, “%t”"/>
|
||||||
|
<l:template name="sect3" text="Sección %n, “%t”"/>
|
||||||
|
<l:template name="sect4" text="Sección %n, “%t”"/>
|
||||||
|
<l:template name="sect5" text="Sección %n, “%t”"/>
|
||||||
|
<l:template name="section" text="Sección %n, “%t”"/>
|
||||||
|
<l:template name="simplesect" text="sección llamada “%t”"/>
|
||||||
|
<l:template name="table" text="Tabla %n, “%t”"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="authorgroup">
|
||||||
|
<l:template name="sep" text=", "/>
|
||||||
|
<l:template name="sep2" text=" y "/>
|
||||||
|
<l:template name="seplast" text=", y "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="glossary">
|
||||||
|
<l:template name="see" text="Ver "/>
|
||||||
|
<l:template name="seealso" text="Ver también "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="msgset">
|
||||||
|
<l:template name="MsgAud" text="Audiencia: "/>
|
||||||
|
<l:template name="MsgLevel" text="Nivel: "/>
|
||||||
|
<l:template name="MsgOrig" text="Origen: "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime">
|
||||||
|
<l:template name="format" text="m/d/Y" lang="en"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime-full">
|
||||||
|
<l:template name="January" text="January" lang="en"/>
|
||||||
|
<l:template name="February" text="February" lang="en"/>
|
||||||
|
<l:template name="March" text="March" lang="en"/>
|
||||||
|
<l:template name="April" text="April" lang="en"/>
|
||||||
|
<l:template name="May" text="May" lang="en"/>
|
||||||
|
<l:template name="June" text="June" lang="en"/>
|
||||||
|
<l:template name="July" text="July" lang="en"/>
|
||||||
|
<l:template name="August" text="August" lang="en"/>
|
||||||
|
<l:template name="September" text="September" lang="en"/>
|
||||||
|
<l:template name="October" text="October" lang="en"/>
|
||||||
|
<l:template name="November" text="November" lang="en"/>
|
||||||
|
<l:template name="December" text="December" lang="en"/>
|
||||||
|
<l:template name="Monday" text="Monday" lang="en"/>
|
||||||
|
<l:template name="Tuesday" text="Tuesday" lang="en"/>
|
||||||
|
<l:template name="Wednesday" text="Wednesday" lang="en"/>
|
||||||
|
<l:template name="Thursday" text="Thursday" lang="en"/>
|
||||||
|
<l:template name="Friday" text="Friday" lang="en"/>
|
||||||
|
<l:template name="Saturday" text="Saturday" lang="en"/>
|
||||||
|
<l:template name="Sunday" text="Sunday" lang="en"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime-abbrev">
|
||||||
|
<l:template name="Jan" text="Jan" lang="en"/>
|
||||||
|
<l:template name="Feb" text="Feb" lang="en"/>
|
||||||
|
<l:template name="Mar" text="Mar" lang="en"/>
|
||||||
|
<l:template name="Apr" text="Apr" lang="en"/>
|
||||||
|
<l:template name="May" text="May" lang="en"/>
|
||||||
|
<l:template name="Jun" text="Jun" lang="en"/>
|
||||||
|
<l:template name="Jul" text="Jul" lang="en"/>
|
||||||
|
<l:template name="Aug" text="Aug" lang="en"/>
|
||||||
|
<l:template name="Sep" text="Sep" lang="en"/>
|
||||||
|
<l:template name="Oct" text="Oct" lang="en"/>
|
||||||
|
<l:template name="Nov" text="Nov" lang="en"/>
|
||||||
|
<l:template name="Dec" text="Dec" lang="en"/>
|
||||||
|
<l:template name="Mon" text="Mon" lang="en"/>
|
||||||
|
<l:template name="Tue" text="Tue" lang="en"/>
|
||||||
|
<l:template name="Wed" text="Wed" lang="en"/>
|
||||||
|
<l:template name="Thu" text="Thu" lang="en"/>
|
||||||
|
<l:template name="Fri" text="Fri" lang="en"/>
|
||||||
|
<l:template name="Sat" text="Sat" lang="en"/>
|
||||||
|
<l:template name="Sun" text="Sun" lang="en"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="htmlhelp">
|
||||||
|
<l:template name="langcode" text="0x040a Spanish (Traditional Sort)"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:letters>
|
||||||
|
<l:l i="-1"/>
|
||||||
|
<l:l i="0">Símbolos</l:l>
|
||||||
|
<l:l i="1">A</l:l>
|
||||||
|
<l:l i="1">a</l:l>
|
||||||
|
<l:l i="1">á</l:l>
|
||||||
|
<l:l i="1">Á</l:l>
|
||||||
|
<l:l i="2">B</l:l>
|
||||||
|
<l:l i="2">b</l:l>
|
||||||
|
<l:l i="3">C</l:l>
|
||||||
|
<l:l i="3">c</l:l>
|
||||||
|
<l:l i="4">CH</l:l>
|
||||||
|
<l:l i="4">ch</l:l>
|
||||||
|
<l:l i="5">D</l:l>
|
||||||
|
<l:l i="5">d</l:l>
|
||||||
|
<l:l i="6">E</l:l>
|
||||||
|
<l:l i="6">e</l:l>
|
||||||
|
<l:l i="6">É</l:l>
|
||||||
|
<l:l i="6">é</l:l>
|
||||||
|
<l:l i="7">F</l:l>
|
||||||
|
<l:l i="7">f</l:l>
|
||||||
|
<l:l i="8">G</l:l>
|
||||||
|
<l:l i="8">g</l:l>
|
||||||
|
<l:l i="9">H</l:l>
|
||||||
|
<l:l i="9">h</l:l>
|
||||||
|
<l:l i="10">I</l:l>
|
||||||
|
<l:l i="10">i</l:l>
|
||||||
|
<l:l i="10">Í</l:l>
|
||||||
|
<l:l i="10">í</l:l>
|
||||||
|
<l:l i="11">J</l:l>
|
||||||
|
<l:l i="11">j</l:l>
|
||||||
|
<l:l i="12">K</l:l>
|
||||||
|
<l:l i="12">k</l:l>
|
||||||
|
<l:l i="13">L</l:l>
|
||||||
|
<l:l i="13">l</l:l>
|
||||||
|
<l:l i="14">LL</l:l>
|
||||||
|
<l:l i="14">ll</l:l>
|
||||||
|
<l:l i="15">M</l:l>
|
||||||
|
<l:l i="15">m</l:l>
|
||||||
|
<l:l i="16">N</l:l>
|
||||||
|
<l:l i="16">n</l:l>
|
||||||
|
<l:l i="17">Ñ</l:l>
|
||||||
|
<l:l i="17">ñ</l:l>
|
||||||
|
<l:l i="18">O</l:l>
|
||||||
|
<l:l i="18">o</l:l>
|
||||||
|
<l:l i="18">Ó</l:l>
|
||||||
|
<l:l i="18">ó</l:l>
|
||||||
|
<l:l i="19">P</l:l>
|
||||||
|
<l:l i="19">p</l:l>
|
||||||
|
<l:l i="20">Q</l:l>
|
||||||
|
<l:l i="20">q</l:l>
|
||||||
|
<l:l i="21">R</l:l>
|
||||||
|
<l:l i="21">r</l:l>
|
||||||
|
<l:l i="22">S</l:l>
|
||||||
|
<l:l i="22">s</l:l>
|
||||||
|
<l:l i="23">T</l:l>
|
||||||
|
<l:l i="23">t</l:l>
|
||||||
|
<l:l i="24">U</l:l>
|
||||||
|
<l:l i="24">u</l:l>
|
||||||
|
<l:l i="24">Ú</l:l>
|
||||||
|
<l:l i="24">ú</l:l>
|
||||||
|
<l:l i="25">V</l:l>
|
||||||
|
<l:l i="25">v</l:l>
|
||||||
|
<l:l i="26">W</l:l>
|
||||||
|
<l:l i="26">w</l:l>
|
||||||
|
<l:l i="27">X</l:l>
|
||||||
|
<l:l i="27">x</l:l>
|
||||||
|
<l:l i="28">Y</l:l>
|
||||||
|
<l:l i="28">y</l:l>
|
||||||
|
<l:l i="29">Z</l:l>
|
||||||
|
<l:l i="29">z</l:l>
|
||||||
|
</l:letters>
|
||||||
|
</l:l10n>
|
|
@ -0,0 +1,614 @@
|
||||||
|
<?xml version="1.0" encoding="US-ASCII"?>
|
||||||
|
<l:l10n xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" language="fr" english-language-name="French">
|
||||||
|
|
||||||
|
<!-- This file is generated automatically. -->
|
||||||
|
<!-- Do not edit this file by hand! -->
|
||||||
|
<!-- See http://docbook.sourceforge.net/ -->
|
||||||
|
<!-- To update this file: edit the corresponding document at -->
|
||||||
|
<!-- http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/docbook/gentext/locale/ -->
|
||||||
|
|
||||||
|
<l:gentext key="Abstract" text="Résumé"/>
|
||||||
|
<l:gentext key="abstract" text="Résumé"/>
|
||||||
|
<l:gentext key="Answer" text="R :"/>
|
||||||
|
<l:gentext key="answer" text="R :"/>
|
||||||
|
<l:gentext key="Appendix" text="Annexe"/>
|
||||||
|
<l:gentext key="appendix" text="annexe"/>
|
||||||
|
<l:gentext key="Article" text="Article"/>
|
||||||
|
<l:gentext key="article" text="Article"/>
|
||||||
|
<l:gentext key="Bibliography" text="Bibliographie"/>
|
||||||
|
<l:gentext key="bibliography" text="Bibliographie"/>
|
||||||
|
<l:gentext key="Book" text="Livre"/>
|
||||||
|
<l:gentext key="book" text="Livre"/>
|
||||||
|
<l:gentext key="CAUTION" text="ATTENTION"/>
|
||||||
|
<l:gentext key="Caution" text="Attention"/>
|
||||||
|
<l:gentext key="caution" text="Attention"/>
|
||||||
|
<l:gentext key="Chapter" text="Chapitre"/>
|
||||||
|
<l:gentext key="chapter" text="chapitre"/>
|
||||||
|
<l:gentext key="Colophon" text="Colophon"/>
|
||||||
|
<l:gentext key="colophon" text="Colophon"/>
|
||||||
|
<l:gentext key="Copyright" text="Copyright"/>
|
||||||
|
<l:gentext key="copyright" text="Copyright"/>
|
||||||
|
<l:gentext key="Dedication" text="Dédicace"/>
|
||||||
|
<l:gentext key="dedication" text="Dédicace"/>
|
||||||
|
<l:gentext key="Edition" text="Édition"/>
|
||||||
|
<l:gentext key="edition" text="Édition"/>
|
||||||
|
<l:gentext key="Equation" text="Équation"/>
|
||||||
|
<l:gentext key="equation" text="Équation"/>
|
||||||
|
<l:gentext key="Example" text="Exemple"/>
|
||||||
|
<l:gentext key="example" text="Exemple"/>
|
||||||
|
<l:gentext key="Figure" text="Figure"/>
|
||||||
|
<l:gentext key="figure" text="Figure"/>
|
||||||
|
<l:gentext key="Glossary" text="Glossaire"/>
|
||||||
|
<l:gentext key="glossary" text="Glossaire"/>
|
||||||
|
<l:gentext key="GlossSee" text="Voir"/>
|
||||||
|
<l:gentext key="glosssee" text="Voir"/>
|
||||||
|
<l:gentext key="GlossSeeAlso" text="Voir aussi"/>
|
||||||
|
<l:gentext key="glossseealso" text="Voir aussi"/>
|
||||||
|
<l:gentext key="IMPORTANT" text="IMPORTANT"/>
|
||||||
|
<l:gentext key="important" text="Important"/>
|
||||||
|
<l:gentext key="Important" text="Important"/>
|
||||||
|
<l:gentext key="Index" text="Index"/>
|
||||||
|
<l:gentext key="index" text="Index"/>
|
||||||
|
<l:gentext key="ISBN" text="ISBN"/>
|
||||||
|
<l:gentext key="isbn" text="ISBN"/>
|
||||||
|
<l:gentext key="LegalNotice" text="Note légale"/>
|
||||||
|
<l:gentext key="legalnotice" text="Note légale"/>
|
||||||
|
<l:gentext key="MsgAud" text="Public visé"/>
|
||||||
|
<l:gentext key="msgaud" text="Public visé"/>
|
||||||
|
<l:gentext key="MsgLevel" text="Niveau"/>
|
||||||
|
<l:gentext key="msglevel" text="Niveau"/>
|
||||||
|
<l:gentext key="MsgOrig" text="Origine"/>
|
||||||
|
<l:gentext key="msgorig" text="Origine"/>
|
||||||
|
<l:gentext key="NOTE" text="NOTE"/>
|
||||||
|
<l:gentext key="Note" text="Note"/>
|
||||||
|
<l:gentext key="note" text="Note"/>
|
||||||
|
<l:gentext key="Part" text="Partie"/>
|
||||||
|
<l:gentext key="part" text="Partie"/>
|
||||||
|
<l:gentext key="Preface" text="Préface"/>
|
||||||
|
<l:gentext key="preface" text="Préface"/>
|
||||||
|
<l:gentext key="Procedure" text="Procédure"/>
|
||||||
|
<l:gentext key="procedure" text="Procédure"/>
|
||||||
|
<l:gentext key="ProductionSet" text="Production"/>
|
||||||
|
<l:gentext key="PubDate" text="Date de publication"/>
|
||||||
|
<l:gentext key="pubdate" text="Date de publication"/>
|
||||||
|
<l:gentext key="Published" text="Publié"/>
|
||||||
|
<l:gentext key="published" text="Publié"/>
|
||||||
|
<l:gentext key="Qandadiv" text="Q & R"/>
|
||||||
|
<l:gentext key="qandadiv" text="Q & R"/>
|
||||||
|
<l:gentext key="Question" text="Q :"/>
|
||||||
|
<l:gentext key="question" text="Q :"/>
|
||||||
|
<l:gentext key="RefEntry" text=""/>
|
||||||
|
<l:gentext key="refentry" text=""/>
|
||||||
|
<l:gentext key="Reference" text="Référence"/>
|
||||||
|
<l:gentext key="reference" text="Référence"/>
|
||||||
|
<l:gentext key="RefName" text="Nom"/>
|
||||||
|
<l:gentext key="refname" text="Nom"/>
|
||||||
|
<l:gentext key="RefSection" text=""/>
|
||||||
|
<l:gentext key="refsection" text=""/>
|
||||||
|
<l:gentext key="RefSynopsisDiv" text="Synopsis"/>
|
||||||
|
<l:gentext key="refsynopsisdiv" text="Synopsis"/>
|
||||||
|
<l:gentext key="RevHistory" text="Historique des versions"/>
|
||||||
|
<l:gentext key="revhistory" text="Historique des versions"/>
|
||||||
|
<l:gentext key="revision" text="Version"/>
|
||||||
|
<l:gentext key="Revision" text="Version"/>
|
||||||
|
<l:gentext key="sect1" text="Section"/>
|
||||||
|
<l:gentext key="sect2" text="Section"/>
|
||||||
|
<l:gentext key="sect3" text="Section"/>
|
||||||
|
<l:gentext key="sect4" text="Section"/>
|
||||||
|
<l:gentext key="sect5" text="Section"/>
|
||||||
|
<l:gentext key="section" text="section"/>
|
||||||
|
<l:gentext key="Section" text="Section"/>
|
||||||
|
<l:gentext key="see" text="voir"/>
|
||||||
|
<l:gentext key="See" text="Voir"/>
|
||||||
|
<l:gentext key="seealso" text="voir aussi"/>
|
||||||
|
<l:gentext key="Seealso" text="Voir aussi"/>
|
||||||
|
<l:gentext key="SeeAlso" text="Voir Aussi"/>
|
||||||
|
<l:gentext key="set" text="Ensemble"/>
|
||||||
|
<l:gentext key="Set" text="Ensemble"/>
|
||||||
|
<l:gentext key="setindex" text="Index"/>
|
||||||
|
<l:gentext key="SetIndex" text="Index"/>
|
||||||
|
<l:gentext key="Sidebar" text=""/>
|
||||||
|
<l:gentext key="sidebar" text="sidebar"/>
|
||||||
|
<l:gentext key="step" text="étape"/>
|
||||||
|
<l:gentext key="Step" text="Étape"/>
|
||||||
|
<l:gentext key="Table" text="Tableau"/>
|
||||||
|
<l:gentext key="table" text="Tableau"/>
|
||||||
|
<l:gentext key="tip" text="ASTUCE"/>
|
||||||
|
<l:gentext key="TIP" text="ASTUCE"/>
|
||||||
|
<l:gentext key="Tip" text="Astuce"/>
|
||||||
|
<l:gentext key="Warning" text="Avertissement"/>
|
||||||
|
<l:gentext key="warning" text="AVERTISSEMENT"/>
|
||||||
|
<l:gentext key="WARNING" text="AVERTISSEMENT"/>
|
||||||
|
<l:gentext key="and" text="et"/>
|
||||||
|
<l:gentext key="by" text="par"/>
|
||||||
|
<l:gentext key="called" text="intitulé"/>
|
||||||
|
<l:gentext key="Edited" text="Publié"/>
|
||||||
|
<l:gentext key="edited" text="Publié"/>
|
||||||
|
<l:gentext key="Editedby" text="Publié par"/>
|
||||||
|
<l:gentext key="editedby" text="Publié par"/>
|
||||||
|
<l:gentext key="in" text="dans"/>
|
||||||
|
<l:gentext key="lastlistcomma" text=","/>
|
||||||
|
<l:gentext key="listcomma" text=","/>
|
||||||
|
<l:gentext key="nonexistantelement" text="Cet élément n'existe pas"/>
|
||||||
|
<l:gentext key="notes" text="Notes"/>
|
||||||
|
<l:gentext key="Notes" text="Notes"/>
|
||||||
|
<l:gentext key="Pgs" text="Pages"/>
|
||||||
|
<l:gentext key="pgs" text="Pages"/>
|
||||||
|
<l:gentext key="Revisedby" text="Revu par : "/>
|
||||||
|
<l:gentext key="revisedby" text="Revu par : "/>
|
||||||
|
<l:gentext key="TableNotes" text="Remarques"/>
|
||||||
|
<l:gentext key="tablenotes" text="Remarques"/>
|
||||||
|
<l:gentext key="TableofContents" text="Table des matières"/>
|
||||||
|
<l:gentext key="tableofcontents" text="Table des matières"/>
|
||||||
|
<l:gentext key="the" text=""/>
|
||||||
|
<l:gentext key="unexpectedelementname" text="Nom d'élément non attendu"/>
|
||||||
|
<l:gentext key="unsupported" text="Non reconnu par le système"/>
|
||||||
|
<l:gentext key="xrefto" text="Référence vers"/>
|
||||||
|
<l:gentext key="listofequations" text="Liste des équations"/>
|
||||||
|
<l:gentext key="ListofEquations" text="Liste des équations"/>
|
||||||
|
<l:gentext key="ListofExamples" text="Liste des exemples"/>
|
||||||
|
<l:gentext key="listofexamples" text="Liste des exemples"/>
|
||||||
|
<l:gentext key="ListofFigures" text="Liste des illustrations"/>
|
||||||
|
<l:gentext key="listoffigures" text="Liste des illustrations"/>
|
||||||
|
<l:gentext key="ListofProcedures" text="Liste des procédures"/>
|
||||||
|
<l:gentext key="listofprocedures" text="Liste des procédures"/>
|
||||||
|
<l:gentext key="listoftables" text="Liste des tableaux"/>
|
||||||
|
<l:gentext key="ListofTables" text="Liste des tableaux"/>
|
||||||
|
<l:gentext key="ListofUnknown" text="Liste des inconnues"/>
|
||||||
|
<l:gentext key="listofunknown" text="Liste des inconnues"/>
|
||||||
|
<l:gentext key="nav-home" text="Sommaire"/>
|
||||||
|
<l:gentext key="nav-next" text="Suivant"/>
|
||||||
|
<l:gentext key="nav-next-sibling" text="Avance rapide"/>
|
||||||
|
<l:gentext key="nav-prev" text="Précédent"/>
|
||||||
|
<l:gentext key="nav-prev-sibling" text="Arrière rapide"/>
|
||||||
|
<l:gentext key="nav-up" text="Niveau supérieur"/>
|
||||||
|
<l:gentext key="nav-toc" text="TdM"/>
|
||||||
|
<l:gentext key="Draft" text="Brouillon"/>
|
||||||
|
<l:gentext key="above" text="au dessus"/>
|
||||||
|
<l:gentext key="below" text="au dessous"/>
|
||||||
|
<l:gentext key="sectioncalled" text="la section intitulée"/>
|
||||||
|
<l:gentext key="index symbols" text="Symboles"/>
|
||||||
|
<l:gentext key="lowercase.alpha" text="abcdefghijklmnopqrstuvwxyzâêîôûëïüàèùéçæœ"/>
|
||||||
|
<l:gentext key="uppercase.alpha" text="ABCDEFGHIJKLMNOPQRSTUVWXYZÂÊÎÔÛËÏÜÀÈÙÉÇÆŒ"/>
|
||||||
|
<l:dingbat key="startquote" text="« "/>
|
||||||
|
<l:dingbat key="endquote" text=" »"/>
|
||||||
|
<l:dingbat key="nestedstartquote" text="« "/>
|
||||||
|
<l:dingbat key="nestedendquote" text=" »"/>
|
||||||
|
<l:dingbat key="singlestartquote" text="‹"/>
|
||||||
|
<l:dingbat key="singleendquote" text="›"/>
|
||||||
|
<l:dingbat key="bullet" text="•"/>
|
||||||
|
<l:gentext key="hyphenation-character" text="-"/>
|
||||||
|
<l:gentext key="hyphenation-push-character-count" text="2"/>
|
||||||
|
<l:gentext key="hyphenation-remain-character-count" text="2"/>
|
||||||
|
|
||||||
|
<l:context name="styles">
|
||||||
|
<l:template name="person-name" text="first-last"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title">
|
||||||
|
<l:template name="abstract" text="%t"/>
|
||||||
|
<l:template name="answer" text="%t"/>
|
||||||
|
<l:template name="appendix" text="Annexe %n. %t"/>
|
||||||
|
<l:template name="article" text="%t"/>
|
||||||
|
<l:template name="authorblurb" text="%t"/>
|
||||||
|
<l:template name="bibliodiv" text="%t"/>
|
||||||
|
<l:template name="biblioentry" text="%t"/>
|
||||||
|
<l:template name="bibliography" text="%t"/>
|
||||||
|
<l:template name="bibliolist" text="%t" lang="en"/>
|
||||||
|
<l:template name="bibliomixed" text="%t"/>
|
||||||
|
<l:template name="bibliomset" text="%t"/>
|
||||||
|
<l:template name="biblioset" text="%t"/>
|
||||||
|
<l:template name="blockquote" text="%t"/>
|
||||||
|
<l:template name="book" text="%t"/>
|
||||||
|
<l:template name="calloutlist" text="%t"/>
|
||||||
|
<l:template name="caution" text="%t"/>
|
||||||
|
<l:template name="chapter" text="Chapitre %n. %t"/>
|
||||||
|
<l:template name="colophon" text="%t"/>
|
||||||
|
<l:template name="dedication" text="%t"/>
|
||||||
|
<l:template name="equation" text="Équation %n. %t"/>
|
||||||
|
<l:template name="example" text="Exemple %n. %t"/>
|
||||||
|
<l:template name="figure" text="Figure %n. %t"/>
|
||||||
|
<l:template name="formalpara" text="%t"/>
|
||||||
|
<l:template name="glossary" text="%t"/>
|
||||||
|
<l:template name="glossdiv" text="%t"/>
|
||||||
|
<l:template name="glosslist" text="%t" lang="en"/>
|
||||||
|
<l:template name="glossentry" text="%t"/>
|
||||||
|
<l:template name="important" text="%t"/>
|
||||||
|
<l:template name="index" text="%t"/>
|
||||||
|
<l:template name="indexdiv" text="%t"/>
|
||||||
|
<l:template name="itemizedlist" text="%t"/>
|
||||||
|
<l:template name="legalnotice" text="%t"/>
|
||||||
|
<l:template name="listitem" text=""/>
|
||||||
|
<l:template name="lot" text="%t"/>
|
||||||
|
<l:template name="msg" text="%t"/>
|
||||||
|
<l:template name="msgexplan" text="%t"/>
|
||||||
|
<l:template name="msgmain" text="%t"/>
|
||||||
|
<l:template name="msgrel" text="%t"/>
|
||||||
|
<l:template name="msgset" text="%t"/>
|
||||||
|
<l:template name="msgsub" text="%t"/>
|
||||||
|
<l:template name="note" text="%t"/>
|
||||||
|
<l:template name="orderedlist" text="%t"/>
|
||||||
|
<l:template name="part" text="%t"/>
|
||||||
|
<l:template name="partintro" text="%t"/>
|
||||||
|
<l:template name="preface" text="%t"/>
|
||||||
|
<l:template name="procedure" text="%t"/>
|
||||||
|
<l:template name="procedure.formal" text="Procédure %n. %t"/>
|
||||||
|
<l:template name="productionset" text="%t"/>
|
||||||
|
<l:template name="productionset.formal" text="Production %n"/>
|
||||||
|
<l:template name="qandadiv" text="%t"/>
|
||||||
|
<l:template name="qandaentry" text="%t"/>
|
||||||
|
<l:template name="qandaset" text="%t"/>
|
||||||
|
<l:template name="question" text="%t"/>
|
||||||
|
<l:template name="refentry" text="%t"/>
|
||||||
|
<l:template name="reference" text="%t"/>
|
||||||
|
<l:template name="refsection" text="%t"/>
|
||||||
|
<l:template name="refsect1" text="%t"/>
|
||||||
|
<l:template name="refsect2" text="%t"/>
|
||||||
|
<l:template name="refsect3" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdivinfo" text="%t"/>
|
||||||
|
<l:template name="segmentedlist" text="%t"/>
|
||||||
|
<l:template name="set" text="%t"/>
|
||||||
|
<l:template name="setindex" text="%t"/>
|
||||||
|
<l:template name="sidebar" text="%t"/>
|
||||||
|
<l:template name="step" text="%t"/>
|
||||||
|
<l:template name="table" text="Tableau %n. %t"/>
|
||||||
|
<l:template name="task" text="%t"/>
|
||||||
|
<l:template name="tip" text="%t"/>
|
||||||
|
<l:template name="toc" text="%t"/>
|
||||||
|
<l:template name="variablelist" text="%t"/>
|
||||||
|
<l:template name="varlistentry" text=""/>
|
||||||
|
<l:template name="warning" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title-unnumbered">
|
||||||
|
<l:template name="appendix" text="%t"/>
|
||||||
|
<l:template name="article/appendix" text="%t"/>
|
||||||
|
<l:template name="bridgehead" text="%t"/>
|
||||||
|
<l:template name="chapter" text="%t"/>
|
||||||
|
<l:template name="sect1" text="%t"/>
|
||||||
|
<l:template name="sect2" text="%t"/>
|
||||||
|
<l:template name="sect3" text="%t"/>
|
||||||
|
<l:template name="sect4" text="%t"/>
|
||||||
|
<l:template name="sect5" text="%t"/>
|
||||||
|
<l:template name="section" text="%t"/>
|
||||||
|
<l:template name="simplesect" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="title-numbered">
|
||||||
|
<l:template name="appendix" text="Annexe %n. %t"/>
|
||||||
|
<l:template name="article/appendix" text="%n. %t"/>
|
||||||
|
<l:template name="bridgehead" text="%n. %t"/>
|
||||||
|
<l:template name="chapter" text="Chapitre %n. %t"/>
|
||||||
|
<l:template name="sect1" text="%n. %t"/>
|
||||||
|
<l:template name="sect2" text="%n. %t"/>
|
||||||
|
<l:template name="sect3" text="%n. %t"/>
|
||||||
|
<l:template name="sect4" text="%n. %t"/>
|
||||||
|
<l:template name="sect5" text="%n. %t"/>
|
||||||
|
<l:template name="section" text="%n. %t"/>
|
||||||
|
<l:template name="simplesect" text="%t"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="subtitle">
|
||||||
|
<l:template name="appendix" text="%s"/>
|
||||||
|
<l:template name="article" text="%s"/>
|
||||||
|
<l:template name="bibliodiv" text="%s"/>
|
||||||
|
<l:template name="biblioentry" text="%s"/>
|
||||||
|
<l:template name="bibliography" text="%s"/>
|
||||||
|
<l:template name="bibliomixed" text="%s"/>
|
||||||
|
<l:template name="bibliomset" text="%s"/>
|
||||||
|
<l:template name="biblioset" text="%s"/>
|
||||||
|
<l:template name="book" text="%s"/>
|
||||||
|
<l:template name="chapter" text="%s"/>
|
||||||
|
<l:template name="colophon" text="%s"/>
|
||||||
|
<l:template name="dedication" text="%s"/>
|
||||||
|
<l:template name="glossary" text="%s"/>
|
||||||
|
<l:template name="glossdiv" text="%s"/>
|
||||||
|
<l:template name="index" text="%s"/>
|
||||||
|
<l:template name="indexdiv" text="%s"/>
|
||||||
|
<l:template name="lot" text="%s"/>
|
||||||
|
<l:template name="part" text="%s"/>
|
||||||
|
<l:template name="partintro" text="%s"/>
|
||||||
|
<l:template name="preface" text="%s"/>
|
||||||
|
<l:template name="refentry" text="%s"/>
|
||||||
|
<l:template name="reference" text="%s"/>
|
||||||
|
<l:template name="refsection" text="%s"/>
|
||||||
|
<l:template name="refsect1" text="%s"/>
|
||||||
|
<l:template name="refsect2" text="%s"/>
|
||||||
|
<l:template name="refsect3" text="%s"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%s"/>
|
||||||
|
<l:template name="sect1" text="%s"/>
|
||||||
|
<l:template name="sect2" text="%s"/>
|
||||||
|
<l:template name="sect3" text="%s"/>
|
||||||
|
<l:template name="sect4" text="%s"/>
|
||||||
|
<l:template name="sect5" text="%s"/>
|
||||||
|
<l:template name="section" text="%s"/>
|
||||||
|
<l:template name="set" text="%s"/>
|
||||||
|
<l:template name="setindex" text="%s"/>
|
||||||
|
<l:template name="sidebar" text="%s"/>
|
||||||
|
<l:template name="simplesect" text="%s"/>
|
||||||
|
<l:template name="toc" text="%s"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref">
|
||||||
|
<l:template name="abstract" text="%t"/>
|
||||||
|
<l:template name="answer" text="R : %n"/>
|
||||||
|
<l:template name="appendix" text="%t"/>
|
||||||
|
<l:template name="article" text="%t"/>
|
||||||
|
<l:template name="authorblurb" text="%t"/>
|
||||||
|
<l:template name="bibliodiv" text="%t"/>
|
||||||
|
<l:template name="bibliography" text="%t"/>
|
||||||
|
<l:template name="bibliomset" text="%t"/>
|
||||||
|
<l:template name="biblioset" text="%t"/>
|
||||||
|
<l:template name="blockquote" text="%t"/>
|
||||||
|
<l:template name="book" text="%t"/>
|
||||||
|
<l:template name="calloutlist" text="%t"/>
|
||||||
|
<l:template name="caution" text="%t"/>
|
||||||
|
<l:template name="chapter" text="%t"/>
|
||||||
|
<l:template name="colophon" text="%t"/>
|
||||||
|
<l:template name="constraintdef" text="%t"/>
|
||||||
|
<l:template name="dedication" text="%t"/>
|
||||||
|
<l:template name="equation" text="%t"/>
|
||||||
|
<l:template name="example" text="%t"/>
|
||||||
|
<l:template name="figure" text="%t"/>
|
||||||
|
<l:template name="formalpara" text="%t"/>
|
||||||
|
<l:template name="glossary" text="%t"/>
|
||||||
|
<l:template name="glossdiv" text="%t"/>
|
||||||
|
<l:template name="important" text="%t"/>
|
||||||
|
<l:template name="index" text="%t"/>
|
||||||
|
<l:template name="indexdiv" text="%t"/>
|
||||||
|
<l:template name="itemizedlist" text="%t"/>
|
||||||
|
<l:template name="legalnotice" text="%t"/>
|
||||||
|
<l:template name="listitem" text="%n"/>
|
||||||
|
<l:template name="lot" text="%t"/>
|
||||||
|
<l:template name="msg" text="%t"/>
|
||||||
|
<l:template name="msgexplan" text="%t"/>
|
||||||
|
<l:template name="msgmain" text="%t"/>
|
||||||
|
<l:template name="msgrel" text="%t"/>
|
||||||
|
<l:template name="msgset" text="%t"/>
|
||||||
|
<l:template name="msgsub" text="%t"/>
|
||||||
|
<l:template name="note" text="%t"/>
|
||||||
|
<l:template name="orderedlist" text="%t"/>
|
||||||
|
<l:template name="part" text="%t"/>
|
||||||
|
<l:template name="partintro" text="%t"/>
|
||||||
|
<l:template name="preface" text="%t"/>
|
||||||
|
<l:template name="procedure" text="%t"/>
|
||||||
|
<l:template name="productionset" text="%t"/>
|
||||||
|
<l:template name="qandadiv" text="%t"/>
|
||||||
|
<l:template name="qandaentry" text="Q : %n"/>
|
||||||
|
<l:template name="qandaset" text="%t"/>
|
||||||
|
<l:template name="question" text="Q : %n"/>
|
||||||
|
<l:template name="reference" text="%t"/>
|
||||||
|
<l:template name="refsynopsisdiv" text="%t"/>
|
||||||
|
<l:template name="segmentedlist" text="%t"/>
|
||||||
|
<l:template name="set" text="%t"/>
|
||||||
|
<l:template name="setindex" text="%t"/>
|
||||||
|
<l:template name="sidebar" text="%t"/>
|
||||||
|
<l:template name="table" text="%t"/>
|
||||||
|
<l:template name="tip" text="%t"/>
|
||||||
|
<l:template name="toc" text="%t"/>
|
||||||
|
<l:template name="variablelist" text="%t"/>
|
||||||
|
<l:template name="varlistentry" text="%n"/>
|
||||||
|
<l:template name="warning" text="%t"/>
|
||||||
|
<l:template name="page.citation" text=" [%p]"/>
|
||||||
|
<l:template name="page" text="(page %p)"/>
|
||||||
|
<l:template name="pageabbrev" text="(p. %p)"/>
|
||||||
|
<l:template name="Page" text="Page %p"/>
|
||||||
|
<l:template name="bridgehead" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="refsection" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="refsect1" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="refsect2" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="refsect3" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="sect1" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="sect2" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="sect3" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="sect4" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="sect5" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="section" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="simplesect" text="la section intitulée « %t »"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref-number">
|
||||||
|
<l:template name="answer" text="R : %n"/>
|
||||||
|
<l:template name="appendix" text="Annexe %n"/>
|
||||||
|
<l:template name="bridgehead" text="Section %n"/>
|
||||||
|
<l:template name="chapter" text="Chapitre %n"/>
|
||||||
|
<l:template name="equation" text="Équation %n"/>
|
||||||
|
<l:template name="example" text="Exemple %n"/>
|
||||||
|
<l:template name="figure" text="Figure %n"/>
|
||||||
|
<l:template name="part" text="Partie %n"/>
|
||||||
|
<l:template name="procedure" text="Procédure %n"/>
|
||||||
|
<l:template name="productionset" text="Production %n"/>
|
||||||
|
<l:template name="qandadiv" text="Q & R %n"/>
|
||||||
|
<l:template name="qandaentry" text="Q : %n"/>
|
||||||
|
<l:template name="question" text="Q : %n"/>
|
||||||
|
<l:template name="sect1" text="Section %n"/>
|
||||||
|
<l:template name="sect2" text="Section %n"/>
|
||||||
|
<l:template name="sect3" text="Section %n"/>
|
||||||
|
<l:template name="sect4" text="Section %n"/>
|
||||||
|
<l:template name="sect5" text="Section %n"/>
|
||||||
|
<l:template name="section" text="Section %n"/>
|
||||||
|
<l:template name="table" text="Tableau %n"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="xref-number-and-title">
|
||||||
|
<l:template name="appendix" text="Annexe %n, %t"/>
|
||||||
|
<l:template name="bridgehead" text="Section %n, « %t »"/>
|
||||||
|
<l:template name="chapter" text="Chapitre %n, %t"/>
|
||||||
|
<l:template name="equation" text="Équation %n, « %t »"/>
|
||||||
|
<l:template name="example" text="Exemple %n, « %t »"/>
|
||||||
|
<l:template name="figure" text="Figure %n, « %t »"/>
|
||||||
|
<l:template name="part" text="Partie %n, « %t »"/>
|
||||||
|
<l:template name="procedure" text="Procédure %n, « %t »"/>
|
||||||
|
<l:template name="productionset" text="Production %n, « %t »"/>
|
||||||
|
<l:template name="qandadiv" text="Q & R %n, « %t »"/>
|
||||||
|
<l:template name="refsect1" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="refsect2" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="refsect3" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="refsection" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="sect1" text="Section %n, « %t »"/>
|
||||||
|
<l:template name="sect2" text="Section %n, « %t »"/>
|
||||||
|
<l:template name="sect3" text="Section %n, « %t »"/>
|
||||||
|
<l:template name="sect4" text="Section %n, « %t »"/>
|
||||||
|
<l:template name="sect5" text="Section %n, « %t »"/>
|
||||||
|
<l:template name="section" text="Section %n, « %t »"/>
|
||||||
|
<l:template name="simplesect" text="la section intitulée « %t »"/>
|
||||||
|
<l:template name="table" text="Tableau %n, « %t »"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="authorgroup">
|
||||||
|
<l:template name="sep" text=", "/>
|
||||||
|
<l:template name="sep2" text=" et "/>
|
||||||
|
<l:template name="seplast" text=", et "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="glossary">
|
||||||
|
<l:template name="see" text="Voir "/>
|
||||||
|
<l:template name="seealso" text="Voir aussi "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="msgset">
|
||||||
|
<l:template name="MsgAud" text="Public visé: "/>
|
||||||
|
<l:template name="MsgLevel" text="Niveau: "/>
|
||||||
|
<l:template name="MsgOrig" text="Origine: "/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime">
|
||||||
|
<l:template name="format" text="d/m/Y"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime-full">
|
||||||
|
<l:template name="January" text="janvier"/>
|
||||||
|
<l:template name="February" text="février"/>
|
||||||
|
<l:template name="March" text="mars"/>
|
||||||
|
<l:template name="April" text="avril"/>
|
||||||
|
<l:template name="May" text="mai"/>
|
||||||
|
<l:template name="June" text="juin"/>
|
||||||
|
<l:template name="July" text="juillet"/>
|
||||||
|
<l:template name="August" text="août"/>
|
||||||
|
<l:template name="September" text="septembre"/>
|
||||||
|
<l:template name="October" text="octobre"/>
|
||||||
|
<l:template name="November" text="novembre"/>
|
||||||
|
<l:template name="December" text="décembre"/>
|
||||||
|
<l:template name="Monday" text="lundi"/>
|
||||||
|
<l:template name="Tuesday" text="mardi"/>
|
||||||
|
<l:template name="Wednesday" text="mercredi"/>
|
||||||
|
<l:template name="Thursday" text="jeudi"/>
|
||||||
|
<l:template name="Friday" text="vendredi"/>
|
||||||
|
<l:template name="Saturday" text="samedi"/>
|
||||||
|
<l:template name="Sunday" text="dimanche"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="datetime-abbrev">
|
||||||
|
<l:template name="Jan" text="jan"/>
|
||||||
|
<l:template name="Feb" text="fév"/>
|
||||||
|
<l:template name="Mar" text="mar"/>
|
||||||
|
<l:template name="Apr" text="avr"/>
|
||||||
|
<l:template name="May" text="mai"/>
|
||||||
|
<l:template name="Jun" text="jun"/>
|
||||||
|
<l:template name="Jul" text="jui"/>
|
||||||
|
<l:template name="Aug" text="aoû"/>
|
||||||
|
<l:template name="Sep" text="sep"/>
|
||||||
|
<l:template name="Oct" text="oct"/>
|
||||||
|
<l:template name="Nov" text="nov"/>
|
||||||
|
<l:template name="Dec" text="déc"/>
|
||||||
|
<l:template name="Mon" text="lun"/>
|
||||||
|
<l:template name="Tue" text="mar"/>
|
||||||
|
<l:template name="Wed" text="mer"/>
|
||||||
|
<l:template name="Thu" text="jeu"/>
|
||||||
|
<l:template name="Fri" text="ven"/>
|
||||||
|
<l:template name="Sat" text="sam"/>
|
||||||
|
<l:template name="Sun" text="dim"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:context name="htmlhelp">
|
||||||
|
<l:template name="langcode" text="0x040c French (FRANCE)"/>
|
||||||
|
</l:context>
|
||||||
|
|
||||||
|
<l:letters>
|
||||||
|
<l:l i="-1"/>
|
||||||
|
<l:l i="0">Symboles</l:l>
|
||||||
|
<l:l i="1">A</l:l>
|
||||||
|
<l:l i="1">a</l:l>
|
||||||
|
<l:l i="1">à</l:l>
|
||||||
|
<l:l i="1">À</l:l>
|
||||||
|
<l:l i="1">â</l:l>
|
||||||
|
<l:l i="1">Â</l:l>
|
||||||
|
<l:l i="1">Æ</l:l>
|
||||||
|
<l:l i="1">æ</l:l>
|
||||||
|
<l:l i="2">B</l:l>
|
||||||
|
<l:l i="2">b</l:l>
|
||||||
|
<l:l i="3">C</l:l>
|
||||||
|
<l:l i="3">c</l:l>
|
||||||
|
<l:l i="3">ç</l:l>
|
||||||
|
<l:l i="4">D</l:l>
|
||||||
|
<l:l i="4">d</l:l>
|
||||||
|
<l:l i="5">E</l:l>
|
||||||
|
<l:l i="5">e</l:l>
|
||||||
|
<l:l i="5">ê</l:l>
|
||||||
|
<l:l i="5">Ê</l:l>
|
||||||
|
<l:l i="5">é</l:l>
|
||||||
|
<l:l i="5">É</l:l>
|
||||||
|
<l:l i="5">è</l:l>
|
||||||
|
<l:l i="5">È</l:l>
|
||||||
|
<l:l i="5">ë</l:l>
|
||||||
|
<l:l i="5">Ë</l:l>
|
||||||
|
<l:l i="5">€</l:l>
|
||||||
|
<l:l i="6">F</l:l>
|
||||||
|
<l:l i="6">f</l:l>
|
||||||
|
<l:l i="7">G</l:l>
|
||||||
|
<l:l i="7">g</l:l>
|
||||||
|
<l:l i="8">H</l:l>
|
||||||
|
<l:l i="8">h</l:l>
|
||||||
|
<l:l i="9">I</l:l>
|
||||||
|
<l:l i="9">i</l:l>
|
||||||
|
<l:l i="9">Î</l:l>
|
||||||
|
<l:l i="9">î</l:l>
|
||||||
|
<l:l i="9">Ï</l:l>
|
||||||
|
<l:l i="9">ï</l:l>
|
||||||
|
<l:l i="10">J</l:l>
|
||||||
|
<l:l i="10">j</l:l>
|
||||||
|
<l:l i="11">K</l:l>
|
||||||
|
<l:l i="11">k</l:l>
|
||||||
|
<l:l i="12">L</l:l>
|
||||||
|
<l:l i="12">l</l:l>
|
||||||
|
<l:l i="13">M</l:l>
|
||||||
|
<l:l i="13">m</l:l>
|
||||||
|
<l:l i="14">N</l:l>
|
||||||
|
<l:l i="14">n</l:l>
|
||||||
|
<l:l i="15">O</l:l>
|
||||||
|
<l:l i="15">o</l:l>
|
||||||
|
<l:l i="15">Ö</l:l>
|
||||||
|
<l:l i="15">ö</l:l>
|
||||||
|
<l:l i="15">Œ</l:l>
|
||||||
|
<l:l i="15">œ</l:l>
|
||||||
|
<l:l i="16">P</l:l>
|
||||||
|
<l:l i="16">p</l:l>
|
||||||
|
<l:l i="17">Q</l:l>
|
||||||
|
<l:l i="17">q</l:l>
|
||||||
|
<l:l i="18">R</l:l>
|
||||||
|
<l:l i="18">r</l:l>
|
||||||
|
<l:l i="19">S</l:l>
|
||||||
|
<l:l i="19">s</l:l>
|
||||||
|
<l:l i="20">T</l:l>
|
||||||
|
<l:l i="20">t</l:l>
|
||||||
|
<l:l i="21">U</l:l>
|
||||||
|
<l:l i="21">u</l:l>
|
||||||
|
<l:l i="21">Ù</l:l>
|
||||||
|
<l:l i="21">ù</l:l>
|
||||||
|
<l:l i="21">Û</l:l>
|
||||||
|
<l:l i="21">û</l:l>
|
||||||
|
<l:l i="21">Ü</l:l>
|
||||||
|
<l:l i="21">ü</l:l>
|
||||||
|
<l:l i="22">V</l:l>
|
||||||
|
<l:l i="22">v</l:l>
|
||||||
|
<l:l i="23">W</l:l>
|
||||||
|
<l:l i="23">w</l:l>
|
||||||
|
<l:l i="24">X</l:l>
|
||||||
|
<l:l i="24">x</l:l>
|
||||||
|
<l:l i="25">Y</l:l>
|
||||||
|
<l:l i="25">y</l:l>
|
||||||
|
<l:l i="26">Z</l:l>
|
||||||
|
<l:l i="26">z</l:l>
|
||||||
|
</l:letters>
|
||||||
|
</l:l10n>
|
|
@ -0,0 +1,716 @@
|
||||||
|
<?xml version='1.0'?>
|
||||||
|
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
|
||||||
|
xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"
|
||||||
|
exclude-result-prefixes="doc"
|
||||||
|
version='1.0'>
|
||||||
|
|
||||||
|
<!-- ********************************************************************
|
||||||
|
$Id$
|
||||||
|
********************************************************************
|
||||||
|
|
||||||
|
This file is part of the XSL DocBook Stylesheet distribution.
|
||||||
|
See ../README or http://nwalsh.com/docbook/xsl/ for copyright
|
||||||
|
and other information.
|
||||||
|
|
||||||
|
******************************************************************** -->
|
||||||
|
|
||||||
|
<!-- ==================================================================== -->
|
||||||
|
|
||||||
|
|
||||||
|
<xsl:template match="*" mode="object.title.template">
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'title'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="chapter" mode="object.title.template">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$chapter.autolabel != 0">
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'title-numbered'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'title-unnumbered'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="appendix" mode="object.title.template">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$appendix.autolabel != 0">
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'title-numbered'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'title-unnumbered'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="section|sect1|sect2|sect3|sect4|sect5|simplesect
|
||||||
|
|bridgehead"
|
||||||
|
mode="object.title.template">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$section.autolabel != 0">
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'title-numbered'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'title-unnumbered'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="procedure" mode="object.title.template">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$formal.procedures != 0">
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'title'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
<xsl:text>.formal</xsl:text>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'title'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- ============================================================ -->
|
||||||
|
|
||||||
|
<xsl:template match="*" mode="object.subtitle.template">
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'subtitle'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- ============================================================ -->
|
||||||
|
|
||||||
|
<xsl:template match="*" mode="is.autonumber">
|
||||||
|
<xsl:value-of select="'0'"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="section|sect1|sect2|sect3|sect4|sect5"
|
||||||
|
mode="is.autonumber">
|
||||||
|
<xsl:value-of select="$section.autolabel"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="figure|example|table|equation" mode="is.autonumber">
|
||||||
|
<xsl:value-of select="'1'"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="appendix" mode="is.autonumber">
|
||||||
|
<xsl:value-of select="$appendix.autolabel"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="chapter" mode="is.autonumber">
|
||||||
|
<xsl:value-of select="$chapter.autolabel"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="part" mode="is.autonumber">
|
||||||
|
<xsl:value-of select="$part.autolabel"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="preface" mode="is.autonumber">
|
||||||
|
<xsl:value-of select="$preface.autolabel"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="question|answer" mode="is.autonumber">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$qanda.defaultlabel = 'number'
|
||||||
|
and not(label)">
|
||||||
|
<xsl:value-of select="'1'"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:value-of select="'0'"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="qandadiv" mode="is.autonumber">
|
||||||
|
<xsl:value-of select="$qandadiv.autolabel"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="bridgehead" mode="is.autonumber">
|
||||||
|
<xsl:value-of select="$section.autolabel"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="*" mode="object.xref.template">
|
||||||
|
<xsl:param name="purpose"/>
|
||||||
|
<xsl:param name="xrefstyle"/>
|
||||||
|
<xsl:param name="referrer"/>
|
||||||
|
|
||||||
|
<!-- Is autonumbering on? -->
|
||||||
|
<xsl:variable name="autonumber">
|
||||||
|
<xsl:apply-templates select="." mode="is.autonumber"/>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:variable name="number-and-title-template">
|
||||||
|
<xsl:call-template name="gentext.template.exists">
|
||||||
|
<xsl:with-param name="context" select="'xref-number-and-title'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:variable name="number-template">
|
||||||
|
<xsl:call-template name="gentext.template.exists">
|
||||||
|
<xsl:with-param name="context" select="'xref-number'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:variable name="context">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$autonumber != 0
|
||||||
|
and $number-and-title-template != 0
|
||||||
|
and $xref.with.number.and.title != 0">
|
||||||
|
<xsl:value-of select="'xref-number-and-title'"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$autonumber != 0
|
||||||
|
and $number-template != 0">
|
||||||
|
<xsl:value-of select="'xref-number'"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:value-of select="'xref'"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="$context"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="referrer" select="$referrer"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- ============================================================ -->
|
||||||
|
|
||||||
|
<xsl:template match="*" mode="object.title.markup">
|
||||||
|
<xsl:param name="allow-anchors" select="0"/>
|
||||||
|
<xsl:variable name="template">
|
||||||
|
<xsl:apply-templates select="." mode="object.title.template"/>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<xsl:message>
|
||||||
|
<xsl:text>object.title.markup: </xsl:text>
|
||||||
|
<xsl:value-of select="local-name(.)"/>
|
||||||
|
<xsl:text>: </xsl:text>
|
||||||
|
<xsl:value-of select="$template"/>
|
||||||
|
</xsl:message>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<xsl:call-template name="substitute-markup">
|
||||||
|
<xsl:with-param name="allow-anchors" select="$allow-anchors"/>
|
||||||
|
<xsl:with-param name="template" select="$template"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="*" mode="object.title.markup.textonly">
|
||||||
|
<xsl:variable name="title">
|
||||||
|
<xsl:apply-templates select="." mode="object.title.markup"/>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:value-of select="$title"/>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- ============================================================ -->
|
||||||
|
|
||||||
|
<xsl:template match="*" mode="object.titleabbrev.markup">
|
||||||
|
<xsl:param name="allow-anchors" select="0"/>
|
||||||
|
|
||||||
|
<!-- Just for consistency in template naming -->
|
||||||
|
|
||||||
|
<xsl:apply-templates select="." mode="titleabbrev.markup">
|
||||||
|
<xsl:with-param name="allow-anchors" select="$allow-anchors"/>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- ============================================================ -->
|
||||||
|
|
||||||
|
<xsl:template match="*" mode="object.subtitle.markup">
|
||||||
|
<xsl:variable name="template">
|
||||||
|
<xsl:apply-templates select="." mode="object.subtitle.template"/>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:call-template name="substitute-markup">
|
||||||
|
<xsl:with-param name="template" select="$template"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- ============================================================ -->
|
||||||
|
|
||||||
|
<xsl:template match="*" mode="object.xref.markup">
|
||||||
|
<xsl:param name="purpose"/>
|
||||||
|
<xsl:param name="xrefstyle"/>
|
||||||
|
<xsl:param name="referrer"/>
|
||||||
|
|
||||||
|
<xsl:variable name="template">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="starts-with(normalize-space($xrefstyle), 'select:')">
|
||||||
|
<xsl:call-template name="make.gentext.template">
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="referrer" select="$referrer"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="starts-with(normalize-space($xrefstyle), 'template:')">
|
||||||
|
<xsl:value-of select="substring-after(normalize-space($xrefstyle), 'template:')"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:apply-templates select="." mode="object.xref.template">
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="referrer" select="$referrer"/>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
<xsl:message>
|
||||||
|
<xsl:text>object.xref.markup: </xsl:text>
|
||||||
|
<xsl:value-of select="local-name(.)"/>
|
||||||
|
<xsl:text>(</xsl:text>
|
||||||
|
<xsl:value-of select="$xrefstyle"/>
|
||||||
|
<xsl:text>, </xsl:text>
|
||||||
|
<xsl:value-of select="$purpose"/>
|
||||||
|
<xsl:text>)</xsl:text>
|
||||||
|
<xsl:text>: [</xsl:text>
|
||||||
|
<xsl:value-of select="$template"/>
|
||||||
|
<xsl:text>]</xsl:text>
|
||||||
|
</xsl:message>
|
||||||
|
-->
|
||||||
|
|
||||||
|
<xsl:if test="$template = ''">
|
||||||
|
<xsl:message>
|
||||||
|
<xsl:text>object.xref.markup: empty xref template</xsl:text>
|
||||||
|
<xsl:text> for linkend="</xsl:text>
|
||||||
|
<xsl:value-of select="@id"/>
|
||||||
|
<xsl:text>" and @xrefstyle="</xsl:text>
|
||||||
|
<xsl:value-of select="$xrefstyle"/>
|
||||||
|
<xsl:text>"</xsl:text>
|
||||||
|
</xsl:message>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:call-template name="substitute-markup">
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="referrer" select="$referrer"/>
|
||||||
|
<xsl:with-param name="template" select="$template"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="listitem" mode="object.xref.markup">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="parent::orderedlist">
|
||||||
|
<xsl:variable name="template">
|
||||||
|
<xsl:apply-templates select="." mode="object.xref.template"/>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:call-template name="substitute-markup">
|
||||||
|
<xsl:with-param name="template" select="$template"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:message>
|
||||||
|
<xsl:text>Xref is only supported to listitems in an</xsl:text>
|
||||||
|
<xsl:text> orderedlist: </xsl:text>
|
||||||
|
<xsl:value-of select="@id"/>
|
||||||
|
</xsl:message>
|
||||||
|
<xsl:text>???</xsl:text>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<xsl:template match="question" mode="object.xref.markup">
|
||||||
|
<xsl:param name="purpose"/>
|
||||||
|
<xsl:param name="xrefstyle"/>
|
||||||
|
<xsl:param name="referrer"/>
|
||||||
|
|
||||||
|
<xsl:variable name="deflabel">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="ancestor-or-self::*[@defaultlabel]">
|
||||||
|
<xsl:value-of select="(ancestor-or-self::*[@defaultlabel])[last()]
|
||||||
|
/@defaultlabel"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:value-of select="$qanda.defaultlabel"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:variable name="template">
|
||||||
|
<xsl:choose>
|
||||||
|
<!-- This avoids double Q: Q: in xref when defaultlabel=qanda -->
|
||||||
|
<xsl:when test="$deflabel = 'qanda' and not(label)">%n</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:apply-templates select="." mode="object.xref.template">
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="referrer" select="$referrer"/>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:call-template name="substitute-markup">
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="referrer" select="$referrer"/>
|
||||||
|
<xsl:with-param name="template" select="$template"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- ============================================================ -->
|
||||||
|
|
||||||
|
<xsl:template name="substitute-markup">
|
||||||
|
<xsl:param name="template" select="''"/>
|
||||||
|
<xsl:param name="allow-anchors" select="'0'"/>
|
||||||
|
<xsl:param name="title" select="''"/>
|
||||||
|
<xsl:param name="subtitle" select="''"/>
|
||||||
|
<xsl:param name="label" select="''"/>
|
||||||
|
<xsl:param name="pagenumber" select="''"/>
|
||||||
|
<xsl:param name="purpose"/>
|
||||||
|
<xsl:param name="xrefstyle"/>
|
||||||
|
<xsl:param name="referrer"/>
|
||||||
|
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="contains($template, '%')">
|
||||||
|
<xsl:value-of select="substring-before($template, '%')"/>
|
||||||
|
<xsl:variable name="candidate"
|
||||||
|
select="substring(substring-after($template, '%'), 1, 1)"/>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$candidate = 't'">
|
||||||
|
<xsl:apply-templates select="." mode="insert.title.markup">
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="title">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$title != ''">
|
||||||
|
<xsl:copy-of select="$title"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:apply-templates select="." mode="title.markup">
|
||||||
|
<xsl:with-param name="allow-anchors" select="$allow-anchors"/>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$candidate = 's'">
|
||||||
|
<xsl:apply-templates select="." mode="insert.subtitle.markup">
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="subtitle">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$subtitle != ''">
|
||||||
|
<xsl:copy-of select="$subtitle"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:apply-templates select="." mode="subtitle.markup">
|
||||||
|
<xsl:with-param name="allow-anchors" select="$allow-anchors"/>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$candidate = 'n'">
|
||||||
|
<xsl:apply-templates select="." mode="insert.label.markup">
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="label">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$label != ''">
|
||||||
|
<xsl:copy-of select="$label"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:apply-templates select="." mode="label.markup"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$candidate = 'p'">
|
||||||
|
<xsl:apply-templates select="." mode="insert.pagenumber.markup">
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="pagenumber">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$pagenumber != ''">
|
||||||
|
<xsl:copy-of select="$pagenumber"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:apply-templates select="." mode="pagenumber.markup"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$candidate = 'd'">
|
||||||
|
<xsl:apply-templates select="." mode="insert.direction.markup">
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="direction">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$referrer">
|
||||||
|
<xsl:variable name="referent-is-below">
|
||||||
|
<xsl:for-each select="preceding::xref">
|
||||||
|
<xsl:if test="generate-id(.) = generate-id($referrer)">1</xsl:if>
|
||||||
|
</xsl:for-each>
|
||||||
|
</xsl:variable>
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$referent-is-below = ''">
|
||||||
|
<xsl:call-template name="gentext">
|
||||||
|
<xsl:with-param name="key" select="'above'"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:call-template name="gentext">
|
||||||
|
<xsl:with-param name="key" select="'below'"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:message>Attempt to use %d in gentext with no referrer!</xsl:message>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:with-param>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$candidate = '%' ">
|
||||||
|
<xsl:text>%</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:text>%</xsl:text><xsl:value-of select="$candidate"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
<!-- recurse with the rest of the template string -->
|
||||||
|
<xsl:variable name="rest"
|
||||||
|
select="substring($template,
|
||||||
|
string-length(substring-before($template, '%'))+3)"/>
|
||||||
|
<xsl:call-template name="substitute-markup">
|
||||||
|
<xsl:with-param name="template" select="$rest"/>
|
||||||
|
<xsl:with-param name="allow-anchors" select="$allow-anchors"/>
|
||||||
|
<xsl:with-param name="title" select="$title"/>
|
||||||
|
<xsl:with-param name="subtitle" select="$subtitle"/>
|
||||||
|
<xsl:with-param name="label" select="$label"/>
|
||||||
|
<xsl:with-param name="pagenumber" select="$pagenumber"/>
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="referrer" select="$referrer"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:otherwise>
|
||||||
|
<xsl:value-of select="$template"/>
|
||||||
|
</xsl:otherwise>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
<!-- ============================================================ -->
|
||||||
|
|
||||||
|
<xsl:template name="make.gentext.template">
|
||||||
|
<xsl:param name="xrefstyle" select="''"/>
|
||||||
|
<xsl:param name="purpose"/>
|
||||||
|
<xsl:param name="referrer"/>
|
||||||
|
<xsl:param name="lang">
|
||||||
|
<xsl:call-template name="l10n.language"/>
|
||||||
|
</xsl:param>
|
||||||
|
|
||||||
|
<!-- parse xrefstyle to get parts -->
|
||||||
|
<xsl:variable name="parts"
|
||||||
|
select="substring-after(normalize-space($xrefstyle), 'select:')"/>
|
||||||
|
|
||||||
|
<xsl:variable name="labeltype">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="contains($parts, 'labelnumber')">
|
||||||
|
<xsl:text>labelnumber</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="contains($parts, 'labelname')">
|
||||||
|
<xsl:text>labelname</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="contains($parts, 'label')">
|
||||||
|
<xsl:text>label</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:variable name="titletype">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="contains($parts, 'quotedtitle')">
|
||||||
|
<xsl:text>quotedtitle</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="contains($parts, 'title')">
|
||||||
|
<xsl:text>title</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:variable name="pagetype">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$insert.xref.page.number = 'no'">
|
||||||
|
<!-- suppress page numbers -->
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="contains($parts, 'nopage')">
|
||||||
|
<xsl:text>nopage</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="contains($parts, 'pagenumber')">
|
||||||
|
<xsl:text>pagenumber</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="contains($parts, 'pageabbrev')">
|
||||||
|
<xsl:text>pageabbrev</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="contains($parts, 'Page')">
|
||||||
|
<xsl:text>Page</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="contains($parts, 'page')">
|
||||||
|
<xsl:text>page</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:variable>
|
||||||
|
|
||||||
|
<xsl:if test="$labeltype != ''">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$labeltype = 'labelname'">
|
||||||
|
<xsl:call-template name="gentext"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$labeltype = 'labelnumber'">
|
||||||
|
<xsl:text>%n</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$labeltype = 'label'">
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'xref-number'"/>
|
||||||
|
<xsl:with-param name="name">
|
||||||
|
<xsl:call-template name="xpath.location"/>
|
||||||
|
</xsl:with-param>
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="referrer" select="$referrer"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$titletype != ''">
|
||||||
|
<xsl:value-of select="$xref.label-title.separator"/>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$pagetype != ''">
|
||||||
|
<xsl:value-of select="$xref.label-page.separator"/>
|
||||||
|
</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:if test="$titletype != ''">
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$titletype = 'title'">
|
||||||
|
<xsl:text>%t</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$titletype = 'quotedtitle'">
|
||||||
|
<xsl:call-template name="gentext.dingbat">
|
||||||
|
<xsl:with-param name="dingbat" select="'startquote'"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
<xsl:text>%t</xsl:text>
|
||||||
|
<xsl:call-template name="gentext.dingbat">
|
||||||
|
<xsl:with-param name="dingbat" select="'endquote'"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
|
||||||
|
<xsl:choose>
|
||||||
|
<xsl:when test="$pagetype != '' and $pagetype != 'nopage'">
|
||||||
|
<xsl:value-of select="$xref.title-page.separator"/>
|
||||||
|
</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
<xsl:if test="$pagetype != ''">
|
||||||
|
<xsl:choose>
|
||||||
|
<!-- special case: use regular xref template -->
|
||||||
|
<xsl:when test="$pagetype = 'nopage'
|
||||||
|
and $labeltype = ''
|
||||||
|
and $titletype = ''">
|
||||||
|
<xsl:apply-templates select="." mode="object.xref.template">
|
||||||
|
<xsl:with-param name="purpose" select="$purpose"/>
|
||||||
|
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
|
||||||
|
<xsl:with-param name="referrer" select="$referrer"/>
|
||||||
|
</xsl:apply-templates>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$pagetype = 'page'">
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'xref'"/>
|
||||||
|
<xsl:with-param name="name" select="'page'"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$pagetype = 'Page'">
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'xref'"/>
|
||||||
|
<xsl:with-param name="name" select="'Page'"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$pagetype = 'pageabbrev'">
|
||||||
|
<xsl:call-template name="gentext.template">
|
||||||
|
<xsl:with-param name="context" select="'xref'"/>
|
||||||
|
<xsl:with-param name="name" select="'pageabbrev'"/>
|
||||||
|
</xsl:call-template>
|
||||||
|
</xsl:when>
|
||||||
|
<xsl:when test="$pagetype = 'pagenumber'">
|
||||||
|
<xsl:text>%p</xsl:text>
|
||||||
|
</xsl:when>
|
||||||
|
</xsl:choose>
|
||||||
|
|
||||||
|
</xsl:if>
|
||||||
|
|
||||||
|
</xsl:template>
|
||||||
|
|
||||||
|
</xsl:stylesheet>
|