Re: [basex-talk] BaseX, xinclude and xpointer

2021-02-18 Thread pascaljoubaud
Some good news,

I managed to get the include working when adding the files (either the 
minimized ones or my own files) using a command line or the basexGUI.

Unfortunately, i still have the error message when using the web interface 
(which is the only one I was using initially) and cannot figure out why.

 

Pascal

 

 

De : Christian Grün  
Envoyé : jeudi 18 février 2021 17:01
À : pascaljoub...@gmail.com
Cc : BaseX 
Objet : Re: [basex-talk] BaseX, xinclude and xpointer

 

Nevertheless, I have strange warnings :

 

Which of our distributions are you using? With the ZIP distribution, all 
libraries should be correctly added to the classpath.

 

But I guess that won't solve your xinclude issue. Maybe you can find out more 
by comparing my minimized example with your setup.

 

Cheers,

Christian

 

 


[warning] /usr/bin/basex: Unable to locate /usr/share/java/tagsoup.jar in 
/usr/share/java
[warning] /usr/bin/basex: Unable to locate /usr/share/java/xml-resolver.jar in 
/usr/share/java
[warning] /usr/bin/basex: Unable to locate /usr/share/java/jing.jar in 
/usr/share/java

Could that be the cause of my problems when adding files to the database ?

Thanks for the other answers. 

Pascal

-Message d'origine-
De : Christian Grün mailto:christian.gr...@gmail.com> > 
Envoyé : jeudi 18 février 2021 11:11
À : pascaljoub...@gmail.com  
Cc : BaseX mailto:basex-talk@mailman.uni-konstanz.de> >
Objet : Re: [basex-talk] BaseX, xinclude and xpointer

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:
http://www.w3.org/2001/XInclude";>
  


include.xml:


Query:
> basex "doc('doc.xml')"
http://www.w3.org/2001/XInclude";>
  


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   
mailto: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   > Envoyé : mercredi 17 
> février 2021 19:18 À : pascaljoub...@gmail.com 
>   Cc : BaseX 
>  

Re: [basex-talk] Nasty trap with RESTXQ content negotiation

2021-02-18 Thread Christian Grün
Hi Marco,

> If I specify an explicit %rest:consumes("*/*") in the annotations of 
> fallback(), specific() correctly intercepts the request.

That was misleading: It shouldn’t make a difference if the generic
annotation is specified or omitted. This has been fixed.

> Unfortunately at that point calling with "Content-Type: text/plain" which 
> should slip through the functions and be catched by fallback() yields instead:

Your observations (and similar ones that we came across in one of our
projects) motivated me to have another intense look at the content
negotiation code (which got fairly complex, due to all the quality
factor checks). I believe I found a solution that matches the
requirements without compromising backward compatibility. Details (for
those who are interested) can be found in [1].

A new snapshot is available [2], I would be happy if you could test it for us.

Ciao,
Christian

[1] 
https://github.com/BaseXdb/basex/commit/bde52a5ef88e327a7e3f6ad35036cec92767b0be
[2] https://files.basex.org/releases/latest/



> declare
>   %rest:path("test")
>   %rest:POST("{$body}")
>   %rest:consumes("text/csv", "application/xml", "application/json")
>   %output:method("text")
> function s:specific($body as document-node()) {
>"Treated as document"
> };
>
> declare
>   %rest:path("test")
>   %rest:POST("{$body}")
>   %output:method("text")
> function s:fallback($body as item()) {
>"Treated as binary"
> };


Re: [basex-talk] BaseX, xinclude and xpointer

2021-02-18 Thread Christian Grün
>
> Nevertheless, I have strange warnings :
>

Which of our distributions are you using? With the ZIP distribution, all
libraries should be correctly added to the classpath.

But I guess that won't solve your xinclude issue. Maybe you can find out
more by comparing my minimized example with your setup.

Cheers,
Christian



