[ Alter Ego @ 01.10.2006. 23:11 ] @
Radim neki zadatak iz XML-a pa mi neke stvari naravno nisu jasne, s obzirom da sam početnik. Zadatak je da se naprave xml shema, odgovarajući fajl i xlst transformacija u HTML na primer. E, moj problem je izgleda što XML izgleda posmatram iz perspektive relacionih baza podataka. Moja ideja je bila da jednu malo složeniju shemu baze podataka transformišem u XML. I odmah sam se uhvatio za ključeve i počeo da ih stavljam i gde treba i gde ne treba. Pored toga, za svaku tabelu sam pravio zasebnu xml shemu. Kasnije sam shvatio da to izgleda baš i nije najpametnija stvar koju sam mogao da uradim. Na kraju sam otkrio da XmlSpy ima opciju transformacije relacione baze u XML shemu, i to sam odradio očas posla.

Evo šta mi tu nije jasno:
- Koncept ključeva (key, keyref i unique): koliko se koriste u XML-u i provera u stilu referencijalnog integriteta, da li to postoji (koliko sam ja video ne - xml fajl prolazi validaciju bez obzira na vrednosti ključa).
- Kako organizovati shemu: da li sve strpati u jedan .xsd fajl ili razdvajati?
- Navigacija kod xslt-a: recimo imam nekoliko shema i sad u jednoj je identifikator nekog elementa iz druge. Hoću da priđem ostalim poljima tog elementa da bih ih prikazao, pošto je glupo da prikazujem id.

Sve mi se nešto čini da se to tako ne radi u XML-u. Najlakše bi mi bilo da lepo sve potrpam u jedan fajl, i umesto identifikatora ubacim elemente.

Code:

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2006 sp1 U (http://www.altova.com) by Sinisa (EMBRACE) -->
<xs:schema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://www.w3.org/1999/xhtml" xmlns:hfp="http://www.w3.org/2001/XMLSchema-hasFacetAndProperty" xmlns:teh="tehnicka" targetNamespace="tehnicka" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:include schemaLocation="zaposleni.xsd"/>
    <xs:include schemaLocation="adresa.xsd"/>
    <xs:element name="Zahtev" type="teh:ZahtevType">
        <xs:annotation>
            <xs:documentation>Comment describing your root
      element</xs:documentation>
        </xs:annotation>
        <xs:key name="BRZah">
            <xs:selector xpath="teh:Zahtev"/>
            <xs:field xpath="teh:BrojZahteva"/>
        </xs:key>
    </xs:element>
    <xs:complexType name="ZahtevType">
        <xs:sequence>
            <xs:element name="ZahtevIzdao">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:minLength value="13"/>
                        <xs:maxLength value="13"/>
                        <xs:pattern value="[0-3][0-9][0-1][1-9][9][0-9][0-9][0-9]{6}"/>
                    </xs:restriction>
                </xs:simpleType>
                <xs:keyref name="FKIzdao" refer="teh:PKZap">
                    <xs:selector xpath="teh:Zahtev"/>
                    <xs:field xpath="teh:JMBG"/>
                </xs:keyref>
            </xs:element>
            <xs:element name="BrojZahteva" type="xs:integer"/>
            <xs:element name="Predmet">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="Izvidjanje"/>
                        <xs:enumeration value="Ugradnja wireless 2.4 GHz"/>
                        <xs:enumeration value="Ugradnja wireless 5 GHz"/>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="DatumPodnosenja" type="xs:date"/>
            <xs:element name="DatumObrade" type="xs:date" minOccurs="0"/>
            <xs:element name="Korisnik" type="xs:string"/>
            <xs:element name="ZeljenoVreme" type="xs:date" minOccurs="0"/>
            <xs:element name="ImaOpremu" type="xs:boolean"/>
            <xs:element name="AdresaObjekta" type="teh:AdresaType"/>
        </xs:sequence>
        <xs:attribute name="Status" use="required">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:enumeration value="Otvoren"/>
                    <xs:enumeration value="Zatvoren - odustao"/>
                    <xs:enumeration value="Zatvoren - izdat nalog"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:attribute>
    </xs:complexType>
</xs:schema>


Recimo ovo je neki zahtev. I sad treba da imam podatak o zaposlenom koji ga je izdao. To je element ZahtevIzdao. Za zaposlene imam zasebnu xml shemu, ovde mi je samo identifikator - JMBG. I šta sad da uradim, da li da ubacim ovde sve podatke o zaposlenom i proglasim ga za tip? Ili da jednostavno sve sto se ponavlja u dokumentima proglasim za tipove i stavim u zasebne sheme (zaposleni, adresa...) i onda ih samo instanciram?

Mislim da ovo sa ključevima neće ići .