- From: Judson Lester <nyarly@gmail.com>
- Date: Mon, 12 Dec 2016 22:29:03 +0000
- To: Aymeric Brisse <aymeric.brisse@gmail.com>, Gregg Kellogg <gregg@greggkellogg.net>
- Cc: W3C Ruby RDF mailing list <public-rdf-ruby@w3.org>
- Message-ID: <CAOpbp3d5VreAAEY5555QF7=Hw6aiPdZt9YHF9AFQff9vNm9caQ@mail.gmail.com>
I knew if I kept looking forlornly in the direction of RDF.rb, a ShEx implementation would appear. Excellent work, many thanks. Judson On Mon, Dec 12, 2016 at 9:26 AM Aymeric Brisse <aymeric.brisse@gmail.com> wrote: > That's great news Gregg! I am definitely gonna use that gem. > > On Mon, Dec 12, 2016 at 1:22 AM, Gregg Kellogg <gregg@greggkellogg.net> > wrote: > > I’ve just released version 0.1.0 of the shex gem [1], which implements the > latest Shape Expressions (ShEx) community specification [2]. > > Shape Expressions can be used to validate nodes within RDF graphs using > schema language for describing various restrictions on nodes within a > graph. For example, the project DOAP description [3], can be validated > using the following ShEX schema [4]: > > PREFIX doap: <http://usefulinc.com/ns/doap#> > PREFIX dc: <http://purl.org/dc/terms/> > <TestShape> EXTRA a { > a [doap:Project]; > > # May have either or both of doap:name/doap:description or > dc:title/dc:description > ( doap:name Literal; > doap:description Literal > | dc:title Literal; > dc:description Literal)+; > > # Good idea to use a category for what the project relates to > doap:category IRI*; > > # There must be at least one developer > doap:developer IRI+; > > # For our purposes, it MUST implement the ShEx specification. > doap:implements [<https://shexspec.github.io/spec/>] > } > > The project is UNLICENCED to the Public Domain, available on GitHub [5]. > > The gem implements an LL(1) parser to generate an executable algebra, > similar to that used for SPARQL and LD Patch gems. For example, the > proceeding ShExC can be expressed in the following S-Expression: > > (schema > (prefix (("doap" <http://usefulinc.com/ns/doap#>) ("dc" < > http://purl.org/dc/terms/>))) > (shapes > ((<TestShape> (shape > (eachOf > (tripleConstraint a > (nodeConstraint (value <http://usefulinc.com/ns/doap#Project>))) > (oneOf > (eachOf > (tripleConstraint <http://usefulinc.com/ns/doap#name> > (nodeConstraint literal)) > (tripleConstraint <http://usefulinc.com/ns/doap#description> > (nodeConstraint literal)) ) > (eachOf > (tripleConstraint <http://purl.org/dc/terms/title> > (nodeConstraint literal)) > (tripleConstraint <http://purl.org/dc/terms/description> > (nodeConstraint literal))) > (min 1) (max "*")) > (tripleConstraint <http://usefulinc.com/ns/doap#category> > (nodeConstraint iri) > (min 0) (max "*")) > (tripleConstraint <http://usefulinc.com/ns/doap#developer> > (nodeConstraint iri) > (min 1) (max "*")) > (tripleConstraint <http://usefulinc.com/ns/doap#implements> > (nodeConstraint (value <https://shexspec.github.io/spec/>))) ) > (extra a)))))) > > Gregg Kellogg > gregg@greggkellogg.net > > [1] https://rubygems.org/gems/shex > [2] https://shexspec.github.io/spec/ > [3] https://github.com/ruby-rdf/shex/blob/develop/etc/doap.ttl > [4] https://github.com/ruby-rdf/shex/blob/develop/etc/doap.shex > [5] https://github.com/ruby-rdf/shex > > > >
Received on Monday, 12 December 2016 22:29:50 UTC