Hello,
I've something strange, and don't know if I do not understand
OASIS catalog specification, or if there is a bug in Apache
Resolver...
I have this catalog :
<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
<group xml:base="cp:/catalog.xml">
<rewriteURI uriStartString="foo:" rewritePrefix="cp:"/>
<rewriteSystem systemIdStartString="foo:" rewritePrefix="cp:"/>
</group>
<group xml:base="file:/home/fake/catalog.xml">
<rewriteURI uriStartString="bar:" rewritePrefix="cp:"/>
<rewriteSystem systemIdStartString="bar:" rewritePrefix="cp:"/>
</group>
</catalog>
Dependending on I have or not support for cp:
protocol (first group xml:base), the first xml:base
(cp:/catalog.xml) is rewritten fo file:cp:/catalog.xml. It is
normal ? I can imagine that new URI(xx).isAbsolute() is used to
know if it should be absolutized (?). That's strange, but, Ok, I
can accept this...
Then, if cp: support is enabled, if I try to
resolve bar:/schemaBar/bar.rnc, it is resolved as
cp:/schemaBar/bar.rnc, but if I try to resolve
foe:/schemaFoe/foe.rnc, it is resolved as null.
My question is : with rewriteSystem /
rewriteURI, does the xml:base may change the resolution ? In
specification, xml:base is not mentionned in
https://www.oasis-open.org/committees/entity/spec-2001-08-06.html#s.rewrite,
but it is said "
If the value of the rewritePrefix attribute is
relative, it must be made absolute with respect to the base URI
currently in effect." in
https://www.oasis-open.org/committees/entity/spec-2001-08-06.html#s.rewritesystem
My thought was that xml:base was used only to
absolutized relatives URI, and not absolute ones.
Then, with Apache resolver, if I set debug output ON, I get this
while loading catalog :
Cannot find CatalogManager.properties
Parse catalog: ./xcatalog
Loading catalog: ./xcatalog
Default BASE: file:////home/ext-cmarchand/devel/apache/xml-commons/xcatalog
Catalog does not exist: file:////home/ext-cmarchand/devel/apache/xml-commons/xcatalog
Parse catalog: ../../github/jing-trang/cmarchand_test/catalog-bug.xml
Loading catalog: ../../github/jing-trang/cmarchand_test/catalog-bug.xml
Default BASE: file:////home/ext-cmarchand/devel/github/jing-trang/cmarchand_test/catalog-bug.xml
xml:base: cp:/catalog.xml
BASE CUR: file:////home/ext-cmarchand/devel/github/jing-trang/cmarchand_test/catalog-bug.xml
BASE STR: cp:/catalog.xml
BASE NEW: cp:/catalog.xml
rewriteURI: foo:
cp:
REWRITE_URI: foo:
cp:/catalog.xml
rewriteSystem: foo:
cp:
REWRITE_SYSTEM: foo:
cp:/catalog.xml
(reset) xml:base: file:////home/ext-cmarchand/devel/github/jing-trang/cmarchand_test/catalog-bug.xml
BASE CUR: cp:/catalog.xml
BASE STR: file:////home/ext-cmarchand/devel/github/jing-trang/cmarchand_test/catalog-bug.xml
BASE NEW: file:////home/ext-cmarchand/devel/github/jing-trang/cmarchand_test/catalog-bug.xml
xml:base: file:/home/fake/catalog.xml
BASE CUR: file:////home/ext-cmarchand/devel/github/jing-trang/cmarchand_test/catalog-bug.xml
BASE STR: file:/home/fake/catalog.xml
BASE NEW: file:/home/fake/catalog.xml
rewriteURI: bar:
cp:
REWRITE_URI: bar:
cp:
rewriteSystem: bar:
cp:
REWRITE_SYSTEM: bar:
cp:
(reset) xml:base: file:////home/ext-cmarchand/devel/github/jing-trang/cmarchand_test/catalog-bug.xml
BASE CUR: file:/home/fake/catalog.xml
BASE STR: file:////home/ext-cmarchand/devel/github/jing-trang/cmarchand_test/catalog-bug.xml
BASE NEW: file:////home/ext-cmarchand/devel/github/jing-trang/cmarchand_test/catalog-bug.xml
We can see the REWRITE_SYSTEM are not processed
the same with different xml:base.
I will enjoy any help to locate the problem (my
code, my catalog, or Apache Resolver)...
Thanks in advance,
Christophe