Hogy mi a Schematron, azt máshol teljesebben megtalálni, ezért ebbe nem megyek bele. Röviden a lényeg, hogy az XML fájl tartalmi, logikai követelményeit lehet benne leírni.
(Pl. ha valamelyik mezőben 0 áll, akkor egy másik nem lehet üres, stb.)
A Schematron leírása megtalálható itt: http://www.schematron.com
Arról, hogy pontosan hogyan használjuk, főleg, hogyan használjuk VB.net nyelven már kevesebb info áll rendelkezésre, példakód is nagyon szerény.
Ha közelebbről szeretnénk megismerkedni vele, először is töltsük le a projectet innen:
http://sourceforge.net/projects/dotnetopensrc/
Ha megnyitjuk a projectfájlokat, kipróbálhatjuk hogyan működik. Sajnos a project tudtommal csak C# nyelven áll rendelkezésre (ettől persze a lefordított dll-t VB-ben is használhatjuk szerencsére). Ahhoz hogy használjuk, nem szükséges teljes mélységében belelátnunk a működésébe, elég, ha néhány dolgot tudunk róla.
Az NMatrix.Schematron.dll fájlt adjuk hozzá a projectünkhöz.
Íme a példakód:
Imports NMatrix.Schematron
Public Function Schematron_validalas(ByVal xml_doksi As String, ByVal xsd_doksi As String, ByVal schematron_doksi As String) As Schematron_eredmeny
Dim logok As String = ""
Try
Dim validator1 As New Validator(OutputFormatting.Simple, NavigableType.XmlDocument)
validator1.AddSchema(xsd_doksi)
validator1.AddSchema(schematron_doksi)
validator1.Validate(New XmlTextReader(xml_doksi))
Catch ex As Exception
logok = Uzenet(ex.Message)
End Try
Return logok
End Function
A kimenetet (az értékelést) több formátumban is kérhetjük:
Boolean: az eredmény csak igen vagy nem
Log: részletes lista
Simple: hasonló a loghoz, de nem szerepel minden bejegyzésnél az egész doksi elérési útja (ami elég idegesítő is amúgy) Akkor hasznos, ha egyszerűen egy MsgBoxban szeretnénk kiírni az eredményt.
XML: XML formátumba szedi az egészet, amit fel lehet dolgozni valamilyen kiolvasással, és így olyan formába önthetjük az eredményt, amilyenbe csak szeretnénk. Hasznos, ha pl. adatbázisba szeretnénk beírni.
A beállítás a New Validator utasításban az első paraméter: OutputFormatting (alapértelmezésben Log)
A második paraméterben beállíthatjuk, hogy az olvasás módja XmlDocument vagy XPathDocument (a NavigableType tulajdonság, alapértelmezetten XPathDocument) Kipróbáltam mindkettőt, de nem sikerült az eredmények szempontjából különbséget találnom. Elképzelhető, hogy valami irdatlan hosszú doksinál az XPath gyorsabb, de ez tényleg csak tipp.
Ebben a témában ha valakit mélyebben is érdekel, érdemes itt körülnézni (tudtommal minden példa csak C# nyelven van, de nekem segített):
http://tudastar.netacademia.net/default.aspx?upid=5410