Giter Club home page Giter Club logo

rdfshape-api's Introduction

RDFShape

RDFShape is web API for semantic data analysis and validation implemented in Scala using the http4s library.

This repository contains the backend part of RDFShape and acts as a queryable API to be consumed by clients. To learn more about our public client, see its GitHub repository or try it.

Continuous Integration Docker build

Codacy

Deployed versions of RDFShape API

RDFShape is already deployed here.

Quick reference


Deployment and Usage

Please, refer to this project's wiki or webpage for detailed information related to:

  • Quickstarting the API (via SBT / Docker)
  • Using the API with simple examples
  • Further documentation and resources

Publishing to OSS-Sonatype

This project uses the sbt-ci-release plugin for publishing to OSS Sonatype.

SNAPSHOT Releases

Open a PR and merge it to watch the CI release a -SNAPSHOT version

Full Library Releases

  1. Push a tag and watch the CI do a regular release
  2. git tag -a v0.1.0 -m "v0.1.0"
  3. git push origin v0.1.0 Note that the tag version MUST start with v.

Dependencies

RDFShape server has been implemented in Scala using the following libraries:

  • SHaclEX: a Scala implementation of ShEx and SHACL.
  • http4s: a purely functional library for http.
  • cats: a library for functional programming in Scala.
  • Logback with Scala Logging: logging framework.
  • scallop: a simple command-line arguments parsing library for Scala.
  • UMLShaclex: contains the visualization code that converts schemas to UML diagrams.
  • SRDF: is the library used to handle RDF. It is a simple interface with 2 implementations, one in Apache Jena, and the other in RDF4j.
  • Any23: is used by RDFShape to convert HTML files in RDFa and Microdata to RDF.
  • Topbraid SHACL API: is used to add another SHACL engine apart of the SHaclEX and Apache Jena SHACL engines.

Contribution and issues

We really appreciate contributions. Please fork this repository and open a pull request to add more features or submit issues:

RdfShape contributors

rdfshape-api's People

Contributors

danifdezalvarez avatar dependabot[bot] avatar gitter-badger avatar jathanasiou avatar labra avatar markiantorno avatar ulitol97 avatar waffle-iron avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

rdfshape-api's Issues

The system does not automatically recover from failures

When there's an error in the server the system does not have the abillity to automatically recover from that error, for example kill the process and launch it again.

The easiest way to notice is that the fields on the forms appear empty since the front does not connect to the back, which is down.

This is interesting as the system goes down more often than we'd like.

Automatic deploy to heroku fails

A looong time ago, we did an automatic deployment pipeline to Heroku from github pushes.

It doesn't work at this moment, I think it would be a matter of looking what changes we need to do to deploy it there. Probably we would only need to deploy rdfshape-client to heroku and point to the rdfshape local server we already have.

It is a pity that it doesn't work, because some applications are still pointing to the heroku deployment...another possibility could be to just create a landing page redirecting from heroku to http://rdfshape.weso.es

Validating Shex requires to refresh the whole page

I've realised that the button validate in http://rdfshape.weso.es/shexValidate only works the first time the page loads.

Steps to reproduce:

  • Fill code boxes with content from https://github.com/weso/simpleShExScala/tree/master/examples
  • Click on Validate button
  • A green box on top of the page appears telling that the RDF is valid
  • Go to the RDF box and remove the snippet ; :age :unknown
  • Click on Validate again
  • Still the green box can be seen on top

Expected behaviour

  • Since we've removed a mandatory field for User an error message would be expected somewhere.

Tested

  • Google Chrome 78.0.3904.108 (Official Build) (64-bit)
  • MacOS Mojave

Support for https

Change the server to support https.

I think we need to add HSTS middleware.

One doubt I have is how to automatically translate requests to http://rdfshape.weso.es to https://rdfshape.weso.es...is there a way to do automatically do that or should we do it by hand adding support for both?

Update Swagger documentation about the API

The API documentation has not been updated and there are several services that are not documented in swagger:

https://app.swaggerhub.com/apis-docs/labra/rdfshape/1.0.1

Notice that the client points to this documentation in the Help -> API Documentation.

