Extension:SemanticDependencyUpdater

From mediawiki.org
MediaWiki extensions manual
OOjs UI icon advanced-invert.svg
Semantic Dependency Updater
Release status: stable
Implementation User interface
Description Monitors semantic data changes and updates depended pages
Author(s) Simon Heimler, Alexander Gesinn
Maintainer(s) gesinn.it
Latest version 2.0.2 (2020-05-13)
MediaWiki 1.31 - 1.36
Database changes No
License MIT License
Download
Releases

  • $wgSDUProperty = 'Semantic Dependency';
  • $wgSDUUseJobQueue = false;

Compatibility

  • Semantic MediaWiki 3.1+

The Semantic Dependency Updater (SDU) extension monitors pages for changes in their semantic data. If the "Semantic Dependency" property is found, this extension will update (null-edit) all pages that have been selected through that property. A common use case is change propagation where pages needs to update (pull) their semantic data via an ask query from a changed page.

The "Semantic Dependency property" is evaluated as an ASK query. It is therefore possible to define either a list of pages directly or do more complex selections.

It is possible to build a chain of semantic dependencies that will update recursively. Be careful not to build loops!

Installation[edit]

Semantic MediaWiki 3.1.0 or later is required!
  • Download and place the file(s) in a directory called SemanticDependencyUpdater in your extensions/ folder.
  • Add the following code at the bottom of your LocalSettings.php :
    wfLoadExtension( 'SemanticDependencyUpdater' );
    
  • Configure as required.
  • Yes Done – Navigate to Special:Version on your wiki to verify that the extension is successfully installed.

Instead of downloading the zip archive you may also check this extension out via Git:

git clone https://github.com/gesinn-it/SemanticDependencyUpdater.git extensions/SemanticDependencyUpdater

Configuration[edit]

Mandatory[edit]

Make sure, a "Semantic Dependency" property exists, e.g. "Property:Semantic_Dependency" needs to exist and MUST be of the datatype Text:

[[Has type::Text]]

Optional[edit]

// Name of the Semantic Dependency property
$wgSDUProperty = 'Semantic Dependency';
// If enabled, SDU will create a Job for each update
$wgSDUUseJobQueue = false;

Usage[edit]

The value of the Semantic Dependency property is evaluated as an ASK query, except that [[ or ]] must be ommitted. If there are more conditions, combine them through AND and OR

Examples[edit]

Update Self[edit]

This will save the current page twice. Useful when the page stores semantic properties that are calculated from other properties of the same page.

[[Semantic Dependency::{{FULLPAGENAME}}]]

Update other page(s)[edit]

[[Semantic Dependency::Product:Test Product]]
[[Semantic Dependency::{{{Target Page|}}}]]

Update pages with relation to current page[edit]

This will update all pages that link with Part Of to the current page.

[[Semantic Dependency::Part Of::{{FULLPAGENAME}}]]

More Advanced Queries[edit]

Be careful that the query does not return too many pages, as this will result in a heavy load.

[[Semantic Dependency::Category:Product]]
[[Semantic Dependency::Category:Product AND Tag::Demo]]
[[Semantic Dependency::Category:Person OR Category:Organization]]

Example test case[edit]

  • Make sure, a page Property:Semantic_Dependency exists with content [[Has type::Text]]
  • Make sure, $wgSDUUseJobQueue = false;
  • Create a page A with
[[Title::A]]
  • Create a page B with
* [[Part Of::A| ]][[Title::{{#show:A|?Title}}.B]]
* {{#show:{{FULLPAGENAME}}|?Title}}
  • Now, change page A as follows
[[Title::XXX]]

As a result, you should see

- XXX.B
- XXX.B

on page B

Debugging[edit]

  • Note, that on some systems logging to /tmp might not work
  • Make sure, a log folder, writable by your web server, exists
> mkdir /var/log/mediawiki
> chmod -R www-data. /var/log/mediawiki
  • In your LocalSettings enable
$wgDebugLogGroups['SemanticDependencyUpdater'] = '/var/log/mediawiki/SDU.log';
  • Watch the log file
> tail -f /var/log/mediawiki/SDU.log
  • If things work as expected, this will look like:
2020-03-25 13:01:45 vagrant wikidb01-wk: [SDU] --> A
2020-03-25 13:01:45 vagrant wikidb01-wk: [SDU] -----> Data changes detected
2020-03-25 13:01:45 vagrant wikidb01-wk: [SDU] --------> [[Part Of::A]]
2020-03-25 13:01:45 vagrant wikidb01-wk: [SDU] --------> [Edit] B

See also[edit]