Re: Is there a name for this one weird trick?

Simon,


SHACL may be a viable solution depending on what you want to do but it 
does not have the same meaning as the OWL axioms. OWL and SHACL serve 
different purposes. SHACL defines a graph structure, OWL defines some 
truth about the world and don't care about the shape of the graph. See 
the differences below.


On 05/09/2016 07:49, Simon Steyskal wrote:
> One could also use SHACL [1] for expressing such constraints, e.g.:
>
> ----
> ex:SingleValuedInstanceShape
>      a sh:Shape ;
>      sh:targetNode :instance07 ;
>      sh:property [
>          sh:predicate :composedOf ;
>          sh:maxCount 1 ;
>      ] .

sh:maxCount and owl:maxCardinality don't have the same meaning. maxCount 
is about the structure of the RDF graph, maxCardinality is about the 
semantics. Compare:

:instance07  :composedOf  :Lead, :Gold .

--> the shape is violated.
--> the statements are consistent with the OWL cardinality and allow us 
to infer that :Lead owl:sameAs :Gold.


> This shape produces a validation result, if :instance07 has more than
> one value for property :composedOf.
> ----
> ex:JohnIsSingleChildShape
>      a sh:Shape ;
>      sh:targetNode :John ;
>      sh:not [
>          a sh:Shape ;
>          sh:property [
>              sh:predicate :sibling ;
>              sh:minCount 1 ;
>          ] ;
>      ] .
>
> This shape produces a validation result, if :John has not <1 (i.e., 0)
> values for property :sibling.

Again, this has a different meaning.

:John  a  [
     a  owl:Restriction;
     owl:onProperty  :sibling;
     owl:someValuesFrom  owl:Thing
] .

--> the shape is not violated (there is simply no value for :sibling)
--> this is inconsistent wrt the ontology because we know that John has 
a sibling.

