- From: Timothy Armstrong <t.armstrong444@gmail.com>
- Date: Sat, 18 Mar 2017 10:22:34 -0400
- To: public-rdf-shapes@w3.org
Hi Holger,
Thanks for your response. I'm glad you've considered these issues.
Yes, you can close this email thread, and I do not need to propose
actionable work items.
I would like to participate in a W3C Community Group for incorporating
SHACL into the object-oriented technologies, which I should have time to
work on, as part of my personal interests. It can wait, though, until
SHACL has progressed further, if that's best. I have ideas for
approaches to take that I would be pleased to share at the appropriate time.
I hope everything goes smoothly with the move to Candidate
Recommendation status.
Regards,
Tim Armstrong
On 3/16/2017 9:04 PM, Holger Knublauch wrote:
> Hi Tim,
>
> I am personally convinced that SHACL can play a big role in validating
> OO models. In fact my very first draft of SHACL was called Linked Data
> Object Model. And yes my (now "ancient") PhD work was about JavaBeans
> too (that was before Java had annotations). We have furthermore
> recently added a JSON-LD profile for SHACL to make it easier to use
> for this community, too. A big plus of SHACL over technologies like
> JSON Schema is that SHACL is natively working on graphs, not just trees.
>
> So yes, we are very much aware of these use cases. I believe what you
> are describing would be a very nice follow-up project, e.g. in a W3C
> Community Group.
>
> (Looking at the Java source code below I would be hesitant to embed
> Turtle snippets into Java, it just doesn't fit. However, the Java file
> could point at the namespace of a SHACL graph and then reference
> specific shapes by their URI).
>
> Since we are nearing our deadline for comments, I would like to make
> sure that we have not missed any actionable work items. We are also
> supposed to "close" any open email threads, so please let us know if
> you think there is more required to answer your input at this point or
> if we can "close" this thread. (Actionable comments should be turned
> into GitHub issues).
>
> Thanks,
> Holger
>
>
> On 17/03/2017 1:29, Timothy Armstrong wrote:
>> Hi Data Shapes community,
>>
>> I'm very glad you're working on RDF validation standards, which has
>> always been something that would really benefit the Semantic Web. I
>> wish I had gotten involved in the conversation before now.
>>
>> I read the February 2nd SHACL draft and compared it with Java's Bean
>> Validation standards [1], which is apparently the most popular
>> approach to validating Java data. I've been thinking about aspects
>> of Bean Validation that could be incorporated into SHACL, and aspects
>> of SHACL that could be incorporated into Bean Validation. They
>> posted on February 2nd the first draft of a 2.0.0.Alpha1 revision of
>> the Bean Validation specification, and they are inviting public comment.
>>
>> I know it's hard to incorporate new ideas into SHACL at this point.
>> Bean Validation has a mechanism for users to specify the order in
>> which constraint checks are executed, such as to run inexpensive
>> checks before expensive checks. You would probably consider it
>> inessential to add such a mechanism to the SHACL standards, but I
>> thought I would mention it. Maybe it would be useful for SHACL
>> implementations.
>>
>> The most interesting part of the comparison to me, though, is that
>> SHACL can be used mainly directly to validate object-oriented data.
>> SHACL of course works as it is with JSON-LD, but I have in mind to
>> use it with all sorts of object-oriented data. SHACL has some
>> features that would be valuable additions to Bean Validation, either
>> as part of the Bean Validation standard, or as a separate piece of
>> software. I expect the Bean Validation developers would welcome
>> proposals for incorporating aspects of SHACL.
>>
>> I'm accustomed to working with an interpretation of object-oriented
>> classes as unary predicates and as OWL classes, of object-oriented
>> attributes as binary predicates and as OWL properties, and so of a
>> set of object-oriented data as a set of RDF triples. Object-oriented
>> data form a graph; objects have attributes with values of literals
>> and other objects: nodes, edges, and other nodes. I have a mechanism
>> for annotating Java classes and attributes with IRI's, metadata, and
>> semantics so that they become OWL classes and properties, similarly
>> to how JSON-LD marks up JSON data.
>>
>> I like the whole idea in SHACL of writing shapes to specify the
>> structure of the data graph, which is something Bean Validation could
>> include but presently does not. Bean Validation users writing custom
>> constraints mainly have to write the logic of the constraints as Java
>> code in an isValid() method. We might say that SHACL provides a more
>> declarative approach to writing constraints.
>>
>> Consider a Person Java class with attributes for some of the RDF
>> properties in the SHACL document -- fullName, firstName, lastName,
>> ssn, parent, etc. -- with ex:XoneConstraintExampleShape taken
>> directly from the document:
>>
>>
>> @hasShape(
>> "@prefix ex: <http://example.com/ns#> . " +
>> "@prefix sh: <http://www.w3.org/ns/shacl#> . " +
>> "ex:XoneConstraintExampleShape " +
>> " a sh:NodeShape ; " +
>> " sh:targetClass ex:Person ; " +
>> " sh:xone ( " +
>> " [ " +
>> " sh:property [ " +
>> " sh:path ex:fullName ; " +
>> " sh:minCount 1 ; " +
>> " ] " +
>> " ] " +
>> " [ " +
>> " sh:property [ " +
>> " sh:path ex:firstName ; " +
>> " sh:minCount 1 ; " +
>> " ] ; " +
>> " sh:property [ " +
>> " sh:path ex:lastName ; " +
>> " sh:minCount 1 ; " +
>> " ] " +
>> " ] " +
>> ") .")
>> @hasIRI("http://example.com/ns#Person")
>> public class Person
>> {
>> @hasIRI("http://example.com/ns#fullName")
>> private String fullName;
>>
>> @hasIRI("http://example.com/ns#firstName")
>> private String firstName;
>>
>> @hasIRI("http://example.com/ns#lastName")
>> private String lastName;
>>
>> @pattern("^\\d{3}-\\d{2}-\\d{4}$") // sh:pattern
>> @hasIRI("http://example.com/ns#ssn")
>> private String ssn;
>>
>> @maxCount(2) // sh:maxCount
>> @hasIRI("http://example.com/ns#parent")
>> private Collection<Person> parent;
>>
>> // ...
>>
>> }
>>
>>
>> The SHACL constraints would work with the Java data here exactly as
>> they do with RDF. Some of the SHACL constructs would make sense to
>> place as annotations directly on attributes, as sh:pattern and
>> sh:maxCount here (though Bean Validation already has @Pattern and
>> @Size for those two purposes). Bean Validation doesn't have anything
>> like sh:xone, which I show here because I think it would be very
>> useful in Java. SPARQL property paths would be useful to inspect the
>> attributes of nested objects. Shapes could also validate arguments to
>> methods.
>>
>> I wrote some software for incorporating the OWL reasoning and SPARQL
>> into Java [2]. My suggestion for using SHACL to validate Java data
>> is a direct extension of that approach. I have a bit of code working
>> to validate Java data with the TopBraid SHACL API; I could post the
>> code on GitHub if you're interested.
>>
>> I wanted to post here while you are still open to comments because I
>> thought you may not have considered this approach of applying SHACL
>> more broadly to object-oriented data. I also thought there's a
>> chance you're not aware that Bean Validation is currently in an open
>> development phase, which might somehow be useful to you, as it's
>> closely related to SHACL.
>>
>> Regards,
>> Tim Armstrong
>>
>> [1] http://beanvalidation.org/
>> [2] http://semanticoop.sourceforge.net/
>>
>>
>>
>
>
Received on Saturday, 18 March 2017 14:23:12 UTC