One problem is that the server is hidden in the 8080 port and now it uses https instead of http.

For example, instead of:

http://rdfshape.weso.es/api/schema/engines

it should point to:

https://rdfshape.weso.es:8080/api/schema/engines

Visualize the SHACL validation report

In the case of SHACL, the output of the validation process if a SHACL validation report, which is an RDF graph. Shaclex already generates it, but it is not visualized yet.

Add support for shorter permalinks

Right now the permalinks generated by the client are to verbose to remember or share. We should:
1 - Connect the server back-end to a URL shortening service to give the client readable links.
2 - Improve the client's usability (like giving the users the ability to copy the permalinks to clipboard, etc.)

shacl2ShEx/shaclConvert Not Working

Hello,
tried with Firefox and Chrome, but:

  • All "Data format" drop downs are empty
  • I can't paste or write in "by Input" text boxes

(And shouldn't there be a "Visualize SHACL schema" option?)

Thank you for your work!

Validate value types

The parser does not ensure that the values assigned match their types.

For example the following is parsed as valid while "hello" is clearly not an xsd:date.

PREFIX dct: <http://purl.org/dc/terms/>
PREFIX xsd: <http://www.w3.org/2001/XMLSchema#>

<example> dct:created "hello"^^xsd:date.

See http://goo.gl/fPAxug for a working example

User should be able to generate java code from Shape Expressions

User Story

As a User of the rdfshape tool
I want to be able to generate java domain models from shape expressions
Because I don't want to code the shape expressions and the java domain models for my applications separately.

Summary

The WESO group has implemented a tool called ShEx-Lite. ShEx-Lite is capable of transforming Shape Expressions in compact syntax to domain models of Java, Python... The main idea behind this issue is to integrate this tool into the rdfshape system.

Display line/col of error nodes after validation

The new implementation of ShEx-s reports information about the position of the node that has failed in the JSON API information object.

This position can be used to display in the RDF editor the nodes that have failed.

It may require to adapt YaTE's code to allow this option although it could also be done from the external window that shows the editor highlighting the position.

A similar option will be added to ShEx so we could also point to the shapes that have failed so it would also be interesting to check if it is possible to add this option to YASHE tool.

Upload entity schemas to wikidata/wikibase

It would be great to allow a user to upload entity schemas created with YasHE to wikidata/wikibase.

It would require to use the wikidata's API and I am not sure about the details...any help would be appreciated.

This functionality could also be added to wikishape.

Show RDF graphs as PNG also

At this moment we visualize RDF graphs using viz.js option to render as SVG. The library provides also the option to generate PNG images which may be useful to save those images and reuse in presentations.

Negated path not leading to failure

Simple shape with one required type and one type that is negated.

prefix dctypes: <http://purl.org/dc/dcmitype/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix void: <http://rdfs.org/ns/void#>

<SummaryShape> {
    rdf:type (dctypes:Dataset),
    !rdf:type (void:Dataset)
}

When tested with a document containing a dctypes:Dataset and void:Dataset, the result is still matching a summary shape.

prefix dctypes: <http://purl.org/dc/dcmitype/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix : <http://example.org/>
prefix void: <http://rdfs.org/ns/void#>

:dataset a dctypes:Dataset, void:Dataset .

I believe that it should not match the summary shape.
You can try it out at
http://goo.gl/jnHafO

Repair strange error with uploaded application in Heroku

When the application is uploaded in Heroku, it gives an error:
Failure: URI scheme is not "file"

with the URI: https://raw.githubusercontent.com/chemaar/vaskos/master/trunk/vaskos/src/main/resources/skos/mountain-bike-simple.ttl

If the content is written in the input box, the message is:

Failure: Illegal hexadecimal escape sequence near index 43

(a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�\x{10000}-\x{EFFFF})

Add options in RDF pane

Add more options to the RDF pane. For example: type of parser (Wesin vs Jena), syntax (RDF/XML, JSON-LD, Turtle, N-Triples,...)

Server crashing when validating with SHACL and SHACLex schema engine

When validating data with shacl

How to reproduce (I'd suggest testing this locally to avoid server errors):

  1. Start a new SHACL validation in rdfshape, like the webpage example.
  2. The validation should work because it is using JenaSHACL schema engine.
  3. Change the schema engine to SHACLex and try to validate.
  4. Network error appears and server has crashed.

Any ideas? @labra

Error trace:


[info] APIHelper: validate
[error] java.lang.NoSuchMethodError: 'scala.collection.immutable.Map es.weso.typing.Typing.getMap()'
[error]         at es.weso.shacl.validator.ShapeTyping.toValidationReport(ShapeTyping.scala:39)
[error]         at es.weso.schema.ShaclexSchema.$anonfun$cnvResult$2(ShaclexSchema.scala:50)
[error]         at scala.util.Either.fold(Either.scala:191)
[error]         at es.weso.schema.ShaclexSchema.cnvResult(ShaclexSchema.scala:49)
[error]         at es.weso.schema.ShaclexSchema.$anonfun$validateTargetDecls$4(ShaclexSchema.scala:39)
[error]         at cats.effect.internals.IORunLoop$.cats$effect$internals$IORunLoop$$loop(IORunLoop.scala:181)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.signal(IORunLoop.scala:455)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.run(IORunLoop.scala:466)
[error]         at cats.effect.internals.Trampoline.cats$effect$internals$Trampoline$$immediateLoop(Trampoline.scala:67)
[error]         at cats.effect.internals.Trampoline.startLoop(Trampoline.scala:35)
[error]         at cats.effect.internals.TrampolineEC$JVMTrampoline.super$startLoop(TrampolineEC.scala:90)
[error]         at cats.effect.internals.TrampolineEC$JVMTrampoline.$anonfun$startLoop$1(TrampolineEC.scala:90)
[error]         at scala.runtime.java8.JFunction0$mcV$sp.apply(JFunction0$mcV$sp.java:23)
[error]         at scala.concurrent.BlockContext$.withBlockContext(BlockContext.scala:85)
[error]         at cats.effect.internals.TrampolineEC$JVMTrampoline.startLoop(TrampolineEC.scala:90)
[error]         at cats.effect.internals.Trampoline.execute(Trampoline.scala:43)
[error]         at cats.effect.internals.TrampolineEC.execute(TrampolineEC.scala:42)
[error]         at cats.effect.internals.IOBracket$.$anonfun$guaranteeCase$1(IOBracket.scala:116)
[error]         at cats.effect.internals.IOBracket$.$anonfun$guaranteeCase$1$adapted(IOBracket.scala:114)
[error]         at cats.effect.internals.IOAsync$.$anonfun$apply$1(IOAsync.scala:37)
[error]         at cats.effect.internals.IOAsync$.$anonfun$apply$1$adapted(IOAsync.scala:37)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.start(IORunLoop.scala:439)
[error]         at cats.effect.internals.IORunLoop$.cats$effect$internals$IORunLoop$$loop(IORunLoop.scala:155)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.signal(IORunLoop.scala:455)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.apply(IORunLoop.scala:476)
[error]         at cats.effect.internals.IORunLoop$RestartCallback.apply(IORunLoop.scala:414)
[error]         at cats.effect.internals.IOShift$Tick.run(IOShift.scala:36)
[error]         at cats.effect.internals.PoolUtils$$anon$2$$anon$3.run(PoolUtils.scala:52)
[error]         at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
[error]         at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
[error]         at java.base/java.lang.Thread.run(Thread.java:834)
[info] Closing RDF data
[error] Nonzero exit code returned from runner: 1
[error] (Compile / run) Nonzero exit code returned from runner: 1

Add a "Short URL to this page" buttom

It would be very useful to have some kind of URL shortener which would allow to copy/paste links to RDFShape examples easily.

An inspiration would be the buttom provided by the wikimedia query service. I think it uses a URL shortener service.

And the source code seems to be here.

I am also guessing that the URL shortener service uses a database to store the shortened URLs.

There is some background on URL shortening in stackoverflow which contains several implementations.

/validate API call return 404 on Heroku

This might not be applicable if the Heroku server is non-stable, however it appears that /validate calls return 404 - Not Found there.

Example with data:

curl 'http://shaclex.herokuapp.com/api/validate?data=%3Cgenid-c7a50d6e828f4595a195f9c67304f6d2-0AE87CB066C8D9CD43117E0C5A3090F0%3E%20a%20%3Chttp%3A%2F%2Fschema.org%2FDataset%3E%3B%0A%20%20%3Chttp%3A%2F%2Fschema.org%2Fdescription%3E%20%22The%20GeneChip%C2%AE%20Drosophila%20Genome%20Array%20is%20a%20microarray%20tool%20for%20studying%20expression%20of%20Drosophila%20melanogaster%20transcripts.%22%3B%0A%20%20%3Chttp%3A%2F%2Fschema.org%2Fidentifier%3E%20%22http%3A%2F%2Fwww.affymetrix.com%2Fproducts%2Farrays%2Fspecific%2Ffly.affx%22%3B%0A%20%20%3Chttp%3A%2F%2Fschema.org%2Fname%3E%20%22Affymetrix%20array%3A%20GeneChip%20Drosophila%20Genome%202.0%20Array%22%3B%0A%20%20%3Chttp%3A%2F%2Fschema.org%2Furl%3E%20%3Chttps%3A%2F%2Fwww.flymine.org%2Fflymine%2Fdataset%3E%20.%0A&dataFormat=turtle&schema=PREFIX%20schema%3A%20%3Chttp%3A%2F%2Fschema.org%2F%3E%20%0A%20%20%20%20PREFIX%20rdf%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%3E%20%0A%20%20%20%20PREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%20%0A%20%20%20%20PREFIX%20xsd%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%23%3E%20%0A%20%20%20%20%3CURL%3E%0A%20%20%20%20%20%20xsd%3Astring%20OR%20IRI%0A%0A%0Astart%20%3D%20%40%3CDatasetMinimum%3E%0A%20%20%20%0A%3CDatasetMinimum%3E%20%7B%0A%20%20rdf%3Atype%20%5Bschema%3ADataset%5D%20%3B%0A%20%20schema%3Adescription%20xsd%3Astring%20%20%3B%0A%20%20schema%3Aidentifier%20xsd%3Astring%20OR%20%40%3CURL%3E%20OR%20%7Ba%20%5Bschema%3APropertyValue%5D%7D%20OR%20IRI%20%2B%20%3B%0A%20%20schema%3Akeywords%20xsd%3Astring%20%2B%20%3B%0A%20%20schema%3Aname%20xsd%3Astring%20%20%3B%0A%20%20schema%3Aurl%20%40%3CURL%3E%20%20%3B%0A%7D%0A%0A%3CDatasetRecommended%3E%20%7B%0A%20%20rdf%3Atype%20%5Bschema%3ADataset%5D%20%3B%0A%20%20schema%3Acitation%20xsd%3Astring%20OR%20%7Ba%20%5Bschema%3ACreativeWork%5D%7D%20OR%20IRI%20%2A%20%3B%0A%20%20schema%3Acreator%20%20%40%3COrganizationOrPerson%3E%20OR%20IRI%20%2A%20%3B%0A%20%20schema%3Adistribution%20%20%7Ba%20%5Bschema%3ADataDownload%5D%7D%20OR%20IRI%20%3F%20%3B%0A%20%20schema%3AincludedInDataCatalog%20%20%7Ba%20%5Bschema%3ADataCatalog%5D%7D%20OR%20IRI%20%2A%20%3B%0A%20%20schema%3Alicense%20%40%3CURL%3E%20OR%20%7Ba%20%5Bschema%3ACreativeWork%5D%7D%20OR%20IRI%20%3F%20%3B%0A%20%20schema%3AmeasurementTechnique%20xsd%3Astring%20OR%20%40%3CURL%3E%20%2A%20%3B%0A%20%20schema%3AvariableMeasured%20xsd%3Astring%20OR%20%7Ba%20%5Bschema%3APropertyValue%5D%7D%20OR%20IRI%20%2A%20%3B%0A%20%20schema%3Aversion%20xsd%3Adouble%20OR%20xsd%3Astring%20%3F%20%3B%0A%7D%0A%0A%3CDatasetOptional%3E%20%7B%0A%20%20rdf%3Atype%20%5Bschema%3ADataset%5D%20%3B%0A%7D%0A%0A%3COrganizationOrPerson%3E%7B%0A%20%20rdf%3Atype%20%5B%20schema%3AOrganization%20schema%3APerson%5D%0A%7D&schemaFormat=ShExC&shape-map=%3Cgenid-c7a50d6e828f4595a195f9c67304f6d2-0AE87CB066C8D9CD43117E0C5A3090F0%3E%40%3CDatasetMinimum%3E&shapeMapFormat=compact' -X POST -H 'Connection: keep-alive' -H 'Content-Length: 0' -H 'Origin: http://localhost:3000' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.116 Safari/537.36' -H 'Accept: */*' -H 'Referer: http://localhost:3000/' -H 'Accept-Language: en-GB,en-US;q=0.9,en;q=0.8' --compressed --insecure

Reflow code boxes in Shex page

In order to validate RDF you need the RDF, the Shex and the Shape maps. Right now the UI is designed such that only the RDF and the Shex is at first sight and you need to scroll in order to fix the mappings and to click the validate button.

That creates an unpleasant UX experience because of all the extra gimmicks you need to do in order to use the tool.

Maybe rearranging boxes in a single line and having the validate button at hand could help to alleviate this problem.

Timeout when validating resources with large number of arcs

The following attempt of validation (a Shanghai hospital) agains the entity schema of hospitals:

curl -i -X POST -H "Content-type:multipart/form-data" 'http://localhost:8080/api/wikidata/validate' \
                                                         --form-string 'item=<http://www.wikidata.org/entity/Q33121756>' \
                                                         --form-string 'entitySchema=E187'

gives a timeout because the entity schema E187 refers to country and the country is Chile (Q148) which seems to take more time than expected to be retrieved and the whole result is a timeout.

Check how we can improve this situation by increasing the time the server waits or using some kind of streaming retrieval.

Add shape profiles

Add a list of Shape profiles...for example: Issues, Skos, WebIndex, etc....

Extra margin when showing two panels

There seems to be a problem in bootstrap when there are two panels.
The problem is shown when the browser is using a desktop. It seems the max-width and margin-left/right are fixed for the container div.

HTML page responses in api instead of data

It appears that currently, when using the http://rdfshape.weso.es/api/ server for API calls, HTML documents are being received as answer one or more endpoints.

For Example:
curl -X GET "http://rdfshape.weso.es/api/data/formats" -H "accept: application/json"
returns

<!doctype html><html lang="en"><head><meta charset="utf-8"/><link rel="shortcut icon" href="/favicon.ico"/><meta name="viewport" content="width=device-width,initial-scale=1"/><meta name="theme-color" content="#000000"/><meta name="description" content="RDFShape client"/><link rel="manifest" href="/manifest.json"/><title>RDFShape</title><link href="/static/css/2.4f4d5dfe.chunk.css" rel="stylesheet"><link href="/static/css/main.3b104fc2.chunk.css" rel="stylesheet"></head><body><noscript>You need to enable JavaScript to run this app.</noscript><div id="root"></div><script>!function(i){function e(e){for(var r,t,n=e[0],o=e[1],u=e[2],l=0,f=[];l<n.length;l++)t=n[l],Object.prototype.hasOwnProperty.call(p,t)&&p[t]&&f.push(p[t][0]),p[t]=0;for(r in o)Object.prototype.hasOwnProperty.call(o,r)&&(i[r]=o[r]);for(s&&s(e);f.length;)f.shift()();return c.push.apply(c,u||[]),a()}function a(){for(var e,r=0;r<c.length;r++){for(var t=c[r],n=!0,o=1;o<t.length;o++){var u=t[o];0!==p[u]&&(n=!1)}n&&(c.splice(r--,1),e=l(l.s=t[0]))}return e}var t={},p={1:0},c=[];function l(e){if(t[e])return t[e].exports;var r=t[e]={i:e,l:!1,exports:{}};return i[e].call(r.exports,r,r.exports,l),r.l=!0,r.exports}l.m=i,l.c=t,l.d=function(e,r,t){l.o(e,r)||Object.defineProperty(e,r,{enumerable:!0,get:t})},l.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.t=function(r,e){if(1&e&&(r=l(r)),8&e)return r;if(4&e&&"object"==typeof r&&r&&r.__esModule)return r;var t=Object.create(null);if(l.r(t),Object.defineProperty(t,"default",{enumerable:!0,value:r}),2&e&&"string"!=typeof r)for(var n in r)l.d(t,n,function(e){return r[e]}.bind(null,n));return t},l.n=function(e){var r=e&&e.__esModule?function(){return e.default}:function(){return e};return l.d(r,"a",r),r},l.o=function(e,r){return Object.prototype.hasOwnProperty.call(e,r)},l.p="/";var r=window["webpackJsonprdfshape-client"]=window["webpackJsonprdfshape-client"]||[],n=r.push.bind(r);r.push=e,r=r.slice();for(var o=0;o<r.length;o++)e(r[o]);var s=n;a()}([])</script><script src="/static/js/2.5a3941e3.chunk.js"></script><script src="/static/js/main.77a91491.chunk.js"></script></body></html>

while
curl -X GET "http://shaclex.herokuapp.com/api/data/formats" -H "accept: application/json"
returns a JSON array, as expected:

["TURTLE","RDF/XML","JSON-LD","N-TRIPLES","RDF/JSON","TRIG","DOT"]

Check why tests are failing in Travis

It seems that some module has added coverage code that prevents the tests to be run in Travis. The error shown is:

[error] ## Exception when compiling 2 sources to /home/travis/build/weso/rdfshape/target/scala-2.13/classes
[error] java.lang.NoSuchMethodError: scala.tools.nsc.Global.reporter()Lscala/tools/nsc/reporters/Reporter;
[error] com.github.ghik.silencer.SilencerPlugin.reporter$lzycompute(SilencerPlugin.scala:27)
[error] com.github.ghik.silencer.SilencerPlugin.com$github$ghik$silencer$SilencerPlugin$$reporter(SilencerPlugin.scala:26)
[error] com.github.ghik.silencer.SilencerPlugin.processOptions(SilencerPlugin.scala:50)
. . .

Support for other RDF/XML syntax

Add support for RDF/XML syntax. It should not be difficult...in fact, it may only need to change the RDF reader...and to add options to the RDF pane

Parsing Exception

I have deployed play (2.3.1 and 2.3.3) and RDFShapes (Commit 96ad5c9) on my own machine.

The interface successfully runs. However, when I try to validate any documents, I get the following exception:

Error parsing RDF with syntax TURTLE: Exception :Illegal hexadecimal escape sequence near index 43
([a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�\x{10000}-\x{EFFFF}]((([a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�\x{10000}-\x{EFFFF}]|_|\-|[0-9]|·|[̀-ͯ]|[‿-⁀]|\.)*([a-zA-ZÀ-ÖØ-öø-˿Ͱ-ͽͿ-῿‌-‍⁰-↏Ⰰ-⿯、-퟿豈-﷏ﷰ-�\x{10000}-\x{EFFFF}]|_|\-|[0-9]|·|[̀-ͯ]|[‿-⁀]))?))
                                           ^

Using the specific example of

prefix dctypes: <http://purl.org/dc/dcmitype/>
prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>
prefix : <http://example.org/>
prefix prov: <http://www.w3.org/ns/prov#>

:dataset a dctypes:Dataset, prov:Entity .

and the ShEx

<SummaryShape> { 
     rdf:type (dctypes:Dataset)
   , rdf:type . * 
} 

this error corresponds with the first space character (URL encoded as +).

Is there something up with the URL encoding/decoding?

Language in RDF Data validation fails

When there's a white space between the object and the language label the validation fails.
I'll show you an example to be more specific:

<product> <label> "Blueberry Muffin" @en .

RDFShape says it's not valid.

<product> <label> "Blueberry Muffin"@en .

RDFShape says it's valid.
While in rdfcat both of them are valid.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.