Hi

A bit laborious to recreate but .. here goes:

basexclient ... insert nodes then run:

> xquery /
<a>
  <b/>
  <d>
    <e test="here"/>
  </d>
</a>
Query executed in 0.2 ms.

No problem - I see what I expect. Then run this:


> xquery insert node <c>{http:send-request( <http method='get' 
> status-only='false'/>, "http://internet.org.uk"; ) }</c> into /a

Query executed in 502.05 ms.
> xquery /
<a>
  <b/>
  <d>
    <e test="here"/>
  </d>
  <c>
    <http:response xmlns:http="http://expath.org/ns/http-client"; status="200" 
message="OK">
...
... SNIPPED THE MIDDLE BODY OUT AS IT'S THE HTML RETURNED FROM THE SITE
...
  </c>
</a>
Query executed in 1.7 ms.


> xquery insert node <f/> into /a/d                  


Query executed in 1.34 ms.
> xquery /
<a>
  <b/>
  <d>
    <e test="here"/>
    <f/>
  </d>
  <c>
    <http:response xmlns:http="http://expath.org/ns/http-client"; status="200" 
message="OK">
      <http:header name="Expires" value="Mon, 26 Jul 1997 05:00:00 GMT"/>
      <http:header name="Last-Modified" value="Mon, 02 Apr 2012 15:47:39 GMT"/>
      <http:header name="Set-Cookie" value="mosvisitor=1"/>
...
...
...
  </c>
</a>
Query executed in 1.72 ms.



> xquery delete node /a/d
Query executed in 1.54 ms.

> xquery insert node <d/> into /a

Query executed in 1.56 ms.
> xquery insert node <h test='hello'><i/></h> into /a/d

Query executed in 1.76 ms.
> xquery /
<a>
  <b/>
  <c>
    <http:response xmlns:http="http://expath.org/ns/http-client"; status="200" 
message="OK">
      <http:header name="Expires" value="Mon, 26 Jul 1997 05:00:00 GMT"/>
...
...
...
  </c>
  <d>
    <h xmlns="http://www.w3.org/1999/xhtml"; test="hello">
      <i/>
    </h>
  </d>
</a>
Query executed in 1.71 ms.
> 



---
So, item 'h' suddenly gains a namespace.

Sorry it's a bit convoluted to recreate, but it gets the results I see. 

Cheers
Mike




On 2 Apr 2012, at 16:18, Lukas Kircher wrote:

