Wiki

Clone wiki

rivta-schematron / Home

rivta-schematron

Här finns Schematron-regler för att validera wsdl- och xsd-filer mot RIV Tekniska Anvisningar

Schematron

Schematron är ett deklarativt regelspråk som använder XSL Transforms för att kontrollera olika villkor i ett XML-dokument. Det gör att regler kan skrivas förhållandevis enkelt, och valideringen kan göras på valfri mjukvaruplattform som stöder XSLT.

Transformeringen görs i två steg. Vid det första steget kombineras reglerna med Schematrons grundschema:

Transformering steg 1

Detta "kompilerar" regeldokumentets Schematron-format till ett vanligt XSL stylesheet. Detta stylesheet kombineras i nästa steg med det dokument som ska testas:

Transformering steg 2

Resultatet blir en XML-rapport där ev. avvikelser kan utläsas:

<svrl:schematron-output title="RIV Tekniska Anvisningar Domanschema 2.1" schemaVersion="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:schold="http://www.ascc.net/xml/schematron" xmlns:iso="http://purl.oclc.org/dsdl/schematron" xmlns:svrl="http://purl.oclc.org/dsdl/svrl" xmlns:sch="http://www.ascc.net/xml/schematron">
<svrl:ns-prefix-in-attribute-values uri="http://www.w3.org/2001/XMLSchema" prefix="xs"/>
<svrl:active-pattern name="Regel #3"/>
<svrl:fired-rule context="xs:schema"/>
<svrl:failed-assert location="xs:schema" test="@targetNamespace = $expectedNamespace">
  <svrl:text>Felaktigt targetNamespace: urn:riv:clinicalprocess:activity:actions:2.1</svrl:text>
</svrl:failed-assert>
<svrl:active-pattern name="Regel #4"/>
<svrl:fired-rule context="xs:schema"/>
<svrl:active-pattern name="Regel #5"/>
<svrl:fired-rule context="xs:complexType/xs:sequence"/>
<svrl:successful-report test="local-name($lastElement) != 'any'" location="xs:schema/xs:complexType/xs:sequence">
  <svrl:text>ComplexType LengthOfTreatmentType behöver avslutas med ANY och korrekta attribut för att i framtiden kunna utökas.</svrl:text>
</svrl:successful-report>
<svrl:active-pattern name="Regel #7"/>
<svrl:fired-rule context="xs:element|xs:attribute|xs:simpleType|xs:complexType"/>
</svrl:schematron-output>

Assert och Report

Schematron kan göra två typer av kontroller av ett dokument: asserts och reports.

  • En assert kontrollerar om ett villkor är FALSKT, och skriver då ut failed-assert i valideringsrapporten. I RIV TA Schematronfiler använder vi asserts för att kontrollera anvisningarnas skall-krav.
  • En report kontrollerar om ett villkor är SANT och skriver då ut successful-report i rapporten. Dessa använder vi för att kontrollera anvisningarnas bör-krav.

Ovanstående uppdelning gör att applikationer och script som gör valideringen t.ex. kan visa ERROR eller WARNING beroende på vilken typ av fel som hittats. Nackdelen är att reglerna behöver skrivas olika eftersom asserts behöver utvärderas till falskt och reports behöver utvärderas till sant. Dessutom kommer avvikelser mot bör-krav (reports) att generera successful-report, vilket kan vara missledande, men i vårt fall innebär en avvikelse.

Resultatet blir i alla fall att en "tom" valideringsrapport betyder att inga avvikelser hittats, vilket ändå får betraktas som den bästa alternativet.

Parametrar

XSL-specifikationen ger möjlighet att skicka namngivna parametrar vid transformering. Dessa skrivs med <let> i Schematron-filen och bildar <xslt:param/> efter "kompilering".

Vi använder parametrar för att ange t.ex. korrekta namn på tjänstedomäner, tjänstekontrakt, major- och minorversioner m.m. Dessa parametrar anges i transformering nummer 2, där en RIVTA-artefakt kontrolleras mot det kompilerade regeldokumentet.

Regeldokument

Här följer en beskrivning av de olika regeldokument som finns tillgängliga och dess parametrar:

rivtadomain21.sch

Validerar ett XML Schema (xsd-fil) mot RIV TA Domänschema 2.1 (ARK_0006).

Parametrar

Namn Värde
domainName Namn på tjänstedomän, t.ex. "clinicalprocess:activity:actions"
majorVersion Aktuell majorversion, t.ex. 2
minorVersion Aktuell minorversion, t.ex. 1

rivtaservice21.sch

Validerar ett XML Schema (xsd-fil) mot RIV TA Tjänsteschema 2.1 (ARK_0005).

Parametrar

Namn Värde
domainName Namn på tjänstedomän, t.ex. "clinicalprocess: activity:actions"
majorVersion Aktuell majorversion, t.ex. 2
minorVersion Aktuell minorversion, t.ex. 1
operationName Namn på operation, t.ex. "GetActivities"
interactionName Namn på tjänsteinteraktion, t.ex. "GetActivities"
interactionRole Aktuell tjänsteinteraktionsroll: "Initiator" eller "Responder"

rivtabp20.sch och rivtabp21.sch

Validerar ett XML Schema (xsd-fil) mot RIV TA Basic Profile 2.0 respektivte 2.1 (ARK_0002).

Parametrar

Namn Värde
domainName Namn på tjänstedomän, t.ex. "clinicalprocess: activity:actions"
majorVersion Aktuell majorversion, t.ex. 2
initiatorOperationName Namn på initiator-kontrakt (i förekommande fall)
responderOperationName Namn på responder-kontrakt, t.ex. "GetActivities"
interactionName Namn på tjänsteinteraktion, t.ex. "GetActivities"

Kodexempel

Här följer exempelkod för att göra valideringar i några olika språk:

Användning i verkligheten

Reglerna härifrån används i det verifieringsscript som bl.a. används av Inera Arkitektur & Regelverk vid tekniska granskningar av tjänstedomäner.

Updated