- From: Simon Steyskal <simon.steyskal@wu.ac.at>
- Date: Tue, 07 Apr 2015 07:32:40 +0200
- To: Holger Knublauch <holger@topquadrant.com>
- Cc: public-data-shapes-wg@w3.org
Hi! Just a short comment to: > SHACL users can only insert sh:OrConstraint into another shape. > Compare to the other features, I believe it will be rarely used. I guess e.g. in data integration scenarios (as I'm currently messing around using SHACL for those), sh:OrConstraints will be used quite often for modeling/checking weaving models that mediate between 2 models (if e.g. 1 concept on the LHS could be mapped to >1 concepts on the RHS based on its shape). cheers --- DDipl.-Ing. Simon Steyskal Institute for Information Business, WU Vienna www: http://www.steyskal.info/ twitter: @simonsteys Am 2015-04-07 07:04, schrieb Holger Knublauch: > On 4/7/2015 13:05, Karen Coyle wrote: >> >> >> On 4/6/15 6:55 PM, Holger Knublauch wrote: >> >>>> >>>> Holger, I am still trying to understand what this other category is. >>>> AFAIK, SHACL defines constraints on nodes, properties (in a graph) >>>> and >>>> the value(s) of those properties. Properties themselves can be >>>> subject >>>> to constraints, mainly cardinality, but I don't see this clearly >>>> called out in the document. I would prefer: >>>> >>>> Constraints on nodes >>>> - cardinality ("only one person node allowed") >>>> - defined properties ("foaf:name") >>> >>> I don't think we have core language elements for those two built-in >>> right now (not sure what you mean with "defined properties"). >> >> Those defined in the SHACL expression with sh:property. > > Ok, got it, that would be something like > > sh:MyShape > sh:property [ > sh:predicate ex:myProperty ; > rdfs:label "my property" ; > ] > > with or without further restrictions. Just a way to state what is > relevant for a shape. But then we need to start with that section, and > not with sh:OrConstraint as you seem to prefer below. > >> >>> >>>> >>>> - Constraints on defined properties ("foaf:name") >>>> - cardinality >>>> >>>> - Constraints on property values (in this case, "foaf:name") >>>> -type >>>> - value list >>>> >>>> This is, in fact, how the examples read, although none show >>>> constraints on nodes. >>> >>> I cannot tell whether such a further categorization would really help >>> the logical flow. For example sh:hasValue sounds like it should be in >>> the "property values" category, but it is really only firing a >>> violation >>> if the focus node does *not* have that value. So the division here is >>> IMHO not clear cut, and I'd vote for reducing the levels of nesting. >> >> First, the names are all up in the air, so we can call things whatever >> we want. >> >> I do think that the nesting is logical from the point of view of >> someone who intends to perform validation on their data. Again, I >> point to the structure of the DCMI DSP,[1] which has descriptions >> (nodes) and statements (properties). The DSP can have one or more >> descriptions, the description one or more properties. (Note that SHACL >> so far has nothing really equivalent to the Description Set Profile of >> DCMI, but again I think that may be something solved through a user >> interface.) The logical flow from the view of a data developer who >> wants to use SHACL to validate data is: >> >> My data/metadata describes some "thing." First, I want to list the >> properties that I am declaring will be used to describe that thing. >> Let's say the thing is a book, and a book is described with: >> >> dct:title >> dct:creator >> dct:date >> >> Each of these can have specified cardinalities: >> >> dct:title min=1 max=1 >> dct:creator min=0 max=unbounded >> dct:date min=0 max=1 > > I'd welcome diffs from anyone, or even completely rewritten sections. > I find it difficult to imagine how this would fit together well. For > example did you notice that sh:hasValue also implies sh:minCount>0 ? > So where to draw that line? > >> >> That constrains the properties themselves, the triples that have that >> predicate. Once I've defined my properties, I want to say what type of >> object is "valid" for each one. >> >> dct:title min=1 max=1 >> valueType:literal >> dct:creator min=0 max=unbounded >> valueType:URI >> [valid URI pattern: http://id.loc.gov/names/...] >> dct:date min=0 max=1 >> valueType:XMLSdate >> [valid values in range 1300-[present year + 1]] > > BTW above you seem to be mixing sh:datatype, sh:valueType and > sh:nodeKind/Type all into a single property "valueType". > >> >> I see this as a constraint on the object, not a constraint on the >> predicate, but I'm not sure it matters how it is implemented in a >> SHACL engine as long as it is clear to those using SHACL and gives the >> result desired. Logically, one is constraining the object values in >> the instance data triples. (And, yes, it gets complicated with >> recursion, but I leave that issue to Peter.) >> >> Those, to me, are the steps that a metadata developer will take, from >> the broadest listing of properties to the specific definition of >> validatable object values. SHACL needs to support that workflow, IMO, >> and the first part of the SHACL document should be logically organized >> around that workflow. That doesn't mean that SHACL *language* itself >> has to be nested -- but the documentation should make those points >> clear to the reader. >> >> >>> >>>> Now, which of those does 4.0 refer to? And can we present SHACL with >>>> a >>>> logical structure of this nature? >>> >>> Section 4 is currently only hosting sh:OrConstraint, and that may >>> need >>> to be in your "Constraints on nodes". I don't believe it would make >>> sense to have that constraint type listed first, as it's usually just >>> a >>> combination of other constraints. >> >> No, I think it does make sense, because it is a constraint at the >> highest level of the design workflow. Do I have a person shape or a >> book shape? Do I have both? This is the big picture of the data that >> will be validated, and it's one of the first decisions that a designer >> needs to make. It may be that for a design of a SHACL engine it is >> made up of other constraints, but as we've said, the majority of SHACL >> users will be folks who are writing shapes to validate their data. So >> the workflow logic of those users should guide the first part of the >> document. And I think that workflow will go from the biggest picture >> the designer has of their data (a macro-level entity-relation sort of >> view), down to the details. > > SHACL users can only insert sh:OrConstraint into another shape. > Compare to the other features, I believe it will be rarely used. I > don't understand why this would be part of the big picture - "Do I > have a person shape or a book shape" is not answered by > sh:OrConstraint, but rather by the instance pointing at its shape, via > rdf:type or sh:nodeShape. > > Holger
Received on Tuesday, 7 April 2015 05:33:07 UTC