Logo

Today I Learned: Schematron in RelaxNG/Compact einbetten

Die Syntax für Annotationen in der kompakten Syntax von RelaxNG ist etwas gewöhnungsbedürftig, erlaubt aber das Einbinden von Schematron-Regeln, mit denen weitergehende Restriktionen geprüft werden können.

internalEntity =   [      s:pattern [         s:rule [            context = "*[@rdf:about]" s:assert [               test = "matches(@rdf:about, '^http://([^.]+\.)?hab\.de')"               "Verwende <owl:sameAs> für Statements zu Entitäten, die nicht unter der Kontrolle der HAB liegen."            ]         ]      ]   ]   attribute rdf:about { xsd:anyURI }   & Label+

Im Kopf der Grammatik müssen die Schematron-Namensraumbindungen vorgenommen werden, da trang sie nicht automatisch ergänzt.

[    s:ns [ prefix = "rdf" uri = "http://www.w3.org/1999/02/22-rdf-syntax-ns#" ]    s:ns [ prefix = "owl" uri = "http://www.w3.org/2002/07/owl#" ] ]

Und merke:

  • <oXygen/> 18.1 validiert integrierter Schematron-Regeln nur in der XML-Syntax
  • Emacs' rnc-mode rückt die einer Annotation folgenden Definitionen nicht richtig ein