Wikidata talk:WikiProject property constraints

From Wikidata
Jump to navigation Jump to search

Contents

Structured Discussions?[edit]

Any objections to using Structured Discussions (aka Flow) for this project? --Lucas Werkmeister (talk) 13:44, 18 September 2017 (UTC)

  • No objection here. - PKM (talk) 21:34, 25 November 2017 (UTC)
  • Yes.
    --- Jura 23:40, 25 November 2017 (UTC)

Invitations[edit]

@Ivan A. Krestinin, Jura1, MisterSynergy, Jarekt, Yair rand: you’ve all been active on Template talk:Constraint, do you want to participate here? :) (And feel free to invite anyone else I forgot!) --Lucas Werkmeister (talk) 13:44, 18 September 2017 (UTC)

Project content[edit]

I’m not sure what content should actually be in the project itself (apart from the discussions, which are the main motivation for me) – can anyone think of things that should be on this project and not on Help:Property constraints portal? --Lucas Werkmeister (talk) 13:44, 18 September 2017 (UTC)

I wouldn't mind if this WikiProject does not host that much content by itself. It would be useful to have a task force defined by the participants list, and some tasks that are in scope of the project. Let me add "write/improve documentation about prop constraints" to the tasks. —MisterSynergy (talk) 15:00, 18 September 2017 (UTC)

potentially useful tool[edit]

Hey :) https://angryloki.github.io/wikidata-constraint-violations/ might be relevant to your interests. --Lydia Pintscher (WMDE) (talk) 12:33, 25 September 2017 (UTC)

Constraint checks on qualifiers and references[edit]

Hey everyone :) just FYI: in the Constraints extension, we’re currently working on checking constraints on qualifiers and references, in addition to the main value of the statement. We’ll probably enable a first version with support for some constraint types around the middle of October, but there are also a lot of open questions for some constraint types (e. g. what does “difference within range” mean on a qualifier?), so if you’re interested in that, we’d really appreciate any feedback or discussion on the related Phabricator tasks (e. g. phab:T175561, phab:T175562, phab:T175565, phab:T175566, phab:T175594). If you don’t have a Phabricator account, feel free to reply here as well :) --Lucas Werkmeister (WMDE) (talk) 13:01, 27 September 2017 (UTC)

  • @Lucas Werkmeister (WMDE): I see that this task is closed in Phabricator, but I am recently getting constraint errors when creating full references (<stated in> plus <author>, <title>) where the gadget is checking for constraints against the "main" item and not the <stated in> item. - PKM (talk) 21:38, 25 November 2017 (UTC)
@PKM: yes, several of the subtasks are still open. See also the proposed “constraint scope” discussed below (I still need to create the actual property proposal).Ah, I see you already replied there, sorry :) --Lucas Werkmeister (WMDE) (talk) 11:52, 26 November 2017 (UTC)

Cluster constraints or independent lines?[edit]

Looking at family name (P734) I am trying to understand whether the violations can be more clustered or whether they are better separated. When separated on the property they throw into separate sections on the constraint report that are not specific, and once resolved, then they all sit empty.

Is there some help around that explains this stuff? I looked at Wikidata:Constraint violation report input and it looks as though it should be labelled as a historic page. Thanks.  — billinghurst sDrewth 03:42, 11 October 2017 (UTC)

Format constraint and monolingual-text properties[edit]

There is a error message constraint “format constraint (Q21502404)” declaration error: “the constraint is not applicable to datatype “Monolingual text””. at Property talk:P1476. However, KrBot does indeed evaluate this constraint at Wikidata:Database reports/Constraint violations/P1476#"Format" violations, which seems inconsistent. Should we change something here? —MisterSynergy (talk) 13:02, 20 October 2017 (UTC)

I think the Lua module / template (not sure which) needs to be fixed, because the constraints extension / checkConstraints gadget also checks this constraint on monolingual text values (example). --Lucas Werkmeister (WMDE) (talk) 13:49, 20 October 2017 (UTC)
✓ Done Special:Diff/583026214 --Lucas Werkmeister (WMDE) (talk) 11:16, 23 October 2017 (UTC)

Use as value/use as reference/use as qualifier constraint >>> not reference, not value, not qualifier[edit]

Some properties can be used as value or as qualifier, but not as reference. When we discussed this some time ago with Ivan A. Krestinin, he suggested to change the definitions. Despite this having somewhat grown since, maybe we could change the definitions, are add an additional set of constraints.
--- Jura 14:32, 6 November 2017 (UTC)

Just an observation – you could hack together this constraint today like this:
Notice that the scope does not include constraint checked on main value (Q46466787). It’s very ugly, but it should work once constraint scope is implemented.
I’m not recommending that this should be used! It’s just something I noticed while implementing constraint scope in WikibaseQualityConstraints :) --Lucas Werkmeister (WMDE) (talk) 16:31, 8 January 2018 (UTC)

Negative value requires statement constraint (Q21510864) ?[edit]

Even though value type constraints exist (and generally work), it could be helpful if there was a way to specify what statements an value-item shouldn't have, e.g. spouse (P26) shouldn't use a given name as item.
--- Jura 14:32, 6 November 2017 (UTC)

Proposal: constraint scope[edit]

Hi everyone :) checkConstraints now check some constraints on qualifiers and references (see above), but it turns out that determining which constraints to check on qualifiers and references and which not to check there is more difficult than I thought – in particular, I went back and forth several times on type constraint (Q21503250) (phab:T175570, phab:T177388, phab:T178295). I now think that it’s not possible to determine this just from the constraint with no further information, and so I’m thinking of a new constraint parameter: constraint scope, with possible values value (Q19798642), Wikidata qualifier (Q15720608), and “reference”. (We don’t seem to have an item for “Wikidata reference” yet, and I’m not sure if it’s correct to use those other items either, but that’s just details.) This constraint scope would determine whether the constraint is checked on the main value, qualifiers, and/or references of a statement; the default value would vary by constraint type (type constraint (Q21503250) should usually be checked on main values and qualifier, but not references; value type constraint (Q21510865) should usually be checked everywhere; …).

Does anyone want to comment on this before I create the full property proposal? --Lucas Werkmeister (WMDE) (talk) 15:24, 6 November 2017 (UTC)

  • Wouldn't you just need to create a new item?
    --- Jura 15:30, 6 November 2017 (UTC)
No, it would be a new property as qualifier on the constraint statement. Or where would you use the new item? --Lucas Werkmeister (WMDE) (talk) 16:24, 6 November 2017 (UTC)
I first thought directly with property constraint (P2302), but you are right, it would need to be a qualifier. Supposedly one could solve Wikidata_talk:WikiProject_property_constraints#Use_as_value.2Fuse_as_reference.2Fuse_as_qualifier_constraint_.3E.3E.3E_not_reference.2C_not_value.2C_not_qualifier with that as well.
--- Jura 17:29, 6 November 2017 (UTC)
I suppose it’s related, yes – I think it would be a new constraint type (“used in context”, dunno), where the same “main value” / “qualifiers” / “references” items would be used, but with the existing item of property constraint (P2305) parameter. --Lucas Werkmeister (WMDE) (talk) 17:58, 6 November 2017 (UTC)
At child (P40) I added a constraint to prevent use of the values "1", "2", .. If we can have multiple constraints with different scopes, we could just add one with the property itself and scope "reference".
--- Jura 18:02, 6 November 2017 (UTC)
I don’t quite understand, sorry – are people using child (P40)  1 (Q199) in references? And it should be some different property? --Lucas Werkmeister (WMDE) (talk) 18:09, 6 November 2017 (UTC)
They shouldn't be using P40 in references. So one could just add property constraint (P2302)Q21502838  property (P2306) / child (P40) with scope "references".
--- Jura 18:14, 6 November 2017 (UTC)
I was curious why they’re using it, does it have a similar label to another property is some languages?
Now, whether conflicts-with constraint (Q21502838) should have the meaning you intended is actually another open question :) see phab:T175562 for that one. We might even need a second parameter for that… --Lucas Werkmeister (WMDE) (talk) 18:17, 6 November 2017 (UTC)
I see, yes. In general, "conflicts with" on qualifiers/references wont be of much use. I used P40 mainly for the constraint sample, not for it's actual (mis-)use in references. Actually using number items on P40 looks better then the correct property ;) [1].
--- Jura 18:24, 6 November 2017 (UTC)
Would this fix the problem I am recently getting constraint errors when creating full references (<stated in> plus <author>, <title>) where the gadget is checking for constraints against the "main" item and not the <stated in> item? If so, I support it! - PKM (talk) 21:38, 25 November 2017 (UTC)
That particular problem should also be fixed by the fix for phabricator:T178147, which will hopefully be deployed soon (this Wednesday, I believe). But that’s not a perfect solution. --Lucas Werkmeister (WMDE) (talk) 11:57, 26 November 2017 (UTC)
  • Pictogram voting comment.svg Comment In the past, qualifiers were only used rarely and we generally had qualifiers that were specific to one or the other property. KrBot reports didn't check most of these definitions. Now that people start using them in a somewhat random way, we probably need more ways to check their use.
    --- Jura 12:39, 26 November 2017 (UTC)
  • Pictogram voting comment.svg Options It would be good if one could define one-of-constraints for qualifier per property being qualified. e.g. criterion used (P1013) is being used on many properties, but values that make sense vary from one property to the other.
    --- Jura 12:39, 26 November 2017 (UTC)

Add constraints request to Property talk:P136#Need fix to constraints to stop this being directly applied to people[edit]

