Bugs von Standardnamespace!
Tuesday, 10 August 2010 · 10 messages · last reply 13 Aug 2010
N
ngtruongan10 Aug 2010 10:06 #
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
LK
Lukas Kircher10 Aug 2010 10:28 #
Hey Truong-An,
Quoted text · ngtruongan · 5 lines
> <?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
LK
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"LK
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
LK
Lukas Kircher10 Aug 2010 11:27 #
Quoted text · Lukas Kircher · 9 lines
> Ich verwende die CSharp API (die von JKVM konvertierte Java API), um > auf die Basex-DB zuzugreifen. Zwei folgende Antwort habe ich: > > - Muss ich immer den Befehl "declare namespace > ns="http://iso.org/OTX"" bei jedem Query wiederholen, oder kann ich > einmal beim Anlegen der neuen Datenbank festlegen? > > - Gibt es die Möglichkeit, die XQuery-Abfragen im Programm > vorzukompilieren? Die Kompilierung kostet Zeit.
In XQuery gibt es das Konzept einer Prepared Expression. Unter unseren Examples im Repository findest du Beispiele dazu, ebenso auf unserer Webseite [1] .
Ich hoffe das hilft dir - melde dich ansonsten einfach nochmal
Gruesse,
Lukas
[1] http://www.inf.uni-konstanz.de/dbis/basex/code/XQJQuery
LK
Lukas Kircher10 Aug 2010 15:33 #
Ich schicke deine Mail mal noch als CC an die Mailing Liste.
Quoted text · Lukas Kircher · 2 lines
> Wie kann ich einstellen, damit zwei XML-Dateien mit dem gleichen Namen > aber mit verschiedenen Pfäden in einer Datenbank gespeichert werden?
Das funktioniert mit Hilfe von Collections. Du kannst folgendermassen Dokumente zu einer Collection hinzufuegen:
1. Falls alle Dokumente in einem Verzeichnis liegen kannst du aus dem obersten Ordner per Create Command eine Datenbank erstellen [1].
2. Zu einer bestehenden Collection kannst du ein Dokument hinzufuegen per XQuery Update, z.B.:
insert node doc(<uri>) into doc(<collection name>)
... oder ueber den BaseX Command Add [2].
Dokumente mit gleichem Namen aber unterschiedlichem Pfad kannst du mit Hilfe von document-uri() auseinanderhalten - siehe Beispiel:
for $i in collection() return document-uri($i)Ich hoffe dir ist damit geholfen. Ich leite die Mail ebenfalls an die Liste weiter, damit mich andere korrigieren oder etwas hinzufuegen koennen.
Gruesse,
Lukas
[1] http://www.inf.uni-konstanz.de/dbis/basex/commands#create [2] http://www.inf.uni-konstanz.de/dbis/basex/commands#add
TN
Truong An Nguyen10 Aug 2010 16:03 #
Hallo Lukas,
es funktioniert leider nicht. Hab die folgenden Befehle probiert:
create coll test1
add C:\Users\BeEo\Desktop\Root\Package1\ODFProject3.xml
add C:\Users\BeEo\Desktop\Root\Package\ODFProject2.xml
Die Ergebnisse der Ausführung es Befehls "for $i in collection(test1)
return document-uri($i)" sind:file:/D:/Temp/ODFProject2.xml file:/D:/Temp/ODFProject3.xml
Die Pfad-Informationen gehen verloren.
Gruß
An
2010/8/10 Lukas Kircher <lukaskircher1 at googlemail.com>:
Quoted text · Lukas Kircher · 28 lines
> Ich schicke deine Mail mal noch als CC an die Mailing Liste. > > Wie kann ich einstellen, damit zwei XML-Dateien mit dem gleichen Namen > aber mit verschiedenen Pfäden in einer Datenbank gespeichert werden? > > Das funktioniert mit Hilfe von Collections. Du kannst folgendermassen > Dokumente zu einer Collection hinzufuegen: > 1. Falls alle Dokumente in einem Verzeichnis liegen kannst du aus dem > obersten Ordner per Create Command eine Datenbank erstellen [1]. > 2. Zu einer bestehenden Collection kannst du ein Dokument hinzufuegen per > XQuery Update, z.B.: > insert node doc(<uri>) into doc(<collection name>) > ... oder ueber den BaseX Command Add [2]. > > Dokumente mit gleichem Namen aber unterschiedlichem Pfad kannst du mit Hilfe > von document-uri() auseinanderhalten - siehe Beispiel: > for $i in collection() return document-uri($i) > > Ich hoffe dir ist damit geholfen. Ich leite die Mail ebenfalls an die Liste > weiter, damit mich andere korrigieren oder etwas hinzufuegen koennen. > > Gruesse, > Lukas > > [1] http://www.inf.uni-konstanz.de/dbis/basex/commands#create > [2] http://www.inf.uni-konstanz.de/dbis/basex/commands#add > >
MS
Michael Seiferle11 Aug 2010 10:53 #
Hallo An,
von der Logik her ist dein Ansatz richtig, allerdings werden einzelne Dokumente immer im Root der Datenbank eingefügt. Wenn du eine Ordnerhierarchie hinzufügst wird der relative Pfad der Dokumente zur Wurzel der Hierarchie gespeichert: Ein:
Quoted text · Truong An Nguyen · 1 line
>> add C:\Users\BeEo\Desktop\Root
Resultiert in: db(test1) mit den Dokumenten:
Package1/ODFProject3.xml
Package/ODFProject2.xml
Alternativ kannst du beim Add Kommando ein zusätzliches Argument
TO:Quoted text · Truong An Nguyen · 1 line
> ADD (AS [name]) (TO [target]) [input]
angeben:
Quoted text · Truong An Nguyen · 1 line
> add TO Package1/abc C:\Users\BeEo\Desktop\Root\Package1\ODFProject3.xml
Somit kannst du die Pfadhierarchie entweder selbst bestimmen oder relativ zum Rootpfad der eingefügten Ordnerstruktur erstellen lassen.
Zum Anfragen von Dokumenten in Collections könnte vielleicht folgender Mailinglistenpost (+ follow ups) noch interessant sein: https://mailman.uni-konstanz.de/pipermail/basex-talk/2010-July/000495.html Ich hoffe ich konnte helfen, bei weiteren Fragen einfach melden.
Freundliche Grüße,
Michael
Quoted text · Truong An Nguyen · 53 lines
Am 10.08.2010 um 16:03 schrieb Truong An Nguyen: > Hallo Lukas, > > es funktioniert leider nicht. Hab die folgenden Befehle probiert: > > create coll test1 > add C:\Users\BeEo\Desktop\Root\Package1\ODFProject3.xml > add C:\Users\BeEo\Desktop\Root\Package\ODFProject2.xml > > Die Ergebnisse der Ausführung es Befehls "for $i in collection(test1) > return document-uri($i)" sind: > > file:/D:/Temp/ODFProject2.xml file:/D:/Temp/ODFProject3.xml > > Die Pfad-Informationen gehen verloren. > > Gruß > An > > > 2010/8/10 Lukas Kircher <lukaskircher1 at googlemail.com>: >> Ich schicke deine Mail mal noch als CC an die Mailing Liste. >> >> Wie kann ich einstellen, damit zwei XML-Dateien mit dem gleichen Namen >> aber mit verschiedenen Pfäden in einer Datenbank gespeichert werden? >> >> Das funktioniert mit Hilfe von Collections. Du kannst folgendermassen >> Dokumente zu einer Collection hinzufuegen: >> 1. Falls alle Dokumente in einem Verzeichnis liegen kannst du aus dem >> obersten Ordner per Create Command eine Datenbank erstellen [1]. >> 2. Zu einer bestehenden Collection kannst du ein Dokument hinzufuegen per >> XQuery Update, z.B.: >> insert node doc(<uri>) into doc(<collection name>) >> ... oder ueber den BaseX Command Add [2]. >> >> Dokumente mit gleichem Namen aber unterschiedlichem Pfad kannst du mit Hilfe >> von document-uri() auseinanderhalten - siehe Beispiel: >> for $i in collection() return document-uri($i) >> >> Ich hoffe dir ist damit geholfen. Ich leite die Mail ebenfalls an die Liste >> weiter, damit mich andere korrigieren oder etwas hinzufuegen koennen. >> >> Gruesse, >> Lukas >> >> [1] http://www.inf.uni-konstanz.de/dbis/basex/commands#create >> [2] http://www.inf.uni-konstanz.de/dbis/basex/commands#add >> >> > _______________________________________________ > BaseX-Talk mailing list > BaseX-Talk at mailman.uni-konstanz.de > https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
TN
Truong An Nguyen13 Aug 2010 13:45 #
Hallo,
die Basex Version 6.1 hat diese Feature nicht. Welche Version soll ich verwenden?
Vielen Dank für eure Bemühungen.
Gruß
An
2010/8/11 Michael Seiferle <michael.seiferle at uni-konstanz.de>:
Quoted text · Michael Seiferle · 98 lines
> Hallo An, > von der Logik her ist dein Ansatz richtig, allerdings werden einzelne > Dokumente immer im Root der Datenbank eingefügt. > Wenn du eine Ordnerhierarchie hinzufügst wird der relative Pfad der > Dokumente zur Wurzel der Hierarchie gespeichert: > Ein: > > add C:\Users\BeEo\Desktop\Root > > Resultiert in: db(test1) mit den Dokumenten: > Package1/ODFProject3.xml > Package/ODFProject2.xml > Alternativ kannst du beim Add Kommando ein zusätzliches Argument `TO`: > > ADD (AS [name]) (TO [target]) [input] > > angeben: > > add TO Package1/abc C:\Users\BeEo\Desktop\Root\Package1\ODFProject3.xml > > Somit kannst du die Pfadhierarchie entweder selbst bestimmen oder relativ > zum Rootpfad der eingefügten Ordnerstruktur erstellen lassen. > Zum Anfragen von Dokumenten in Collections könnte vielleicht folgender > Mailinglistenpost (+ follow ups) noch interessant sein: > https://mailman.uni-konstanz.de/pipermail/basex-talk/2010-July/000495.html > Ich hoffe ich konnte helfen, bei weiteren Fragen einfach melden. > Freundliche Grüße, > Michael > Am 10.08.2010 um 16:03 schrieb Truong An Nguyen: > > Hallo Lukas, > > es funktioniert leider nicht. Hab die folgenden Befehle probiert: > > create coll test1 > add C:\Users\BeEo\Desktop\Root\Package1\ODFProject3.xml > add C:\Users\BeEo\Desktop\Root\Package\ODFProject2.xml > > Die Ergebnisse der Ausführung es Befehls "for $i in collection(test1) > return document-uri($i)" sind: > > file:/D:/Temp/ODFProject2.xml file:/D:/Temp/ODFProject3.xml > > Die Pfad-Informationen gehen verloren. > > Gruß > An > > > 2010/8/10 Lukas Kircher <lukaskircher1 at googlemail.com>: > > Ich schicke deine Mail mal noch als CC an die Mailing Liste. > > Wie kann ich einstellen, damit zwei XML-Dateien mit dem gleichen Namen > > aber mit verschiedenen Pfäden in einer Datenbank gespeichert werden? > > Das funktioniert mit Hilfe von Collections. Du kannst folgendermassen > > Dokumente zu einer Collection hinzufuegen: > > 1. Falls alle Dokumente in einem Verzeichnis liegen kannst du aus dem > > obersten Ordner per Create Command eine Datenbank erstellen [1]. > > 2. Zu einer bestehenden Collection kannst du ein Dokument hinzufuegen per > > XQuery Update, z.B.: > > insert node doc(<uri>) into doc(<collection name>) > > ... oder ueber den BaseX Command Add [2]. > > Dokumente mit gleichem Namen aber unterschiedlichem Pfad kannst du mit Hilfe > > von document-uri() auseinanderhalten - siehe Beispiel: > > for $i in collection() return document-uri($i) > > Ich hoffe dir ist damit geholfen. Ich leite die Mail ebenfalls an die Liste > > weiter, damit mich andere korrigieren oder etwas hinzufuegen koennen. > > Gruesse, > > Lukas > > [1] http://www.inf.uni-konstanz.de/dbis/basex/commands#create > > [2] http://www.inf.uni-konstanz.de/dbis/basex/commands#add > > > _______________________________________________ > BaseX-Talk mailing list > BaseX-Talk at mailman.uni-konstanz.de > https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk > >
MS
Michael Seiferle13 Aug 2010 13:55 #
Hi An,
oh sorry, ich schicke dir Anbei den Link zur aktuellen Version aus dem SVN-Repository. http://www.inf.uni-konstanz.de/dbis/basex/maven/org/basex/basex/6.2/basex-6.2.jar ich bin im Moment unterwegs, deswegen kann ich nicht testen ob es mit dieser Version schon funktioniert. Falls nicht gib mir Bescheid, dann baue ich dir ein JAR aus der aktuellen Entwicklungsversion.
Viele Grüße
Michael
Quoted text · Truong An Nguyen · 110 lines
Am 13.08.2010 um 13:45 schrieb Truong An Nguyen: > Hallo, > > die Basex Version 6.1 hat diese Feature nicht. Welche Version soll ich > verwenden? > > Vielen Dank für eure Bemühungen. > > Gruß > An > > 2010/8/11 Michael Seiferle <michael.seiferle at uni-konstanz.de>: >> Hallo An, >> von der Logik her ist dein Ansatz richtig, allerdings werden einzelne >> Dokumente immer im Root der Datenbank eingefügt. >> Wenn du eine Ordnerhierarchie hinzufügst wird der relative Pfad der >> Dokumente zur Wurzel der Hierarchie gespeichert: >> Ein: >> >> add C:\Users\BeEo\Desktop\Root >> >> Resultiert in: db(test1) mit den Dokumenten: >> Package1/ODFProject3.xml >> Package/ODFProject2.xml >> Alternativ kannst du beim Add Kommando ein zusätzliches Argument `TO`: >> >> ADD (AS [name]) (TO [target]) [input] >> >> angeben: >> >> add TO Package1/abc C:\Users\BeEo\Desktop\Root\Package1\ODFProject3.xml >> >> Somit kannst du die Pfadhierarchie entweder selbst bestimmen oder relativ >> zum Rootpfad der eingefügten Ordnerstruktur erstellen lassen. >> Zum Anfragen von Dokumenten in Collections könnte vielleicht folgender >> Mailinglistenpost (+ follow ups) noch interessant sein: >> https://mailman.uni-konstanz.de/pipermail/basex-talk/2010-July/000495.html >> Ich hoffe ich konnte helfen, bei weiteren Fragen einfach melden. >> Freundliche Grüße, >> Michael >> Am 10.08.2010 um 16:03 schrieb Truong An Nguyen: >> >> Hallo Lukas, >> >> es funktioniert leider nicht. Hab die folgenden Befehle probiert: >> >> create coll test1 >> add C:\Users\BeEo\Desktop\Root\Package1\ODFProject3.xml >> add C:\Users\BeEo\Desktop\Root\Package\ODFProject2.xml >> >> Die Ergebnisse der Ausführung es Befehls "for $i in collection(test1) >> return document-uri($i)" sind: >> >> file:/D:/Temp/ODFProject2.xml file:/D:/Temp/ODFProject3.xml >> >> Die Pfad-Informationen gehen verloren. >> >> Gruß >> An >> >> >> 2010/8/10 Lukas Kircher <lukaskircher1 at googlemail.com>: >> >> Ich schicke deine Mail mal noch als CC an die Mailing Liste. >> >> Wie kann ich einstellen, damit zwei XML-Dateien mit dem gleichen Namen >> >> aber mit verschiedenen Pfäden in einer Datenbank gespeichert werden? >> >> Das funktioniert mit Hilfe von Collections. Du kannst folgendermassen >> >> Dokumente zu einer Collection hinzufuegen: >> >> 1. Falls alle Dokumente in einem Verzeichnis liegen kannst du aus dem >> >> obersten Ordner per Create Command eine Datenbank erstellen [1]. >> >> 2. Zu einer bestehenden Collection kannst du ein Dokument hinzufuegen per >> >> XQuery Update, z.B.: >> >> insert node doc(<uri>) into doc(<collection name>) >> >> ... oder ueber den BaseX Command Add [2]. >> >> Dokumente mit gleichem Namen aber unterschiedlichem Pfad kannst du mit Hilfe >> >> von document-uri() auseinanderhalten - siehe Beispiel: >> >> for $i in collection() return document-uri($i) >> >> Ich hoffe dir ist damit geholfen. Ich leite die Mail ebenfalls an die Liste >> >> weiter, damit mich andere korrigieren oder etwas hinzufuegen koennen. >> >> Gruesse, >> >> Lukas >> >> [1] http://www.inf.uni-konstanz.de/dbis/basex/commands#create >> >> [2] http://www.inf.uni-konstanz.de/dbis/basex/commands#add >> >> >> _______________________________________________ >> BaseX-Talk mailing list >> BaseX-Talk at mailman.uni-konstanz.de >> https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk >> >>
Written for BaseX 6. BaseX may have changed since: please check the current documentation.
⚡Generated with XQuery