> Ok, I see the problem, unfortunately I still can't replicate the
> issue with our current repository version. I started with a
> document like this:
> 
> <a> <b/> </a>
> 
> and used the following insert statements:
> 
> insert node <c xmlns='newns'/> into /a
> 
> and afterwards ...
> 
> insert node <d/> into /a
> 
> 
> Still, there's no namespace linked to <d/>. Can you replicate
> the issue with this example or change it in a way that it
> replicates it?
> 
> Regards,
> Lukas
> 
> 
> 
> 
> On Mon, Apr 2, 2012 at 5:10 PM, Mike Hawkes <mikehaw...@me.com> wrote:
> Yep - this definitely causes problems. Insert a node that includes a 
> namespace and all subsequent nodes end up with a namespace inserted. So ... I 
> think this presents a bug:
> 
> <root>
>     <nodes without namespace/>
>     <new nodes work well/>
> </root>
> 
> vs.
> 
> <root>
>     <nodes without namespace/>
>     <node with namespace/>
>     <new nodes automatically get spurious namespace/>
> </root>
> 
> 
> Hope that helps - not sure how best to fix or work around this at the moment 
> though.
> 
> Cheers
> Mike
> 
> On 2 Apr 2012, at 15:23, Mike Hawkes wrote:
> 
>> Hi Lukas/Christian
>> 
>> It's the built-in one as far as I'm aware - I haven't done anything special 
>> to add or remove any parsers. But that's sent me down a path where I can get 
>> it reliably.
>> 
>> It appears that it's coming from another query that I run to check the state 
>> of a web-site. As soon as I run the following query, BaseX inserts the 
>> namespace for every inserted node thereafter:
>> 
>> insert node 
>>     <webpage url="http://internet.org.uk"; name="primaryDomain">{
>>         http:send-request( 
>>             <http:request 
>>                 method='get' 
>>                 status-only='false'/>, 
>>         "http://internet.org.uk"; )}
>>     </webpage>
>> into doc($DB)/root/webpages
>> 
>> As soon as I have any node after the above query has run, BaseX inserts the 
>> namespace. Otherwise it doesn't. If I delete all the nodes within the 
>> <webpage> tags, things return to normal again.
>> 
>> Is there an easy way to do the above without adding any namesakes (I don't 
>> actually want to include them from the web query either)? This should solve 
>> the problem.
>> 
>> Cheers
>> Mike
>> 
>> On 2 Apr 2012, at 15:02, Lukas Kircher wrote:
>> 
>>> Hi Mike,
>>> 
>>> Leo just came up with another idea: Which kind of parser are
>>> you using in BaseX?
>>> 
>>> If you use the HTML parser for parsing XML, the strange behaviour
>>> you came across might indeed be expected ... If you're not sure
>>> which parser you are using, just take a look at our documentation [1].
>>> 
>>> Regards,
>>> Lukas
>>> 
>>> [1] http://docs.basex.org/wiki/Parser#XML_Parsers
>>> 
>>> 
>>> 
>>> On Mon, Apr 2, 2012 at 3:58 PM, Mike Hawkes <mikehaw...@me.com> wrote:
>>> It's mad - I don't add a namespace, the source document is a text file 
>>> without a namespace - and the log shows that I don't add it ... but it 
>>> appears. No idea why.
>>> 
>>> MIke
>>> 
>>> On 2 Apr 2012, at 14:52, Christian Grün wrote:
>>> 
>>> > So it seems that the once added namespace is propagated to other
>>> > documents? I believe there must be at least one document with the
>>> > mentioned namespace in your database; otherwise I can't explain where
>>> > it should come from (afaik, the string "http://www.w3.org/1999/xhtml";
>>> > isn't hard-coded anywhere in the project)...
>>> >
>>> > Christian
>>> > ___________________________________
>>> >
>>> > On Mon, Apr 2, 2012 at 3:40 PM, Mike Hawkes <mikehaw...@me.com> wrote:
>>> >> The database contains
>>> >>
>>> >> <root>
>>> >>    <auditlog>
>>> >>
>>> >> ... elements should end up in here ...
>>> >>
>>> >>    </auditlog>
>>> >> </root>
>>> >>
>>> >>
>>> >> The initial XML file contains the initial nodes with which to populate 
>>> >> the XML database (root plus numerous other nodes). The PHP code inserts 
>>> >> additional nodes as it runs. For every node I add, I create an audit 
>>> >> entry to allow me to determine who and how the database built over time.
>>> >>
>>> >> initialdb.xml contains, therefore:
>>> >> <root>
>>> >>    <auditlog/>
>>> >> </root>
>>> >>
>>> >> You're right - ignore 'test'  - I meant WYP in the database - as in
>>> >>
>>> >> drop database WYP
>>> >> create database WYP test/initialdb.xml
>>> >>
>>> >> Apologies for any confusion caused.
>>> >>
>>> >> It's really weird - I can't get this to fail consistently - but when it 
>>> >> starts inserting the namespace attribute, it then continues to do so.
>>> >>
>>> >> Cheers
>>> >> Mike
>>> >>
>>> >> On 2 Apr 2012, at 14:30, Christian Grün wrote:
>>> >>
>>> >>> Sorry, I still got some questions..
>>> >>>
>>> >>>> drop database test
>>> >>>> create database test /initialdb.xml
>>> >>>
>>> >>> The database you're creating seems to be called "test"; what's 
>>> >>> "initialdb.xml"?
>>> >>>
>>> >>>> 14:00:00.710    [127.0.0.1:49788]       QUERY(4)        declare 
>>> >>>> variable $DB external; insert node <audit 
>>> >>>> QID='80C18E9A-46DD-4B3E-89E9-967DAFD79A0B' UID='i1' 
>>> >>>> guid='0EEDDB47-726E-49F8-B1EF-0F73ED848969' 
>>> >>>> sessionID='48090b7f0e3a62a42a0457a3e88301ca' mode='active' 
>>> >>>> date='2012-04-02T13:00:00+00:00'/> into doc($DB)/root/auditlog     OK  
>>> >>>>     0.09 ms
>>> >>>> 14:00:00.710    [127.0.0.1:49788]       QUERY(4)        OK      0.05 ms
>>> >>>> 14:00:00.710    [127.0.0.1:49788]       BIND(4) DB      WYP            
>>> >>>>  OK      0.05 ms
>>> >>>
>>> >>> The log info implies you're having "root" and "auditlog" nodes, and
>>> >>> the addressed database is called "WYP", is that right? Could you pass
>>> >>> us on the missing snippets?
>>> >>>
>>> >>> Christian
>>> >>>
>>> >>>
>>> >>>
>>> >>>> On 2 Apr 2012, at 14:11, Christian Grün wrote:
>>> >>>>
>>> >>>>> Hi Mike,
>>> >>>>>
>>> >>>>> thanks for your report. It would be great if you could provide us with
>>> >>>>> a small example that allows us to reproduce the issue (an export of
>>> >>>>> your original database with the namespace (which is being added to the
>>> >>>>> new node) may suffice).
>>> >>>>>
>>> >>>>> Best,
>>> >>>>> Christian
>>> >>>>> ____________________________
>>> >>>>>
>>> >>>>> On Mon, Apr 2, 2012 at 2:44 PM, Mike Hawkes <mikehaw...@me.com> wrote:
>>> >>>>>> Hi
>>> >>>>>>
>>> >>>>>> I have a weird problem ... I'm running a query via the PHP interface 
>>> >>>>>> and run the following query:
>>> >>>>>>
>>> >>>>>> declare variable $DB external;
>>> >>>>>>
>>> >>>>>> insert node
>>> >>>>>>    <audit QID='C54B14ED-C748-4DF0-87F2-91F505BE207B'
>>> >>>>>>                UID='i1'
>>> >>>>>>                guid='CC9D4D2B-B380-494B-B0F6-4D72471557B0'
>>> >>>>>>                sessionID='48090b7f0e3a62a42a0457a3e88301ca'
>>> >>>>>>                mode='active'
>>> >>>>>>                date='2012-04-02T12:21:05+00:00'/>
>>> >>>>>> into doc($DB)/root/auditlog
>>> >>>>>>
>>> >>>>>> --
>>> >>>>>> BaseX log shows that it gets the query as-is.
>>> >>>>>>
>>> >>>>>> When I look at the data within the database by running the XQuery
>>> >>>>>>
>>> >>>>>> /root/auditlog
>>> >>>>>>
>>> >>>>>> I find that BaseX has inserted a namespace attribute as follows:
>>> >>>>>>
>>> >>>>>> <audit xmlns="http://www.w3.org/1999/xhtml";
>>> >>>>>>    QID="C54B14ED-C748-4DF0-87F2-91F505BE207B"
>>> >>>>>>    UID="i1" guid="CC9D4D2B-B380-494B-B0F6-4D72471557B0" 
>>> >>>>>> sessionID="48090b7f0e3a62a42a0457a3e88301ca" mode="active" 
>>> >>>>>> date="2012-04-02T12:21:05+00:00"/>
>>> >>>>>>
>>> >>>>>> How do I stop this occurring? It only does it on the audit 
>>> >>>>>> components, not on anything else inserted by the PHP script. So, if 
>>> >>>>>> I run two insert node queries, the first will run normally, the 
>>> >>>>>> audit update causes the xmlns attribute to appear, effectively 
>>> >>>>>> putting it in a different namespace to the other data inserted  by 
>>> >>>>>> the PHP.
>>> >>>>>>
>>> >>>>>> The PHP script is as follows:
>>> >>>>>>
>>> >>>>>> $audit = "declare variable \$DB external; " .
>>> >>>>>>        "insert node <audit QID='$queryID' UID='$userID' " .
>>> >>>>>>        "guid='$guid' sessionID='" . session_id() . "' " .
>>> >>>>>>        "mode='active' " .
>>> >>>>>>        "date='$dateTime'/> into doc(\$DB)/root/auditlog";
>>> >>>>>>
>>> >>>>>> $query = $session->query( $audit );
>>> >>>>>> $query->bind( 'DB', $DB);
>>> >>>>>> $query->bind( 'SYSDATA', $SYSDATA );
>>> >>>>>> $query->execute();
>>> >>>>>> $query->close();
>>> >>>>>>
>>> >>>>>>
>>> >>>>>> Thanks in advance for any suggestions.
>>> >>>>>>
>>> >>>>>> Mike
>>> >>>>>> _______________________________________________
>>> >>>>>> BaseX-Talk mailing list
>>> >>>>>> BaseX-Talk@mailman.uni-konstanz.de
>>> >>>>>> https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
>>> >>>>
>>> >>
>>> 
>>> _______________________________________________
>>> BaseX-Talk mailing list
>>> BaseX-Talk@mailman.uni-konstanz.de
>>> https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
>>> 
>> 
>> _______________________________________________
>> BaseX-Talk mailing list
>> BaseX-Talk@mailman.uni-konstanz.de
>> https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
> 
> 

_______________________________________________
BaseX-Talk mailing list
BaseX-Talk@mailman.uni-konstanz.de
https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk

Reply via email to