> ----
> ex:ActorShape
>      a sh:Shape ;
>      sh:targetNode :Mike ;
>      sh:property [
>          sh:predicate :approves ;
>          sh:shape [
>              sh:property [
>                  sh:path [ sh:inversePath :actor ] ;
>                  sh:hasValue :Deadpool_Movie ;
>              ]
>          ]
>      ] .
>
> This shape produces a validation result, if :Mike is approving someone
> who isn't an :actor of :Deadpool_Movie.
> ----
>
> [1] http://w3c.github.io/data-shapes/shacl/
>
> 2016-09-04 22:06 GMT+02:00 Antoine Zimmermann
> <antoine.zimmermann@emse.fr <mailto:antoine.zimmermann@emse.fr>>:
>
>     Paul,
>
>
>     If you want to say that :instance07 is only composed of Lead, then
>     you can write:
>
>     :instance07 :composedOf :Lead;
>          a  [
>              a  owl:Restriction;
>              owl:onProperty  :composedOf;
>              owl:maxCardinality  1
>          ] .
>
>     If you want to say that :John has no sibling, you can say:
>
>     :John  a  [
>          a  owl:Restriction;
>          owl:onProperty  :sibling;
>          owl:allValuesFrom  owl:Nothing
>     ] .
>
>     (you could also use owl:cardinality 0)
>
>     If you want to say that Mike approves all the actors that play in
>     Deadpool, you can say:
>
>     [ a  owl:Restriction;
>         owl:onProperty  [ owl:inverseOf :actor ];
>         owl:hasValue  :Deadpool_Movie
>     ]  rdfs:subClassOf  [
>         a  owl:Restriction;
>         owl:onProperty  [ owl:inverseOf :approves ];
>         owl:hasValue  :Mike
>     ] .
>
>     Of course, there are legitimate reasons why one would not want to
>     use these axioms in their system. You can do all kinds of weird
>     tricks internally but if you want to publish the data on the Web,
>     it's better done with the standards. In turn, nothing prevent anyone
>     who consumes these axioms to rearrange the triples with all kinds of
>     internal tricks for convenience.
>
>
>     Best,
>     --AZ
>
>
>     On 04/09/2016 17:28, Paul Houle wrote:
>
>         These particular examples *are* cardinality constraints but they are
>         applied to a single subject as applied to a class.  Also the
>         thing I am
>         trying to name is the mechanism for
>
>         "making a statement about all the set of  all ?s ?p values" for
>         a given
>         (?s ?p)
>
>         for instance
>
>         :Deadpool_Movie :mikeApproves :actor .
>
>         to state that Mike approves the actor list for the Deadpool
>         movie.  It
>         competes with other ways of making "statements-about-statements"
>         except
>         it only lets you talk about ?s ?p pairs rather than ?s ?p ?o
>         triples.
>         It also competes with the conventional uses of schemas,  except
>         schemas
>         tend to be a way of
>
>         "making statements about ?s ?p pairs where ?s a ?c"
>         parameterized by (?c
>         and ?p)
>
>         For instance if we were round tripping data to and from Java
>         objects,
>            and the target object looks like
>
>         class Car  {
>              Set<Key> key;
>         }
>
>         at some point the system knows it is producing a certain Java
>         object and
>         it as clear as day that it is going to populate a Set object for
>         key.
>         That knowledge is implicit in the Java reflection data and could be
>         represented in RDF if that was desired.
>
>         In the case of DynamoDB,  for instance,  there is a distinction
>         between
>         a String and a Set<String> that is necessary to make when you
>         create the
>         object,  but this is not a function of a "class" but rather
>         something
>         which can be different for every instance because it isn't
>         enforced by a
>         schema.
>
>         On Sun, Sep 4, 2016 at 6:23 AM, Graham Klyne <gk@ninebynine.org
>         <mailto:gk@ninebynine.org>
>         <mailto:gk@ninebynine.org <mailto:gk@ninebynine.org>>> wrote:
>
>              Not sure if this helps... but OWL can define a notion of a
>         singleton
>              class - e.g.
>         https://lists.w3.org/Archives/Public/semantic-web/2014Nov/0100.html
>         <https://lists.w3.org/Archives/Public/semantic-web/2014Nov/0100.html>
>
>         <https://lists.w3.org/Archives/Public/semantic-web/2014Nov/0100.html
>         <https://lists.w3.org/Archives/Public/semantic-web/2014Nov/0100.html>>.
>
>
>              I understand this is sometimes used for modelling
>         specific-values in
>              OWL or Description Logic domain descriptions.
>
>              Or maybe what you describe is simply a cardinality constraint:
>         http://www.w3.org/TR/2012/REC-owl2-primer-20121211/#Property_Cardinality_Restrictions
>         <http://www.w3.org/TR/2012/REC-owl2-primer-20121211/#Property_Cardinality_Restrictions>
>
>         <http://www.w3.org/TR/2012/REC-owl2-primer-20121211/#Property_Cardinality_Restrictions
>         <http://www.w3.org/TR/2012/REC-owl2-primer-20121211/#Property_Cardinality_Restrictions>>
>
>              #g
>              --
>
>
>              On 04/09/2016 01:33, Paul Houle wrote:
>
>                  Imagine I have some facts about an instance such as
>
>                  :instance07 :composedOf :Lead .
>
>                  and then I say something like
>
>                  :instance07 :singleValued :composedOf .
>
>                  to distinguish the case of "a single valued property"
>         from "a
>                  set of of
>                  property values which just happens to have one
>         member".  The
>                  difference
>                  doesn't usually matter in RDF-world but if you have to
>         round
>                  trip with
>                  Lucene or DynamoDB you can attach supplementary data
>         with the
>
>                  "make a statement about an ?s ?p pair by writing ?s ?p1 ?p"
>
>                  This permits writing
>
>                  :John :hasNo :sibling .
>
>                  This is parallel to how people typically write RDF so
>         it does
>                  not get in
>                  the way,  but it queries just fine with SPARQL, Jena
>         Rules and such.
>
>                  Is there a name for this trick?
>
>
>
>
>
>         --
>         Paul Houle
>
>         (607) 539 6254 <tel:%28607%29%20539%206254>    paul.houle on
>         Skype ontology2@gmail.com <mailto:ontology2@gmail.com>
>         <mailto:ontology2@gmail.com <mailto:ontology2@gmail.com>>
>
>         Ontology2 Edition of DBpedia 2015-10
>         https://aws.amazon.com/marketplace/pp/B01HMUNH4Q/
>         <https://aws.amazon.com/marketplace/pp/B01HMUNH4Q/>
>         <http://basekb.com/gold/>
>         http://ontology2.com/the-book/o2dbpedia-info.html
>         <http://ontology2.com/the-book/o2dbpedia-info.html>
>         http://ontology2.com/book/chapter2/part1/dbpedia-examples.html
>         <http://ontology2.com/book/chapter2/part1/dbpedia-examples.html>
>
>         RDF: A new Slant
>         http://ontology2.com/the-book/rdf-a-new-slant.html
>         <http://ontology2.com/the-book/rdf-a-new-slant.html>
>         <https://www.linkedin.com/grp/home?gid=8267275
>         <https://www.linkedin.com/grp/home?gid=8267275>>
>
>         Data Lakes, Data Ponds, and Data Droplets
>         http://ontology2.com/the-book/data-lakes-ponds-and-droplets.html
>         <http://ontology2.com/the-book/data-lakes-ponds-and-droplets.html>
>
>
>
>

Received on Monday, 5 September 2016 06:19:12 UTC