Wiki
Clone wikirivta-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:
Detta "kompilerar" regeldokumentets Schematron-format till ett vanligt XSL stylesheet. Detta stylesheet kombineras i nästa steg med det dokument som ska testas:
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