As noted in the subject line I placed a request at a property talk page. Is it preferred that the constraint requests are added here? [Says he with basic constraints knowledge though clearly not the arcane or deep knowledge.] Thanks.  — billinghurst sDrewth 23:17, 7 November 2017 (UTC)

If they are added here more of us will be aware of them. :-) - PKM (talk) 21:55, 25 November 2017 (UTC)

Property 4241 Refine date[edit]

Can you help me make sure refine date (P4241) is added as an allowed qualifer for all date properties? I just added it to date of birth (P569) and date of death (P570) (which is even in the examples on the property definition). - PKM (talk) 21:45, 25 November 2017 (UTC)

Naive question. Adding it to the parent Wikidata property with datatype 'time' (Q18636219) doesn't cascade down? Otherwise can you do it from the list at Special:Whatlinkshere/Q18636219 and use quickstatements to apply it?  — billinghurst sDrewth 03:03, 26 November 2017 (UTC)
@Lucas Werkmeister (WMDE): do constraint statements cascade in this way? It would be much the best solution for future maintainability as both new properties and new qualifiers will certainly be added. - PKM (talk) 19:31, 26 November 2017 (UTC)
@PKM: no, constraints don’t cascade from statement classes. And I’m not convinced it would be a good idea – it adds a lot of complexity (how do you merge constraints?) to solve a problem which shouldn’t be too difficult anyways (finding a list of constraints via WhatLinksHere or WDQS, and then editing the constraints, as billinghurst suggested, sounds doable). --Lucas Werkmeister (WMDE) (talk) 12:11, 4 December 2017 (UTC)
Sounds like a bright shiny note for property creators to add this to all date properties is then in order, as getting early seems best.  — billinghurst sDrewth 12:26, 4 December 2017 (UTC)
I was surprised to discover that many date properties don't have any "allowed qualifiers" constraints at all. I have added refine date (P4241) to publication date (P577), which was the only one I found that had this constraint and did not already have refine date (P4241). - PKM (talk) 00:53, 5 December 2017 (UTC)

Adding explanations for constraints[edit]

Currently, it seems like we have no way to tell our users why a given constraint exist in the case of a specific property. It would be nice if we could add information that will get shown inside the constraint violation error box for a specific constraint on a specific property. ChristianKl () 01:28, 13 December 2017 (UTC)

There’s also some discussion about this on Template talk:Constraint#Explanation parameter (ping @Waldir). --Lucas Werkmeister (WMDE) (talk) 10:33, 15 December 2017 (UTC)

List of constraints with their messages[edit]

On Help:Property_constraints_portal I added the link for the constraint messages I got from the discussion about Wikidata:Property_proposal/Property_metadata#Wikidata_constraint_text. Currently the links for the other one's aren't easy to find. Can someone add them? ChristianKl () 17:59, 17 December 2017 (UTC)

@ChristianKl: so the property proposal was discussed and withdrawn, but the situation isn’t completely cleaned up yet… can you perhaps create Phabricator tasks to update the message wording of the “single” and “multi value” constraints, so that we can have an improved version of the message across all wikis, and delete the MediaWiki:Wbqc-violation-message-single-value and MediaWiki:Wbqc-violation-message-multi-value pages? And then I would update the extension accordingly and clean up the “popular constraints” table. --Lucas Werkmeister (WMDE) (talk) 13:53, 26 February 2018 (UTC)
@ChristianKl: I’ve created phabricator:T192563 for this now. --Lucas Werkmeister (WMDE) (talk) 15:32, 19 April 2018 (UTC)

mandatory constraints[edit]

Lucas Werkmeister (WMDE) – work account, mainly for development discussions
Jarekt - mostly interested in properties related to Commons
User:MisterSynergy
John Samuel
Sannita
Yair rand
Jon Harald Søby
Pasleim
Jura
PKM
ChristianKl
Sjoerddebruin
Salgo60
Fralambert
Manu1400
Was a bee
Malore
Ivanhercaz
Peter F. Patel-Schneider
Pizza1016
Ogoorcs
Pictogram voting comment.svg Notified participants of WikiProject property constraints

When do we turn a normal constraint into a mandatory constraint?
Mandatory constraints were introduced because it is difficult to monitor all new created violations and therefore data degradation can happen. With the introduction of mandatory constraints, the hope was to at least monitor all these constraints and to fix their violations on a daily basis (original announcement by User:Ivan A. Krestinin). Today, the goal of a zero error rate seems out of sight even for mandatory constraints (see list of mandatory constraint violations). Constraints are turned into a mandatory one even if they have 26,000 violations [2] or if there are known exceptions to the constraint [3]. Should we establish some guidance on how to define mandatory constraints? --Pasleim (talk) 14:04, 27 December 2017 (UTC)

I think we should mark them as mandatory when they have been at zero for quite a while. I try my best to minimize the amount of violations from time to time. Sjoerd de Bruin (talk) 15:18, 27 December 2017 (UTC)
I think the semantics of mandatory constraints say that it's wrong for a person to add information to them in most cases. In cases of normal constraints there are many cases such as the single value constraint where it frequently happens that it makes sense to add some data via QuickStatements without solving every single value constraint. With mandatory constraints bots or QuickStatement edits shouldn't lead to their violation. ChristianKl❫ 17:32, 27 December 2017 (UTC)
>> it makes sense to add some data via QuickStatements without solving every single value constraint
Isn't this the weakness of the Wikidata concept that a lot is created "under the radar" and as a person using the data you need to quality assure the data you receive? Normally its the other way around that you use a tool because you trust the result you get....
The intention of Tim Berners Lee with the Semantic Web was
  1. ) have a distributed solution
  2. ) that you choice what sources you trust
  3. ) that the semantic web is a bottom up system
Wikidata is an excellent initiative but we add less and less trust into the data with all "violations" and its very difficult to select in Wikipedia just to display data from Wikidata that is based on trusted authoritative sources....
Good or bad? - Salgo60 (talk) 10:59, 28 December 2017 (UTC)
Single value constraints don't help you with trusting data quality. Besides when Wikidata gives you two possible values, that's no trust violation. It's just Wikidata telling you that there are two possible values and it's up to you to decide which of those you want to trust more. Wikidata is by design pluralitstic.ChristianKl❫ 21:10, 30 December 2017 (UTC)
I think we can restart mandatory game now. Lets remove "mandatory" mark from all constraints with non-zero violations count. — Ivan A. Krestinin (talk) 11:40, 5 January 2018 (UTC)

A constraint with 2 possible properties.[edit]

I create this subjet, since this intervention of Multichill. I have to revert it, event if I think this is a good idea, since most items who use heritage designation (P1435), will have located in the administrative territorial entity (P131) or location (P276) (and sometime the two). It's possible to modifie item requires statement constraint (Q21503247) to have a multi-property result? Or create a new type of constraint?. --Fralambert (talk) 02:05, 31 December 2017 (UTC)

@Fralambert: the breaking was kind of intentional, we currently have over 269.137 constraint violations for that one so the other option was to remove it. See phab:T180875. Multichill (talk) 11:32, 31 December 2017 (UTC)
@Multichill: Thanks for your anwser. I will revert myself. --Fralambert (talk) 01:06, 2 January 2018 (UTC)
I'm fine either way. I have no clue how difficult this change would be. I don't think I ever looked at the code. Multichill (talk) 19:24, 2 January 2018 (UTC)
@Multichill: Should we replace it by a Complex constraint instead? At least we could turn back when the property constraint will permit to have multi properties. --Fralambert (talk) 04:50, 20 January 2018 (UTC)
@Fralambert: sounds like a good plan, but this query times out for me
SELECT ?item ?itemLabel ?itemDescription ?value ?valueLabel
WHERE
{
	?item wdt:P1435 ?value .
	FILTER NOT EXISTS { ?item wdt:P131 [] } .
    FILTER NOT EXISTS { ?item wdt:P276 [] } .
	SERVICE wikibase:label { bd:serviceParam wikibase:language "en" } .
}
LIMIT 1000

Try it!

Multichill (talk) 11:33, 21 January 2018 (UTC)
@Multichill: Don’t know what you are trying to do, but this one is instant and I think is equivalent to yours : https://query.wikidata.org/#SELECT%20%3Fitem%0AWHERE%0A%7B%0A%09%3Fitem%20wdt%3AP1435%20%3Fvalue%20.%0A%09FILTER%20NOT%20EXISTS%20%7B%20%3Fitem%20wdt%3AP131%7Cwdt%3AP276%20%5B%5D%20%7D%20.%0A%7D%0ALIMIT%201000 . author  TomT0m / talk page 12:25, 21 January 2018 (UTC)
@Multichill: Thanks TomT0m, I will replace it today. As the result, the total give 230000 results instead of 270000. A little better, but not to great. --Fralambert (talk) 14:31, 21 January 2018 (UTC)

A new constraint we need[edit]

As I have said elsewhere, we need a new constraint to assert that a given property should not have the same value as another specific one on the items that use it. This would be useful to somehow give a priority to subproperties on top of the parent properties they do replace. Can someone develop this? Thierry Caro (talk) 23:33, 1 January 2018 (UTC)

