ediarum / ediarum.DB

eXistdb App for ediarum.BASE.edit and ediarum.REGISTER.edit
GNU General Public License v3.0
15 stars 9 forks source link

API des Standardregisters »Sachbegriffe« retourniert <tei:item>s aus allen Ressourcen in data/Register #3

Open jjarosch opened 5 years ago

jjarosch commented 5 years ago

Wir haben ein Projekt-Register in der generischen tei:list/tei:item-Struktur angelegt und in data/Register gespeichert. Den Speicherort würde ich gerne beibehalten. Gleichzeitig ist das ediarum-Register »Sachbegriffe« aktiv.

Jetzt ist mir aufgefallen, dass die API des Registers »Sachbegriffe« auch die items des anderen Registers enthält. Wenn ich den Code richtig nachvollziehe, werden beim Aufruf der Sachbegriffe-API alle s aus der Collection data/Register zurückgegeben, und nicht spezifisch aus der Ressource data/Register/Sachbegriffe.xml. U.a. an dieser Stelle verursacht:

https://github.com/ediarum/ediarum.DB/blob/067f36adb92f0d0d6b63e0e141b9276f16fe7d9b/modules/config.xqm#L486

In der ediarum-indexes map läge ja aber die spezifische Ressource für das ediarum-Register »Sachbegriffe« vor.

Version 3.2.4.444

jjarosch commented 5 years ago

Ein lokaler Fix in der oben verlinkten Zeile könnte sein: doc($data-collection||'/'||config:get-ediarum-index-file($ediarum-index-id))

jjarosch commented 5 years ago

https://github.com/ediarum/ediarum.DB/compare/master...jjarosch:sachregister getestet mit einzelner Registerdatei. Vielleicht komme ich noch dazu, die Variante mit Einzeldateien für Buchstaben zu testen – dann mache ich den pull request.

jjarosch commented 5 years ago

Einzelbuchstaben ebenfalls erfolgreich getestet. Nur der master branch ist öffentlich. Auf welchen branch hättet ihr denn gern den pull request?

jjarosch commented 4 years ago

master...jjarosch:sachregister getestet mit einzelner Registerdatei. Vielleicht komme ich noch dazu, die Variante mit Einzeldateien für Buchstaben zu testen – dann mache ich den pull request.

Dieser Ansatz hat beim Kommentarregister noch das Problem, dass get-ediarum-index-file und get-ediarum-index-collection einen Fehler ausgeben wenn ein Index keine Ressource oder Collection definiert hat. In dieser Form ist mein Vorschlag also doch nicht verwendbar.

MartinFechner commented 4 years ago

Die Verwendung von doc() ist teilweise problematisch, weshalb hier collections() benutzt wird. Du könntest statt der Verwendung des Standard-Sachregisters ein eigenes einrichten und etwa im Subordner Register/Sachbegriffe speichern. Löst das Dein Problem?

jjarosch commented 4 years ago

Oder umgekehrt, nicht-Standard-Register nicht direkt in der Collection data/Register anlegen. Wenn das so bleiben soll, wäre ein Hinweis in der Doku vielleicht schön. (Die generische Verwendbarkeit von ediarum.REGISTER.edit baut ja darauf, dass zusätzliche Register in der list/item-Struktur möglich sind.)

Für das konkrete Projekt bin ich noch unschlüssig, ob ich nach 2,5 Jahren nochmal Register umbauen möchte. Ich habe diese Zeile geändert in

for $item in doc(config:get-data-collection($project-name)||"/"||config:get-ediarum-index-file($ediarum-index-id))//tei:item

Das hat wieder doc(), und umgeht komplett den Aufbau von config.xqm … funktioniert aber seit November einwandfrei.

MartinFechner commented 4 years ago

Danke. Ich halte es für sinnvoller die Änderung weiter oben vorzunehmen: https://github.com/ediarum/ediarum.DB/blob/c62dd5448876ce36279b9fffe593559f2f52afc7/modules/config.xqm#L477-L479

ersetzen durch

else if  ($ediarum-index-id eq "items")
then (
   doc($index-collection||'/Sachbegriffe.xml')
)
else (
   collection($index-collection)
)

Gibt es damit noch Fehler?

jjarosch commented 1 year ago

Deine Variante funktioniert (auch)! :+1:

jjarosch commented 2 weeks ago

Ist geplant, diese Lösung in einen Release einzuarbeiten?

MartinFechner commented 2 weeks ago

Ja, danke für den Hinweis.