[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
Re: [xml-dev] Understanding XML catalogs: what they are, why theyare used, and where they are used
- From: David Carlisle <davidc@nag.co.uk>
- To: "Costello, Roger L." <costello@mitre.org>
- Date: Wed, 21 Jul 2010 22:57:16 +0100
On 21/07/2010 21:28, Costello, Roger L. wrote:
> Hi Folks,
>
> I am just learning to use XML catalogs. Below is what I've learned. Are there any errors in the below description? /Roger
>
I can't see how any oof your examples can work, did any of them work, if
so which parser were you using?
>
> ----------------------------------------------------------------
> HOW ARE CATALOGS USED?
> ----------------------------------------------------------------
> Create an external entity and then use that entity rather than hardcoding the URL:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <!DOCTYPE bookstore [
> <!ENTITY xslt-file SYSTEM "http://www.xfront.com/catalog-test/bookstore.xsl">
> ]>
> <?xml-stylesheet type="text/xsl" href="&xslt-file;"?>
> <bookstore>
> ...
> </bookstore>
& does not indicate an entity reference within the content of a PI,
which is parsed in the same way as a comment, so that is refering to the
URI with the literal string &xslt-file;"
>
> Notice that I created an external entity, xslt-file, and associated it with the URL, http://www.xfront.com/catalog-test/bookstore.xsl
>
> <!ENTITY xslt-file SYSTEM "http://www.xfront.com/catalog-test/bookstore.xsl">
>
> Then, in the XSLT processing instruction I used the entity:
>
> href="&xslt-file;"
>
It's not possible to use enity or character references within a
processing instruction.
>
> ----------------------------------------------------------------
> WHERE ARE CATALOGS USED?
> ----------------------------------------------------------------
> Wherever links are used, you can use catalogs. Above we saw that catalogs can be used with stylesheet PIs.
>
> Within an XSLT document you may have<include> and<import> elements. They use links. You can use catalogs with them:
>
> <?xml version="1.0"?>
> <!DOCTYPE bookstore [
> <!ENTITY include-file SYSTEM "http://www.xfront.com/catalog-test/toUpperCase.xsl">
> <!ENTITY import-file SYSTEM "http://www.xfront.com/catalog-test/toLowerCase.xsl">
> ]>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="2.0">
>
> <xsl:include href="&include-file;"/>
> <xsl:import href="&import-file;"/>"/>
>
If you define an entity reference to an external parsed entity then then
the replacement text of the entity is the content of the file
not the URL of the file so the xsl stylesheet referenced here is the
one obtained by taking the content of the file toLowerCase.xsl
interpreted as a URL.
i> ...
> </xsl:stylsheet>
>
> Notice that in the<include> and<import> elements I used entity references, rather than hardcoding a URL. Now I can use a catalog to map the URL to a local copy of the XSLT documents, if I desire.
>
> There are other places within an XSLT document where catalogs can be used, such as with the document() and doc() functions:
>
> <?xml version="1.0"?>
> <!DOCTYPE bookstore [
> <!ENTITY doc-file SYSTEM "http://www.xfront.com/catalog-test/FitnessCenter2.xml">
> ]>
> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
> version="2.0">
> ...
> <xsl:variable name="FitnessCenter" select="doc('&doc-file;')" />
As above the xml parser will replace &doc-file; by the contents of
FitnessCenter2.xml and then these contents will be interpreted as an
xpath string specifying the url of the document to be loaded.
> ...
> </xsl:stylsheet>
>
> Notice that in the doc() function I used an entity reference, rather than hardcoding a URL.
David
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]