@Thierry Caro: can you explain a bit more and provide one or two examples? Probably best to file a task in phabricator to follow it. Multichill (talk) 19:50, 2 January 2018 (UTC)
Yes. Like if an item has mountain range (P4552)Hoggar Mountains (Q26399), it shouldn't have located on terrain feature (P706)Hoggar Mountains (Q26399) anymore, nor part of (P361)Hoggar Mountains (Q26399) by the way. So mountain range (P4552) should have new 'superseding constraint' → located on terrain feature (P706) and new 'superseding constraint' → part of (P361). Thierry Caro (talk) 00:02, 3 January 2018 (UTC)
@Thierry Caro: This would force us, in queries which are supposed to use the parent property, to replace the syntax with « the property or any of its subproperties ». Which is far more tedious to write, see : https://stackoverflow.com/questions/40018230/sparql-to-encompass-all-sub-properties-of-a-propertyas and does not play nicely with property paths (see the syntax I used in this query below :
SELECT ?item
WHERE
{
    ?item wdt:P1435 ?value .
    FILTER NOT EXISTS { ?item wdt:P131|wdt:P276 [] } .
}
LIMIT 1000
Try it! as variables can’t be used in property paths. (side note, this could be overcome in this case if P131 and P276 have a common subproperty (say « Pgeneric location » ) and if we dynamically update the complex constraint by replacing wdt:P131|wdt:P276 by all the results of the query select ?prop where { ?prop subproperty of* Pgeneric location ) which needs a property path itself as there is a « * » ) This is in contrast with subclasses who plays nice with them. Saying this just to highlight that abusing subproperties might have drawbacks and that there may be better tradeoffs on the technical side. In the case of location properties, we actually already know if the subject of the claim is administrative or not, so … is it REALLY useful to not just have a generic location property ? It’s easy to filter out the non administrative location by checking their types in queries if we just want them. And it need less work on the contributor side if we relax the constraint, less constraint violations. author  TomT0m / talk page 12:54, 21 January 2018 (UTC)

difference within range constraint (Q21510854)[edit]

Property:P570#P2302 has this constraint, but the gadget seems to throw an error even if items have no P569. I don't think should happen and this doesn't happen on the constraint reports.
--- Jura 10:38, 11 January 2018 (UTC)

@Jura1: Hm, it’s not clearly stated on Help:Property constraints portal/Diff within range, but to me it seems like difference within range constraint (Q21510854) should imply item requires statement constraint (Q21503247)… but now that I phrase it like this, I suppose that explicitly requiring that constraint if intended would be the clearer approach, and perhaps we should change the behavior in WikibaseQualityConstraints to report “compliance” if the statement to compare with doesn’t exist. What do others think? --Lucas Werkmeister (WMDE) (talk) 11:44, 11 January 2018 (UTC)
@Jura1: I’ve created phabricator:T185480 to discuss this. --Lucas Werkmeister (WMDE) (talk) 12:32, 22 January 2018 (UTC)

Caching of constraint check results[edit]

Hi everyone! We just enabled caching for constraint check results – you should hopefully notice that constraint check results appear much faster, especially on large items (the response time of the wbcheckconstraints API call seems to drop from about 6 seconds to a few hundred milliseconds on Q42). For now, results are cached independently for each language, but we hope to improve this soon and reuse the same cache for all languages (phabricator:T185709).

Assuming everything works correctly, cached results should™ be invalidated automatically any time that the cached result could become outdated (when the item is edited, or in the case of constraints like “symmetric” or “inverse”, when the target item is edited, etc.), except for constraints involving SPARQL (“type”, “value type”, “distinct values”), where it’s possible that an item somewhere in the chain of types is edited and we don’t know about it. In any event, you can always purge a page (?action=purge) to purge cached constraint check results as well.

Please let us know if you find any problems with the caching! We’ve had to postpone this twice already after problems were found just before we thought we were ready, so I hope there aren’t any big issues left, but more eyes can always find more problems ;) --Lucas Werkmeister (WMDE) (talk) 14:45, 26 February 2018 (UTC)

Update: it looks like this change resulted in severe performance issues, and had to be rolled back. Check the above issue for updates. --Lucas Werkmeister (WMDE) (talk) 18:17, 26 February 2018 (UTC)
Update 2: we’ve enabled caching again and this time there doesn’t seem to be a performance problem, so hopefully we can keep it enabled :) reusing the same cache for all languages should also hopefully happen soon. --Lucas Werkmeister (WMDE) (talk) 17:31, 12 March 2018 (UTC)

allowed qualifiers constraint (Q21510851): make use of item of property constraint (P2305) qualifier ?[edit]

Lucas Werkmeister (WMDE) – work account, mainly for development discussions
Jarekt - mostly interested in properties related to Commons
User:MisterSynergy
John Samuel
Sannita
Yair rand
Jon Harald Søby
Pasleim
Jura
PKM
ChristianKl
Sjoerddebruin
Salgo60
Fralambert
Manu1400
Was a bee
Malore
Ivanhercaz
Peter F. Patel-Schneider
Pizza1016
Ogoorcs
Pictogram voting comment.svg Notified participants of WikiProject property constraints


I was looking for a solution for this before and it now seems that it could be fairly simple to solve.

At flag bearer (P3022) it could be helpful to list the allowed values that go with the qualifier of (P642).
Sample at https://www.wikidata.org/w/index.php?title=Property:P3022&oldid=643104811 , item using the qualifier/qualifier values: Q140325#P3022.

item of property constraint (P2305) isn't being read yet, but it would be worth adding.
--- Jura 08:30, 4 March 2018 (UTC)

I’d use valid in period (P1264) instead of of (P642) View with SQID. author  TomT0m / talk page 12:10, 4 March 2018 (UTC)
But that would require creating items for the ceremonies. Overall this could be a good idea to do that actually, and to move the flag bearer (P3022) statements to the ceremonies items. Ceremonies are naturally parts of the main events. author  TomT0m / talk page 12:14, 4 March 2018 (UTC)
  • The question here is about the feature, not which property/qualifier to use on what item. That might better be settled at the relevant property talk page or WikiProject.
    --- Jura 12:19, 4 March 2018 (UTC)
@Jura1: but what should happen if there are multiple allowed qualifiers, possibly with different data types (e. g. some “item”, some “quantity”, some “time”, etc.)? For item requires statement constraint (Q21503247) and value requires statement constraint (Q21510864), this ambiguity doesn’t arise because there’s a separate constraint for each property, but allowed qualifiers constraint (Q21510851) lists all the qualifiers in a single constraint, so there’s no way to know which allowed values belong to which property. --Lucas Werkmeister (WMDE) (talk) 10:53, 5 March 2018 (UTC)
It would need multiple statements (UNION). I don't think it's much of an issue for qualifiers that don't have item-datatype. For these, the general constraints should be sufficient.
--- Jura 11:04, 5 March 2018 (UTC)

@Ivan A. Krestinin, Lucas Werkmeister (WMDE): would this be complicated to implement?
--- Jura 16:12, 14 April 2018 (UTC)

@Jura1: Merging multiple constraints as you describe would be difficult, usually constraints are checked independently of each other. But before we go into implementation details, we should first settle whether this constraint type is needed, and whether allowed qualifiers constraint (Q21510851) + item of property constraint (P2305) is the best way to model it. To me it sounds more like a one-of constraint (Q21510859) that is only valid in a certain scope (when the property is used as a qualifier of a certain other property). --Lucas Werkmeister (WMDE) (talk) 11:37, 15 April 2018 (UTC)
I tried to split the allowed value qualifier constraint of speed limit (P3086) into to statements ([4]). It ends up with separate violations for each on constraint reports.
So, at least for current constraint reports, we would need to make a new type of constraint. "allowed qualifier value"? e.g. with a single property in qualifiers and one (or several) values.
--- Jura 15:44, 19 April 2018 (UTC)

For the record, Jura1 created this constraint type a month ago (one-of qualifier value property constraint (Q52712340)). So far, it’s only used on a single property, flag bearer (P3022), where the constraint statement is itself a mandatory constraint violation (one-of qualifier value property constraint (Q52712340) is not one of the allowed values of property constraint (P2302)), and it’s not documented anywhere as far as I can tell. --Lucas Werkmeister (WMDE) (talk) 11:59, 6 June 2018 (UTC)

Database reports/Constraint violations/Errors[edit]

Lucas Werkmeister (WMDE) – work account, mainly for development discussions
Jarekt - mostly interested in properties related to Commons
User:MisterSynergy
John Samuel
Sannita
Yair rand
Jon Harald Søby
Pasleim
Jura
PKM
ChristianKl
Sjoerddebruin
Salgo60
Fralambert
Manu1400
Was a bee
Malore
Ivanhercaz
Peter F. Patel-Schneider
Pizza1016
Ogoorcs
Pictogram voting comment.svg Notified participants of WikiProject property constraints @Ivan A. Krestinin: How can we solve these? I think some Ivan would need to fix, others we should be able to do. It would be good if report updates wouldn't have too many of these.
--- Jura 20:01, 9 March 2018 (UTC)

@Ivan A. Krestinin, Lucas Werkmeister (WMDE):

  • Would you check and tell us who could resolve which ones?
    --- Jura 08:31, 3 April 2018 (UTC)

I fixed a few from today. For the others: @Ivan A. Krestinin::

Thanks.
--- Jura 15:31, 13 April 2018 (UTC)

separator (P4155)[edit]

@Ivan A. Krestinin, Lucas Werkmeister (WMDE):

What is the current status of the implementation of support for this on single value constraints? Can this be expanded to distinct value constraints?
--- Jura 08:33, 3 April 2018 (UTC)

Request constraint statistics by type and property from an API?[edit]

There is a statistical overview of constraint violations per constraint and property at Wikidata:Database reports/Constraint violations/Summary. The page is fairly large with more that 700k in source code size, and only occasionally updated by KrBot. I suspect that it is rather expensive to evaluate the numbers from dumps.

