From d258c938c5075ba972412eb1520ab68925cf4523 Mon Sep 17 00:00:00 2001
From: David Maus <maus@hab.de>
Date: Wed, 31 Jan 2018 16:15:47 +0100
Subject: [PATCH] XProc Pipeline validiert RDF/XML

---
 src/xproc/validate-rdfxml.xpl | 58 +++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 src/xproc/validate-rdfxml.xpl

diff --git a/src/xproc/validate-rdfxml.xpl b/src/xproc/validate-rdfxml.xpl
new file mode 100644
index 000000000..b07f761b9
--- /dev/null
+++ b/src/xproc/validate-rdfxml.xpl
@@ -0,0 +1,58 @@
+<p:declare-step version="1.0"
+                xmlns:d="http://dmaus.name/ns/xproc"
+                xmlns:c="http://www.w3.org/ns/xproc-step"
+                xmlns:cx="http://xmlcalabash.com/ns/extensions"
+                xmlns:p="http://www.w3.org/ns/xproc"
+                xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+                xmlns:skos="http://www.w3.org/2004/02/skos/core#">
+
+  <p:documentation>
+    Validiert die RDF/XML-Ddateien. Das Schema wird anhand der Klasse des ersten Individuums ausgewählt.
+  </p:documentation>
+
+  <p:import href="http://xmlcalabash.com/extension/steps/library-1.0.xpl"/>
+
+  <p:declare-step type="d:directory-list-recursive">
+    <p:option name="path" required="true"/>
+    <p:output port="result" primary="true"/>
+
+    <p:directory-list>
+      <p:with-option name="path" select="$path"/>
+    </p:directory-list>
+    <p:viewport match="c:directory/c:directory">
+      <d:directory-list-recursive>
+        <p:with-option name="path" select="resolve-uri(c:directory/@name, base-uri(.))"/>
+      </d:directory-list-recursive>
+    </p:viewport>
+  </p:declare-step>
+
+  <d:directory-list-recursive path="../../public/"/>
+
+  <p:for-each>
+    <p:iteration-source select="//c:file[ends-with(@name, '.rdf')]"/>
+    <p:variable name="filename" select="c:file/@name"/>
+    <p:load>
+      <p:with-option name="href" select="resolve-uri(c:file/@name, base-uri(.))"/>
+    </p:load>
+    <p:choose>
+      <p:when test="/rdf:RDF/*[1][self::skos:ConceptScheme]">
+        <cx:message>
+          <p:with-option name="message" select="concat('Validating ', $filename)"/>
+        </cx:message>
+        <p:validate-with-relax-ng>
+          <p:input port="schema">
+            <p:data href="../schema/vocab.rnc" content-type="text/plain"/>
+          </p:input>
+        </p:validate-with-relax-ng>
+      </p:when>
+      <p:otherwise>
+        <cx:message>
+          <p:with-option name="message" select="concat('Not validating ', $filename)"/>
+        </cx:message>
+      </p:otherwise>
+    </p:choose>
+  </p:for-each>
+
+  <p:sink/>
+
+</p:declare-step>
-- 
GitLab