|
[ enferty @ 06.08.2010. 13:38 ] @
| Pozdrav svima,
potrebna mi je mala pomoc. Naime, rec je o pisanju jedne aplikacije za fax. Treba napraviti aplikaciju koja ce raditi validaciju xml dokumenta na osnovu neke xml seme. Sve to zvuci divno, samo sto sam ja pocetnica u xml-u i ne znam puno o tome. Dosada sto sam shvatila je da program radi ako ja u dokumentu napisem ovo (dato na slici):

mene zanima, da li izvodljivo nekako to "prepraviti" da se ne menja kod tj. korisnik da ga ne menja direktno u fajlu, vec da se nekako namesti da se menja da bi moglo da se validira na osnovu neke druge sheme recimo.
ps. izvnite sad na ovim pitanjima, ali veoma su mi vazna za zadatak:
1. zanima me da li je moguce raditi i html validaciju na osnovu neke sheme, pa da se to sacuva kao xhtml dokument?
2. da li ce program raditi i ako ta neka shema i dokument nisu u projektu?
3. kako da sacuvam neki externi dokument u projekat?
Unapred hvala na odgovoru. |
[ enferty @ 08.08.2010. 14:33 ] @
molim vas za pomoc, zaista mi je potrebno 
[ mmix @ 08.08.2010. 15:03 ] @
U kom jeziku uopst epises program za validaciju? Od toga ti zavise odgovori na sva pitanja.
[ enferty @ 08.08.2010. 15:12 ] @
Izvinjavam se sto nije navedeno, mislila sam da je to univerzalno posto je to xml...
Ali da odgovorim na pitanje, C# je u pitanju.
[ Shadowed @ 08.08.2010. 19:36 ] @
Mozes ovako nesto:
Code (csharp):
XmlSchemaSet sc = new XmlSchemaSet ();
sc .Add("urn:bookstore-schema", "Shema.xsd");
XmlReaderSettings settings = new XmlReaderSettings ();
settings .ValidationType = ValidationType .Schema;
settings .Schemas = sc ;
settings .ValidationEventHandler += new ValidationEventHandler (ValidationCallBack );
XmlReader reader = XmlReader .Create("Dokument.xml", settings );
while (reader .Read());
private static void ValidationCallBack (object sender, ValidationEventArgs e ) {
Console .WriteLine("Validation Error: {0}", e .Message);
}
Samo ovaj prvi deo stavi u neku funkciju, gde ti vec treba.
[ enferty @ 08.08.2010. 20:16 ] @
Ok, mislim da sam otprilike ukapirala kod. Hvala isprobacu pa cu videti da li radi, ali problem je u tome sto je i ovde u ovom kodu data shema.xsd, a ona moze biti bilo koja druga shema, npr. proizvod.xsd itd. Da li bi za nju trebala da napravim neku varijablu ili nesto slicno pa da je ispovezujem sa dokumentom koji se validira?
[ Shadowed @ 08.08.2010. 22:06 ] @
Citat: enferty: Ok, mislim da sam otprilike ukapirala kod. Hvala isprobacu pa cu videti da li radi, ali problem je u tome sto je i ovde u ovom kodu data shema.xsd, a ona moze biti bilo koja druga shema, npr. proizvod.xsd itd. Da li bi za nju trebala da napravim neku varijablu ili nesto slicno pa da je ispovezujem sa dokumentom koji se validira?
To je samo primera radi. Mozes dodati koji hoces xsd fajl.
Inace, ovo "urn:bookstore-schema" je namespace. Mozes staviti i null, meni je to ostalo iz primera koji sam kopirao. Vise o Add metodu na http://msdn.microsoft.com/en-us/library/1hh8b082.aspx
[ enferty @ 08.08.2010. 22:19 ] @
Oke, hvala, to sam shvatila (a nedavno sam skontala sta je zapravo namespace), ali to i dalje nije ono sto meni treba :(
oprosti ako sam bila nejasna :(
mogu ja uneti tu sta god zelim, ali treba u aplikaciji da to unese sam korisnik sa njegovog racunara sa onim browse dugmetom ili negde ako je sema na netu.
ps. izvini jos jednom na maltretiranju za ovo i za nejasnoce.
[ Shadowed @ 09.08.2010. 02:15 ] @
Ma, nema potrebe za izvinjavanjem :)
Ovo je pojednostavljen primer gde je u kodu samo upisano ime fajla, ali ti mozes to prepraviti tako da to bude ono sto ce unostiti korisnik. Resimo, ovako napravis funkciju koja prihvata putanje do xml i xsd fajla:
Code (csharp):
public void ValidateXMLFile (String XMLFile, String XSDFile )
{
XmlSchemaSet sc = new XmlSchemaSet ();
sc .Add(null, XSDFile );
XmlReaderSettings settings = new XmlReaderSettings ();
settings .ValidationType = ValidationType .Schema;
settings .Schemas = sc ;
settings .ValidationEventHandler += new ValidationEventHandler (ValidationCallBack );
XmlReader reader = XmlReader .Create(XMLFile, settings );
while (reader .Read());
}
private static void ValidationCallBack (object sender, ValidationEventArgs e ) {
Console .WriteLine("Validation Error: {0}", e .Message);
}
Onda gde hoces, samo pozoves tu funkciju. Recimo, sa OpenFileDialog pokupis putanju do xml i xsd fajla i pozoves funkciju sa tim putanjama.
[Ovu poruku je menjao Shadowed dana 09.08.2010. u 11:20 GMT+1]
[ enferty @ 10.08.2010. 09:40 ] @
Hvala na ovome, isprobacu pa cu ti javiti ako mi nesto ne bude radilo. 
[ Shadowed @ 10.08.2010. 09:56 ] @
Javi i ako bude radilo :)
[ enferty @ 10.08.2010. 10:05 ] @
Vazi 
[ enferty @ 10.08.2010. 13:03 ] @
Pitanje: Sta su XMLFile i XSDFile?
u kodu tacno?
[ Shadowed @ 10.08.2010. 14:41 ] @
Pa, kao sto vidis, to su argumenti funkcije. Njih prosledjujes prilikom pozivanja funkcije..
Ako mislis na to sta predstavljaju, to su putanje do xml i xsd fajlova.
[ enferty @ 11.08.2010. 08:57 ] @
oke, predpostavila sam... sad me interesuje, kako da iz tog objekta tu putanju prebacim u string koji se trazi u proceduri?
ps. ako zelis, poslacu ti na pp ceo kod pa da vidis, da se ne cimamo ovako stalno.
[ enferty @ 11.08.2010. 12:02 ] @
ok, ajmo vako:
probala sam da vidim da li ce ovo da radi... da konvertujem odmah ove objekte sa putanjama u stringove, ali sada se pojavio drugi problem 
kaze mi ovako: No overload for "browse_btn" matches delegate 'System.EventHandler'... isto tako i za "validiraj_btn_Click" i "xsdBrowse_Click".
gde je ovde greska?
Code (csharp):namespace WindowsFormsApplication1
{
public partial class browsing : Form
{
public browsing ()
{
InitializeComponent ();
}
private void browse_btn (object sender, EventArgs e, string XMLFile )
{
OpenFileDialog ofd = new OpenFileDialog ();
if (ofd .ShowDialog() == DialogResult .OK)
{
txtFileName .Text = ofd .FileName;
XMLFile = txtFileName .Text.ToString();
}
}
private void xsdBrowse_Click (object sender, EventArgs e, string XSDFile )
{
OpenFileDialog of = new OpenFileDialog ();
if (of .ShowDialog() == DialogResult .OK)
{
txtXSDFile .Text = of .FileName;
XSDFile = txtXSDFile .Text.ToString();
}
}
private void txtInternet_TextChanged (object sender, EventArgs e )
{
// povlacenje dokumenta sa internet stranice
}
private void validiraj_btn_Click (object sender, EventArgs e, string XMLFile, string XSDFile )
{
ValidateXMLFile (XMLFile,XSDFile );
}
public void ValidateXMLFile (String XMLFile, String XSDFile )
{
XmlSchemaSet sc = new XmlSchemaSet ();
sc .Add(null, XSDFile );
XmlReaderSettings settings = new XmlReaderSettings ();
settings .ValidationType = ValidationType .Schema;
settings .Schemas = sc ;
settings .ValidationEventHandler += new ValidationEventHandler (ValidationCallBack );
XmlReader reader = XmlReader .Create(XMLFile, settings );
while (reader .Read()) ;
}
public static void ValidationCallBack (object sender, ValidationEventArgs e )
{
Console .WriteLine("Validation Error: {0}", e .Message);
}
public void EventHandler (object sender, EventArgs e )
{
textBox1 .Text += "Greska!";
}
//close button
private void close_btn_Click (object sender, EventArgs e )
{
browsing .ActiveForm.Close();
}
//clear button
private void clear_btn_Click (object sender, EventArgs e )
{
textBox1 .Clear();
}
}
}
[ Shadowed @ 11.08.2010. 12:20 ] @
Podvuceni delovi su visak:
private void browse_btn(object sender, EventArgs e , string XMLFile)
private void xsdBrowse_Click(object sender, EventArgs e , string XSDFile)
private void validiraj_btn_Click(object sender, EventArgs e , string XMLFile, string XSDFile)
Ne znam sto si ih dodavala, ali uopste ne trebaju biti tu. Ne moze tako a i posto putanje vec imas u TextBox-ovima, ne trebaju ti dodatne promenljive.
Samo zameni:
Code (csharp):
private void validiraj_btn_Click(object sender, EventArgs e, string XMLFile, string XSDFile)
{
ValidateXMLFile(XMLFile,XSDFile);
}
sa
Code (csharp):
private void validiraj_btn_Click(object sender, EventArgs e, string XMLFile, string XSDFile)
{
ValidateXMLFile(txtFileName.Text, txtXSDFile.Text);
}
I, nema potrebe za TextBox.Text.ToString() posto Text vec jeste String.
[ enferty @ 11.08.2010. 12:53 ] @
ahhaaam.... sad je svakako jasnije 
malo je teze navici se na ovo... oprosti na svim glupostima koje budes video :P
kazi mi jos samo nesto: posto sam ja pisala validaciju u bool formatu, a ovo je sada void. Kada zelim da mu kazem da mi ispise u textBox-u, javlja mi da ga ne vidi, kako ga sad ne vidi?
Code (csharp):
public static void ValidationCallBack(object sender, ValidationEventArgs e)
{
//Console.WriteLine("Validation Error: {0}", e.Message);
textBox1.Text += "Greska!";
}
[ Shadowed @ 11.08.2010. 17:07 ] @
Kopiraj tacno koju gresku dobijas. Pretpostavljam sta je, ali za svaki slucaj kopiraj.
[ enferty @ 11.08.2010. 19:25 ] @
An object reference is required for the non-static field, method, or property 'WindowsFormsApplication1.browsing.textBox1'
C:\Users\Administrator\My Documents\Visual Studio 2008\Projects\xmlshema\WindowsFormsApplication1\browsing.cs
[ Shadowed @ 11.08.2010. 20:14 ] @
Sorry. Izbaci static iz te funkcije.
[ bojan21 @ 11.08.2010. 20:22 ] @
Stvar je u tome sto si stavila da je metoda ValidationCallBack staticka, a u okviru nje pokusavas da menjas svojstvo Text kontrole textBox koja pripada nekoj konkretnoj instanci tvoje klase.
Staticke metode nisu vezane za instancu klase kojoj pripadaju, to jest, da bi pozvala takvu metodu nije potrebno napraviti novu instancu te klase, vec je pozivas sa MojaKlasa.MojaStatickaMetoda().
Dakle, posto takva metoda nije vezana za konkretan objekat klase, u trenutku pozivanja tvoje metode "ValidationCallBack()", ne postoji instanca tvoje klase "browsing", pa samim tim ne postoji ni "textBox1" koji pripada toj klasi.
Najjednostavnije resenje je da izbrises to static, i da metodu ucinis privatnom:
Code:
private void ValidationCallBack(object sender, ValidationEventArgs e)
{
//Console.WriteLine("Validation Error: {0}", e.Message);
textBox1.Text += "Greska!";
}
posto metoda vise nije staticka, vezana je za konkretan objekat klase "browsing", pa mozes da pristupas njenim elementima.
Takodje, metodu "ValidateXMLFile" mozes slobodno da prebacis u private, ne vidim smisao da bude public.
Ne znam koliko ce ti biti jasno ovo sto sam gore napisao, nadam se da nisam mnogo zakomplikovao.
Pozdrav
[ enferty @ 11.08.2010. 20:33 ] @
@Shadowed
sredjeno  , hvala puno
@bojan21
jeste, jasnije je... nije komplikovano toliko... kada ima ko da ti kaze kako i sta radi
ps. momci, moram nesto da vas pitam sad i izvinite na tim pitanjima, ali ono... trazi se od mene:
1. da li ovaj program mogu da koristim za validaciju html file-a i neke xsd sheme, pa da napravim xhtml? (predpostavljam da mogu, sa manjim izmenama)
2. da li ce raditi ako su mi file-ovi van projekta? (znaci nema ih u zvanicnom projektu)
3. zadnje: kako se pravi da to bude .exe?
znam da mnogo trazim, ali bila bi vam jako zahvalna na pomoci...  ... vec jesam i previse, ali ovo je zapravo kljucan deo zadatka.
[Ovu poruku je menjao enferty dana 11.08.2010. u 21:49 GMT+1]
[ bojan21 @ 11.08.2010. 21:22 ] @
Idemo redom:
1. trebalo bi da moze, ipak je XHTML u osnovi XML (nisam bio u mogucnosti da probam, ali na netu ima dosta primera); za svaki slucaj, ovo bi trebalo neko da potvrdi/opovrgne posto zaista nisam siguran.
2. koji fajlovi? xml/xhtml i xsd? ako mislis na njih, sto ne bi radilo, ionako ih ucitavas preko OpenFileDialog-a
3. koliko vidim, koristis Visual Studio, ako si vec isla na build/debug (siguran sam da jesi), exe datoteka se vec nalazi i "bin\Debug" direktorijumu tvoje aplikacije
[ enferty @ 11.08.2010. 21:45 ] @
ahaaam... oke, videcu i to da probam da uradim, ali verovatno cu naici na neke probleme, ipak sam pocetnica u ovome.
2. pitam zato sto ako probam ovako iz VS-a, javlja mi gresku.
3. aham, hvala, sadcu je vidim
====================
edit: radi exe file 
edit2: sad sam proverila radi li i sa externim dokumentima. radi kada ga pokrenem sa ovog exe file-a, u VS nece, izbacuje gresku, al to je ne bitno sad, kad radi ne diram
ps. jel moze par linkova, smernica za ovaj problem sa xhtml-om?
unapred vrlo zahvalna, vrlo
[Ovu poruku je menjao enferty dana 11.08.2010. u 22:56 GMT+1]
[ mmix @ 11.08.2010. 22:53 ] @
XHTML shemu vec imas instalirano na svakom novijem windows sistemu (pribacu da ti iskopam URI sutra). U principu najveci problem sa HTML fajlovima nije poredak tagova koliko cinjenica da HTML ne mora da bude well-formed xml (npr <br> ne mora da ima </br>) a to je nesto sto i najobicniji non-validating parser detektuje, sad ostaje samo pitanje kako ces to da ispravis jer kroz XML DOM ne mozes (da bi usao u DOM mora prvo da bude minimum well-formed), morala bi da sidjes na manipulaciju tekstualnim sadrzajem.
[ bojan21 @ 12.08.2010. 00:03 ] @
[ enferty @ 21.08.2010. 13:48 ] @
Da li neko moze ukratko da mi objasni sta se ovde desava?
Code (csharp):public void Execute (string xml, string dtd ) {
Errors = new List <string>();
XmlReaderSettings settings = new XmlReaderSettings ();
settings .ProhibitDtd = false;
settings .ValidationType = ValidationType .DTD;
settings .ValidationEventHandler += new ValidationEventHandler ( ValidationEventHandler );
string newDoctype = string.Format("<!DOCTYPE html SYSTEM \"file://{0}\">", dtd );
xml = Regex .Replace(xml, "<!DOCTYPE.*?>", newDoctype, RegexOptions .Singleline | RegexOptions .IgnoreCase);
XmlReader reader = XmlReader .Create( new System.IO.StringReader( xml ) , settings );
[ mmix @ 21.08.2010. 16:33 ] @
Forsira custom DTD validaciju HTMLa tako sto zameni standardni xHTML doctype (obicno <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">) sa custom DTD opinterom na DTD schema file npr <!DOCTYPE html SYSTEM "file://perin_html.dtd">
[ enferty @ 21.08.2010. 18:32 ] @
Hm... hvala na objasnjenju...
Da li bi mogla to da iskoristim (prepravim) da odradim sebi validaciju html stranice sa mojom nekom shemom i da ga sacuvam kao xHtml?
Da li bi to tako radilo, ili moram sve menjati?
[ mmix @ 21.08.2010. 21:56 ] @
Iskreno ne vidim potrebu za time da pravis svoju xhtml DTD semu, postoje tri standardne DTD xHTML seme (XHTML 1.0 Strict, Transitional i frameset) koje su ti dovoljne za sve realne primene, ovaj sample gore je neka budzevina (verovatno su hteli neku semu izmedju transitional i strict). Sve seme su dostupne online a i svi noviji browseri ih drze kesirane.
Pogledaj ovde: http://www.w3schools.com/Xhtml/xhtml_dtd.asp
I ne znam sta mislis pod snimiti kao xhtml, tvoj html ili jeste ili nije xhtml (od cega zavisi dal ce proci validaciju ili nece), validatori (i xsd i dtd) ne sluze za ispravljanje xml fajlova oni samo sluze da provere semu i da ti saopste neispravnosti. Iskreno jos nisam video automatski sistem koji moze da reaguje na sve moguce validacione greske i da ispravlja jer je za to potrebna malo intelektualnija analiza od one koju masina moze da sprovede. Npr LINK element moze da ima atribute href i hreflang ako ti u XML fajlu stigne "hrefla" sta automatika treba da uradi?
[ enferty @ 21.08.2010. 22:26 ] @
Ahaaam... vidim zbunila sam... oke, ovako...
Pitala sam iz razloga sto bi trebala za fax da napravim aplikaciju koja ce ucitati html file (kao gore, pre jos ucitati xml file), validirati ga na osnovu sheme koje sam ja napravila (stavila u shemu tagove koje ja zelim da ima) i reci da li je oke ili nije, a potom (ako je izvodljivo) i sacuvati taj file kao xhtml. To je ono sto mi treba da napravim.
E sad, oko pojedinosti, zasto to tako raditi i ne koristiti vec sredjene sheme za validaciju, tooo vec ne pitaj mene. Njihove nebuloze.
[ Shadowed @ 21.08.2010. 23:03 ] @
@mmix, ja nesto mislim da ona treba samo da kopira fajl tako da ima ekstenziju .xhtml ukoliko prolazi validaciju a ne da ga ispravlja.
A sam fajl bi trebao da ima odredjeni subset html-a pa zato pravi svoju semu (kojom odredjuje koji subset je u pitanju).
Nesto kao onda kada sam ti pominjao za onu validaciju kako bih izbegao script injection.
[ enferty @ 22.08.2010. 10:31 ] @
Tako je... u principu to mi treba.
[ enferty @ 24.08.2010. 11:19 ] @
ijooooj.... znaci, nema mi pomoci 
[ enferty @ 26.08.2010. 15:50 ] @
ljudi, zaista ne zelim biti dosadna, ali zaista bi trebala da zavrsim ovaj projekat do ponedeljka/utorka... vrlo mi je potreban za upis na sledecu godinu
neke smernice, neka pomoc... bilo sta 
[ Mihajlo Cvetanović @ 26.08.2010. 16:06 ] @
A šta je tačno problem?
[ enferty @ 26.08.2010. 16:11 ] @
pa sto nemam pojma odakle poceti i sta uraditi?
da li mogu koristiti onaj kod iz prethodnih postova, da li ce raditi tako?
da li postoji klasa za takvu neku validaciju?
[ mmix @ 26.08.2010. 16:24 ] @
Pa sta si uradila do sada i gde si zapela?
[ enferty @ 26.08.2010. 16:39 ] @
uglavnom sam google-ala i gledala sta i kako ima na netu i po msdn forumima, nisam nasla nista zanimljivo.
[ mmix @ 26.08.2010. 16:47 ] @
Koliko vidim u ovoj temi imas sve sto ti treba da napravis svoje resenje (koje nisi ni probala da napravis), Shadowed jos samo da ti je masnicu zavezao uz onaj poklon. Ako trazis nekog ko ce da ti uradi domaci, srecno.
[ enferty @ 26.08.2010. 16:51 ] @
naravno da ne trazim, ali za mene je ovo sve novo i sve su mi jos uvek spanska sela. shvatila sam neke stvari kako se rade, ali mi je i dalje sve vrlo "mutno".
[ Shadowed @ 26.08.2010. 18:39 ] @
Heh, jos cu na kraju stvarno da odem da joj uradim to :)
Jedino sto ni ja ne mogu pre ponedeljka uvece.
[ enferty @ 26.08.2010. 18:42 ] @
pa, oke... ja se svakako gnjavim s time do utorka :'(
[ Shadowed @ 07.09.2010. 23:27 ] @
Vidi da li ti odgovara ovaj projekat. Napomena: potpuno je netestiran, to ostaje tebi.
[ enferty @ 08.09.2010. 09:21 ] @
oke, hvala. testiracu.
jos sam radila na tome i naisla na jos par stvari, pa cu videti jos da li je korisno i da li mi je potrebno. ako ne skontam, pitacu na konsultacijama, pa cu videti kako je on to zamislio da se radi.
[ enferty @ 03.10.2010. 13:51 ] @
Pozdrav svima,
evo i ja konacno da se javim, bila sam prehladjena pa nisam ni palila racunar. Samo da se javim da sam testirala zadatak i da radi, uz malu prepravku:
u zadnjem delu gde pise: DialogResult.YES treba zameniti sa DialogResult.OK i onda ce se otvoriti i dijalog za cuvanje fajla.
Profesor je trazio jos neke manje izmene u zadatku, ali to sam uspela da sredim, bez nekih poteskoca.
Zelim da se zahvalim svima koji su mi pomogli oko ovog zadatka, a najvise Shadowed 
Hvala jos jednom.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|