Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 0
  • 113

W jaki sposób można zamodelować relacje pomiędzy tabelami bazy danych używając XML i XML Schema?

  • Zapytał
  • @ | 13.12.2015
  • TRENER MODERATOR ALTKOM AKADEMII
Zaloguj się aby zadać pytanie
Pokrewne

Odpowiedź (1)

  • 0

Do zamodelowania asocjacji pomiędzy dwoma tabelami można użyć typów xsd:ID oraz xsd:IDREF.

Załóżmy, że mamy dwie tabele opisujące odpowiednio państwa i miasta. Można je przedstawić w XML następująco:

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

<baza-danych xsi:noNamespaceSchemaLocation="baza.xsd"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <panstwa>
    <panstwo id="PL">Polska</panstwo>
    <panstwo id="DE">Niemcy</panstwo>
    <panstwo id="FR">Francja</panstwo>
  </panstwa>

  <miasta>
    <miasto panstwo="PL">Warszawa</miasto>
    <miasto panstwo="PL">Poznań</miasto>
    <miasto panstwo="DE">Berlin</miasto>
    <miasto panstwo="DE">Monachium</miasto>
    <miasto panstwo="FR">Paryż</miasto>
  </miasta>
</baza-danych>

W tabeli państw atrybut id  pełni rolę klucza głównego, zaś w tabeli miast atrybut panstwo  przechowuje klucz obcy (musi odnosić się do jakiejś wartości id  państwa).

Schemat dla powyższego dokumentu XML może wyglądać następująco:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

  <xsd:element name="baza-danych" type="baza-danych-typ" />

  <xsd:complexType name="baza-danych-typ">
    <xsd:sequence>
      <xsd:element name="panstwa" type="panstwa-typ" />
      <xsd:element name="miasta" type="miasta-typ" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="panstwa-typ">
    <xsd:sequence>
      <xsd:element name="panstwo" type="panstwo-typ" maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="panstwo-typ">
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="id" type="xsd:ID" use="required" />
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

  <xsd:complexType name="miasta-typ">
    <xsd:sequence>
      <xsd:element name="miasto" type="miasto-typ" maxOccurs="unbounded" />
    </xsd:sequence>
  </xsd:complexType>

  <xsd:complexType name="miasto-typ">
    <xsd:simpleContent>
      <xsd:extension base="xsd:string">
        <xsd:attribute name="panstwo" type="xsd:IDREF" use="required" />
      </xsd:extension>
    </xsd:simpleContent>
  </xsd:complexType>

</xsd:schema>

 

  • Odpowiedział
  • @ | 13.12.2015
  • TRENER MODERATOR ALTKOM AKADEMII