Šta je novo?

Pomoc u vezi XML-a

vedran

Čuven
Učlanjen(a)
04.07.2003
Poruke
3
Poena
601
Nedavno sam radio prezentaciju pomocu XML-a. Sve je dobro bilo dok je nisam probao na Internet Explorer-u 6. Tada nije hteo korektno da cita XML dokumenta. Sta treba da uradim da bi ih i IE 6 prikazivao. Da li je u pitanju samo IE ili i operativni sistem. Isprobano je na tri masine Win 98 i NT 4(tu je sve dobro radilo) a na XP-u je doslo do ovog problema. Inace XML koristim kao malu bazu podataka. XML koristim zajedno sa HTML-om. Postavljam linkove na razlicite stranice koji zatim otvaraju odgovarajuci XML. XML dokumenta formatiramo pomocu CSS fajlova. Ne koristim nikakve skripte kodove za prikazivanje XML-ovih elemenata, kao ni XLS-ove za formatiranje tih dokumenata.
Evo ga i problematicni XML:
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="CSS/ERICSSON1.css"?>

<!-- File Name: ERICSSON1.xml -->

<MOBILNI>
<ERICSSON>
<NAZIV>ERICSSON R 600</NAZIV>
<OSNOVNE>
<IMAGE/>
<DIMENZIJE>Dimenzije: 105x45x20 </DIMENZIJE>
<TEZINA>Tezina: 82g </TEZINA>
<TRAJANJE_BATERIJE>Trajanje baterije: razgovor (min): 240
stand by (h): 150 </TRAJANJE_BATERIJE>
<CENA>Cena: 160 evra</CENA>

</OSNOVNE>

<OSTALE>
<BATERIJA>Baterija: Litijum-jon</BATERIJA>
<SIM_KARTICA>SIM kartica: mala</SIM_KARTICA>
<KARAKTERISTIKE>Karakteristike: Imenik: SIM kartica + 200
Organajzer
Casovnik, alarm, adresar i kalkulator
Mogucnost programiranja melodije zvona
Pamti 15 poslednjih pozvanih brojeva
Lista neuspelih poziva
Servis kratkih poruka (SMS)
EMS
Prenos faksa i podataka
Graficki displej
Identifikacija poziva
4 video igrice
Pozivanje broja glasom
GSM 900/1800 dual-band
Vibracije WAP 1.2.1 browser
GPRS (General Packet Radio Services) </KARAKTERISTIKE>
</OSTALE>
</ERICSSON>
</MOBILNI>

Evo ga i odgovarajuci CSS:

MOBILNI, ERICSSON, {
font-family: Tahoma, Arial;
margin-left: 0.5in;
margin-bottom: 0.4in;
background: WHITE;
display: block;
font-size: 11pt;
color: black;
padding: 0.1em;
text-align: justify;
}
OSNOVNE, OSTALE{
FONT-SIZE:12 PX;

COLOR:RGB(170,189,89);
}
NAZIV{
FONT-SIZE:14PX;
TEXT-ALIGN: CENTER;
PADDING:1.2EM;
}
DIMENZIJE, TEZINA, TRAJANJE_BATERIJE{
DISPLAY:BLOCK}
BATERIJA, SIM_KARTICA, KARAKTERISTIKE {
DISPLAY:BLOCK;
COLOR:RGB(100,165,5)}
IMAGE{
BACKGROUND-IMAGE:URL(D:\IVAN\myweb4\images\ERICSSON R600.bmp);
BACKGROUND-REPEAT: NO-REPEAT;
WIDTH:122PX;
HEIGHT:250PX;
FLOAT:LEFT}

Jedan slican XML mi je proradio tako sto sam brisao svuda dvotacke gde ih je imalo izmedju tagova, a skratio sam i tekst u tagu <karakteristike>.Molio bih sve da mi pomognu zato sto mi je veoma bitno da resim ovaj problem kompatibilnosti browser-a sa XML-om. Pozdrav.
 
Prvo moras da budes siguran da li je problem u xml fajlu ili css-u, pa predlazem da za probu uklonis drugu liniju iz xml fajla - referencu na css stylesheet. Tada bi IE morao da prikaze xml fajl sa default stylesheetom integrisanim u browser - kao stablo. Ukoliko imas gresku u xml-u, tada bi IE-ov parser trebao da prijavi gresku i tacnu liniju koja mu se ne dopada.

