Kihagyás

- DTD

Féligstrukturált adatok

  • Fákon alapuló adatmodell
    • Rugalmas megjelenítés
    • Dokumentumok megosztása egyszerűbb

Adatgráf

  • Pontok = objektumok
  • Élek címkéi = attribútumnekvek
  • Levelek = Atomi értékek

XML

  • Extensible Markup Language
  • HTML- szerű
    • A tag-ek szemantikai jelentést indikálnak

XML - Felépítés

Deklarációval kezdődik, jellemzően

<?xml version ="1.0" encoding="utf-8" ?>

vagy

<?xml version="1.0" standalone="yes" ?>

Tag - Jelölők

  • Tetszőlegesen egymásba ágyazhatók
  • Magányos tag-ek a HTML-hez hasonlóan
  • case-sensitive

Jól formált és valid XML

  • Jól formált XML megengedi, hogy önálló tageket vezessünk be
  • A Valid XML illeszkedik egy előre megadott sémára:
    • DTD
    • XML séma

Jól formált XML

<?xml version="1.0" standalone="yes" ?>
<kocsmák>
    <kocsma>
        <név>Joe bárja</név>
        <sör>
            <név>Bud</név>
            <ár>2.50</ár>
        </sör>
        <sör>
            <név>Miller</név>
            <ár>3.00</ár>
        </sör>
    </kocsma>
    ... 
</kocsmák>

DTD felépítése

<!DOCTYPE gyökér elem [
    <!ELEMENT elem név (összetevők)>
    ...
]>
  • Egy-egy elem leírása az elem nevét zárójelek között az alapelemek megadását jelenti
    • Ez magába foglalja az elemek sorrendjét és multiplicitását
  • A levelek (szöveges elemek) típusa #PCDATA
    • Parsed Character DATA

DTD - Példa

