- 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