Do we meanwhile have a possibility to check the number of constraint violations per type for a single property? I would be interested to set up a much shorter version of the list above, for a specific topic (sports, so roughly for properties in Template:Sports properties). I could probably evaluate the numbers with a set of SPARQL queries, but it would be much simpler if the data was already available from an API. Can anyone help? —MisterSynergy (talk) 10:02, 6 April 2018 (UTC)

@Lucas Werkmeister (WMDE): did you see this? I guess if you don’t have an answer, I think I can safely assume that there is no such API available … —MisterSynergy (talk) 13:50, 19 April 2018 (UTC)
@MisterSynergy: Sorry, not sure why I didn’t reply earlier… we currently don’t have any global information about constraint violations, since we only check constraints individually as each item is visited. phabricator:T183272 is essentially about the same kind of information, so perhaps you could subscribe to that… but I’m not sure if or when we’ll get to it. (phabricator:T172380 would also help, but you created that task yourself, so I assume you’re aware of it :) ) --Lucas Werkmeister (WMDE) (talk) 13:57, 19 April 2018 (UTC)

Regex on reference URL (P854)[edit]

Could somebody take a look at the regex in the format constraint (Q21502404) on reference URL (P854). Is the intention really to forbid specific references to specific revisions of Wikipedia pages? (see eg Q6766578#P569 for use case). Jheald (talk) 13:54, 7 April 2018 (UTC)

  • Not specific ones, but in general, yes. There is now "Wikimedia import url". For this usecase, I think it would do.
    --- Jura 14:37, 7 April 2018 (UTC)
    • Thanks, updated. Though I have to say, I still find that regex pretty obscure, and I thought I knew regular expressions! Jheald (talk) 14:50, 7 April 2018 (UTC)

Property constraints navigation template[edit]

Template:Property constraints have been created. Please add, change items! Thanks! --Was a bee (talk) 19:36, 15 April 2018 (UTC)

Count best-rank statements in “single value” constraint[edit]

Hi everyone! We’re thinking of adding a variation of single value constraint (Q19474404) that counts best-rank statements instead of non-deprecated statements. Best-rank statements are what you get in the Wikidata Query Service if you ask for e. g. ?country wdt:P6 ?headOfGovernment: if there are multiple head of government (P6) statements on ?country, but one of them (the current head of government) has preferred rank, than that is the best-rank statement and only that value will be selected for ?headOfGovernment. It seems to us that a constraint type which counts best-rank statements instead of non-deprecated statements would be useful for many kinds of properties, where you may want to allow several (e. g. historical) values but there should be one unambiguous main value – see phabricator:T183268 for some examples.

One question that’s still open is how to model such a constraint. The original idea recorded in phabricator:T183268 was to have some kind of parameter, perhaps “counting mode”, which would be added to property constraint (P2302)  single value constraint (Q19474404) as a qualifier and would specify that the constraint should count best-rank statements instead of non-deprecated statements. But more recently it seems to me that it might make more sense to add this as a separate constraint type (new item) instead: the constraint works fairly differently and should have different violation messages and documentation pages, and this would also let us avoid going through a property proposal process for this fairly custom “counting mode” property. What do you think? --Lucas Werkmeister (WMDE) (talk) 13:21, 19 April 2018 (UTC)

Flip a coin to pick one ? ;)
For monolingual strings it might be interesting to have a counting mode that checks this on a per language basis. Another problem there is that if one language has several values and one is preferred, this replaces it for all others. Depending on the property, this can be desirable (or not).
--- Jura 13:27, 19 April 2018 (UTC)
@Jura1: hm, that almost sounds like the language should be another kind of separator (P4155)… --Lucas Werkmeister (WMDE) (talk) 15:15, 19 April 2018 (UTC)
Interesting idea. If you had to estimate, which ratio (number of properties) of “single non-deprecated value” to “single best-rank value” constraints would you expect? The first one (status quo) will probably be applicable to most identifier properties that currently carry a “single value” constraint, but I have no idea how often we need the second one … Anyway, spontaneously I tend to like the “new constraint item” approach a bit more than the “counting mode qualifier” mode, but I would change my mind if there is a good reason for the latter. —MisterSynergy (talk) 13:48, 19 April 2018 (UTC)
@MisterSynergy, one example of properties where the single best-rank value would be useful are properties where there could be historical data stored in the entity but only one preferred entry should be stored like population (P1082), Elo rating (P1087), located in the administrative territorial entity (P131) and head of government (P6) among others. -- Agabi10 (talk) 14:59, 19 April 2018 (UTC)
@Agabi10, MisterSynergy: yes – for non-identifier properties, I feel like the “best-rank” interpretation is the much more useful one, and I had trouble even finding convincing examples for the “non-deprecated” interpretation. (But some do exist: fictional analog of (P1074), retrieved (P813), version type (P548), list of episodes (P1811), domain (P1568), codomain (P1571), and some others shouldn’t really have historical information, as far as I understand.) --Lucas Werkmeister (WMDE) (talk) 15:08, 19 April 2018 (UTC)
I’ve created an item for this now: single best value constraint (Q52060874). If we decide against the new constraint type, we can always delete the item. --Lucas Werkmeister (WMDE) (talk) 12:09, 20 April 2018 (UTC)
Sure. For population, we'd need a two-best rank statements constraint (depending on the determination method), but the separator can take care of that.
--- Jura 12:19, 20 April 2018 (UTC)
Just curious, could a property have both? Single value and single best value constraint? This could ensure that non-best values would be qualified with the separator.
--- Jura 06:20, 22 April 2018 (UTC)
I'm hitting this a lot with date of death (P570), where many references just have the year of death, but the best references have the specific day of death. It's stupid that even when the latter is indicated as "preferred rank", the statement is still triggering 'single value constraint' warnings.
I would have thought that the default should be for 'single best value constraint' should take over existing 'single value constraint' settings, with the stricter 'single non-deprecated value' should have to be opted into. Jheald (talk) 11:30, 26 April 2018 (UTC)
@Jheald: my gut feeling is that most of the uses of single value constraint (Q19474404) should be migrated to single best value constraint (Q52060874) instead (except perhaps for identifiers?), but I think introducing it as a new constraint type is safer than changing the behavior of the fourth-most common constraint type… --Lucas Werkmeister (WMDE) (talk) 17:02, 26 April 2018 (UTC)

New Grafana board for constraints[edit]

Hello,

For your information, we now have a new graph in the "Wikidata quality" board, constraints by type. It is showing the number of constraints we have, by type. It will allow us to follow the evolution of the constraints during time. Lea Lacroix (WMDE) (talk) 14:09, 20 April 2018 (UTC)

Thanks, great! (The format of the displayed numbers with decimal prefixes “k” in the list below the chart is a bit odd, but not wrong.)
Now phab:T183272, please … :-) —MisterSynergy (talk) 14:23, 20 April 2018 (UTC)
Thanks. I think it's an interesting start. Maybe we can come up with more ways of grouping them.
--- Jura 05:46, 21 April 2018 (UTC)

Constraint scope[edit]

We have a couple of broken covi reports at Wikidata:Database reports/Constraint violations/Errors due to permitted constraint scope (P4680) qualifiers. Besides the problem that I don’t understand the intention of the defined constraints anyway (@Jura1), I find it difficult to learn how and where exactly constraint scope (P4680) should be used as a qualifier. The help pages Help:Property constraints portal/Value, Help:Property constraints portal/Qualifier, and Help:Property constraints portal/Reference mention that one can use this qualifier as parameter to the constraint types used for values only constraint (Q21528958), used as qualifier constraint (Q21510863), and used as reference constraint (Q21528959), but apparently they are not accepted. What to do? —MisterSynergy (talk) 06:32, 19 May 2018 (UTC)

  • It's a problem with KrBot reports. They break when constraints that work with the gadget only are used. Ivan is aware of the problem.
    --- Jura 06:35, 19 May 2018 (UTC)
    • What’s the purpose of, for instance, the qualifiers in named as (P1810)? I don’t get it… —MisterSynergy (talk) 06:51, 19 May 2018 (UTC)
      • See above. Essentially it means that the property can only be used in references or as qualifier. Thinking it over: actually, one constraint would achieve the same ..
        --- Jura 06:58, 19 May 2018 (UTC)
        • “It’s very ugly … I’m not recommending that this should be used!” :-) Still having difficulties to understand it… —MisterSynergy (talk) 07:04, 19 May 2018 (UTC)
          • It's not the solution suggested by Lucas. If the property is used directly on the item ("main value"), it fails the check as it should only be used as qualifier (or reference).
            --- Jura 07:10, 19 May 2018 (UTC)
            • This should definitely be improved. Maybe with “not used for values/qualifiers/references” constraints? —MisterSynergy (talk) 07:23, 19 May 2018 (UTC)
  • Maybe it's worth mentioning that KrBot's default is constraint checked on main value (Q46466787) for many constraints, but this isn't mentioned in the Help pages. The feature was introduced as the gadget checked constraints also elsewhere and its initial defaults for some constraints were broader.
    --- Jura 07:10, 19 May 2018 (UTC)

Change of format for scope constraints[edit]

@Ivan A. Krestinin: I just saw you changed the format of scope constraints to use a different format. Was this discussed anywhere? Why was this change made while the standard implementation (the gadget) has apparently not been migrated to understand this format yet?

Such a change basically disables all these checks while the Wikidata team updates its implementation. I would prefer if that migration was only done once the relevant patches are deployed, and ideally with a transition period where both formats are present on the properties.

