Re: Validating instances based on other instances

Hi,

I tried this but it doesnt seem to work.

Full example:

ex:A
  rdf:type sh:Shape ;
  sh:property [
      sh:class ex:Dataset ;
      sh:minCount 1 ;
      sh:path [
          sh:inversePath ex:identifier ;
        ] ;
    ] ;
  sh:targetObjectsOf ex:related ;
.


ex:Dataset_1
  rdf:type ex:Dataset ;
  ex:identifier "123" ;
.
ex:Foo
  rdf:type ex:SomethingElse ;
  ex:identifier "foo" ;
.
ex:Document_1
  rdf:type ex:Document ;
  # This is the only triple that is reported to be invalid "Less than 1 values".
  ex:related "abc" ;
.
ex:Document_2
  rdf:type ex:Document ;
  ex:related "123" ;
.
ex:Document_3
  rdf:type ex:Document ;
  # This should be invalid
  ex:identifier "foo" ;
.

Tested this with TBC.

- Miika

----- Original Message -----
From: "Simon Steyskal" <simon.steyskal@wu.ac.at>
To: "Miika Alonen" <miika.alonen@csc.fi>
Cc: "public-rdf-sha." <public-rdf-shapes@w3.org>
Sent: Wednesday, 28 September, 2016 08:28:04
Subject: Re: Validating instances based on other instances

Hi!

ex:A a sh:Shape ;
   sh:targetObjectsOf ex:related ;
   sh:property [
   sh:path [ sh:inversePath ex:identifier ] ;
   sh:minCount 1;
   sh:class ex:Dataset ;
   ] .

should do the trick.

HTH, simon

---
DDipl.-Ing. Simon Steyskal
Institute for Information Business, WU Vienna

www: http://www.steyskal.info/  twitter: @simonsteys

