From ef0886374f314e12ea66108ba9d8fa1a9783b9c4 Mon Sep 17 00:00:00 2001
From: David Maus <maus@hab.de>
Date: Wed, 18 Oct 2017 12:59:24 +0200
Subject: [PATCH] =?UTF-8?q?Grammatik=20kanonisches=20RDF/XML=20f=C3=BCr=20?=
 =?UTF-8?q?Vokabulare?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 src/schema/vocab.rnc | 58 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 58 insertions(+)
 create mode 100644 src/schema/vocab.rnc

diff --git a/src/schema/vocab.rnc b/src/schema/vocab.rnc
new file mode 100644
index 000000000..27331dc7e
--- /dev/null
+++ b/src/schema/vocab.rnc
@@ -0,0 +1,58 @@
+# -*- mode: rnc; -*-
+#
+
+namespace skos = "http://www.w3.org/2004/02/skos/core#"
+namespace s    = "http://purl.oclc.org/dsdl/schematron"
+
+include "common.rnc" {
+   rdfPrimarySubjectEntity =
+      skos.ConceptScheme
+    & skos.Concept+
+}
+
+skos.ConceptScheme =
+   element skos:ConceptScheme {
+      rdfPrimarySubject
+    & requiredMetadata
+    & Label+
+    & empty
+   }
+
+skos.Concept =
+   element skos:Concept {
+      rdfPrimarySubject
+    & Label+
+    & skos.notation
+    & skos.inScheme
+    & skos.match
+    & empty
+   }
+
+skos.notation =
+   element skos:notation { text }
+
+skos.inScheme =
+   [
+      s:pattern [
+         s:rule [
+            context = "/rdf:RDF/skos:Concept/skos:inScheme" s:assert [
+               test = "not(empty(/rdf:RDF/skos:ConceptScheme/@rdf:about = current()/@rdf:resource))"
+               "Das Konzept muss zu einem Ordnungssystem gehören, dass in dieser Datei definiert ist."
+            ]
+         ]
+      ]
+   ]
+   element skos:inScheme {
+      rdfResource
+   }
+
+skos.match =
+   element skos:relatedMatch {
+      rdfResource
+   }*
+ & element skos:broader {
+      rdfResource
+   }*
+ & element skos:related {
+    rdfResource
+ }*
\ No newline at end of file
-- 
GitLab