Wenn der Standardnamespace in einem Element sich befindet, funktioniert XQuery nicht mehr.
Folgenden ist mein Testdata:
<?xml version="1.0" encoding="UTF-8" ?> <doc xmlns="http://iso.org/OTX" > <a>foo bar</a> <a>foa bar</a> </doc>
Die Abfrage ist einfach: basex:db('db')//a.
Wir brauchen Basex sehr dringend für unseren OTX-Api. Es wäre wunderbar, wenn dieser Bug schnell behoben sind.
Vielen Dank voraus.
Mit freundlichen Grüßen Truong-An Nguyen
Hey Truong-An,
<?xml version="1.0" encoding="UTF-8" ?>
<doc xmlns="http://iso.org/OTX" > <a>foo bar</a> <a>foa bar</a> </doc>
Im doc-Element wird ein Default Namespace deklariert. Dieser ist nicht nur fuer dieses Element, sonder auch fuer Knoten auf der Descendant- Achse gueltig. Der deklarierte Namespace muss somit bei der Query- Formulierung angehaengt werden (s.u.). Folgende Query sollte euer Problem loesen:
"xquery declare namespace ns="http://iso.org/OTX"; basex:db('test')//ns:a"
Meldet euch ruhig, falls weitere Probleme bestehen.
Gruesse, Lukas
kleine Fehlerkorrektur:
Der Datenbankname in meiner Query ist 'test', bei euch aber 'db'. Somit folgt korrekt:
"xquery declare namespace ns="http://iso.org/OTX"; basex:db('db')//ns:a"
Das 'xquery'-Keyword wird nur benoetigt, wenn die Query als BaseX- Command verfasst wird. Somit ergibt sich fuer euch:
"declare namespace ns="http://iso.org/OTX"; basex:db('db')//ns:a"
Jetzt sollte es stimmen - ich entschuldige mich fuer die Umstaende.
Gruesse, Lukas
basex-talk@mailman.uni-konstanz.de