Teile der Kategorien verschwunden

Hallo,

offensichtlich sind nicht alle Kategorien mit ins neue GenWiki gekommen.
Beispiel: das Benutzerkonto von Klaus-Peter Wessel

alt: Benutzer:Kpwessel – GenWiki
neu: Benutzer:Kpwessel – GenWiki

Im alten GenWiki gibt es fünf Kategorien, darunter drei Kategorien “Mitglied bei Verein xy”.
Im neuen GenWiki gibt es noch zwei Kategorien, darunter ein “gerupftes” “Mitglied bei” in rot, d. h. nicht im Kategorienbaum angelegt und ohne jede Vereinsangabe.

Gruß
Nicole

@Nicole_Hartmann Danke für den Hinweis. Ein Teil ist sicher durch Ticket 45 Vorlage MitgliedBei funktioniert nicht mehr wie in Parsoid/LUA Umstellungen - jetzt oder später? diskutiert erklärbar. Dort will Horst Reinhardt jetzt einladen um den neuen Ansatz über die Semantifizierung der Institutionen wie im Prototyp List of Institutions – GenWiki zu besprechen. Wenn wir alle Institutionen so bearbeiten funktioniert MitgliedBei wieder und hoffentlich besser als vorher. Gibt es noch etwas anderes was zu dem Effekt führt, den Du beobachtest?

Das ist mir jetzt so aufgefallen beim Aufruf der Seite. Ich achte weiter drauf.

Beispiel: Kategorie “Benutzer - in memoriam
Hier ist die Kategorie im alten GenWiki: https://wiki.genealogy.net/Kategorie:Benutzer\_-\_in_memoriam
Im neuen GenWiki gibt es keine entsprechende, siehe das Beispiel Klaus-Peter Wessel oben im ersten Beitrag.

Die Kategorie habe ich am 02.11.2025 angelegt. Wenn es danach einen Abgleich gegeben hat, müsste die Kategorie auch im neuen GenWiki existieren.

Gruß
Nicole

https://wiki.genealogy.net/Kategorie:Benutzer_-_in_memoriam

ist natürlich krass. Der Fachmann staunt und der Laie wundert sich.

Ich würde den Bindestrich weglassen … dann funktioniert

wikipush -s genwiki -t genwiki39 -q "[[Category:Benutzer in memoriam]]" -wi -f
copying 1 pages from genwiki to genwiki39
1/1 ( 100%): copying ... Benutzer:Agrum✅
copying image Datei:Augrum-02a.jpg ...%                                       wf@fixit docs % wikipush -s genwiki -t genwiki39 -q "[[Category:Benutzer in memoriam]]" -wi -f
wikipush -s genwiki -t genwiki39 -p "Category:Benutzer in memoriam"           
copying 1 pages from genwiki to genwiki39
1/1 ( 100%): copying ... Category:Benutzer in memoriam✅

viel einfacher weil es kein URL-Encoding für den Bindestrich braucht, der ein Spezialzeichen ist.

und voila: Kategorie:Benutzer in memoriam – GenWiki

@BSchwend für wikipush muss anubis aus sein …

1 „Gefällt mir“

Da ist wohl noch eine Einigung nötig, wie wir weiter machen

Hallo Wolfgang,

die 18 Benutzer-Seiten „in memoriam“ habe ich jetzt der „Kategorie: Benutzer in memoriam“ zugeordmet, ohne Bindestrich.

Damit dürfte das Problem gelöst sein.

Falls dem so ist und nichts dagegen spricht, werde ich die alte Kategorie (mit Bindstrich) löschen.

Viele Grüße

Günter (Thürheimer)

An der Point 8

86655 Harburg (Schwaben)

Tel. 09080-91212

Email: Thuerheimer@arcor.de

1 „Gefällt mir“

Hallo Wolfgang,

ich habe jetzt den vier Testpersonen mit identifiziertem Benutzerkonto die Kategorie “in memoriam” zugewiesen. Der fünfte hast du mit “no matches” gekennzeichnet. Es gibt aber ein Benutzerkonto mit exakt dem Familiennamen. Was machen wir diesen Fällen?

