- From: Holger Knublauch <holger@topquadrant.com>
- Date: Mon, 2 May 2016 12:56:54 +1000
- To: "public-data-shapes-wg@w3.org" <public-data-shapes-wg@w3.org>
I believe option 1 would work. It has the advantage that it is faster to
execute and easier to specify than my previous proposal. It wouldn't
help with the logic for form builders etc - when you don't even have a
value yet - but that can be defined (easily) by 3rd parties using
similar functions as in my draft below.
Holger
On 29/04/2016 19:44, Peter F. Patel-Schneider wrote:
> Option 1:
>
> sh:type type
> argument IRI
>
> A validation report is produced for a node
> if
> it is not a literal and there is no rdf:type/rdfs:subclassOf* path in the data
> graph from the node to the type
> or
> it is a literal and its datatype is different from type
>
>
> Option 2 (preferred):
>
> sh:type type
> argument IRI
>
> A validation report is produced for a node
> if
> it is not a literal and there is no rdf:type/rdfs:subclassOf* path in the data
> graph from the node to the type
> or
> it is a literal with known datatype and type is a known datatype and the value
> of the literal, if any, belongs to the value space of the type
> or
> it is a literal with known datatype and type is not a known datatype
> or
> it is a literal with datatype that is not a known datatype and that datatype
> is different from type
>
>
>
> peter
>
>
> On 04/29/2016 02:12 AM, Holger Knublauch wrote:
>> Such as?
>>
>> Sent from my iPad
>>
>>> On 29 Apr 2016, at 5:50 PM, Peter F. Patel-Schneider <pfpschneider@gmail.com> wrote:
>>>
>>> Why not use instead a formulation that does not depend on whether the type is
>>> a datatype?
>>>
>>> peter
>>>
>>>
>>>> On 04/28/2016 08:17 PM, Holger Knublauch wrote:
>>>> Here is a proposal to replace sh:datatype and sh:class with sh:type,
>>>> implemented with the following semantics:
>>>>
>>>> sh:TypeConstraintComponent
>>>> a sh:ConstraintComponent ;
>>>> sh:parameter [
>>>> sh:predicate sh:type ;
>>>> ] ;
>>>> sh:context sh:InversePropertyConstraint ;
>>>> sh:context sh:NodeConstraint ;
>>>> sh:context sh:PropertyConstraint ;
>>>> sh:inversePropertyValidator dash:hasType ;
>>>> sh:nodeValidator dash:hasType ;
>>>> sh:propertyValidator dash:hasType ;
>>>> .
>>>>
>>>> dash:hasType
>>>> a sh:SPARQLAskValidator ;
>>>> sh:sparql """
>>>> ASK {
>>>> FILTER IF(dash:isDatatype($type),
>>>> datatype($value) = $type,
>>>> EXISTS { $value rdf:type/rdfs:subClassOf* $type })
>>>> } """ ;
>>>> .
>>>>
>>>> dash:isDatatype
>>>> a sh:SPARQLFunction ;
>>>> sh:parameter [
>>>> sh:predicate sh:type ;
>>>> ] ;
>>>> sh:returnType xsd:boolean ;
>>>> sh:sparql "ASK { FILTER (EXISTS { $type a rdfs:Datatype } ||
>>>> dash:isSystemDatatype($type)) }" ;
>>>> .
>>>>
>>>> dash:isSystemDatatype
>>>> a sh:SPARQLFunction ;
>>>> sh:parameter [
>>>> sh:predicate sh:type ;
>>>> ] ;
>>>> sh:returnType xsd:boolean ;
>>>> sh:sparql "ASK { FILTER ($type IN (xsd:string, xsd:integer, xsd:date, ...))
>>>> }" ;
>>>> .
>>>>
>>>> The definition above uses helper SHACL functions, but these can of course be
>>>> in-lined for the official document. The definition of such functions has the
>>>> benefit that the logic to determine whether something is a datatype or not can
>>>> be reused.
>>>>
>>>> The enumeration in isSystemDatatype would be extended with the other RDF 1.1
>>>> datatypes including rdf:langString and rdf:HTML.
>>>>
>>>> Open questions include whether the rdf:type rdfs:Datatype triple needs to be
>>>> in the shapes graph and whether we need to support subclasses of
>>>> rdfs:Datatype. I have no strong opinions, and changing this would be trivial.
>>>>
>>>> This would close ISSUE-141 for me, assuming we add a corresponding sh:typeIn.
>>>>
>>>> Holger
>>>>
>>>>
Received on Monday, 2 May 2016 02:57:27 UTC