shexSpec / shex

ShEx language issues, including new features for e.g. ShEx2.1
25 stars 8 forks source link

Datatype filters #30

Open labra opened 7 years ago

labra commented 7 years ago

A user could declare some filter on a datatype value using stems and exclusions.

For example, one may want to declare that the value is any datatype in the xsd namespace as:

<S> {
 :value (xsd:~) ;
}

I propose this feature because I was reviewing which parts of the RDF data model are covered by ShEx and although we cover datatypes, we cover them in a simple way.

Notice the difference between the previous example and:

<S> {
 :value [ xsd:~ ]
}

which means that the value must be an IRI starting by xsd.

gkellogg commented 7 years ago

If the datatype production used ValueSetValue would that do it?

[55]    datatype              ::= iri

Becomes

[55]    datatype              ::= iri | '(' valueSetValue* ')'

This moves it to a NodeConstraint, but might do what you want. Of course, either create some context-sensitive productions in the grammar, which I've been trying to get rid of.

[226]First/First Conflict: "(" is the condition for both _shapeAtom_2 and _shapeAtom_1
[226]First/First Conflict: "(" is the condition for both _inlineShapeAtom_3 and _inlineShapeA

But we could probably figure out a way around this.