Gruß

Nicole

wikipush -s genwiki -t genwiki39 -q "[[Category:Benutzer in memoriam]]" -f
copying 18 pages from genwiki to genwiki39
1/18 (   6%): copying ... Benutzer:Agrum✅
2/18 (  11%): copying ... Benutzer:Arend✅
3/18 (  17%): copying ... Benutzer:BBertling✅
4/18 (  22%): copying ... Benutzer:Driessen✅
5/18 (  28%): copying ... Benutzer:ErnstHoffm✅
6/18 (  33%): copying ... Benutzer:Foelser✅
7/18 (  39%): copying ... Benutzer:Frische✅
8/18 (  44%): copying ... Benutzer:Henkelmann✅
9/18 (  50%): copying ... Benutzer:HPSchmitz✅
10/18 (  56%): copying ... Benutzer:KAEggert✅
11/18 (  61%): copying ... Benutzer:Kpwessel✅
12/18 (  67%): copying ... Benutzer:MPfeffer✅
13/18 (  72%): copying ... Benutzer:Ostholt✅
14/18 (  78%): copying ... Benutzer:OvRandow✅
15/18 (  83%): copying ... Benutzer:Renegraenz✅
16/18 (  89%): copying ... Benutzer:Rommel✅
17/18 (  94%): copying ... Benutzer:Schmerse✅
18/18 ( 100%): copying ... Benutzer:Seifert✅

@Nicole_Hartmann

Die Sachlage verbessern. Ein Computer hat halt eine andere Vorstellung von „exakt“ - da zählen auch Unterschiede bei Leerzeichen. Das Problem des Abgleichs ist für mich erstmal nicht so entscheidend.

Die Menge von 370 macht mir Sorgen. Das würde ich gerne systematisch erledigen.

Vorschlag: Vorlage:In Memoriam nutzen

Wir sollten IMHO einfach die bestehende Vorlage:In Memoriam – GenWiki konsequent nutzen.

Was ändert sich für die Benutzer?

Praktisch nichts - die Vorlage funktioniert wie bisher:

{{In Memoriam|Am 02. Januar 2024 ist Mario Seifert ins Reich seiner Ahnen gegangen.}}

Was wird besser?

Die Vorlage setzt automatisch eine Kennzeichnung ([[Attribut:Verstorben]]), die uns ermöglicht:

  • Alle 370 Fälle systematisch zu erfassen
  • Automatische Übersicht auf Benutzer In Memoriam – GenWiki
  • Zu prüfen, welche der 370 Personen noch nicht erfasst sind

Beispiel: Die Übersichtsseite zeigt automatisch alle mit der Vorlage gekennzeichneten Benutzer - ohne manuelle Pflege von Listen.


Für technisch Interessierte

Die Vorlage nutzt SemanticMediaWiki 4.3:

Was passiert technisch?