<!DOCTYPE kocsmák [
    <!ELEMENT kocsmák (kocsma*)>
    <!ELEMENT kocsma (név,sör+)>
    <!ELEMENT név (#PCDATA)>
    <!ELEMENT sör (név, ár)>
    <!ELEMENT ár (#PCDATA)>
]>
  • * - 0 vagy több elem
  • + - 1 vagy több elem (legalább 1)
  • ? - 0 vagy 1
  • | - "vagy"
  • Pontosan 1, ha nincs más megadva
  • #PCDATA - atomi érték, nincs gyereke

<!DOCTYPE whatever [
    <!ELEMENT név (
        (titulus?, kereszt, vezeték) | IP cím
    )>
]>

Külső séma alkalmazása

<?xml version="1.0" standalone="no" ?>
<!DOCTYPE kocsmák SYSTEM "bar.dtd"> 
<kocsmák>
    <kocsma ... />
    ...
</kocsmák>

Attribútumok

  • XML-ben a nyitó tag-ek mellett szerepelhetnek attribútumok
  • <ATTLIST E A1 type1 value1 A2 type2 value2 ...>
    • Az E tagez tartozó attribútumokat A1,A2,... adja meg
  • Minden attribútumhoz meg kell adni a típusát, és megkötéseit
    • Adott-e valami default, vahy konstans értéke, lehet kötelező vagy opcionális
    • #IMPLIED vagy #REQUIRED

Attribútumok - Példa

...
<!ELEMENT kocsma (név, sör*)>
  <!ATTLIST kocsma típus CDATA #IMPLIED>
...

ID és IDREF

ID

  • Attribútumokkal lehet elemről elemre hivatkozni
  • XML az inkább gráf, mint fa pont emiatt
    • "Fenntartásokkal kell fogadni ezt az információt."
  • Megadáshot fogjunk egy E elemet és egy A attribútumok, aminek típusa ID
    • Amikor az <E>-t az XML-be hasznáéjuk, az A attribútumnak egy máshol nem szereplő értéket kell adnunk
<E A="xyz">

IDREF / IDREFS

  • Egy F elem az IDREF attribútum segítségével hivatkozhat egy másik elemre annak ID-jén keresztül
  • IDREFS hasonló, csak ott több elemre is hivatkozhat

ID / IDREF - Példa

<!DOCTYPE kocsmák[
    <!ELEMENT kocsmák (kocsma*, sör*)>
    <!ELEMENT kocsma (felszolgál+)>
        <!ATTLIST kocsma név ID #REQUIRED>
    <!ELEMENT felszolgál (#PCDATA)>
        <!ATTLIST felszolgál melyikSör IDREF #REQUIRED>
    <!ELEMENT sör EMPTY>
        <!ATTLIST sör név ID #REQUIRED>
        <!ATTLIST sör kapható IDREFS #IMPLIED>
]>

DTD - Példára illeszkedő dokumentum

<kocsmák>
    <kocsma név="Joe Bárja">
        <felszolgál melyikSör="Bud">2.50</felszolgál>
        <felszolgál melyikSör="Miller">3.00</felszolgál>
    </kocsma> ...
    <sör név="Bud" kapható="Joe Bárja Suzy bárja..."/>...
</kocsmák>

Üres elem - Példa

<!ELEMENT felszolgál EMPTY>
    <!ATTLIST felszolgál melyiksör IDREF #REQUIRED>
    <!ATTLIST felszolgál ár CDATA #REQUIRED>

...
<felszolgál melyiksör="Bud" ár="2.50" />
...

XML séma

  • XML sémák más XML dokumentumok szerkezetét adhatjuk meg
  • XML séma is XML dokumentum

XML Típusok

<?xml version= ... ?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
...
</xs:schema>

Ahol az xs a névteret adja meg

Amiből így következik, hogy az xs:schema az xs névtérhez tartozik

Névtér eleme

  • Az attribútumai
    • name - a definiált elem neve
      • Tagben mindenképp megjelenik
    • type - az elem típusa
      • Lehet XML séma típus
      • vagy olyan típus, amit az adott XML sémában deklaráltunk
  • Definíció szetint nincsen további eleme
    • EMPTY

Összetett típusok

  • xs:complexType
  • Tipikus elem az xs:sequence
    • Elemei xs:element
    • Számossága korlátozható
      • minOccurs
      • maxOccurs

Összetett típusok - Példa

<xs:complexType name="sörTípus">
  <xs:sequence>
    <xs:element name="név"
      type="xs:string"
      minOccurs="1"
      maxOccurs="1"
    />
    <xs:element name="ár"
      type="xs:float"
      minOccurs="0"
      maxOccurs="1"
    />
  </xs:sequence>
</xs:complexType>

Példa - Sörnek egy eleme

<xs:element name ="sör" type="sörTípus">
<sör>
  <név>Bud</név>
  <ár>2.50</ár>
</sör>

Összetett típusok attribútumai

  • xs:attribute, melynek elemei:
    • name és type az xs:element esetén
    • use ami vagy required vagy optional

Példa:

<xs:complexType name="sörTípus">
  <xs:attribute 
    type= "xs:string"
    use="required" />
  <xs:attribute 
    type="xs:float"
    use="optional" />
</xs:complexType>

Típusmegkötések

  • xs:simpleType-al adhatóak megszotítások
    • name-je van
    • meg xs:restriction aleleme
  • base mondja meg, hogy melyik egyszerű típusra vonatkozik a megkötés
  • xs:{min|max}{Inclusive|Exclusive}- al a négyféle alsó és felsőkorlát megadható
    • [], [), (), (]
  • xs:enumeration
    • value attribútumban megadható a felsorolás egy eleme

Típusmegkötések - Példa

<xs:simpleType name="ár">
  <xs:restriction
    base="xs:float"  
    minInclusive="1.00"
    macExclusive="5.00" />
</xs:simpleType>

...
<xs:complexType name="kocsmaTípus">
  <xs:sequence>
    <xs:element name="sör"
      type="sörTípus"
      minOccurs="1"
      maxOccurs="unbounded" />
    <xs:attribute name="név"
      type="xs:string"
      use="required" />
  </xs:sequence>
</xs:complexType>

Alternatív (XML-sémás) megoldás

<xs:element name="kocsmák">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="kocsma"
        type="kocsmaTípus"
        minOccurs="0"
        maxOccurs="unbounded" />
  </xs:complexType>
</xs:element>

Amenyiben a (bars.xsd) néven elmentett sémát akarjuk használni, azt a megszokott módon importálhatjuk

<?xml version="1.0" encoding="UTF-8"?>
<kocsmák
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="bars.xsd">
...
</kocsmák>

Kulcsok az XML sémában

  • xs:element-hez tartozhat xs:key alelem
    • A kulcsnak egyedinek kell lennie

Kulcs - Példa

<xs:element name="kocsmák" ...>
...
  <xs:key name="kocsmaKulcs">
    <xs:selector xpath="kocsma" />
    <xs:field xpath"@név" />
  </xs:key>
...
</xs:element>

XPath adja meg a kapcsolások elérését

Idegen kulcsok

  • xs:keyref alelem az xs:element element belül hivatkozik a megfelelő kulcsra

Idegen kulcs - Példa

<xs:element>
...
<xs:keyref name="kocsmaRef"
  refer="kocsmaKulcs" >
  <xs:selector xpath="alkesz/látogat" />
  <xs:field xpath="@kocsma">
</xs:keyref>
</xs:element>

Keretrendszer

  • Információintegráció
    • Különböző helyekről származó adatbázisokat egy egységként üzemeltetni
  • Félig strukturált adat
    • Viszonylag új adatmodell
    • EA szerint "Segít megbírkózni az adatintegráció problémájával"
  • XML: szabvány a félis-strukturált adatok leírására

Információintegrációs probléma

  • Egymáshoz kapcsolható elemek sok helyen léteznek és elvileg közösen működnek
  • Azonban a különböző adatbázisok több tekintetben is eltérnek

  • Adatbázis modellek (relációs, OO, NoSQL, dokumentum)

  • Séma (normalizált, nem normalizált)
  • Megnevezések, hivaktozások eltérése (tanácsadó az alkalmazott-e)
  • Konvenciók (mértékegységek, SI/CGI)

Integráció megközelítése

  • Adattárház
    • Adatforrásokból központio másolat készítése, azokból közös sémába transzformálni
    • Naponta, hetente frissül
      • Ennél pontosabba nem szabad
  • Mediáció, közvetítés
    • Összes adatforrásra egy nézetet kialakítani
      • Mintha egy integrált rendszer részei volnának
    • A nézetek alakÍthatók úgy, hogy az elnevezési konvencióknak megfellejen

Mediátor mintakép

XML Adatttípusok
  • CDATA - String