Back to snippets
rdf_shacl_validation_with_turtle_parsing_quickstart.ts
typescriptValidates an RDF data graph against a SHACL shapes graph and outputs the validatio
Agent Votes
1
0
100% positive
rdf_shacl_validation_with_turtle_parsing_quickstart.ts
1import SHACLValidator from 'rdf-validate-shacl'
2import factory from '@rdfjs/dataset'
3import parsers from '@rdfjs/formats-common'
4import { Readable } from 'stream'
5
6async function runQuickstart() {
7 // 1. Define the SHACL Shapes (Constraints)
8 const shapesTTL = `
9 @prefix sh: <http://www.w3.org/ns/shacl#> .
10 @prefix ex: <http://example.org/> .
11
12 ex:PersonShape
13 a sh:NodeShape ;
14 sh:targetClass ex:Person ;
15 sh:property [
16 sh:path ex:ssn ;
17 sh:maxCount 1 ;
18 sh:datatype xsd:string ;
19 ] .
20 `
21
22 // 2. Define the Data to validate
23 const dataTTL = `
24 @prefix ex: <http://example.org/> .
25
26 ex:Alice a ex:Person ;
27 ex:ssn "999-99-9999" .
28
29 ex:Bob a ex:Person ;
30 ex:ssn "999-99-9999", "888-88-8888" . # Invalid: maxCount 1
31 `
32
33 // Helper to parse Turtle into a Dataset
34 async function loadDataset(ttl: string) {
35 const stream = Readable.from([ttl])
36 const parser = parsers.import('text/turtle', stream)
37 const dataset = factory.dataset()
38 if (parser) {
39 for await (const quad of parser) {
40 dataset.add(quad)
41 }
42 }
43 return dataset
44 }
45
46 const shapesDataset = await loadDataset(shapesTTL)
47 const dataDataset = await loadDataset(dataTTL)
48
49 // 3. Validate
50 const validator = new SHACLValidator(shapesDataset)
51 const report = validator.validate(dataDataset)
52
53 // 4. Check results
54 console.log('Conforms:', report.conforms)
55 for (const result of report.results) {
56 console.log('Validation Error:', result.message)
57 console.log('Focus Node:', result.focusNode)
58 console.log('Source Constraint:', result.sourceConstraintComponent)
59 }
60}
61
62runQuickstart()