Raumdokumente Beispiel
Dieses Beispiel zeigt, wie man auf einer Raumseite alle Dokumente auflistet, die entweder direkt für diesen Raum oder für eine seiner Raumgruppen gelten.
Datenmodell
| Seitenart | Annotation | Beispiel |
|---|---|---|
| Raum | Hat Raumgruppe (Datentyp Seite, mehrwertig) |
Raum 102 |
| Raumgruppe | keine | Raumgruppe Labore |
| Dokument | Gilt für (Datentyp Seite, mehrwertig, Räume und Raumgruppen gemischt) |
Prüfprotokoll Messgeräte |
Dokumente zeigen also auf Räume oder auf Raumgruppen. Es gibt bewusst keine zweite, "ausmultiplizierte" Eigenschaft.
Die Abfrage
Auf der Raumseite steht in SQL-Denke:
<gilt für mich> OR <gilt für eine meiner Raumgruppen>
Das lässt sich in SMW direkt hinschreiben. Die Abfrage steckt in Template:Raum:
{{#ask:
[[Category:Dokument]] [[Gilt für::{{FULLPAGENAME}}]]
OR
[[Category:Dokument]] [[Gilt für.-Hat Raumgruppe::{{FULLPAGENAME}}]]
|?Gilt für = Gültig für
|mainlabel = Dokument
|format = table
|default = Für diesen Raum sind keine Dokumente hinterlegt.
}}
- Zweig 1
- Dokument →
Gilt für→ dieser Raum. - Zweig 2
- Dokument →
Gilt für→ eine Seite G, und G →-Hat Raumgruppe→ dieser Raum. -Hat Raumgruppeist die inverse Eigenschaft und läuft von der Raumgruppe zurück zu ihren Räumen. Der Punkt inGilt für.-Hat Raumgruppeist die SMW-Kettenschreibweise.
Da OR die Ergebnismengen vereinigt, wird ein Dokument, das direkt und über eine Raumgruppe gilt, nur einmal aufgeführt.
Ergebnisse, live abgefragt
Alles ab hier sind echte #ask-Abfragen gegen die Beispieldaten. Nichts davon ist abgetippt. Wer eine Zuordnung ändert oder ein Dokument anlegt, sieht das Ergebnis hier direkt.
Der OR-Nachweis an Raum 101
Die beiden Zweige laufen zuerst einzeln und dann gemeinsam. Damit ist belegt, dass OR die Ergebnismengen vereinigt und dabei Dubletten entfernt.
| Abfragebedingung | Ergebnis |
|---|---|
nur direkt zugeordnet[[Gilt für::Raum 101]]
|
|
nur über die Raumgruppe geerbt[[Gilt für.-Hat Raumgruppe::Raum 101]]
|
|
beide Zweige mit ORgenau so steht es in Template:Raum |
Zwei plus zwei ergibt hier drei: Prüfprotokoll Messgeräte gilt direkt und über die Raumgruppe und wird trotzdem nur einmal aufgeführt. Zwei getrennte Abfragen würden es doppelt zeigen.
Alle Räume
| Raum | Raumgruppen (Abfrage) | Dokumente (OR-Abfrage) | demonstriert |
|---|---|---|---|
| Raum 101 | Raumgruppe Labore | direkt, geerbt und die Dublette | |
| Raum 102 | Raumgruppe Labore, Raumgruppe Werkstatt | erbt aus zwei Raumgruppen | |
| Raum 103 | keine | ohne Raumgruppe, nur direkt | |
| Raum 104 | keine | keine | leeres Ergebnis |
In Template:Raum steht dieselbe Abfrage mit {{FULLPAGENAME}} statt des festen Raumnamens. Deshalb läuft sie auf jeder Raumseite von selbst, siehe Raum 101.
Umgekehrte Richtung
Von der Raumgruppe aus, ganz ohne Inverse, weil die Annotation dort schon in der passenden Richtung steht.
| Raumgruppe | Räume (Abfrage) | Dokumente der Gruppe (Abfrage) |
|---|---|---|
| Raumgruppe Labore | ||
| Raumgruppe Werkstatt |
Beispieldaten
Raumgruppen
Dokumente
Hinweise
- Wichtigster Fallstrick:
Hat RaumgruppeundGilt fürmüssen Datentyp Seite haben ([[Has type::Page]]). Bei Datentyp Text scheitert die inverse Eigenschaft nicht mit einer Fehlermeldung, sondern liefert stillschweigend ein falsches Ergebnis. In diesem Wiki getestet gegen die Text-EigenschaftFachrichtungen:[[-Fachrichtungen::Berufsoberschule]]liefert nicht etwa nichts, sondern schlicht alle Seiten des Wikis. Also vor dem Einsatz auf beiden Eigenschaftsseiten den Datentyp prüfen. - Gesetzt werden die Werte mit
#set, nicht als Annotation im Fließtext ([[Gilt für::Wert]]). Anzeige und Daten bleiben dadurch getrennt, und der Text lässt sich umformulieren, ohne die Annotation zu zerstören. In Abfragebedingungen bleibt[[Gilt für::Wert]]dagegen richtig, das ist dort keine Annotation, sondern Abfragesyntax. - Inverse Eigenschaften funktionieren nur in
#ask, nicht in#show. - Bei
ORmüssen gemeinsame Bedingungen in beiden Zweigen wiederholt werden, hierCategory:Dokument. - Verschachtelte Raumgruppen löst SMW nicht transitiv auf. Jede weitere Ebene braucht einen eigenen OR-Zweig mit einem zusätzlichen Kettenglied:
[[Gilt für.-Hat Raumgruppe.-Hat Raumgruppe::{{FULLPAGENAME}}]] - Aktualität: Das Ergebnis einer eingebetteten
#ask-Abfrage steckt im Parser-Cache der Raumseite. Ein neu angelegtes Dokument erscheint dort erst, wenn die Raumseite neu geparst wird. Dieses Beispiel zeigte nach dem Anlegen zunächst auf allen Raumseiten "keine Dokumente", weil die Raumseiten vor den Dokumentseiten gespeichert wurden. Nach einem Purge (action=purge&forcelinkupdate=1bzw. Aktualisieren im Seitenmenü) stimmte die Liste sofort. Im laufenden Betrieb erledigt das die Abhängigkeitsverfolgung von SMW ($smwgQueryDependencyLinksStoreEnabled, standardmäßig aktiv) über die Job-Queue. Läuft die Job-Queue nicht zuverlässig, hinken die Listen hinterher. - Dokumente ohne Geltungsbereich finden:
{{#ask: [[Category:Dokument]] [[Gilt für::!+]] }}