Also, there are now multiple implementations of the constraint system (your KrBot, the gadget, HarvestTemplates, OpenRefine, and maybe others). So it would be nice if the maintainers of these systems could be notified and given plenty of time to adapt (which means: months, not hours). This actually breaks stuff - at OpenRefine we actually have tests which break when this sort of change is made. This severely impacts the development process, even for unrelated changes (as the entire build is marked as failing).

So: I would recommend to revert the change immediately. I have added back the previous claims on head of government (P6), reason for deprecation (P2241) and reference URL (P854) which are necessary for our tests but that's just an emergency measure.

On the long term we need to figure out a way for implementers to subscribe to something (a page, a wikiproject, a mailing list, whatever) so that these changes can be coordinated properly. − Pintoch (talk) 21:48, 22 May 2018 (UTC)

Hello,
After discussing with Lucas and Lydia, we think that this change is generally going to the right direction.
However, we agree with Pintoch that the process to make such big changes on constraints should be clearer, in order to inform people working on different tools.
What about deciding that the Wikidata:Stable Interface Policy should also apply for constraints, and that the present talk page should be the place to announce any change at least 2 weeks in advance? What do you think?
Cheers, Lea Lacroix (WMDE) (talk) 10:55, 23 May 2018 (UTC)
I fully Symbol support vote.svg Support this comment. —MisterSynergy (talk) 11:17, 23 May 2018 (UTC)
+1 --Pasleim (talk) 13:07, 23 May 2018 (UTC)
Symbol support vote.svg Support I agree with comment. But at the same time, I have concerns that "announce 2 weeks in advance about all mass changes" can be a burden for both constraint developers and community. Because if all try-and-error process are prohibited, it makes difficult for constraint developers to test validity and to refine specifications. At the same time, if there are no actual examples in data pages, it is difficult for community to assess the actual effects of proposed changes.
So how about split "removal/modification of existing constraint" (this could be problematic for other tools) and "adding new constraint claims" (this is basically not problematic for other tools). For example, something like, "announce 2 weeks in advance if you do mass modification or mass deletion toward exiting constraints. Newly adding constraint claims for test or evaluation purpose is OK as far as you put clearly the page pointer for the feedback."
I think this makes happy for both developers and community. --Was a bee (talk) 14:34, 23 May 2018 (UTC)
@Was a bee: I think we might have a misunderstanding here – what I want to have, and what I think Lea Lacroix (WMDE) meant as well, applies only to changes to the constraints system overall, not to individual constraints. There’s no need to notify users two weeks in advance if you want to add another allowed value to the one-of constraint (Q21510859) of some property, or add a single best value constraint (Q52060874) constraint somewhere (though it should ideally still be discussed on the property’s talk page, IMHO). But adding a new constraint type, or a new kind of constraint parameter for an existing constraint type, or removing some existing constraint types – that’s a lot more significant, and that is what needs some solid discussion and a waiting period, in my opinion. --Lucas Werkmeister (WMDE) (talk) 15:00, 23 May 2018 (UTC)
@Lucas Werkmeister (WMDE): Oh, I understand. System level change is not so frequent and is generally discussed by experienced people. Then it's OK. I totally agree the proposal. --Was a bee (talk) 16:00, 23 May 2018 (UTC)
A comment on the actual format of the constraint – I think it makes sense to have one constraint to replace used for values only constraint (Q21528958), used as qualifier constraint (Q21510863) and used as reference constraint (Q21528959), but I don’t agree with the current model. I’m not sure if I would call this constraint “scope”; I definitely wouldn’t use the parameter constraint scope (P4680), which already has a different meaning; and I definitely wouldn’t use the items constraint checked on main value (Q46466787), constraint checked on qualifiers (Q46466783) and constraint checked on references (Q46466805) either, whose English labels very clearly restrict them to constraint scope (P4680) (to check where a constraint is checked), not this new constraint type (to check where a property is used). --Lucas Werkmeister (WMDE) (talk) 12:20, 23 May 2018 (UTC)
I agree that the format could be improved. While we devise the best syntax, and to restore compatibility with existing systems, I am reverting back to the original format. See Wikidata:Requests_for_permissions/Bot/PintochBot 3. − Pintoch (talk) 18:14, 25 May 2018 (UTC)
The change was made by User:Pintoch request. Constraints for many properties was in state that was conflicting with Help:Sources#Databases. So I agree with Pintoch, the fix was needed in short time. Mass edit was needed to keep integrity of constraints system. Partial migration is not good state. Introducing new constraint type is not a big deal for all parts of system that I know. Removing some constraint is not the issue too. Because some constraint can be removed as part of normal workflows. So what is the issue? What is broken (except some tests that uses production uncontrolled environment instead of test environment)? Suggestion about "2 weeks" is looked as step back from every day changing world where we all live. Many changes were made without notifying me. It is not the problem. About constraint scope (P4680), I checked this property usage before starting using it in new constraints. All use cases were correctly migrated. The only thing that were not made are improving item and property labels, descriptions and documentation. I am sorry, I have no time for this. — Ivan A. Krestinin (talk) 20:33, 23 May 2018 (UTC)
Hi Ivan A Kreistinin - do you understand the issue with unilaterally changing the syntax of a constraint? That's very different from the fix I requested. Would you be happy if I decided to change the format of other constraints in a way that would break KrBot? Do you realize that because the constraints violation gadget does not understand your syntax, you have *disabled* constraints on thousands of properties? I just want to make sure you understand the issue. − Pintoch (talk) 08:29, 25 May 2018 (UTC)
Original system does not allow to describe constraint like "applicable as main value and reference, but not in qualifiers section", so change is needed to fix the issue. I do not see any incompatibility with constraints violation gadget. It just ignores new constraint type for now. — Ivan A. Krestinin (talk) 19:17, 25 May 2018 (UTC)
I think we have an issue with gadget and with my bot`s code. It is hard to fix this code as simple as add new Wikidata item or fix Wikidata:Constraints. So new changes will broke my bot, the gadget and any other constraints clients. This fact must not stop users from implementing new ideas. For example somebody introduced allowed entity types constraint (Q52004125), he did not notify me, he just implement new idea. By bot is broken, but this is not a problem. I will fix the bot latter. And say "thanks!" to the user for this great new idea. — Ivan A. Krestinin (talk) 19:49, 25 May 2018 (UTC)
@Ivan A. Krestinin: Introducing new constraints is fine (although it should also be discussed beforehand in my opinon). Mass deleting existing ones is not. Your original goal was to get more constraint checks on these properties, and what you did was the exact opposite: entirely disabling all constraints of this form. Is it really that hard to understand? − Pintoch (talk) 08:12, 26 May 2018 (UTC)
Are you about used as qualifier constraint (Q21510863), used for values only constraint (Q21528958), used as reference constraint (Q21528959)? Its were used rarelly. Saving both property scope constraint (Q53869507) and these constraints is redundant. — Ivan A. Krestinin (talk) 08:21, 26 May 2018 (UTC)
  • Pictogram voting comment.svg Comment Didn't we have the same whem WMDE development introduced new scopes for constraints? It might feel nice to lecture Ivan about it, but I don't recall much if any onwiki discussion before the existing constraints were suddenly changed to apply to references .. Besides, if it wasn't for Ivan to have built these constraints, I wonder what state Wikidata's quality would be in ..
    --- Jura 09:01, 26 May 2018 (UTC)
    • Sure! I am very grateful to Ivan (which I have written a few days ago on his talk page by the way). As far as I know, checking constraints on references did not incur any change of syntax in the constraints that broke existing functionality on values. There is a difference between introducing a new feature, a new parameter (such as the constraint scope (P4680)) or a new constraint, and unilaterally changing a syntax people already rely on. The difference between the two can be explained in very simple terms: in the first case, you do not break anything (these new features are just not supported yet by the existing implementations). In the second, you break things (the existing implementations used to check these constraints, now they do not). I do not exactly enjoy lecturing anybody - my own time is also limited and I would be very happy if I could spend it on something else than that. − Pintoch (talk) 09:46, 26 May 2018 (UTC)
      • I'm not sure who breaks what. The primary tool for constraints are Ivan's reports. You probably noticed that these broke as some made changes to the syntax and Ivan has to fix them.
        --- Jura 09:56, 26 May 2018 (UTC)
        • No, I did not notice these changes. Which ones are you referring to? If that already happened in the past, then the benefit of prior discussion and coordination should be all the clearer to him as far as I can tell? So I am not really sure what your point is… People have already broken stuff in the past, so that is an excuse to keep doing that? Maybe I should "retaliate" somehow by starting to break stuff myself too? I am honestly very puzzled. − Pintoch (talk) 10:16, 26 May 2018 (UTC)
Given that these Qids and the associated constraints are still used in WikibaseQualityConstraints (as well as OpenRefine), I think it would be very premature to delete these items. Again, I agree that it would be useful to devise a more flexible format for these constraints. However, the syntax you "proposed", or rather imposed to everybody else, is flawed (as explained by Lucas). So, I think the way forward would be to propose a new syntax which would be approved by the community, then give some time for implementers to update their code, and finally migrate the statements to the new format.
As far as OpenRefine is concerned, updating the code requires releasing a new version, which can take many months. But this is just a side remark - I have now understood that you just do not care about other implementations than your own, including the one from WMDE apparently.
Again, I know that you have been working on constraints basically alone for a very long time and I admire this work. But you are not alone anymore, and this is fantastic: your system has been adopted by others! It has been made much more visible by the constraints gadget. This is a great achievement - it means that your project is now much more sustainable, because it is very well integrated in everyone's workflows. Now other people are working for you - just use them! If you accept to change slightly the way you work, by adding a bit of coordination, these other people will help you. So: no you don't have "ownership" of the whole system anymore - you have a lot better than that: developers working (for free!) to integrate the system you came up with in many different contexts. Isn't that great? − Pintoch (talk) 09:51, 29 May 2018 (UTC)
So many words... My plan was:
  1. Introduce property scope constraint (Q53869507)
  2. Migrate data from used as qualifier constraint (Q21510863), used for values only constraint (Q21528958), used as reference constraint (Q21528959) to property scope constraint (Q53869507)
  3. Mark old constraints for deletion
  4. Fix Module:Constraints
  5. Fix my bot`s implementation
  6. Wait for fixes in another tools
