Requests for comment/Accessing page properties from wiki pages

From MediaWiki.org
Jump to navigation Jump to search
Request for comment (RFC)
Accessing page properties from wiki pages
Component General
Creation date 2017-01-01
Author(s) MZMcBride, Legoktm, Jackmcbarn, Matma Rex
Document status in discussion
See Phabricator.
General2017-01-01MZMcBride, Legoktm, Jackmcbarn, Matma RexT154738

This is a request for comments regarding accessing page properties from wiki pages.

Background[edit]

MediaWiki has a page_props database table where certain attributes and values are stored on a per-page basis. For example:

MariaDB [enwiki_p]> select page_title, pp_propname, pp_value from page join page_props on pp_page = page_id where page_namespace = 0 and page_title = 'Barack_Obama';
+--------------+--------------------------+----------------------------+
| page_title   | pp_propname              | pp_value                   |
+--------------+--------------------------+----------------------------+
| Barack_Obama | defaultsort              | Obama, Barack              |
| Barack_Obama | page_image_free          | President_Barack_Obama.jpg |
| Barack_Obama | wikibase-badge-Q17437796 | 1                          |
| Barack_Obama | wikibase_item            | Q76                        |
+--------------+--------------------------+----------------------------+
4 rows in set (0.00 sec)
MariaDB [enwiki_p]> select page_title, pp_propname, pp_value from page join page_props on pp_page = page_id where page_namespace = 0 and page_title = 'Obama_(disambiguation)';
+------------------------+----------------+----------+
| page_title             | pp_propname    | pp_value |
+------------------------+----------------+----------+
| Obama_(disambiguation) | disambiguation |          |
| Obama_(disambiguation) | wikibase_item  | Q223850  |
+------------------------+----------------+----------+
2 rows in set (0.00 sec)

MediaWiki stores whether a page is a disambiguation page, what its default category sort key is, and what its page image is, each being determined by different means: __DISAMBIG__, {{DEFAULTSORT:Obama, Barack}}, and a heuristic (cf. Extension:PageImages#Image choice).

Problem[edit]

Users cannot access a page's properties from other local wiki pages.

Potential use-cases:

  • phabricator:T71441: Feature request: add detection for disambiguation pages to Scribunto
  • phabricator:T131911: Allow retrieving/getting page image file name from wikitext using Scribunto/Lua or parser function or something
  • phabricator:T154346: Provide "wikitext" means of accessing arbitrary wiki page's default category sort key

Complications[edit]

This makes wikitext more volatile. We already have features such as {{#ifexist:Page name}} and {{CURRENTTIMESTAMP}}, which can be combined in weird and potentially abusive ways. For example: {{DEFAULTSORT:{{CURRENTTIMESTAMP}}}}.

If we added the ability to get page properties, we could end up with cases such as these:

  • {{DEFAULTSORT:{{#getdefaultsort:{{FULLPAGENAME}}}}}}
  • {{#if:{{#invoke:IsThisADabPage|main|{{FULLPAGENAME}}}}||__DISAMBIG__}}

While we could try to restrict page property retrieval to pages other than the current page, you could end up with trivial loops: page A tries to get page B's category sort key, page B tries to get category A's category sort key. These types of problems have been solved by templates.

It's also currently possible to do things like this: w:en:User:Sgeo/null-edit-detector.

You also have a problem that's basically the opposite of volatility: if a page's default category sort key changes, how do know to update the pages, such as its talk page, that are also using this sort key?

Proposal[edit]

Option 1[edit]

Modify Scribunto/Lua to expose these properties as functions or Title object attributes.

We need to track these usages. Would using templatelinks be acceptable?

Option 2[edit]

Add parser functions to MediaWiki core or to extensions such as PageImages. For example:

  • {{#getdefaultsort:Page name}}
  • {{#getpageimage:Page name}}

We need to track these usages. Would using templatelinks be acceptable?

Option 3[edit]

For two of the use-cases, the focus is talk pages. So we could add:

  • {{ISSUBJECTSPACEPAGEADISAMBIGUATIONPAGE}}
  • {{SUBJECTPAGEDEFAULTCATEGORYSORTKEY}}

But this is kind of obnoxious and it boxes us in a bit. We may want to break out of the subject space page–talk page binary at some point (RfC: Associated namespaces (talk)), supporting groupings of three or four or more pages. On a related point, we may want to use this functionality on non-talk pages, which is the case for properties such as page images.

Option 4[edit]

Do nothing. Don't allow access to these page properties. :-(

Option 5[edit]

Here's a dumb idea: use the existing templates/transclusion system, either by creating a template for every page and property or by using Extension:LabeledSectionTransclusion to extract parts of a subject-space page.

This would be pretty terrible, but would save making a new links table and would require almost no development effort.

Option 6[edit]

Don't store these properties in wikitext. A lot of complications described above go away if you don't use wikitext as the storage/input mechanism. But in exchange, you get new complications regarding tracking changes, preventing abuse/misuse, etc. We'd be in violation of everything is a wiki page, but perhaps with something like multi-content revisions, this would be possible. This option would delay any implementation significantly.

A different version of this option would be to store properties in a centralized repository such as Wikidata or in a local repository using the Wikibase Repository extension.