Kao pucanj u prazno:
- kod svih praznih tagova, kao sto je onaj <IMAGE/>, probaj da ubacis jedan space izmedju imena taga i slasha, dakle da izgleda ovako: <IMAGE />
- da li je pametno da stavljas apsolutne, a ne relativne pathove do slika u css-u?
- kada imas margine u css-u, definisao si ih u inchima, sta ako je windows podesen na drugaciji locale, tj. metricki, non-US standard


Ajde proveri prvo ovo pa vici. Ukoliko ne radi, objasni konkretnije kako se manifestuje to odbijanje IE-a - da li ima djubre, da li ima neka poruka o gresci, itd.
 
Interesuje me jos jedna stvar u vezi XML-a. Da li mogu nekako da napravim hiperlinkove na pojedine delove XML? Posto radim ovu malu WEB prezentaciju mobilnih telefona za republicko takmicenje iz informatike, tema mi je primena XML-a u kreiranju internet stranica, hteo bih da napravim samo jedan XML u kojem ce mi biti smesteni podaci o svim mobilnim telefonima.Zatim bih razlicite HTML stranice povezivao sa tim XML-om i na njima bi bili ispisani podaci samo o jednom telefonu a ne o svima. Pokusavao sam na razne nacine ali nikako nisam uspeo. Uvek mi je prikazivao ceo XML, a ne samo deo koji mi je bio potreban. U jendom diplomskom radu sam procitao da je moguce posebne XML-ove elemente povezati sa HTML-ovim tako da se na stranici prikazuje samo deo XML-a, ali ne i nacin na koji to da se izvede.
 
Ovako, kao prvo moram da uradim malu primedbu - meni licno se tvoj nacin dizajna xml-a ne svidja :)
Ok, stvar ukusa i kasnije lakoce upravljanja, ali evo par objasnjenja, zato sto su povezana sa resenjem koje trazis:

- css je dobar samo za menjanje fontova, boja i slicno; za sve ostalo bi morao da ides ili na XSLT ili na data binding (pretpostavljam da si ovim drugim vec poceo da radis)
- podeli jasno podatke i opise podataka; na primer, imas tag <TEZINA>Tezina: 85g </TEZINA> - zasto si ovde stavio "Tezina:" u okviru elementa, umesto <TEZINA>85g</TEZINA> ili cak bez "g"? XML u ovom slucaju treba da sadrzi suve podatke a identifikatori elemenata i atributa ih opisuju - bas kao sto i u tabelama u bazi podataka imas suve podatke, a sama baza ili db server pruzaju dodatne funkcije i servise. Elem, takvim stavljanjem teksta "Tezina:" u element pravis vrlo nefleksibilnu strukturu. Na primer, bez toga, polje bi 'ladno moglo da bude integer tipa, drugacije formatiranje, tj. da "Tezina:" bude italic ili bold ili drugacije boje od onog "85g" (da ne pominjem kako bi izgledalo u tabeli poredjenja vise modela). Plus to, mogao bi u jednom xml fajlu da definises samo nazive elemenata (tezina, dimenzije, itd) i da ih prevedes na vise jezika; pa onda mozes da drzis podatke o telefonima u samo jednom xml-u kao cistoj bazj, a drugacije formatiras output na html prema izabranom jeziku. Sa 'cistim formatom' bi mogao sasvim lako taj xml da importujes u neku bazu ili excel fajl ili nesto sasvim deseto. Ovde bih ukljucio i grupisanje na "osnovne" i "ostale" karakteristike, koje mogu sasvim lako da budu stvar samo grupisanja kod prikazivanja - kao da si neke ingerencije html-a kod prikazivanja preneo na xml koji treba da sadrzi samo podatke.
- ako ti je root dokumenta element <MOBILNI>, onda gledaj da sve ostale telefone stavljas u podelemente sa istim imenom; dakle, ne /MOBILNI/ERICSSON/... nego /MOBILNI/TELEFON/... pa dalje prema nazivu ili dodatnim elementima/atributima mozes da grupises kod prikaza. Neka grupisanja je lakse uraditi i preko namespace varijacija.

Evo u sledecem postu jedno od resenja sa minimalnim izmenama tvog xml fajla - morao sam da dodam jos jedan telefon radi ilustracije, te sam izbacio ovo "osnovne/ostale".
 
Ovo je XML fajl, snimljen kao "mobilni.xml" :

