- From: Irene Polikoff <irene@topquadrant.com>
- Date: Thu, 18 Apr 2019 17:51:03 -0400
- To: Felix Sasaki <felix@sasakiatcf.com>
- Cc: Simon Steyskal <simon.steyskal@wu.ac.at>, "public-shacl@w3.org" <public-shacl@w3.org>
- Message-Id: <E521BAFD-72B8-4EE9-8F38-52525C59DF30@topquadrant.com>
Felix,
If you want to have a property ex:hasAddress and its values be either a string or a resource which in turn has properties like steel, city, zip, etc., then you can simply use:
sh:path ex:hasAdress ;
sh:or (
[
sh:datatype xsd:string ;
]
[
sh:class ex:ComplexAddress ;
]
) ;
.
You do not really need xone. If a person can only have one address, then add:
sh:maxCount 1 ;
In this response, I am assuming that your complex addresses look as follows:
ex:Address1 ex:ComplexAddress;
ex:street “100 Main Street”;
ex:city “Any City”;
etc.
You would then have a shape that checks for validity of complex addresses. This can be done directly on a class (implicit target).
For example
ex:ComplexAddress a owl:Class, sh:NodeShape;
sh:property [
sh:path ex:street ;
sh:minCount 1
sh:datatype xsd:string;];
sh:property [
sh:path ex:city ;
sh:minCount 1
sh:datatype xsd:string;];
And so on
If your complex addresses for some other reason do not have a type statement, then do
sh:path ex:hasAdress ;
sh:or (
[
sh:datatype xsd:string ;
]
[
sh:node ex:ComplexAddressShape ;
]
) ;
.
And also define a shape ex:ComplexAddressShape similar to above as something that has city, street, etc. properties.
x:one would be needed if your people could have either ex:streetAddress property or a group of properties ex:city+ex:street+…
In other words, there was no intermediate resource to represent complex address.
Irene
> On Apr 18, 2019, at 1:13 AM, Felix Sasaki <felix@sasakiatcf.com> wrote:
>
> Perfect, thanks a lot, Simon. This is also in line with what I found in this tutorial:
> https://de.slideshare.net/mobile/jpcik/rdf-data-validation-2017-shacl <https://de.slideshare.net/mobile/jpcik/rdf-data-validation-2017-shacl>
>
> Regards,
>
> Felix
>
> Am Donnerstag, 18. April 2019 schrieb Simon Steyskal <simon.steyskal@wu.ac.at <mailto:simon.steyskal@wu.ac.at>>:
> fwiw, sh:and isn't really necessary though.. is this what you wanted -> https://gist.github.com/simonstey/e3add7ff0740dd95a4c80d26840ca3e3 <https://gist.github.com/simonstey/e3add7ff0740dd95a4c80d26840ca3e3> ?
>
> br simon
>
> ---
> DDipl.-Ing. Simon Steyskal
> Institute for Information Business, WU Vienna
>
> www: http://www.steyskal.info/ <http://www.steyskal.info/> twitter: @simonsteys
>
> Am 2019-04-17 18:41, schrieb Simon Steyskal:
> Hi!
>
> have you tried combining sh:xone with two sh:and constraints?
>
> e.g. something along the lines of:
>
> sh:xone (
> sh:and (
> ex:hasAddress sh:datatype xsd:string
> ex:addrType sh:hasValue "simple"
> )
>
> sh:and (
> ex:hasAddress sh:class ex:complexAddr
> ex:addrType sh:hasValue "comolex"
> )
> )
>
> (I'm on mobile right now so just pseudocode)
>
> br simon
>
> -------- Original message --------
> From: Felix Sasaki <felix@sasakiatcf.com <mailto:felix@sasakiatcf.com>>
> Date: 4/17/19 18:26 (GMT+01:00)
> To: public-shacl@w3.org <mailto:public-shacl@w3.org>
> Subject: Question on value based constraints
>
> HI all,
>
> I have a question on how to model alternative constraints based on
> literal values.
>
> Let's assume the two alternatives ways to express an address:
>
> ALTERNATIVE 1:
> ex:person1 ex:hasAddress "Street xzy plz 12345 ..."
> ex:person1 ex:addressType "simpleAddress".
>
> ALTERNATIVE 2:
>
> ex:person1 ex:hasAddress ex:someComplexAddress1 # object is an
> instance of class ex:complexAddress
> ex:person1 ex:addressType "complexAddress".
>
> I want to define two alternative shapes for addresses: one is simple,
> i.e. the literal value "Street xzy plz 12345 ...", and one is complex,
> i.e. an instance of ex:complexAddress.
>
> How do I model the choice between the two address' shapes based on the
> values "simpleAddress" vs. "complexAddress"?
>
> Regards,
>
> Felix
Received on Thursday, 18 April 2019 21:51:30 UTC