Hi Pascal,

> My problem is that the referenced document IS NOT included at all if i remove 
> the xpointer attribute (I have the same error message). As it works on your 
> side, I guess my baseX installation is not good. I think I'll have a look at 
> that.

Here’s a minimized test case on command line. Do you still get the
same error for that one?

doc.xml:
<main xmlns:xi="http://www.w3.org/2001/XInclude";>
  <xi:include href="include.xml"/>
</main>

include.xml:
<include/>

Query:
> basex "doc('doc.xml')"
<main xmlns:xi="http://www.w3.org/2001/XInclude";>
  <included xml:base="include.xml"/>
</main>

Ideally, the include should work no matter if fn:doc is called or if a
new database is created (at least with OpenJDK).

> One more question : I understand that baseX "resolves" the xinclude when 
> adding the file into the database. But later, if I change the source files 
> (the ones I call from the main one), will the main file be changed 
> dynamically ? or do I need to reload this main file to baseX to perform the 
> xinclude operations again ?

You’ll need to reload the file. The references will be fully resolved,
and the file will get embedded in the mail file.

> If answer 2, I guess I could just resolve the xinclude before loading into 
> baseX (in a dedicated xsl) and load the result in baseX, would it make a 
> difference ?

Absolutely. Or you can do everything in XQuery. Here’s one
quick’n’dirty solution to achieve that:

declare namespace xi = 'http://www.w3.org/2001/XInclude';
declare option db:xinclude 'false';

let $doc := doc('EV.xml') update {
  for $inc in .//xi:include
  let $id := replace($inc/@xpointer, '.*\(|\)', '')
  let $included-doc := doc($inc/@href)
  return replace node $inc with id($id, $included-doc)
}
return (
  $doc
  (: write to database...
  db:create('db', $doc, 'doc.xml') :)
  (: write back to file...
  file:write('doc.xml', $doc) :)
)

If you want to work with documents in the database, the doc() calls
can e.g. be replaced with db:open('db', 'doc.xml') calls.

Hope this helps,
Christian



On 2/17/21, pascaljoub...@gmail.com <pascaljoub...@gmail.com> wrote:
> Hi Christian,
> Yes ideally I was hoping for the xpointer to work but I read in previous
> posts that instead of a named element [element(EP15)], i could use
> descendent path notation [element(1/2/1/1)] and that it should work. That's
> not ideal but in my case, I think it will work  (all the files are
> structured in a very similar way).
> https://mailman.uni-konstanz.de/pipermail/basex-talk/2015-April/008607.html
> My problem is that the referenced document IS NOT included at all if i
> remove the xpointer attribute (I have the same error message). As it works
> on your side, I guess my baseX installation is not good. I think I'll have a
> look at that.
>
> One more question : I understand that baseX "resolves" the xinclude when
> adding the file into the database. But later, if I change the source files
> (the ones I call from the main one), will the main file be changed
> dynamically ? or do I need to reload this main file to baseX to perform the
> xinclude operations again ?
> If answer 2, I guess I could just resolve the xinclude before loading into
> baseX (in a dedicated xsl) and load the result in baseX, would it make a
> difference ?
>
> Thanks
> Pascal
>
> -----Message d'origine-----
> De : Christian Grün <christian.gr...@gmail.com>
> Envoyé : mercredi 17 février 2021 19:18
> À : pascaljoub...@gmail.com
> Cc : BaseX <basex-talk@mailman.uni-konstanz.de>
> Objet : Re: [basex-talk] BaseX, xinclude and xpointer
>
> Hi Pascal,
>
> Thanks for the sample files. The error you reported is returned by Java’s
> default XML parser (the one from Xerces), so I guess we can’t resolve that
> easily unless the XPointer support is improved in a future version of Java.
> As you may have seen, the referenced document will be fully included if you
> remove the xpointer attribute, but that’s probably not what you need.
>
> Out of interest, I checked if Saxon can handle XPointer attributes. As it
> relies on the default parser as well, it returns the same error message as
> BaseX.
>
> I remember there have been previous posts on that issue; e.g here [1].
>
> Sorry for that!
> Christian
>
> [1]
> https://mailman.uni-konstanz.de/pipermail/basex-talk/2015-June/009021.html
>
>
>
> On Wed, Feb 17, 2021 at 10:03 AM Christian Grün <christian.gr...@gmail.com>
> wrote:
>>
>> > When I add the file into BaseX I now have the following message when
>> > adding the main file into BaseX.
>> >
>> > > An include with href 'EP15.xml'failed, and no fallback element was
>> > > found.
>>
>> Feel free to send us/me the files in question, I can have a look at that.
>
>

Reply via email to