This plan allows to keep constraints system integrity as much as possible. I implemented steps #1-#5, but you reverted part of step #2. What is your current plan? — Ivan A. Krestinin (talk) 22:34, 29 May 2018 (UTC)
For HarvestTemplates I maintain an own implementation of the constraint violation system. Basically I agree with your migration plan, but important is that #6 is done shortly after #2 to prevent any malfunctioning tools. This means that all changes to the constraint violation system have to be announced a few weeks in advanced to allow all parties to prepare for the necessary changes. An early announcement would in addition allow to correct any flaws in the syntax. --Pasleim (talk) 23:24, 29 May 2018 (UTC)
I would personally prefer to have #6 even *before* #2. In particular, I think we should wait for the WMDE implementation to be updated and deployed before migrating any data. − Pintoch (talk) 07:32, 30 May 2018 (UTC)
WMDE implementation is limited and does not supports all constraints and features as I know (please correct me if I am wrong). Additional constraint is just one more currently unsupported feature. Do we really need to wait for this exact feature implementation? — Ivan A. Krestinin (talk) 19:46, 30 May 2018 (UTC)
The WMDE implementation is the reference now - it is the most visible and mature one, run by the same organization that runs Wikidata. Any logged-in user will interact with it as they edit. The constraint reports are great, but let's face it: they are not updated instantly, are impractical for widely used properties, and few people actually know about them (I was actually surprised to find out that some advanced Wikidata users discovered them just a few weeks ago). If that is not enough: the gadget is well documented, tested, localized, integrated in the MediaWiki API.
Additional constraint is just one more currently unsupported feature. do you really not understand or is it just pure bad faith? If you change the syntax of a constraint, no it is not just one more unsupported feature - it is emphatically one *less* supported feature. − Pintoch (talk) 07:36, 31 May 2018 (UTC)
Reference implementation idea is in conflict with base Wiki principles. Everybody can improve something in Wiki project in any moment of time. But "reference implementation" is something stable. So I do not look to WDME implementation as to "reference implementation", it just one of implementations. Constraints are not really integrated into Mediawiki API, its just implemented in the same manner as other API calls. Its do not integrated with other API calls. For example wbcreateclaim API call does not check data using constraints before saving (as it is implemented in another databases). You are saying about less supported feature. Previously you are say about something broken. But did not provide any details. — Ivan A. Krestinin (talk) 22:51, 31 May 2018 (UTC)
Okay here is a concrete example:
  • Take a property where you have changed the constraint to your new syntax, such as child (P40)
  • Use it in an inappropriate location, such as in a reference
  • The constraints gadget does not report any violation, which it used to do. This is a regression.
Example: https://www.wikidata.org/wiki/Q4115189#P407
This feature was previously supported by the gadget, now it is not (since you have imposed your new format without prior consultation). Is that clear enough, or should I make a GIF screencast maybe?
I also find it amazing that you mention the base Wiki principles. Don't you think that discussing mass changes before doing them is a "wiki principle" too? − Pintoch (talk) 08:22, 1 June 2018 (UTC)
Ok, this is a mess. Just do a partial rollback Pintoch. Multichill (talk) 20:33, 2 June 2018 (UTC)
@Multichill: I have proposed that at Wikidata:Requests for permissions/Bot/PintochBot 3. It seems that both Jura1 and MisterSynergy would prefer to duplicate the constraints (add back the previous format without deleting the new one), so that all implementations work. I am happy either way. − Pintoch (talk) 10:41, 3 June 2018 (UTC)
I understand you now. As I understand you suggests the next way: start discussion (several weeks), do new constraint support in the most implementation (2-3 weeks), add new constraint to all properties, wait for remaining implementations (3-4 weeks), delete old constraints, cleanup all implementations from deprecated code (~1 week). The way is looked as time consuming. — Ivan A. Krestinin (talk) 21:49, 5 June 2018 (UTC)
@Ivan A. Krestinin: WMDE implementation is limited and does not supports all constraints and features as I know (please correct me if I am wrong) – if you know any missing constraint types or features that we don’t support, please open a task on Phabricator! --Lucas Werkmeister (WMDE) (talk) 15:33, 5 June 2018 (UTC)
For example format constraint does not support novalue check as I know. — Ivan A. Krestinin (talk) 21:49, 5 June 2018 (UTC)
@Ivan A. Krestinin: well, we deliberately don’t check that constraint type on some/no value, as discussed on Help talk:Property constraints portal/Format. I don’t consider this to be a missing feature, and from the discussion there, there doesn’t seem to be agreement that we should change this either. --Lucas Werkmeister (WMDE) (talk) 12:17, 6 June 2018 (UTC)
  • Symbol oppose vote.svg Oppose. I came here because I tried to add a "use as qualifier only" constraint and got an error. I'm surprised I haven't heard about this change at all in the past. I don't think the new scope constraint is more elegant than the old scope constraint: the old constraints only require 1 value to the "constraint" property. Now it requires a value and a qualifier with another target. What new feature does property scope constraint (Q53869507) offer that the old constraints doesn't? Deryck Chan (talk) 13:21, 4 June 2018 (UTC)
The goal was to make it possible to add constraints that allow a property to be used on main values and references but not in qualifiers. I am now restoring the previous constraints - you can keep using that for now. It is the format supported by the gadget. − Pintoch (talk) 14:07, 4 June 2018 (UTC)
Thank you Pintoch – at least we have a somewhat working state now. --Lucas Werkmeister (WMDE) (talk) 15:29, 5 June 2018 (UTC)
@Pintoch, Lucas Werkmeister (WMDE): Thanks. I'm withdrawing my opposition because it seems that we have an agreed, workable migration and deprecation plan now. Deryck Chan (talk) 16:50, 28 June 2018 (UTC)
We still need to decide how these constraints are going to be modeled.
Personally, I find the current state of the former “constraint checked on main value / qualifiers / references” items (Q46466787, Q46466783, Q46466805) very confusing: according to their English labels and descriptions, they’re now intended to represent, it seems to me, completely different concepts – the descriptions talk about the scope of the property, not of a constraint. I can’t tell whether the labels and descriptions in other languages also reflect this, and I also remain convinced that it’s a bad idea to conflate these two different concepts. Personally, right now I would suggest creating six new items (three for the property scopes, three for the constraint scopes), migrating to those new items (in coordination with all constraint check implementations), and (eventually) deleting the three current items.
What do you think? Let’s discuss this and agree on a common solution before editing thousands of properties this time :) --Lucas Werkmeister (WMDE) (talk) 15:29, 5 June 2018 (UTC)
I agree with you to a large extent, except for the fact that we are “only” 2 weeks into this drama right now, so I think we should revert constraint checked on main value (Q46466787) (constraint checked on main value), constraint checked on qualifiers (Q46466783) (constraint checked on qualifiers), constraint checked on references (Q46466805) (constraint checked on references) to their mid-May shape and keep them, create three new items for Ivan's model (as main value/as qualifier/as reference) and a property called “property scope” which we use in Ivan’s model instead of the constraint scope (P4680) qualifier. This should be done rather soon, in order to keep the impact on the old and new model as small as possible. We can then compare advantages and disadvantages of both models and decide which one to deprecate, and how to fade out the use of the deprecated model.
@Ivan A. Krestinin: would that be possible? You would need to put the new qualifier property and the three new items into your bot code. —MisterSynergy (talk) 19:33, 5 June 2018 (UTC)
I have time to implement any suitable model. This requires ~0.5 hour for implementing constraint check and ~2 hours for constraints migration. But I have no 3 weeks to discuss the changes. Really effective companies can make several global changes per day. But we discuss simple change several weeks... I think project with such performance has bad positions in modern dynamically changed world.
About your suggestion: it is looked over-complicated. I think everything must be as simple as possible, but not simpler. — Ivan A. Krestinin (talk) 21:49, 5 June 2018 (UTC)
Well yes we should try to be quick, but still work precisely in order to avoid “over-simplification”. The situation right now is that constraint checked on main value (Q46466787) (constraint checked on main value), constraint checked on qualifiers (Q46466783) (constraint checked on qualifiers), constraint checked on references (Q46466805) (constraint checked on references) have suffered kind of a hostile takeover by your model, although they have originally been defined for the other one (see Lucas’ comments). Also, the constraint scope (P4680) qualifier does not really fit logically, as we need “property scope” instead. So from my point of view it would be better to cleanly define both models completely independently. In your code you would probably have to update three Q-IDs and one P-ID; the migration in the affected properties is rather easy as well; the only burden would be that we had to go through a property proposal process for the new qualifier. —MisterSynergy (talk) 05:11, 6 June 2018 (UTC)
Please see my previous comments. I migrated all usages of constraint scope (P4680) to new model. So there is no "over-simplification". — Ivan A. Krestinin (talk) 16:47, 11 June 2018 (UTC)