Am 2016-09-27 14:19, schrieb Miika Alonen:
> It works - thanks. Not so trivial :)
> 
> Is it also possible to include Class reference to this workaround? In
> case the identifier predicate is used by multiple types, for example:
> 
> ex:Dataset1 a ex:Dataset ; ex:identifier "1" .
> 
> ex:Dataset2 a ex:SomethingElse ; ex:identifier "2" .
> 
> ex:Document1 ex:related "2" . (INVALID)
> 
> - Miika.
> 
> -------------------------
> 
> FROM: "Dimitris Kontokostas" <kontokostas@informatik.uni-leipzig.de>
> TO: "Miika Alonen" <miika.alonen@csc.fi>
> CC: "public-rdf-sha." <public-rdf-shapes@w3.org>
> SENT: Tuesday, 27 September, 2016 09:18:03
> SUBJECT: Re: Validating instances based on other instances
> 
> A minor adjustment / property swap
> ex:A a sh:Shape ;
>  sh:targetObjectsOf EX:RELATED ;
>  sh:property [
>  sh:path [ sh:inversePath EX:IDENTIFIER ]
>  sh:minCount 1;
>  ]
> 
> this shape would report
> 
> "12.123/example.1234" -> valid
> "20.234/undefined.2234" -> invalid
> "null" -> invalid
> 
> On Tue, Sep 27, 2016 at 8:42 AM, Miika Alonen <miika.alonen@csc.fi>
> wrote:
> 
>> I dont see how that would work. There can also be multiple Datasets
>> and Documents are expected have references to non existing datasets
>> eg:
>> 
>> ex:Dataset1 ex:identifier "12.123/example.1234" .
>> ex:Dataset2 ex:identifier "12.1234/example.2345" .
>> ex:Dataset3 ex:identifier "12.123/example.4321" .
>> 
>> ex:Document1 ex:related "12.123/example.1234" .
>> ex:Document1 ex:related "20.234/undefined.2234" .
>> ex:Document1 ex:related "null" .
>> 
>> This again is example of "bad" data that could be cleaned - but
>> there are many use cases where resources are "linked" using literal
>> references.
>> 
>> - Miika
>> 
>> -------------------------
>> 
>> FROM: "Dimitris Kontokostas" <kontokostas@informatik.uni-leipzig.de>
>> TO: "Miika Alonen" <miika.alonen@csc.fi>
>> CC: "public-rdf-sha." <public-rdf-shapes@w3.org>
>> SENT: Monday, 26 September, 2016 22:20:25
>> SUBJECT: Re: Validating instances based on other instances
>> 
>> Hi Miika,
>> 
>> a workaround could be something like
>> 
>> ex:A a sh:Shape ;
>> sh:targetObjectsOf ex:identifier ;
>> sh:property [
>> sh:path [ sh:inversePath ex:related ]
>> sh:minCount 1;
>> ]
>> 
>> On Mon, Sep 26, 2016 at 6:34 PM, Miika Alonen <miika.alonen@csc.fi>
>> wrote:
>> 
>>> Hi all,
>>> 
>>> Question about how to validate instance literals (or irirefs)
>>> based on other instance values.
>>> 
>>> I have a use case where i have literals that should be same as
>>> some other literals, for example:
>>> 
>>> VALID DATA:
>>> 
>>> ex:Dataset ex:identifier "doi:10.3972/example.0145.db" .
>>> 
>>> ex:Document ex:related "doi:10.3972/example.0145.db" .
>>> 
>>> INVALID DATA:
>>> 
>>> ex:Dataset ex:identifier "doi:10.3972/example.0145.db" .
>>> 
>>> ex:Document ex:related "doi:null" .
>>> 
>>> Is there other ways to validate this than Sparql constraints. I
>>> know i could do something like:
>>> 
>>> <http://example.com/ns# [1]> sh:prefix "ex" .
>>> 
>>> ex:DocumentShape
>>> a sh:Shape ;
>>> sh:targetClass ex:DocumentType ;
>>> sh:sparql [
>>> sh:message "Values must be dataset identifiers" ;
>>> sh:select """
>>> SELECT $this ?value
>>> WHERE {
>>> $this ex:related ?value .
>>> ?identifier ex:identifier ?value .
>>> }
>>> """ ;
>>> ] .
>>> 
>>> ETC ... but sparql seems bit overkill and it is hard to write. Is
>>> there or could there be other ways to produce these queries? For
>>> example property paths where first resource would be the starting
>>> point of the property path, eg:
>>> 
>>> sh:DocumentShape
>>> a sh:Shape .
>>> sh:targetClass ex:DocumentType ;
>>> sh:property [
>>> sh:predicate ex:related ;
>>> sh:equals ( ex:DatasetType ex:identifier );
>>> ] .
>>> 
>>> - Miika
>> 
>> --
>> 
>> Dimitris Kontokostas
>> Department of Computer Science, University of Leipzig & DBpedia
>> Association
>> Projects: http://dbpedia.org [2], http://rdfunit.aksw.org [3],
>> http://aligned-project.eu [4]
>> 
>> Homepage: http://aksw.org/DimitrisKontokostas [5]
>> 
>> Research Group: AKSW/KILT http://aksw.org/Groups/KILT [6]
> 
> --
> 
>  Dimitris Kontokostas
>  Department of Computer Science, University of Leipzig & DBpedia
> Association
> Projects: http://dbpedia.org [2], http://rdfunit.aksw.org [3],
> http://aligned-project.eu [4]
> 
> Homepage: http://aksw.org/DimitrisKontokostas [5]
> 
> Research Group: AKSW/KILT http://aksw.org/Groups/KILT [6]
> 
> 
> 
> Links:
> ------
> [1] http://example.com/ns#
> [2] http://dbpedia.org
> [3] http://rdfunit.aksw.org
> [4] http://aligned-project.eu
> [5] http://aksw.org/DimitrisKontokostas
> [6] http://aksw.org/Groups/KILT

Received on Wednesday, 28 September 2016 07:09:46 UTC