[code:1]
<?xml version="1.0"?>
<MOBILNI>
<TELEFON>
<NAZIV>ERICSSON R 600</NAZIV>
<IMAGE/>
<DIMENZIJE>Dimenzije: 105x45x20 </DIMENZIJE>
<TEZINA>Tezina: 82g </TEZINA>
<TRAJANJE_BATERIJE>Trajanje baterije: razgovor (min): 240 stand by (h): 150 </TRAJANJE_BATERIJE>
<CENA>Cena: 160 evra</CENA>
<BATERIJA>Baterija: Litijum-jon</BATERIJA>
<SIM_KARTICA>SIM kartica: mala</SIM_KARTICA>
<KARAKTERISTIKE>Karakteristike: Imenik: SIM kartica + 200
Organajzer Casovnik, alarm, adresar i kalkulator
Mogucnost programiranja melodije zvona
Pamti 15 poslednjih pozvanih brojeva
Lista neuspelih poziva
Servis kratkih poruka (SMS)
EMS
Prenos faksa i podataka
Graficki displej
Identifikacija poziva
4 video igrice
Pozivanje broja glasom
GSM 900/1800 dual-band
Vibracije WAP 1.2.1 browser
GPRS (General Packet Radio Services)
</KARAKTERISTIKE>
</TELEFON>
<TELEFON>
<NAZIV>SIEMENS S55</NAZIV>
<IMAGE/>
<DIMENZIJE>Dimenzije: 101x42x18 </DIMENZIJE>
<TEZINA>Tezina: 85g </TEZINA>
<TRAJANJE_BATERIJE>Trajanje baterije: razgovor (min): 360 stand by (h): 290 </TRAJANJE_BATERIJE>
<CENA>Cena: 160 evra</CENA>
<BATERIJA>Baterija: Litijum-jon 700mAh</BATERIJA>
<SIM_KARTICA>SIM kartica: mala</SIM_KARTICA>
<KARAKTERISTIKE>Karakteristike: Imenik: SIM kartica + 200
SMS
EMS
Kolor, 7 linija 101 x 80 piksela
Bluetooth
Java
Triple Band E-GSM, GSM 900 / 1800 /1900 GSM
Vibracije WAP 1.2.1 browser
GPRS (General Packet Radio Services)
bla-bla
</KARAKTERISTIKE>
</TELEFON>
</MOBILNI>
[/code:1]


A ovo je html, kojim se preuzima data iz XML-a i prikazuje jedan po jedan telefon iz fajla "mobilni.xml" :

[code:1]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Mobilni</title>
</head>
<body>
<XML ID="dsoMobilni" SRC="mobilni.xml"></XML>

<H2>Mobilni telefoni</H2>

<SPAN style="font-style:italic">Naziv: </SPAN>
<SPAN style="font-weight:bold" DATASRC="#dsoMobilni" DATAFLD="NAZIV"></SPAN>

<SPAN DATASRC="#dsoMobilni" DATAFLD="DIMENZIJE"></SPAN>

<SPAN DATASRC="#dsoMobilni" DATAFLD="TEZINA"></SPAN>

<SPAN DATASRC="#dsoMobilni" DATAFLD="TRAJANJE_BATERIJE"></SPAN>

<SPAN DATASRC="#dsoMobilni" DATAFLD="CENA"></SPAN>

<hr>

<SPAN DATASRC="#dsoMobilni" DATAFLD="BATERIJA"></SPAN>

<SPAN DATASRC="#dsoMobilni" DATAFLD="SIM_KARTICA"></SPAN>

<SPAN DATASRC="#dsoMobilni" DATAFLD="KARAKTERISTIKE"></SPAN>
<hr>

<button onclick="dsoMobilni.recordset.movefirst()">|& Prvi</button>
<button onclick="dsoMobilni.recordset.moveprevious(); if (dsoMobilni.recordset.BOF) dsoMobilni.recordset.movenext()">& Prethodni</button>
<button onclick="dsoMobilni.recordset.movenext(); if (dsoMobilni.recordset.EOF) dsoMobilni.recordset.moveprevious()">Sledeci &</button>
<button onclick="dsoMobilni.recordset.movelast()">Poslednji &|</button>
</body>
</html>
[/code:1]
 
Primer je vrlo jednostavna ilustracija; ti to, naravno, mozes da stavis u lepu tabelu, namestis dugmice na mesto gde se nece pomerati (u odnosu na kolicinu raspolozivih informacija o telefonu), itd.

Slicno si mogao da uradis i sa XSLT stylesheetovima, jer tamo imas lepe funkcije za looping, sortiranje, selektovanje, filtriranje, itd. - ali nemas direktan html, nego ga generise browser online iz xml+xsl kombinacije.

P.S.
Ovaj primer gore radi u IE6.
 
Nazad
Vrh Dno