A property proposal and three new values[edit]

Okay, to push things forward I have created a property proposal at Wikidata:Property proposal/property scope, as well as three new values as main value (Q54828448), as qualifiers (Q54828449), and as references (Q54828450). They are intended to be used with Ivan's new model, to avoid the repurposing of constraint scope (P4680) as well as constraint checked on main value (Q46466787), constraint checked on qualifiers (Q46466783), and constraint checked on references (Q46466805). Mind that I have restored the latter three to their original form from mid-May of this year. Once the proposed property is created, we can define Ivan's model, which I really like, completely independently. After that has been done, we are going to evaluate both models and decide about deprecation procedures. —MisterSynergy (talk) 13:16, 6 June 2018 (UTC)

As I started to implement this, I just realized that this new property isn’t really necessary, we could’ve modeled it via item of property constraint (P2305)shrugs --Lucas Werkmeister (WMDE) (talk) 07:46, 18 June 2018 (UTC)
@Lucas Werkmeister (WMDE): I think it's still clearer with this new property, because the items we use are just symbols and do not relate to the constraint in the same way as, for instance, a one-of constraint. − Pintoch (talk) 08:10, 18 June 2018 (UTC)

What we are waiting?[edit]

Constraint system integrity is broken now. More than 1000 constraint reports are damaged. Several discussion threads are stopped without any conclusion... What we are waiting now? — Ivan A. Krestinin (talk) 16:56, 14 June 2018 (UTC)

Hi Ivan! I think it would be sensible to make your bot ignore the constraints it does not support. That is what all other implementations do.
The conclusion from the discussion is pretty clear I think: we will migrate the constraints to a new syntax, similar to the one you imposed, but with a different qualifier (property scope (P5314)). We first need to wait for WMDE to update their code to this new format, and then we will migrate all statements to that. On your side, you should only have to change the PID and QID used to read the constraint in your code. − Pintoch (talk) 18:01, 14 June 2018 (UTC)
Do we need both constraint scope (P4680) and property scope (P5314)? As I say before I migrated all usages of constraint scope (P4680) to new model. — Ivan A. Krestinin (talk) 18:07, 14 June 2018 (UTC)
Ivan, we have discussed this at length already. Can you please just read the discussion above, as well as Wikidata:Property_proposal/property_scope? − Pintoch (talk) 18:19, 14 June 2018 (UTC)
I did this. Could you do this too? But much more better is stop talking, start working. Where is migration plan? Do you prepared migration code? Do you prepare another constraints check implementation for the change? — Ivan A. Krestinin (talk) 19:05, 14 June 2018 (UTC)
I’m rather busy in real life these days, but if nobody else volunteers, I will replace at latest this weekend the qualifiers as proposed in the property proposal: From
property constraint
Normal rank property scope constraint Arbcom ru editing.svg edit
constraint scope constraint checked on main value
constraint scope constraint checked on qualifiers
constraint scope constraint checked on references
▼ 0 reference
+ add reference
+ add value
to
property constraint
Normal rank property scope constraint Arbcom ru editing.svg edit
property scope as main value
property scope as qualifiers
property scope as references
▼ 0 reference
+ add reference
+ add value
If there are only some qualifiers, I will only replace some qualifiers, of course. If there are other qualifiers, I will leave them unchanged. After all of that has been done, we can decide how to deprecate the weaker model (which would be the older one in my opinion). —MisterSynergy (talk) 19:43, 14 June 2018 (UTC)
All moved now (@Ivan A. Krestinin, Lucas Werkmeister (WMDE), Pintoch). See #Deprecate old model below for further details. —MisterSynergy (talk) 21:01, 15 June 2018 (UTC)
Really all? — Ivan A. Krestinin (talk) 21:25, 15 June 2018 (UTC)
Thanks. For whatever reason, some cases did not show up in the Query Service. Now done as well. —MisterSynergy (talk) 21:29, 15 June 2018 (UTC)
Do you have some WMDE task id or something like this? — Ivan A. Krestinin (talk) 18:15, 14 June 2018 (UTC)
I’ve created a task for this now: phabricator:T197473 --Lucas Werkmeister (WMDE) (talk) 15:09, 15 June 2018 (UTC)
I really don't care which model will be used going forward, but it doesn't seems that you guys are reaching consensus any time soon and report unavailability is damaging. Until this dispute is resolved I'm restoring status-quo to pre-May21 state on category of people buried here (P1791), category for alumni of educational institution (P3876) and category for employees of the organization (P4195) (effectively removing both mandatory constraint (Q21502408) and constraint checked on main value (Q46466787)). We were living without them before and will survive without them for a couple of months. I'll continue watching them to make sure they are not extensively used as qualifier. Once the situation is clarified, feel free to revert my changes. --Ghuron (talk) 18:39, 14 June 2018 (UTC)

Deprecate old model[edit]

Now that we have two technically independent representations of the same constraint concept, we need to deprecate one of them. I have already expressed my preference for the newer model (otherwise I wouldn’t have involved myself here as much as I did) and the general discussion here went pretty much into the same direction, but I am not sure whether we need to explicitly find consensus for that one once again. Any thoughts?

My suggestion: if there is no concern brought up here until this Sunday, I will mark the old three constraints used for values only constraint (Q21528958), used as qualifier constraint (Q21510863), and used as reference constraint (Q21528959) as deprecated. As User:Lea Lacroix (WMDE) suggested above, we could use the notification procedure at Wikidata:Stable Interface Policy to notify users about the removal of the deprecated model, although constraints are not (yet) part of the stable interface policy. Someone would have to write a mail to the listed mailing lists, and post to Project chat. The new model is already live in Wikidata, thus testing should be possible. At earliest two weeks later, on July 1, we could remove the old constraint types from properties and delete the items as well as the corresponding help pages. To my opinion two to three weeks should be enough for devs to adapt the new model.

Please comment. —MisterSynergy (talk) 21:01, 15 June 2018 (UTC)

Great, thanks a lot for taking care of this! − Pintoch (talk) 04:28, 16 June 2018 (UTC)
Constraints system is changed too often to be part of stable interface. Also constraints are metadata, not normal data. Its are not needed for normal data users. So not needed to wait 2-3 weeks. Just wait until phabricator:T197473 will be done. — Ivan A. Krestinin (talk) 11:02, 16 June 2018 (UTC)
phabricator:T197473 is closed. More than two weeks are over. I starting deprecated constraints removal process. — Ivan A. Krestinin (talk) 14:25, 3 July 2018 (UTC)

allowed entity types constraint (Q52004125)[edit]

It is reasonable to add allowed entity types constraint (Q52004125) to all existing properties. Are there any disadvantages? — Ivan A. Krestinin (talk) 19:52, 25 May 2018 (UTC)

Thanks for discussing the change beforehand. What about properties that are used in qualifiers or references? Does it make any sense to add this constraint to them? − Pintoch (talk) 08:35, 26 May 2018 (UTC)
  • I think it would help for properties that are made for use on properties. Currently this is generally done with a type constraint.
    --- Jura 09:17, 26 May 2018 (UTC)
    It is interesting think. Do you think that allowed entity types constraint (Q52004125) is redundant? Maybe we need to delete allowed entity types constraint (Q52004125)? — Ivan A. Krestinin (talk) 11:27, 27 May 2018 (UTC)
    In general, it's probably mainly useful for properties meant for Lexemes. We currently don't have that many, but that might change once "Senses" are available. For Lexemes, type constraints might work through the "grammatical feature" field, but just checking if the property is used on a lexeme seems easier.
    --- Jura 11:39, 27 May 2018 (UTC)
    I think about lexemes too. Primary goal that I want to reach is checking that properties that were created for items was not used for lexemes by mistake. — Ivan A. Krestinin (talk) 11:53, 27 May 2018 (UTC)
    Some properties created originally for items can be used on forms, for instance IPA transcription (P898). So I am not sure what sort of criterion can be used to determine if a property can be used on the new namespace? − Pintoch (talk) 13:20, 27 May 2018 (UTC)
    Initial criteria will be based on current usage. After this users can allow new namespace if it is needed for specific property. — Ivan A. Krestinin (talk) 21:20, 28 May 2018 (UTC)
    I am not sure it if doing this based on usage is a good idea: you saw what happened for the scope constraint and identifiers in references. Some people might try to use a property in a legitimate new place, see that it raises a constraint violation, and back off because they assume that someone had a reason to put that constraint. This is especially true for lexemes: given that this new namespace is barely starting, I would not expect usage statistics to give an accurate picture of what we should aim for. Are you trying to solve a specific issue with this? Have you encountered misuses in the wild that you think would benefit from that constraint? If not I think it would be better to just let users add these constraints where they are useful and when they see the need for it. − Pintoch (talk) 05:27, 29 May 2018 (UTC)
    Wait for users add ~5000 constraints manually... do you really think that this is efficient way? — Ivan A. Krestinin (talk) 22:13, 29 May 2018 (UTC)
  • I added the constraint to Sandbox-External identifier (P2536) and a few statements with the property to Lexeme:L1234. It seems to be me that it should be possible to use the constraint to ensure that the property isn't used directly on Lexemes, but possibly in references or qualifiers. However, currently, it doesn't seems to be designed to work that way. Can we change that?
    --- Jura 08:46, 31 May 2018 (UTC)

Integer constraint[edit]

