XML adatkezelés 5. témakör Az XMLSchema speciális elemei ME GEIAL dr Kovács Lászl szló Nincs explicit névtér kijelölve <?xml version="1.0"?> > séma <gyoker xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="file:...xsd21.xsd" > </gyoker> XML adat Ekkor nem lehet névteret kijelölni az XML dokumentumban az elemekhez Fel nem használt névtér kijelölés lehetséges 1
Nincs explicit névtér kijelölve <auto xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="file:/ml/xsd21.xsd" rsz="21" xmlns="laci.nn"> <tipus>opel</tipus> <ar>12</ar> </auto> hibás <auto xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="file:/ml/xsd21.xsd" rsz="21" xmlns:kk="laci.nn"> <tipus>opel</tipus> <ar>12</ar> </auto> helyes Alapesetben a dokumentum egyetlen névtérhez tartozik A névtér paraméterei a séma gyökérelemében állíthatók be targetnamespace : default névtér beállítása elementformdefault : elemekre vonatkozó beállítás attributeformdefault: jellemzőkre vonatkozó beállítás qualified : a gyökér alatti elemek is megkapják unqualified : csak a gyökérnél él a névtér alapértelmezett érték 2
<?xml version="1.0"?> targetnamespace="http://iit.uni-miskolc.hu"> <!--... ide jön a séma részletezése... --> Default névtér kijelölése Csak a gyökér elem veszi fel ezt a névteret targetnamespace="laci.nn"> <xs:element name="auto"> <xs:element name="tipus" type="xs:string"/> <xs:element name="ar" type="xs:int"/> <xs:attribute name="rsz" type="xs:string" use="required"/> </xs:element> <auto xmlns="laci.nn" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="laci.nn file:xsd21.xsd rsz=""> <tipus xmlns=""></tipus> <ar xmlns="">12</ar> </auto> 3
targetnamespace="laci.nn" elementformdefault="qualified" attributeformdefault="qualified"> <xs:element name="auto"> <xs:element name="tipus" type="xs:string"/> <xs:element name="ar" type="xs:int"/> <xs:attribute name="rsz" type="xs:string" use="required"/> Az elemjellemző miatt kell explicit alias kijelölés <kk:auto xmlns:kk="laci.nn" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="laci.nn file:/sd21.xsd" kk:rsz=""> <kk:tipus xmlns=""></kk:tipus> <kk:ar xmlns="">12</kk:ar> </kk:auto> érvényes <auto xmlns="laci.nn" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="laci.nn file:/c:/usd21.xsd" rsz=""> <tipus xmlns=""></tipus> <ar xmlns="">12</ar> </auto> érvénytelen 4
targetnamespace="laci.nn" elementformdefault= unqualified" attributeformdefault="qualified"> <xs:element name="auto"> <xs:element name="tipus" type="xs:string"/> <xs:element name="ar" type="xs:int"/> <xs:attribute name="rsz" type="xs:string" use="required"/> <kk:auto xmlns:kk="laci.nn" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="laci.nn file:l/xsd21.xsd" kk:rsz="r1"> <tipus >ddd</tipus> <ar >12</ar> </kk:auto> targetnamespace="laci.nn" elementformdefault="unqualified" attributeformdefault="qualified"> <xs:element name="auto"> <xs:element name="tipus" type="xs:string" form="qualified"/> <xs:element name="ar" type="xs:int"/> <xs:attribute name="rsz" type="xs:string" use="required"/> </xs:element> A default névteret nem veszik fel az elemjellemzők Elemszinten is lehet beágyazni a hozzárendelést 5
<kk:auto xmlns:kk="laci.nn" xmlns:xsi="http://www.w3.org/2001/xmlschemainstance" xsi:schemalocation="laci.nn file:/c:/users/kovacs_l/jegyzetxml/xsd21.xsd" kk:rsz="r1"> <kk:tipus >ddd</kk:tipus> <ar >12</ar> </kk:auto> Megjegyzések felvitele Megjegyzés típusai: t - fejlesztőnek szóló - feldolgozó programnak szóló <xs xs:annotation annotation> </xs xs:annotation annotation> <xs:annotation> <xs:documentation xml:lang="hungarian"> verziószám: 2.3 Fejlesztõ: K.L. dátum: 2007.07.11 </xs:documentation> <xs:appinfo> </xs:appinfo> </xs:annotation> 6
Több séma modul kezelése Küls lső séma modul beintegrálása Moduláris felépítés: több t részr sz-séma egyesítése se 1. Azonos munkanévt vtér esetén (INCLUDE) <xs xs:include schemalocation= file file: > 2. Azonos munkanévt vtér, verziókövet vetés (REDEFINE) <xs xs:redefine schemalocation= file file: > 3. Eltérő munkanévt vtér (IMPORT) <xs xs:import schemalocation= file file: namespace= file file: > ezen mechanizmussal lehet vegyes névtér eloszlást kialakítani Séma importálása targetnamespace="laci.nn" elementformdefault="unqualified" attributeformdefault="qualified" xmlns:kl="kk.ss"> <xs:import namespace="kk.ss" schemalocation="xsd22.xsd"/> <xs:element name="auto"> <xs:element name="tipus" type="xs:string" form="qualified"/> <xs:element ref="kl:ar"/> <xs:attribute name="rsz" type="xs:string" use="required"/> </xs:element> befogadó séma 7
Séma importálása targetnamespace="kk.ss" elementformdefault="qualified"> <xs:element name="ar" > <xs:element name="penznem" type="xs:string"/> <xs:element name="ertek" type="xs:int"/> </xs:element> bejövő séma A beillesztési névtérnek meg kell egyezni a sémában megadott alapnévtérrel Séma importálása?xml version="1.0" encoding="utf-8"?> <kk:auto xmlns:kk="laci.nn" xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation="laci.nn file:/c.1.xsd" kk:rsz="r1" xmlns:uu="kk.ss"> <kk:tipus >ddd</kk:tipus> <uu:ar> <uu:penznem>ft</uu:penznem> <uu:ertek>23</uu:ertek> </uu:ar> </kk:auto> eredő séma 8
Schematron modell Dinamikus értékellenőrzési mechanizmus az XML dokumentumokra Tetszőleges (XPath) alapú feltételek vizsgálata Nem teljesülő feltétel esetén hibajelzést ad vissza verzió minta szabály kontextus feltétel üzenet Schematron modell Schematron megadása Önálló állomány XMLSchema-n belül Schematron séma szerkezete <schema xmlns="http://purl.oclc.org/dsdl/schematron">... séma elemek... </schema> önálló <xs:annotiation> <xs:appinfo>.. schematron.. </xs:appinfo> </xs:annotation> XMLSchema-ba ágyazott 9
Schematron modell?xml version="1.0" encoding="utf-8"?> <schema xmlns="http://purl.oclc.org/dsdl/schematron"> <pattern id="pp1"> <rule id="r1" context="//auto"> <assert test="@rsz"> Hiba1 </assert> </rule> </pattern> </schema> Schematron minta szerkezet Schematron modell xmlns:xh="http://purl.oclc.org/dsdl/schematron"> <xs:element name="adatok"> <xs:element name="uzem" maxoccurs="unbounded"> <xs:element name="nev" type="xs:string"/> <xs:element name="ber" type="xs:int"/> </xs:element> <xs:element name="dolgozo" maxoccurs="unbounded"> <xs:element name="nev" type="xs:string"/> <xs:element name="ber" type="xs:int"/> 10
Schematron modell?xml version="1.0" encoding="utf-8"?> <adatok xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xsi:nonamespaceschemalocation="file:/c:/xsd23.xsd"> <uzem> <nev>uzem1</nev> <ber>23</ber> </uzem> <dolgozo> <nev>peti</nev> <ber>12</ber> </dolgozo> <dolgozo> <nev>zoli</nev> <ber>11</ber> </dolgozo> </adatok> Schematron modell Minta feladat: uzemek és dolgozok béradatainak illesztése x <xs:annotation> <xs:appinfo> <xh:pattern> <xh:rule context="adatok"> <xh:assert test="sum(//uzem/ber) = sum(//dolgozo/ber)"> Eltero ber osszeg </xh:assert> </xh:rule> </xh:pattern> </xs:appinfo> </xs:annotation> Az External Validation funkción keresztül ellenőrizhető a dokumentum szerkezet helyessége 11