Following Bob's lead, I've tried to generate a website.database.xml that
does not contain the offending document elements - with no luck.
To simplify things, I built the example website that comes with the
website 2.6 distribution, using the layout and build.xml ant file
provided. Other than pointing at local resources, I only modified it by
adding the last argument to this target:
==============================================
<target name="doWebsite">
<java classname="${xslt.processor.class}"
fork="yes"
dir="${in.dir}"
failonerror="true">
<classpath refid="xslt.processor.classpath" />
<arg line="-o ${out.dir}/${website.outfile}"/>
<arg line="-x org.apache.xml.resolver.tools.ResolvingXMLReader"/>
<arg line="-y org.apache.xml.resolver.tools.ResolvingXMLReader"/>
<arg line="-r org.apache.xml.resolver.tools.CatalogResolver"/>
<arg line="${in.dir}/${autolayout.outfile}"/>
<arg line="${website.stylesheet}"/> <!-- tried both
chunk-tabular and chunk-website)
<arg line="${param.args.post}"/>
<arg line="collect.xref.targets='yes'" />
</java>
</target>
==============================================
This generates the website.database.xml file, but the file contains
document elements for each webpage, like this:
==============================================
<?xml version="1.0" encoding="utf-8" standalone="no"?>
<targetset>
<document targetdoc="home" baseuri="index.html" dir="out/">
<div element="webpage" href="#home" number="" targetptr="home">
...
</document>
<document targetdoc="layout" baseuri="layout.html" dir="out/">
...
</document>
</targetset>
==============================================
This structure obviously can't be included in a site map, as Bob points
out. I'm not sure (not having seen a correct example yet!) but I imagine
it should look more like the standard DocBook olink database, where a
book and its chapters are represented by nested divs, not document
elements.
I suppose I could postprocess the website.database.xml files to get what
I want, but that would be cheating.
P.S. Just in case Silkpage could give me a clue, I installed it and
generated a website.database.xml there. Learned nothing new: the file
has the same structure.
Denis Bradford wrote:
Sorry, I should have indicated that the first bit was a fragment - I do
have a sitemap element.
I'm confused about your second point: I understand that nested document
elements are a problem. But my generated website.database.xml file
always has a document element. In fact, it has one for each webpage in
my layout. Sounds like I'm really missing a point here here.
I'll go back to the sample
Bob Stayton wrote:
Hi Denis,
A couple of items may fix this:
<targetset>
<dir name="build">
<document targetdoc="homeSite">
<xi:include href="website.database.xml" />
</document>
<dir name="schedule">
<document targetdoc="scheduleSite">
<xi:include href="schedule/website.database.xml" />
</document>
</dir>
It seems you are missing a sitemap element in your olinkdatabase.
3. Finally, the olinks themselves. I've tried a couple of forms. For
example, here's an olink to a homeSite page from within a
scheduleSite page:
<olink targetdoc="about" targetptr="about"/>
<olink targetdoc="homeSite" targetptr="about"/>
The first is the recommended form where 'about' is the id of the
webpage. It does not resolve at all. The second is the conventional
(non-website) form, but seems doomed because there is no book or any
document with the id "homeSite". Encouragingly, it finds the title -
but alas, the wrong url:
<a href="../#about" class="olink">About this site</a>
The first is recommended when referencing a page within a single
website. The second is for referencing outside of website to another
document (in this case, another website). The targetdoc values are an
olink feature that exists outside of any document id attributes. All
that needs to match is a targetdoc value in an olink to a targetdoc
value in a <document> element in a database.
The second example is correct and does find the data, as you noticed,
but gives the wrong URI. I think adding the sitemap should fix the
path problem.
One thing I'm not clear about is your website.database.xml file. It
seems to have a document element with targetdoc attribute. But then
you put that inside another document element with different targetdoc
in olinkdatabase. The document element should not be nested. Normally
the target data for a document generated by the stylesheet does not
have a document element.
Bob Stayton
Sagehill Enterprises
[EMAIL PROTECTED]
----- Original Message ----- From: "Denis Bradford"
<[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Monday, March 31, 2008 8:29 PM
Subject: [docbook-apps] Website: Problem using olinks across websites
I maintain a web site as a collection of DocBook websites, each with
its own layout and its own TOC. I want to replace the old ulinks with
olinks. The olinks are working fine within each website, but olinks
across websites fail to resolve. Here's how TDG says to do it:
"Once you have the targets database, you can pass its pathname to the
XSLT processor using the target.database.document stylesheet
parameter. This database is in addition to (and separate from) the
olink database that resolves olinks between webpages in your website.
The database of internal olinks is identified with the
website.database.document parameter. When the processor encounters an
olink, it first checks the website database before consulting the
offsite database."
All right, here's how I've been trying to implement it:
1. In my ant script, after building the layouts, I transform each
website in turn. In addition to setting collect.xref.targets='yes'
and declaring the current docid, I specify both the website.database
and target.database documents, like this:
<target name="doWebsite.home">
<java ...
<arg line="collect.xref.targets='yes'" />
<arg line="current.docid='homeSite'" />
<arg line="target.database.document='olinksitemap'"/>
<arg line="website.database.document='website.database.xml'" />
</java>
</target>
It seems the
2. Meanwhile, I've created olinksitemap by hand. It includes the
website.database.document for each website, like this:
<targetset>
<dir name="build">
<document targetdoc="homeSite">
<xi:include href="website.database.xml" />
</document>
<dir name="schedule">
<document targetdoc="scheduleSite">
<xi:include href="schedule/website.database.xml" />
</document>
</dir>
...
</targetset>
3. Finally, the olinks themselves. I've tried a couple of forms. For
example, here's an olink to a homeSite page from within a
scheduleSite page:
<olink targetdoc="about" targetptr="about"/>
<olink targetdoc="homeSite" targetptr="about"/>
The first is the recommended form where 'about' is the id of the
webpage. It does not resolve at all. The second is the conventional
(non-website) form, but seems doomed because there is no book or any
document with the id "homeSite". Encouragingly, it finds the title -
but alas, the wrong url:
<a href="../#about" class="olink">About this site</a>
fwiw, here's the corresponding code in the website database:
<document targetdoc="about" baseuri="about.html">
<div element="webpage" href="#about" number=""
targetptr="about" lang="en">
<ttl>About this site</ttl>
Am I anywhere near the right track, or completely off? Any working
examples of cross-website olinks?
TIA,
Denis
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]