C#.NET * C++ * JAVASCRIPT * PYTHON * DIVERSES
XML * XML-SCHEMA * XPATH * XSL * XSL-FO * SVG * XQUERY * XPROC * ANT



XProc / p:validate-with-schematron / Schematron-Validierung

Schematron-Validierung

Schematron-Validierung

➪ Nicht alle Programmiersprachen unterstützen fortgeschrittene XML-Technologien wie Schematron-Validierung oder XSLT-2.0-Transformationen. Wirksame Hilfe finden Sie in XProc. Hier finden Sie Beispiele, wie Sie xmlcalabash-1.2.1-99.jar in Python sowie in C#.NET aufrufen können.

Auf dieser Seite:

Den Download zu Version 1.2.1-99 finden Sie hier:


https://github.com/ndw/xmlcalabash1/releases/tag/1.2.1-99

Siehe auch


https://xmlcalabash.com/download/

Schematron-Validierung via XProc

XProc bietet weitaus mehr Möglichkeiten als lediglich die Schematron-Validierung. Aber auch diese kann separat sufgerufen werden. Das XProc-Programm (hier mit inline-integriertem Schematron) könnte so aussehen:


<?xml version="1.0" encoding="UTF-8"?>
<p:declare-step
  xmlns:p="http://www.w3.org/ns/xproc"
  xmlns:c="http://www.w3.org/ns/xproc-step"
  version="1.0">
  <p:input port="source"     sequence="true"/>
  <p:input port="parameters" kind="parameter"/>
  <p:output port="result"    sequence="true"/>
  <p:validate-with-schematron assert-valid="false">
    <p:log port="report" 
           href="file:///C:/(...)/xproclog_schematron.txt"/>
    <p:input port="schema">
      <p:inline>
        <sch:schema 
             xmlns:sch="http://purl.oclc.org/dsdl/schematron" 
             queryBinding="xslt2">
          <sch:pattern>
            <sch:rule context="//name">
              <sch:assert
                   test="matches(./text(), '[A-Z]{1}[a-z]{1,19}')">
                   Der Wert entspricht nicht dem Pattern
              </sch:assert>
              <sch:assert
                   test="matches(./text(), 'stadt$')">
                   Der letzte Wortteil ist nicht 'stadt'
              </sch:assert>
            </sch:rule>
          </sch:pattern>
        </sch:schema>
      </p:inline>
    </p:input>
    <p:input port="parameters">
      <p:empty/>
    </p:input>
  </p:validate-with-schematron>
</p:declare-step>

Statt p:inline können Sie auch mit p:document arbeiten.


<p:input port="schema">
<p:document href="C:/(...)/myschematrontest.sch"/>
</p:input>

Das Validation-Resultat finden Sie dann in C:/(....AUSGABEPFAD...)/xproclog_schematron.txt.

Aufruf von Calabash

Ein Beispiel für den kommandozeilenbasierten Calabash-Aufruf finden Sie in .


java -jar C:/(...path2calabash...)/xmlcalabash-1.2.1-99.jar 
     -i source=C:/input/myxmlfile.xml  
     C:/(...path-2-xpl...)/schematron_validate.xpl

Schematron-Validierung in Python


def validateSchematron():
    import subprocess    
    subprocess.call(f"java 
        -jar C:/(...path2calabash...)/xmlcalabash-1.2.1-99.jar 
        -i source=C:/input/myxmlfile.xml  
        C:/(...path-2-xpl...)/schematron_validate.xpl")
validateSchematron()

Schematron-Validierung in C#.NET

Der Aufruf unter C#.NET wäre so möglich (ich finde den Aufruf einer jar-Datei unter C# alles andere als ideal, aber er funktioniert):


using System;
using System.Diagnostics;
namespace Schematronvalidierung
{
  class Program
  {
    static void Main(string[] args)
    {
      string path_calabash = "C:/(...)/xmlcalabash-1.2.1-99.jar";
      string xmlfile = "C:/(...)/input.xml";
      string xprocfile = "C:/(...)/xsdvalidate.xpl";
      string command = $"java -jar {path_calabash} 
                              -i source={xmlfile} 
                              {xprocfile}";
      Process.Start(
         new ProcessStartInfo("cmd.exe", "/c " + command){
        UseShellExecute = false
      }).WaitForExit();
      Console.WriteLine("Fertig :-)");
    }
  }
}

wg / 7. Juni 2020



Fragen? Anmerkungen? Tipps?

Bitte nehmen Sie Kontakt zu mir auf.






Vielen Dank für Ihr Interesse an meiner Arbeit.



V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn

☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de

www.wilfried-grupe.de/Schematron1.html