> [warning] /usr/bin/basex: Unable to locate /usr/share/java/tagsoup.jar in
> /usr/share/java
> [warning] /usr/bin/basex: Unable to locate
> /usr/share/java/xml-resolver.jar in /usr/share/java
> [warning] /usr/bin/basex: Unable to locate /usr/share/java/jing.jar in
> /usr/share/java
>
> Could that be the cause of my problems when adding files to the database ?
>
> Thanks for the other answers.
>
> Pascal
>
> -Message d'origine-
> De : Christian Grün 
> Envoyé : jeudi 18 février 2021 11:11
> À : pascaljoub...@gmail.com
> Cc : BaseX 
> Objet : Re: [basex-talk] BaseX, xinclude and xpointer
>
> 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:
> http://www.w3.org/2001/XInclude";>
>   
> 
>
> include.xml:
> 
>
> Query:
> > basex "doc('doc.xml')"
> http://www.w3.org/2001/XInclude";>
>   
> 
>
> 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  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  Envoyé : mercredi 17
> > février 2021 19:18 À : pascaljoub...@gmail.com Cc : BaseX
> > 
> > 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 th

Re: [basex-talk] BaseX, xinclude and xpointer

2021-02-18 Thread pascaljoubaud
Thanks Christian,

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

Well this one works. And I've tried the same command with my files basex 
"doc('EV.xml')" and the inclusion works too.
Nevertheless, I have strange warnings :

[warning] /usr/bin/basex: Unable to locate /usr/share/java/tagsoup.jar in 
/usr/share/java
[warning] /usr/bin/basex: Unable to locate /usr/share/java/xml-resolver.jar in 
/usr/share/java
[warning] /usr/bin/basex: Unable to locate /usr/share/java/jing.jar in 
/usr/share/java

Could that be the cause of my problems when adding files to the database ?

Thanks for the other answers. 

Pascal

-Message d'origine-
De : Christian Grün  
Envoyé : jeudi 18 février 2021 11:11
À : pascaljoub...@gmail.com
Cc : BaseX 
Objet : Re: [basex-talk] BaseX, xinclude and xpointer

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:
http://www.w3.org/2001/XInclude";>
  


include.xml:


Query:
> basex "doc('doc.xml')"
http://www.w3.org/2001/XInclude";>
  


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  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  Envoyé : mercredi 17 
> février 2021 19:18 À : pascaljoub...@gmail.com Cc : BaseX 
> 
> 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.
> h

[basex-talk] Nasty trap with RESTXQ content negotiation

2021-02-18 Thread Marco Lettere

Dear all,

First of all, I hope everything is fine and all of you are staying healthy!

When I read again the docs about Content Negotiation in RestXQ I noticed 
the sentence:


Functions can be restricted to specific Media Types. The default type 
is|*/*|.


So I wrote the two RestXQ signaures [1] with the expectation of 
*fallback()* behaving as a catch-all for mime-types not declared in 
*specific(**)*.


At that point, when calling the service with something stating 
"Content-Type: application/xml" BaseX yields the following error:


Stopped at /:
[basex:restxq] Several functions found for path "test":
- ccp_ui:test [text/plain]
- ccp_ui:test2 [text/plain]

If I specify an explicit %rest:consumes("*/*") in the annotations of 
fallback(), specific() correctly intercepts the request.


Unfortunately at that point calling with "Content-Type: text/plain" 
which should slip through the functions and be catched by fallback() 
yields instead:


No function found that matches the request.

So there is no combination, to my knowledge, to implement my use-case 
correctly ... besides handling mime-types explicitly in code (which is 
rather uncomfortable).


I'm using BaseX 9.4.5 at the moment.

Do you have any hint on this?

Thank you very much.

Marco.

[1]

declare
  %rest:path("test")
  %rest:POST("{$body}")
  %rest:consumes("text/csv", "application/xml", "application/json")
  %output:method("text")
function s:specific($body as document-node()) {
   "Treated as document"
};

declare
  %rest:path("test")
  %rest:POST("{$body}")
  %output:method("text")
function s:fallback($body as item()) {
   "Treated as binary"
};



Re: [basex-talk] BaseX, xinclude and xpointer

2021-02-18 Thread Christian Grün
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:
http://www.w3.org/2001/XInclude";>
  


include.xml:


Query:
> basex "doc('doc.xml')"
http://www.w3.org/2001/XInclude";>
  


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  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 
> Envoyé : mercredi 17 février 2021 19:18
> À : pascaljoub...@gmail.com
> Cc : BaseX 
> 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 
> 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.
>
>