Add negation operator
Hi!
There is a not equal (odrl:neq) operator to express "that a given value is not equal to the right operand of the Constraint".
A similar negation operator could be useful for other operators such as having a "is Not A" operator to indicate that a given left operand is not an instance of the right operand of the Constraint. The same exercise can be done for other operators, e.g. odrl:isPartOf -> have a isNotPartOf
To not explode the number of operators, the creation of a "not" operator to be used together with the existent ones, e.g., using the existent odrl:isA with a new odrl:not, could also be considered.
A note on this in terms of the other issue (#28) where the proposed isNotA operator would only cover nos.2 for constraints, and therefore there should be something that covers all of: 1) should not be the same IRI (neq), 2) should not be a subclass (isNotPartOf), and 3) should not be an instance (isNotA).
Would odrl:isNoneOf meet this requirement?
I have limited knowledge, I thought isNoneOf means none of those from a list.
Alternatives includes:
-
Create a Prohibition (everything is a 'not')
-
Use SHACL constraint operators: https://www.w3.org/TR/shacl/#core-components
A simpler alternative as @besteves4 states is to have a isNotA operator as the negation of isA operator - which would give isA/isNotA to be similar to other operator pairs eq/neq, isAllOf/isNoneOf, and gt/lt.
As @coolharsh55 has also expressed before, my interpretation of the isPartOf/isAllOf/isAnyOf/isNoneOf operators is that the corresponding right operand would have to be a list.
If not, it is not clear to me the actual difference between the neq or the isNoneOf operators for instance.
Also, creating a prohibition is not a solution for permission-based systems, e.g. Solid, where a permission needs to be present to grant access to a resource.
Isn't A isNotA B equivalent to A isNoneOf [B] where [B] is a list of length 1?