Die Vorlage setzt automatisch {{#set:Verstorben=true}} und schreibt damit das [[Attribut:Verstorben]] (Boolean).

Vorteile gegenüber nur Kategorie:

  1. Systematische Abfragen:
{{#ask: [[Verstorben::true]] |format=count}}

Zeigt: Wie viele der 370 sind erfasst?

  1. Kombinierte Abfragen:
{{#ask: [[Kategorie:Benutzer]] [[Verstorben::true]]
|?Modification date
|format=table
|sort=Modification date
}}

Zeigt: Wann wurde welche Benutzerseite zuletzt geändert?

  1. Wartungsabfragen:
{{#ask: [[Kategorie:Benutzer in memoriam]] [[!Verstorben::true]]
|format=ul
}}

Findet: Seiten mit alter Kategorie aber ohne neue Vorlage.

Migration:

Die Vorlage setzt sowohl [[Attribut:Verstorben]] als auch [[Kategorie:Benutzer in memoriam]] für Rückwärtskompatibilität.

Übersichtsseite:

[[Benutzer In Memoriam]] wird automatisch befüllt durch:

{{#ask: [[Verstorben::true]]
|format=ul
|limit=500
}}

Was haltet ihr davon? Dann könnten wir die 370 Fälle systematisch abarbeiten.


**Alles bezieht sich jetzt auf die existierenden Seiten in genwiki39.genealogy.net!**
1 „Gefällt mir“

Worauf bitte bezieht sich die Menge von 370? Personen, die nicht zugeordnet werden können?

Warum ist eine Kennzeichnung besser als eine Kategorie? Das jetzt umzustellen, ist nicht so etwas wie „mitten im Fluss die Pferde wechseln?
Ich dachte immer, eine der Möglichkeit des Semantic Wiki ist es gerade, auch auf Kategorien abzufragen?>

{{#ask:
[[Kategorie:Benutzer in memoriam]]
}}

Dass ein System, gerade wenn Wiki-typisch mehrere Menschen daran arbeiten, niemals zu 100% perfekt gepflegt wird, ist wohl nicht zu vermeiden und m. E. keine Frage des verwendeten Systems. Das könnte aber beim Semantic Wiki genauso passieren, dass ein Eintrag vergessen wird, oder nicht?

Horst Reinhardt hat mir eine CSV Datei mit 370 Einträgen zur Verfügung gestellt.

wc -l CompgenVerstorbeneSeit2019.csv 
370 CompgenVerstorbeneSeit2019.csv

Dazu habe ich ein python-Programm für den Abgleich geschrieben (bzw. mit AI schreiben lassen …)

Die ersten 5 Einträge habe ich Nicole zum Test gegeben dabei gab es 3 Treffer und zweimal „no match“. Der Vorschlag war auf Basis die ersten Einträge zum machen und dann zu systematisieren.

Benutzer In Memoriam – GenWiki zeigt das Ergebnis. Die Entscheidung wie die Auswertung erfolgt liegt jetzt in der Vorlage und natürlich könnte die auch weiterhin die Kategorie nutzen - das ist im Moment auch so - die Kategorie wird gesetzt. Die Abfrage erfolgt aber über das Attribut.
check_deceased.py

cat check_deceased.py 
#!/usr/bin/env python3
"""
Check deceased persons from CSV against wiki user database.
Tries multiple regex patterns to find potential matches.
"""

import sys
import csv
import subprocess
import json
import argparse
from basemkit.shell import Shell
from typing import List, Dict, Any


class WikiUserChecker:
    """Checks wiki users against a list of deceased persons."""
    
    def __init__(self, query_file: str, query_name: str = "check_user_by_realname", debug: bool = False):
        """Initialize the checker with query configuration."""
        self.query_file = query_file
        self.query_name = query_name
        self.debug = debug
    
    def generate_patterns(self, vorname: str, nachname: str) -> List[str]:
        """Generate multiple regex patterns for name matching."""
        patterns = [
            f"^{vorname} {nachname}$",
            f"^{nachname}, {vorname}$",
            f"{vorname}.*{nachname}",
            f"^{nachname}$",
            f"^{vorname}.*{nachname}.*$",
        ]
        return patterns
    
    def execute_query(self, pattern: str) -> List[Dict[str, Any]]:
        """Execute wiki_query command and return parsed results."""
        cmd = f'/home/wf/bin/wiki_query -qn {self.query_name} --params names="{pattern}"'
        
        # Show the command for debugging
        if self.debug:
            print(f"COMMAND: {cmd}", file=sys.stderr)
        
        # Initialize result variable
        query_result = []
        
        # Execute the command using Shell
        shell = Shell()
        result = shell.run(cmd, debug=self.debug)
        
        # Handle command execution errors
        if result.returncode != 0:
            print(f"ERROR: Command failed with return code {result.returncode}", file=sys.stderr)
            print(f"STDERR: {result.stderr}", file=sys.stderr)
        elif result.stdout.strip():
            try:
                query_result = json.loads(result.stdout)
            except json.JSONDecodeError as e:
                print(f"ERROR parsing JSON: {e}", file=sys.stderr)
                if self.debug:
                    print(f"STDOUT was: {result.stdout}", file=sys.stderr)
        
        return query_result    

    def check_person(self, vorname: str, nachname: str) -> Dict[str, Any]:
        """Check a person against wiki database with multiple patterns."""
        patterns = self.generate_patterns(vorname, nachname)
        all_results = []
        
        for pattern in patterns:
            results = self.execute_query(pattern)
            if results:
                all_results.extend(results)
        
        # Remove duplicates by user_id
        unique_results = {r['user_id']: r for r in all_results}.values()
        
        result_dict = {
            'vorname': vorname,
            'nachname': nachname,
            'matches': list(unique_results)
        }
        return result_dict
    
    def process_csv(self, csv_file: str, limit: int = None) -> List[Dict[str, Any]]:
        """Process entire CSV file and return all results."""
        results = []
        count = 0
        
        with open(csv_file, 'r', encoding='utf-8') as f:
            reader = csv.DictReader(f, delimiter=';')
            for row in reader:
                if limit and count >= limit:
                    break
                result = self.check_person(row['Vorname'], row['Nachname'])
                results.append(result)
                count += 1
        
        return results


def main():
    """Main execution function."""
    # Parse command line arguments
    parser = argparse.ArgumentParser(description='Check deceased persons against wiki user database')
    parser.add_argument('csv_file', help='CSV file with deceased persons')
    parser.add_argument('--query-file', default='/home/wf/source/python/genwiki2024/genwiki_examples/wiki_queries.yaml',
                        help='Path to wiki queries YAML file')
    parser.add_argument('--limit', type=int, help='Limit number of persons to check')
    parser.add_argument('--debug', action='store_true', help='Enable debug output')
    
    args = parser.parse_args()
    
    # Create checker and process CSV
    checker = WikiUserChecker(args.query_file, debug=args.debug)
    results = checker.process_csv(args.csv_file, args.limit)
    
    # Final report
    print("DECEASED PERSONS - WIKI USER MATCHES")
    print("="*60)
    
    for result in results:
        name = f"{result['vorname']} {result['nachname']}"
        if result['matches']:
            print(f"\n{name}:")
            for match in result['matches']:
                print(f"  User: {match['user_name']} | ID: {match['user_id']} | Email: {match.get('user_email', 'N/A')}")
        else:
            print(f"\n{name}: No matches")


if __name__ == "__main__":
    main()

Ach so, 370 Personen sind als verstorben bekannt und eine nicht nähere bekannte Zahl davon kann unter den eingetragenen Genwiki-Benutzern sein, dafür das Skript. Wie Du schon zu Nicole sagtest, einen Teil der Übereinstimmung kann ein Programm erkennen, andere nicht. Aber man automatisiert erst mal das was geht und kümmert sich manuell um den Rest, klar.

Aber warum jetzt ein Kennzeichen und eine Abfrage über [[Verstorben::true]] statt Abfrage (und gegebenenfalls Ergäzung) der von Nicole schön gepflegten [[Kategorie:Benutzer in memoriam]] ?

Ich versuche immer noch zu verstehen, wo SMW echte Vorteile bringt und wo wir nur Redundanzen zu den bestehenden Strukturen schaffen.

Übrigens passt die Überschrift nicht mehr, vermute ich. Ich denke, es geht um zwei verschiedene Themen:

  • Die Kategorie war inkompatibel, weil ein Bindestrich fehlte oder hinzukam, wie auch immer (dazu passt die Überschrift und das scheint ja erledigt)
  • Wir sprechen darüber, wie wir verstorbene Wikibenutzer mit Hilfe der 370er-Liste identifizieren.

Es ist eine Liste von CompGen-Mitgliedern, von denen bekannt ist, dass sie in den letzten 10 Jahren verstorben sind.

Nur eine Teilmenge davon war im Genwiki aktiv.

Umgekehrt ist nur von einer (vermutlich größeren) Teilmenge der Genwiki-Autoren überhaupt bekannt, dass die verstorben sind. Die Mehrheit werden wir also nie (oder nur zufällig) „in memoriam“ setzen können.

So wichtig ich Wertschätzung für Aktivisten im Genealogienetz halte, bei den Allerwichtigsten Aktivisten wurde diese Wertschätzung über deren Benutzerseite zum Ausdruck gebracht (Mario Arend, Gerd Schmerse, Klaus-Peter Wessel, Mario Seifert usw.)…
Ich halte dieses Thema aufgrund der Unvollständigkeit nicht unbedingt für eines, das ich der 80-Prozent-Regel unterwerfen würde.
Es scheint mir eher ein organisatorisches als ein technisches Thema zu sein.

Herzliche Grüße,

Susanne (Nicola)

Ich glaube, da sind wir uns einig. Wichtig im Sinne der 80%-Regel ist m. E. nur:

  • Bestehende memoriam-Seiten müssen erhalten bleiben und erreichbar sein. => scheint jetzt erreicht zu sein.
  • Bestehende Seiten lebender GenWiki-Benutzer müssen auch noch der Umstellung den betreffenden Benutzer zugeordnet bleiben und von diesen gepflegt werden können. => wichtige Anforderung, daran wird aus meiner Sicht gearbeitet.
  • Bestehende Seiten von GenWiki-Benutzern mit aktiver Benutzerseite müssen, soweit die Community von ihrem Tod erfährt, in memoriam-Seiten umgewandelt werden können. Das wird weiter manuell geschehen. Dazu sollte die existierende Vorlage genutzt werden und die Seiten nach dem bestehenden System kategorisiert werden. => das ist wohl ebenfalls bereits erreicht.

Eine Identifizierung von Benutzerseiten, die zwar als aktiv gemeldet, aber tatsächlich verstorben sind, ist m. E. kein Ziel aus dem 80%-Bereich, höchstens ein nützlicher Nebeneffekt oder auch eines der HIlfsmittel beim Umstieg.

Hallo,

wer beim letzten GenWiki-Aktualisierungsteam-Treffen dabei war, weiß, dass Wolfgang um Mithilfe bei der Umstellung gebeten hat und die Anwesenden bestimmte Aufgaben übernommen haben. Eine Diskussion über die Sinnhaftigkeit dieser Aufgaben halte ich für überflüssig, da sie mit dem Profi abgesprochen wurden.

Außer dem Profi Wolfgang waren übrigens genau zwei weitere Personen anwesend!

Ich halte es für wenig zweckdienlich, dass wir uns jetzt auch noch rechtfertigen müssen, dass wir unsere Freizeit für den Verein opfern und dabei auch noch die Kosten für alle senken, indem wir dem Profi Arbeit abnehmen.

Nicole

Unbestritten. Es sollte eine Hilfe für Wolfgang sein und dafür sind glaube ich alle dankbar. Inzwischen hat der Profi aber auch geschrieben:

Das war zumindest für mich der Hintergrund meiner Äußerungen. Wir haben bisher 18 nachweisbare memoriam-Fälle und wenn wir noch zwei oder drei weitere unentdeckte finden sollten, schien mir das nicht im Verhätnis zu den 370 zu stehen.

Ich werde mich aber zu dem Thema nicht weiter äußern.

Daran erinnere mich gut.

Hallo Wolfgang,

die Laiin wundert sich tatsächlich. Wenn ich bestimmte Zeichen nicht benutzen soll, wieso kommt von MediaWiki keine Fehlermeldung? Schließlich sollen bei Wikis ja “alle” mitmachen.

VG
Nicole

Hallo Nicole,

da hast du völlig recht: Der Fachmann staunt und der Laie wundert sich.

Die Antwort ist etwas länglich – daher habe ich mir von der KI Gemini 3 Pro Preview helfen lassen, um das sauber auszuarbeiten:

Dass MediaWiki keine Fehlermeldung ausgibt, liegt daran, dass das System versucht, es „irgendwie passend“ zu machen. Die Ursache für die Probleme liegt in einem fundamentalen Unterschied in der Informatik, den moderne Systeme leider oft verschleiern: Der Unterschied zwischen Identifikatoren und Bezeichnungen.

Hier ist die Erklärung, warum das bei deinem Link (...Benutzer_-_in_memoriam) so problematisch ist:

1. Identifikator (Intern) vs. Bezeichnung (Anzeige)

Computer benötigen eindeutige Adressen, Menschen benötigen lesbaren Text.

  • Die Bezeichnung (Label): Das ist das, was du auf dem Bildschirm siehst. Hier sind Leerzeichen, Umlaute, Emojis oder typografische Bindestriche (Gedankenstriche) willkommen.
    • Beispiel: Müller & Söhne – Geschäftsbericht
  • Der Identifikator (ID): Das ist der interne „technische Name“, der für den Dateinamen auf dem Server oder die URL im Browser verwendet wird. Er muss extrem strikten Regeln folgen.
    • Ideal: mueller_soehne_geschaeftsbericht

Das Problem:
Apple hat hier früher mit der sogenannten Resource Fork technisch sauber getrennt: Der Dateiname im System war strikt, der Anzeigename für den Nutzer war frei wählbar.
Firmen wie Microsoft (Windows) und Organisationen wie die Wikimedia Foundation haben jedoch die irrige Vorstellung gefördert, Sonderzeichen könnten nach Belieben auch technisch verwendet werden. Sie mappen die Bezeichnung 1:1 auf den Identifikator. Das Ergebnis ist ein technischer „Hack“.

2. Die Falle: Sonderzeichen und UTF-8

Die Einführung des UTF-Zeichensatzes (Unicode) hat die Sache noch verführerischer, aber technisch komplexer gemacht.

Ein Computer „denkt“ in Bytes. In der Frühzeit der EDV (ASCII-Code) galt für jedes Zeichen die simple Regel: 1 Zeichen = 1 Byte.

Das funktioniert für a-z, 0-9 und den einfachen Bindestrich -.

Sobald wir aber UTF-8 für Sonderzeichen, Umlaute oder spezielle Striche nutzen, explodiert der Speicherbedarf für ein einzelnes Zeichen. Während Standard-Buchstaben weiterhin 1 Byte benötigen, braucht ein simples Sonderzeichen plötzlich mehr Platz:

  • Zeichen aus dem ASCII-Satz (A-Z, 0-9, -): 1 Byte
  • Sonderzeichen (ä, ö, —, é): 2 oder mehr Bytes

Da URLs im Internet (noch) keine echten Umlaute oder Sonderzeichen erlauben, müssen diese 2 Bytes in sogenannte Percent-Encodings umgewandelt werden.

  • Aus einem ä (2 Bytes im Speicher) wird in der URL ein monströses %C3%A4.
  • Aus einem langen Gedankenstrich (En-Dash) wird %E2%80%93.

3. Analyse Deines Beispiels

Schau dir deinen Link genau an:
https://wiki.genealogy.net/Kategorie:Benutzer_-_in_memoriam

MediaWiki macht Folgendes: Es zwingt deine Eingabe (die Bezeichnung) in eine URL (den Identifikator).

  1. Es wandelt alle Leerzeichen automatisch in Unterstriche _ um.
  2. Du hast einen Bindestrich - verwendet, der von Leerzeichen umgeben war.
  3. Das Resultat ist die Zeichenfolge _-_ (Unterstrich, Bindestrich, Unterstrich).

Das ist technisch zwar „erlaubt“ (daher keine Fehlermeldung), aber es ist semantisch unschön und fehleranfällig.

Wenn du statt des „Minus-Zeichens“ auf der Tastatur versehentlich einen „Gedankenstrich“ (oft macht Word das automatisch) verwendet hättest, wäre die URL komplett unlesbar geworden.

Fazit & Empfehlung

Um solche „Unfälle“ zu vermeiden, hilft es bei Kategorien und Seitennamen (die zu URLs werden) immer so zu tun, als wäre man im Jahr 1990:

  • Keine Sonderzeichen in Titeln, die technischer Natur sind (Kategorien).
  • CamelCase verwenden: Statt Benutzer - in memoriam lieber BenutzerInMemoriam oder Benutzer_InMemoriam.

Daher nützt es, den Bindestrich und ggf. die Leerzeichen wegzulassen und alles zu vereinfachen.
Dann funktioniert es nicht nur, sondern bleibt auch stabil, wenn man den Link per E-Mail verschickt, anderswo verwenden möchte oder elektronisch auswertet.

VG
Wolfgang

1 „Gefällt mir“