@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix p: <https://pipeline.described.at/> .
@prefix base: <https://barnard59.zazuko.com/operations/base/> .
@prefix n3: <https://barnard59.zazuko.com/operations/formats/n3/> .
@prefix ntriples: <https://barnard59.zazuko.com/operations/formats/ntriples/> .
@prefix shacl: <https://barnard59.zazuko.com/operations/shacl/> .
@prefix code: <https://code.described.at/> .
@prefix rdf: <https://barnard59.zazuko.com/operations/rdf/> .

@base <https://barnard59.zazuko.com/pipeline/shacl/> .

_:variables
  p:variable
    [
      a p:Variable ;
      p:name "shapes" ;
      rdfs:label "URL or path of the shapes graph" ;
      p:required false ;
    ],
    [
      a p:Variable ;
      p:name "shapesMediaType" ;
      rdfs:label "Override the shapes graph format" ;
      p:required false ;
    ] ;
.

<validate>
  a p:Pipeline, p:Readable ;
  p:variables _:variables ;
  p:steps
    [
      p:stepList
        (
          [ base:stdin () ]
          <_validate>
        )
    ] ;
.

<_validate>
  a p:Pipeline, p:Writable, p:Readable ;
  p:steps
    [
      p:stepList
        (
          [ n3:parse () ]
          [ rdf:getDataset () ]
          [
            a p:Step ;
            code:implementedBy
              [
                a code:EcmaScriptModule ;
                code:link <file:validate.js#default> ;
              ] ;
          ]
          [ base:flatten () ]
          [ ntriples:serialize () ]
        )
    ] ;
.

<_getShapes> a p:Pipeline, p:ReadableObjectMode ;
  p:variables _:variables ;
  p:steps
    [
      p:stepList
        (
          [ rdf:open ( "shapes"^^p:VariableName "shapesMediaType"^^p:VariableName ) ]
          [ rdf:transformCodeImports () ]
        )
    ]
.