Hi Kells,
The DTD version of DocBook 5 does not have the %local.* parameter entities.
All of the customization features are in the RelaxNG version, from which
the DTD version is generated.
If you don't want to customize the RelaxNG and generate a DTD from it, you
can just edit a copy of the DocBook 5 DTD. Because it is a flat
structure with no parameter entities, editing it is straightforward, if
sometimes tedious.
You need to add your new element as you have, and you also need to edit any
content models
of elements that are to contain your new element. If you don't do that,
then although the
element name is valid, there is no place in the document where its position
is valid.
I don't think you want to use ENTITY as the attribute type for "server".
Such an attribute
would contain the name of an unparsed entity declared elsewhere, and I
don't see that
for server1, server2, etc. I think you want CDATA there.
In your test.xml sample, the elements are not actually in the DocBook
namespace.
You declare the namespace with a "db" prefix, but you don't use the prefix.
If you declare the namespace without a prefix, then your elements will be
in
that default namespace.
Your app.xsl needs to import the stock docbook stylesheet (perhaps it does
and you
aren't showing that). Then the template that matches on Docbook elements
must have
the namespace prefix match="db:app".
Then the call-template uses a name of "db:prompt", but you don't define a
template with that name.
Also, it is unusual to define a template name using a namespace prefix.
It looks a bit like you are trying to invoke the template that handles the
prompt
element to handle your app element, but XSLT doesn't work that way.
You might consider dropping back to DocBook4 so you don't have to
deal with namespaces at the same time you are figuring other things out.
Do you really need DocBook5?
Bob Stayton
Sagehill Enterprises
DocBook Consulting
[EMAIL PROTECTED]
----- Original Message -----
From: "Kells Kearney" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Tuesday, March 13, 2007 4:13 PM
Subject: [docbook] docbook5 and adding elements (long)
I've taken a look through the e-mail archives, and I've tried
googling, but I'm unable to find an answer to why I can't do something
that should be quite simple. :( I've found documentation for how to
do it using Docbook 4.x (and had no luck using it with Docbook 5), but
it *seems* like a good thing to do it in Docbook 5. (Right?)
I'm hoping that some kind soul can help me understand what it is
that I'm doing wrong. I think that all I need is one good example.
Thanks in advance!
kells
What I'm trying to do:
================
I would like to be able to create an application-specific prompt to
create documentation for the application. The prompt looks like:
app: server_name>
where I'd like to define server_name in an entity as an attribute
with a reasonable default. To illustrate, I'd like to be able to
write:
<app> <command> bleh </command>
<variable>colour</variable>=<replaceable>blue</replaceable>
</app>
<app server="server2" > <command> bleh </command>
<variable>colour</variable>=<replaceable>green</replaceable>
</app>
and have the output look something like:
app: server1> bleh colour=blue
app: server2> bleh colour=green
Where I am so far
==============
Input file: test.xml
----------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE book SYSTEM "app.dtd" >
<book version="5.0"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xi="http://www.w3.org/2001/XInclude"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:mml="http://www.w3.org/1998/Math/MathML"
xmlns:html="http://www.w3.org/1999/xhtml"
xmlns:db="http://docbook.org/ns/docbook"
<chapter>
<title>Hello world!</title>
<para>Sample explanatory text here</para>
<app server="server2" > <command> bleh </command>
<variable>colour</variable>=<replaceable>green</replaceable>
</app>
</chapter>
</book>
My DTD app.dtd:
------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!-- Add the "app" element to something hopefully similar to what I
want. :)
If I understand things correctly, this inserts the element
definition into
the right spots in the DocBook grammar (aka DTD).
-->
<!ENTITY % local.tech.char.class "|app" >
<!-- Other documentation I've seen suggests taking the
docbook dtd, making a parameter entity and invoking it here.
It goes badly for me if I do
<!ENTITY % DOCBOOK SYSTEM
"file://c:/docbook/lib/docbook-50b5/dtd/docbook.dtd">
%DOCBOOK;
So I can't use the above. Right?
-->
<!-- Create the "app" element -->
<!ELEMENT app (#PCDATA|filename|replaceable|constant|parameter)* >
<!-- Set a default server name -->
<!ATTLIST app server ENTITY "server1" >
My app.xsl
------------------
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:db="http://docbook.org/ns/docbook"
<!-- Here's where it starts to get really scary for me. :)
This is also wrong, but I *think* shows what I want to do.
-->
<xsl:template match="app">
<xsl:call-template name="db:prompt">
<xsl:value-of select="@server" />
</xsl:call-template>
&
<xsl:apply-templates select="." />
</xsl:template>
</xsl:stylesheet>
Invocation with xsltproc
==================
xsltproc --nonet --xinclude --output test.fo app.xsl test.xml
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]