Modul: Netzwerke: Unterschied zwischen den Versionen
MH (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
MH (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
||
| Zeile 53: | Zeile 53: | ||
elseif geschehnis == 'Vorlesung' then | elseif geschehnis == 'Vorlesung' then | ||
queryResult = mw.smw.ask( '[[Kategorie:' .. geschehnis .. ']][[Person::' .. pagename .. ']]|mainlabel=-|?Geographikum#-|?Thema#-|?Beginn|?Ende|sort=DatumSortiert|format=plainlist' ) | queryResult = mw.smw.ask( '[[Kategorie:' .. geschehnis .. ']][[Person::' .. pagename .. ']]|mainlabel=-|?Geographikum#-|?Thema#-|?Beginn|?Ende|sort=DatumSortiert|format=plainlist' ) | ||
elseif geschehnis == 'Abschluss' then | |||
queryResult = mw.smw.ask( '[[Kategorie:' .. geschehnis .. ']][[Person::' .. pagename .. ']]|mainlabel=-|?Geographikum#-|?Grad#-|?Beginn|?Ende|sort=DatumSortiert|format=plainlist' ) | |||
end | end | ||
| Zeile 67: | Zeile 69: | ||
local Gruppe = '' | local Gruppe = '' | ||
local Thema = '' | local Thema = '' | ||
local Grad = '' | |||
for num, row in pairs( queryResult ) do | for num, row in pairs( queryResult ) do | ||
for property, data in pairs( row ) do | for property, data in pairs( row ) do | ||
| Zeile 81: | Zeile 84: | ||
elseif property == 'Thema' then | elseif property == 'Thema' then | ||
Thema = data | Thema = data | ||
elseif property == 'Grad' then | |||
Grad = data | |||
end | end | ||
end | end | ||
| Zeile 87: | Zeile 92: | ||
myResult= myResult .. p.Abgleich('Studenten', Geographikum, Beginn, Ende) | myResult= myResult .. p.Abgleich('Studenten', Geographikum, Beginn, Ende) | ||
myResult = myResult .. '<strong>Während des Studiums / der Schulzeit an der ' .. Geographikum .. ' (' .. Beginn .. ' bis ' .. Ende .. ') anwesende Dozenten:</strong>' .. '<br>' | myResult = myResult .. '<strong>Während des Studiums / der Schulzeit an der ' .. Geographikum .. ' (' .. Beginn .. ' bis ' .. Ende .. ') anwesende Dozenten:</strong>' .. '<br>' | ||
myResult= myResult .. p.Abgleich('Dozenten', Geographikum, Beginn, Ende) | myResult= myResult .. p.Abgleich('Dozenten', Geographikum, Beginn, Ende) | ||
elseif geschehnis == 'Abschluss' then | |||
myResult = myResult .. '<strong>Während der Promotion (' .. Grad .. ') in ' .. Geographikum .. ' (zwischen ' .. Beginn .. ' und ' .. Ende .. ') anwesende Studenten:</strong>' .. '<br>' | |||
myResult= myResult .. p.Abgleich('Studenten', Geographikum, Beginn, Ende) | |||
myResult = myResult .. '<strong>Während der Promotion (' .. Grad .. ') in ' .. Geographikum .. ' (zwischen ' .. Beginn .. ' und ' .. Ende .. ') anwesende Dozenten:</strong>' .. '<br>' | |||
myResult= myResult .. p.Abgleich('Dozenten', Geographikum, Beginn, Ende) | |||
elseif geschehnis == 'Tätigkeit' then | elseif geschehnis == 'Tätigkeit' then | ||
if Taetigkeitsart == 'Dozent' then | if Taetigkeitsart == 'Dozent' then | ||
| Zeile 118: | Zeile 128: | ||
local returnvalue = '' | local returnvalue = '' | ||
local looplist = {'Ausbildung', 'Abschluss', 'Tätigkeit', 'Gruppenzugehörigkeit', 'Vorlesung'} | |||
local looplist = {'Ausbildung', 'Tätigkeit', 'Gruppenzugehörigkeit', 'Vorlesung'} | |||
for index, geschehnis in ipairs(looplist) do | for index, geschehnis in ipairs(looplist) do | ||
Version vom 24. Juni 2022, 15:25 Uhr
Ziel
Ziel ist es, die Netzwerke eines MAV auf seiner Personenseite abzubilden. Dazu müssen ermittelt werden:
- während eines jeden Unibesuchs die anderen anwesenden Studenten / die anwesenden Dozenten
- während einer Tätigkeit die Kollegen / bzw. auch Studenten, falls Dozententätigkeit
- potentielle Zuhörer von Vorlesungen
Nötige Extensions
- Scribunto
- Semantic Scribunto
Zur Vorgehensweise
Das Modul verwendet drei Funktionen, die sich gegenseitig aufrufen:
- Ganz oben steht die Funktion "Geschehnisliste". Sie looped durch alle Geschehnisse (Ausbildung, Abschlüsse, Tätigkeiten usw.), die abgefragt werden und verglichen werden sollen und ruft dann die Funktion "GeschehnisPersonenbezogen" auf, wobei sie als Parameter das aktuelle Geschehnis übergibt
- Auf zweiter Ebene steht die Funktion "GeschehnisPersonenbezogen". Sie ermittelt für die Personenseite die personenspezifischen Daten in Bezug auf das aktuelle Ergebnis (also z.B. wo hat die Person wann studiert). Für jedes passende Ergebnis (also z.B. jeden Studienort) wird dann auf dritter Ebene die Funktion "Abgleich" aufgerufen, wobei als Parameter Geographikum, Beginn und Ende übergeben werden.
- Auf dritter Ebene steht die Funktion "Abgleich". Sie vergleicht die personenbezogenen Parameter, die übergeben wurden, mit einer allgemeinen Abfrage. Auf diese Weise wird z.B. ermittelt, wer zur selben Zeit sonst noch studiert hat.
Es wäre sehr aufwändig und vielleicht unmöglich gewesen, die Ziele nur mit Parserfunktionen zu erreichen. Vermutlich wären sie auch wesentlich langsamer als das Luamodul. Kernproblem war, dass Text, der vom Luamodul zurückgegeben wird, nicht als Wikitext interpretiert wird, d.h. das Ergebnis kann keine funktionierende Parserfunktion und auch keine funktionierende Wikitable sein (zumindest, wenn man sie mit Wikimarkup schreibt). Das Ziel waren aber funktionierende und sortierbare Tabellen. Dieses Ziel wurde erreicht, indem die Tabellen mit HTML-Tags erstellt wurden. Sortierbar wurden sie durch Hinzufügung der Klasse "wikitable sortable" (sie ist eine standardmäßig vom Wiki vorgegebene (also nutzbare) Klasse).
Aufruf der Funktion
Bitte exakt nach folgendem Schema in der "Vorlage:MAV" aufrufen
{{#invoke:Netzwerke|Geschehnisliste|{{SUBPAGENAME}}}}
local p = {}
function p.Abgleich(FrageNach, Geographikum, Beginn, Ende)
-- Unter "Geographikum" wird bei Gruppen der Gruppenname verstanden
local queryResult = ''
if FrageNach == 'Studenten' then
queryResult = mw.smw.ask( '[[Kategorie:Ausbildung]][[Geographikum::' .. Geographikum .. ']][[Beginn::<' .. Ende .. ']][[Ende::>' .. Beginn .. ']]|?Person|?Beginn|?Ende|mainlabel=-|sort=Person' )
elseif FrageNach == 'Dozenten' then
queryResult = mw.smw.ask( '[[Tätigkeitsart::Dozent]][[Geographikum::' .. Geographikum .. ']][[Beginn::<' .. Ende .. ']][[Ende::>' .. Beginn .. ']]|?Person|?Beginn|?Ende|mainlabel=-|sort=Person' )
elseif FrageNach == 'Kollegen' then
queryResult = mw.smw.ask( '[[Kategorie:Tätigkeit]][[Geographikum::' .. Geographikum .. ']][[Beginn::<' .. Ende .. ']][[Ende::>' .. Beginn .. ']]|?Person|?Beginn|?Ende|mainlabel=-|sort=Person' )
elseif FrageNach == 'Gruppe' then
queryResult = mw.smw.ask( '[[Kategorie:Gruppenzugehörigkeit]][[Gruppe::' .. Geographikum .. ']][[Beginn::<' .. Ende .. ']][[Ende::>' .. Beginn .. ']]|?Person|?Beginn|?Ende|mainlabel=-|sort=Person' )
end
if queryResult == nil then
return 'Keine Personen gefunden. <br>'
end
if type( queryResult ) == "table" then
local myResult = '<table class="wikitable sortable"><tr><th>Person</th><th>Beginn</th><th>Ende</th></tr>'
local Personakt = ''
local Endeakt = ''
local Beginnakt = ''
for num, row in pairs( queryResult ) do
for property, data in pairs( row ) do
if property == 'Person' then
Personakt = data
elseif property == 'Beginn' then
Beginnakt = data
elseif property == 'Ende' then
Endeakt = data
end
end
myResult = myResult .. '<tr><td>' .. Personakt .. '</td><td>' .. Beginnakt .. '</td><td>' .. Endeakt .. '</td></tr>'
end
myResult = myResult .. '</table>'
return myResult
end
return myResult
end
function p.GeschehnisPersonenbezogen(geschehnis, pagename)
local queryResult = ''
if geschehnis == 'Tätigkeit' then
queryResult = mw.smw.ask( '[[Kategorie:' .. geschehnis .. ']][[Person::' .. pagename .. ']]|mainlabel=-|?Tätigkeitsart|?Geographikum#-|?Beginn|?Ende|sort=DatumSortiert|format=plainlist' )
elseif geschehnis == 'Gruppenzugehörigkeit' then
queryResult = mw.smw.ask( '[[Kategorie:' .. geschehnis .. ']][[Person::' .. pagename .. ']]|mainlabel=-|?Gruppe#-|?Beginn|?Ende|sort=DatumSortiert|format=plainlist' )
elseif geschehnis == 'Ausbildung' then
queryResult = mw.smw.ask( '[[Kategorie:' .. geschehnis .. ']][[Person::' .. pagename .. ']]|mainlabel=-|?Geographikum#-|?Beginn|?Ende|sort=DatumSortiert|format=plainlist' )
elseif geschehnis == 'Vorlesung' then
queryResult = mw.smw.ask( '[[Kategorie:' .. geschehnis .. ']][[Person::' .. pagename .. ']]|mainlabel=-|?Geographikum#-|?Thema#-|?Beginn|?Ende|sort=DatumSortiert|format=plainlist' )
elseif geschehnis == 'Abschluss' then
queryResult = mw.smw.ask( '[[Kategorie:' .. geschehnis .. ']][[Person::' .. pagename .. ']]|mainlabel=-|?Geographikum#-|?Grad#-|?Beginn|?Ende|sort=DatumSortiert|format=plainlist' )
end
if queryResult == nil then
return ''
end
if type( queryResult ) == "table" then
local myResult = ''
local Geographikum = ''
local Ende = ''
local Beginn = ''
local Taetigkeitsart = ''
local Gruppe = ''
local Thema = ''
local Grad = ''
for num, row in pairs( queryResult ) do
for property, data in pairs( row ) do
if property == 'Geographikum' then
Geographikum = data
elseif property == 'Beginn' then
Beginn = data
elseif property == 'Ende' then
Ende = data
elseif property == 'Tätigkeitsart' then
Taetigkeitsart = data
elseif property == 'Gruppe' then
Gruppe = data
elseif property == 'Thema' then
Thema = data
elseif property == 'Grad' then
Grad = data
end
end
if geschehnis == 'Ausbildung' then
myResult = myResult .. '<strong>Während des Studiums / der Schulzeit an der ' .. Geographikum .. ' (' .. Beginn .. ' bis ' .. Ende .. ') anwesende Studenten / Schüler:</strong>' .. '<br>'
myResult= myResult .. p.Abgleich('Studenten', Geographikum, Beginn, Ende)
myResult = myResult .. '<strong>Während des Studiums / der Schulzeit an der ' .. Geographikum .. ' (' .. Beginn .. ' bis ' .. Ende .. ') anwesende Dozenten:</strong>' .. '<br>'
myResult= myResult .. p.Abgleich('Dozenten', Geographikum, Beginn, Ende)
elseif geschehnis == 'Abschluss' then
myResult = myResult .. '<strong>Während der Promotion (' .. Grad .. ') in ' .. Geographikum .. ' (zwischen ' .. Beginn .. ' und ' .. Ende .. ') anwesende Studenten:</strong>' .. '<br>'
myResult= myResult .. p.Abgleich('Studenten', Geographikum, Beginn, Ende)
myResult = myResult .. '<strong>Während der Promotion (' .. Grad .. ') in ' .. Geographikum .. ' (zwischen ' .. Beginn .. ' und ' .. Ende .. ') anwesende Dozenten:</strong>' .. '<br>'
myResult= myResult .. p.Abgleich('Dozenten', Geographikum, Beginn, Ende)
elseif geschehnis == 'Tätigkeit' then
if Taetigkeitsart == 'Dozent' then
myResult = myResult .. '<strong>Während der Tätigkeit an der ' .. Geographikum .. ' (' .. Beginn .. ' bis ' .. Ende .. ') anwesende Studenten / Schüler:</strong>' .. '<br>'
myResult= myResult .. p.Abgleich('Studenten', Geographikum, Beginn, Ende)
myResult = myResult .. '<strong>Während der Tätigkeit an der ' .. Geographikum .. ' (' .. Beginn .. ' bis ' .. Ende .. ') anwesende Dozenten:</strong>' .. '<br>'
myResult= myResult .. p.Abgleich('Dozenten', Geographikum, Beginn, Ende)
else
myResult = myResult .. '<strong>Während der Tätigkeit an der Körperschaft ' .. Geographikum .. ' (' .. Beginn .. ' bis ' .. Ende .. ') anwesende Kollegen:</strong>' .. '<br>'
myResult= myResult .. p.Abgleich('Kollegen', Geographikum, Beginn, Ende)
end
elseif geschehnis == 'Gruppenzugehörigkeit' then
myResult = myResult .. '<strong>Angehörige der Gruppe "' .. Gruppe .. '" (während der Zeit von ' .. Beginn .. ' bis ' .. Ende .. '):</strong>' .. '<br>'
myResult= myResult .. p.Abgleich('Gruppe', Gruppe, Beginn, Ende)
-- Der übergebene Parameter wird bei der Funktion "Abgleich" der Einfachheit halber unter "Geographikum" subsumiert
elseif geschehnis == 'Vorlesung' then
myResult = myResult .. '<strong>An der Körperschaft "' .. Geographikum .. '" anwesende Studenten während der Vorlesung' .. Thema .. ' (' .. Beginn .. ' bis ' .. Ende .. '):</strong>' .. '<br>'
myResult= myResult .. p.Abgleich('Studenten', Geographikum, Beginn, Ende)
end
end
return myResult
end
return queryResult
end
function p.Geschehnisliste(frame)
local returnvalue = ''
local looplist = {'Ausbildung', 'Abschluss', 'Tätigkeit', 'Gruppenzugehörigkeit', 'Vorlesung'}
for index, geschehnis in ipairs(looplist) do
returnvalue = returnvalue .. p.GeschehnisPersonenbezogen(geschehnis, frame.args[1])
end
return returnvalue
end
return p