C# - A .NET Framework XML séma definíciós eszköze

forráskód letöltése
Cikkünkben a .NET Framework XML Schema Definition Tool (röviden XSD) nevű parancssori eszközével ismerkedhetünk meg. A programocska képes arra, hogy tetszőleges XDR, XML, és XSD kiterjesztésű állományokból, vagy assembly-kben deklarált osztályokból XML sémákat vagy osztályokat generáljon. A cikkben bemutatjuk a program jellemző opcióit, használatukat, majd a mellékelt példát, melyben az alkalmazásból indíthatjuk az eszközt a mellékelt állományokat átadva paraméterként.
Az XML séma definíciós eszköze (XSD.EXE) a VS.NET parancssorból indítható, szintaxisa a következő:
xsd <bemenő állomány neve> [opciók]
A program alapértelmezésben a következő mappában található:
<winroot>:\\Program Files\Microsoft Visual Studio .NET\FrameworkSDK\Bin.
A bemenő állományok eltérőek lehetnek, mivel a program sokféle állománykonverzióra alkalmas. A típusok a következők:
Típus Jellemző
XML állomány Az XML állomány adattartalma alapján a program elkészíti a séma állományt (xsd kiterjesztéssel).
XDR séma állomány A program elkészíti a séma XSD séma megfelelőjét.
XSD séma állomány A program generál egy osztályt tartalmazó C# forrásállományt.
Assembly (.exe, .dll) állomány A program generál egy sémát (xsd állomány) valamennyi, az assembly-ben fellelhető típusra.
A program jellemző opcióit a következő táblázat foglalja össze:
Opció Jellemzők
/help Listázhatjuk a program lehetséges opcióit, és szintaxisát.
/outputdir: könyvtárnév Megadható, hogy a kimeneti generált állomány milyen mappába kerüljön.
/classes Osztályokat generál a specifikált XSD séma állomány alapján.
/dataset A megadott DataSet séma állományból generál egy forrásállományt, melyben egy, a DataSet osztályból származó osztály van deklarálva.
/language: nyelv Választható, hogy mely .NET programnyelven generálódjon a kód. Az alapértelmezés a C# (CS), de VB, vagy JS is választható.
/namespace: névtér-név Megadható, hogy a generált kódban mi legyen a névtér neve. Alapértelmezésben „Schemas”.
/type: típusnév Ha egy assembly-t adunk át paraméterként (input állomány), akkor megadható, hogy mely osztály (típus) számára szükséges a sémát létrehozni. Ha ezt nem adjuk meg, akkor a sémadefiníció minden típusra tartalmaz bejegyzést.
A mellékelt példában háromféleképpen indítjuk el az XSD.EXE programot. A Form XML -> XSD füle alatt a mellékelt Products.xml állományhoz generálhatunk egy Products.xsd nevű sémaállományt kényelmesen, az alkalmazásunkból. Ekkor a programot a következő parancssori szintaxissal indítjuk el:
xsd.exe <elérési út>\Products.xml /outputdir:<könyvtárnév>
Az XSD -> CS fül alatt egy DataSet sémadefiníciójából (CustomDS.xsd) generálhatunk egy .cs állományt, a következő parancssorral:
xsd.exe <elérési út>\CustomDS.xsd /dataset /outputdir: <könyvtárnév> /language:CS
A műveletek előtt meg kell adnunk programunk számára a Visual Studio.NET meghajtójának betűjét, hogy a program megtalálja az xsd.exe alkalmazást.
A műveletek előtt a példaállományokat a meghajtó gyökerében létrehozott XSDTool nevű alkönyvtárba másoljuk, majd az eredmény is oda kerül.
A műveletek végén a BETÖLTÉS gomb segítségével a ListBox-ban meg is jeleníthetjük az eredményállományokat.
SampleClass projekt
A SampleClass projektet lefordítva a generálódó DLL-t használjuk fel arra, hogy az assembly-ben deklarált típusokhoz egy sémát hozzunk létre. Ennek módja, hogy az assembly-t paraméterként átadjuk az XSD.EXE programnak. A projekt egyetlen osztályt tartalmaz, Class1 névvel, melyben egy property és egy változó található.
A parancssor, mellyel létrehozzuk a sémát a következő:
xsd <elérési út>\SampleClass.dll /outputdir:<könyvtárnév>
Ekkor a generálódó séma a következőképpen fest:
<?xml version="1.0" encoding="utf-8"?>
<xs:schema...>
  <xs:element name="Class1" nillable="true" type="Class1" />
  <xs:complexType name="Class1">
    <xs:sequence>
      <xs:element minOccurs="1" maxOccurs="1" name="Number" type="xs:int" />
    </xs:sequence>
  </xs:complexType>
</xs:schema>
A program minden művelethez az XML szerializáció és deszerializáció eszközét használja, mely a .NET Framework osztályaiból is elérhető futási időben. A névtér, melyben a funkció elérhető: System.XML.Serialization.XMLSerializer.