Hello all,

The new integer constraint is now displayed in as a constraint check on the interface, see Q4115189#P1971 for example. Lea Lacroix (WMDE) (talk) 08:14, 31 May 2018 (UTC)

A blog post about constraints for beginners[edit]

Hello all,

I was discussing with Lydia about the idea of getting more Wikidatians aware about the constraints, and explaining to a broader audience (e.g. Wikipedians) how the constraints help increasing the data quality. We were thinking that a blog post explaining what are the constraints and how one can use them in daily editing.

This should not be technical content written by developers, but something written by and for the editors, that's why I'm suggesting it to you know :) If some of you are interested to write something together, we can also help reviewing it, or add some technical details if you want to. The post could be published on a personal blog or on the WMDE blog :)

What do you think? Would anyone like to write about their experience with constraints?

Cheers, Lea Lacroix (WMDE) (talk) 08:32, 31 May 2018 (UTC)

Keeping track of which implementation supports which constraints[edit]

To help users understand which system supports which constraint, I have made this table: Wikidata:WikiProject property constraints/implementations @Ivan A. Krestinin: I did not know where to find KrBot's source code so I have not added the statements for KrBot (just two of them). Is your implementation available somewhere? − Pintoch (talk) 09:50, 6 June 2018 (UTC)

@Pintoch: I love it! I’m not sure if used by (P1535) is the best property to use, but that can always be moved if necessary. For WikibaseQualityConstraints, I think we could also add start time (P580) qualifiers indicating when support for this constraint type was first deployed to Wikidata – do you think that would be useful? --Lucas Werkmeister (WMDE) (talk) 11:50, 6 June 2018 (UTC)
@Lucas Werkmeister (WMDE): That would be ideal! I was thinking about doing the same for OpenRefine, but ideally the start (and end) should be recorded as a version number, not a date (because multiple versions of the software are in use by different users at any time…) So I might propose new qualifiers for that, maybe. And feel free to change used by (P1535) to something else (for instance by undoing my batch). Ideally it would be something more precise like "implemented by", but in terms of maintenance of the constraint system I think what we are really interested in is "who uses what" - maybe some system does not quite implement the constraint as described in the docs, but still relies on its existence somehow, and in that case we should still notify the maintainer of that system if we make changes to this constraint. In short: "use" is a loose notion, but given that we do not have a totally precise notion of the specs and semantics, it might be more valid than the notion of "implementation"… (but again I am very happy with any other property). − Pintoch (talk) 08:31, 7 June 2018 (UTC)
How to mark that constraint is supported, but not fully? Also the report does not see difference between "not supported" and "no information". — Ivan A. Krestinin (talk) 15:51, 13 June 2018 (UTC)
@Ivan A. Krestinin: feel free to improve! − Pintoch (talk) 08:45, 14 June 2018 (UTC)
It would be nice to track the support of qualifier and qualifier value constraint features, I have in mind separator (P4155) and instance or subclass of (Q30208840) from property constraint (P2302)  value type constraint (Q21510865) or type constraint (Q21503250) / relation (P2309)instance or subclass of (Q30208840). For whoever is in the mood for ontology and query fine-tuning. :) --Marsupium (talk) 13:22, 18 June 2018 (UTC)
Makes sense, the query could probably be adapted for that! − Pintoch (talk) 11:36, 22 June 2018 (UTC)
Perhaps introduced feature (P751) could somehow (indirectly) help. --Marsupium (talk) 09:53, 23 June 2018 (UTC)
Thanks, I did not know that. But that seems to require items for each version, which might be slightly overkill? Or maybe not. − Pintoch (talk) 07:50, 24 June 2018 (UTC)

@Ivan A. Krestinin: I have removed KrBot from the table given that I have no way to figure out which constraints it supports. If you decide to document this somewhere, or to add the claims yourself, feel free to add it back. − Pintoch (talk) 11:36, 22 June 2018 (UTC)

The table based on query is too limited to describe real situation. I do not think that it is really useful. — Ivan A. Krestinin (talk) 07:05, 23 June 2018 (UTC)

New constraint type: citation needed[edit]

Hello all,

Following the previous discussions, I wanted to inform you that a new constraint type, citation needed, has been enabled. We think that this would be especially useful on the properties likely to be challenged, to ensure they always have some reference.

Feel free to try it, ask questions if needed, and to improve the documentation page. Cheers, Lea Lacroix (WMDE) (talk) 16:33, 7 June 2018 (UTC)

@Lea Lacroix (WMDE): As I imagine a lot of people equate harvesting claims from Wikipedia to harvesting unreferenced claims, are there any plans to use this or a similar constraint to trigger violations for references of the form imported from Wikimedia project (P143)  English Wikipedia (Q328)? Mahir256 (talk) 16:49, 11 June 2018 (UTC)
Are there any property that does not require this constraint? Or is it needed to add it to all properties? — Ivan A. Krestinin (talk) 15:19, 13 June 2018 (UTC)
Identifier generally doesn't need reference. Because (linked) identifier is source itself. We can verify validity of the identifier simply by clicking that. --Was a bee (talk) 15:29, 13 June 2018 (UTC)
Its require retrieved (P813). — Ivan A. Krestinin (talk) 15:35, 13 June 2018 (UTC)
Ah, I see. This constraint is actually "at least one data must be registered in reference section" constraint. For Wikipedians, the term "citation needed" has special and specific meaning. I feel like it may be better to use different name. For example "reference section shouldn't be blank" constraint. Not good naming though... --Was a bee (talk) 15:56, 13 June 2018 (UTC)
We can redefine the constraint to "reference section must have one of specified properties" to fix the difference. — Ivan A. Krestinin (talk) 16:02, 13 June 2018 (UTC)
I agree that the name is misleading. --Marsupium (talk) 20:07, 13 June 2018 (UTC)
So current definition of the constraint not reach goal specified in the constant name. I see 3 alternative ways:
  1. Redefine the constraint to make it more similar to Wikipedia`s "citation needed" request. For example add required qualifier "reference properties". This will allow to make acceptable stated in (P248), but ignore imported from Wikimedia project (P143), retrieved (P813).
  2. Keep the constraint as is. In this case the constraint is applicable to all properties that are used in main values. Add this constraint to all properties using bot to reduce human work.
  3. Delete the constraint. And check reference section in all constraints check implementations by default. This is more efficient way than #2.
I prefer #1 or #3, but ready to run bot to implement #2. — Ivan A. Krestinin (talk) 11:33, 16 June 2018 (UTC)
#1 sound like a useful constraint type. --Marsupium (talk) 13:26, 18 June 2018 (UTC)
Help:Sources#When to source a statement lists several cases when it is not necessary to add a reference, so I don’t think making this constraint implied, or adding it automatically to all properties, would be a good idea. --Lucas Werkmeister (WMDE) (talk) 07:17, 19 June 2018 (UTC)
  • I prefer #1. By the way, I made navigation template about properties related to reference: {{Reference properties}}. When I made the template, I got one idea. If logical connective (Q211790) is possible, it would be useful. For example... NEED "stated in" OR "described by source", AND NOT "Wikimedia import URL"... and so on. Although I don't know such thing is possible or not, what do you think? --Was a bee (talk) 15:21, 29 June 2018 (UTC)
  • I have no idea how to model such statements without making the constraint too difficult to use. But is it really needed? For example, do we need trigger the constraint if "Wikimedia import URL" was used in additional to "stated in" property? If no, then the constraint is simplified to NEED "stated in" OR "described by source". — Ivan A. Krestinin (talk) 22:06, 29 June 2018 (UTC)

Redundancies in (value) type constraint definitions[edit]

SELECT DISTINCT ?property ?propertyLabel ?constrLabel ?class1Label ?class2Label {
  VALUES ?constr { wd:Q21503250 wd:Q21510865 } .
  ?property p:P2302 [ ps:P2302 ?constr; pq:P2308 ?class1, ?class2 ] .
  FILTER( ?class1 != ?class2 ) .
  ?class1 wdt:P279+ ?class2 .
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" } .
} ORDER BY ?propertyLabel ?constrLabel

Try it!

One class is subclass of another. What can we do about these? Matěj Suchánek (talk) 06:45, 21 June 2018 (UTC)

  • Not sure if something needs to be done. Hierarchies change and type constraint checks only check a limited number of levels.
    --- Jura 07:04, 21 June 2018 (UTC)
  • Thanks for this query. I was not aware that there are so many redundant constraints. In some cases it might be okay, e.g. group of humans (Q16334295) will probably not forever be a subclass of organization (Q43229). But in other cases I have the feeling the constraints were only added to get the type statistics on the database report, c.f. BNE ID (P950) --Pasleim (talk) 09:31, 21 June 2018 (UTC)

Multiple value type constraint relations?[edit]

At this time we have as possible relations for value type constraints in a property only "instance of", "subclass of" and "instance of or subclass of", so we always have only one "value type constraint" statement in the property. What does happen if we add another relation, and thus another "value type constraint" statement? In the case this could prove useful, the item has to satisfy BOTH constraints or AT LEAST one of the two? --Ogoorcs (talk) 12:13, 21 July 2018 (UTC)

@Ogoorcs: If multiple constraints are defined, they are always checked independently of each other, so if you add multiple value type constraints, violations for either or both of them will be reported independently (there will be constraint violations if at least one of them is not satisfied). There are already a few properties with multiple value type constraints, e. g. office held by head of state (P1906) (query). --Lucas Werkmeister (WMDE) (talk) 11:58, 23 July 2018 (UTC)