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>
<?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 .