Ja nejak tak v kutiku duse od zaciatku toho threadu pocitujem, ze autor chce "generator xml na zaklade xsd" z akychysi vymyslenych hodnot ( splnajucich podmienky na validitu vysledneho dokumentu ). Je to tak?
To predsa technicky nie je ziaden problem, aj ked som sa osobne so ziadnou takou utilitou zoci-voci este nestretol. Mozno take cosi vedia nejake sofistikovanejsie xml/xsd editory typu komodo a spol. -- Dusan 2011/4/19 Vladislav Krejčiřík <[email protected]> > Rozumim tomu co pisete, ja s tim souhlasim. Obecne to tak je. Ale jak jsem > psal, u me je to hodne specificky priklad. XSD se nemeni za behu aplikace. > Jsou pevne dane pred spustenim aplikace. Postup je takovy, ze uzivatel > nahraje potrebna XSD do daneho adresare. Potom spusti aplikaci. Aplikace si > tato XSD nahraje a pomoci XSOMu naparsuje. Pomoci XSOMu je schopna zjistit > informace z anotaci... > > Data vim kam budu vyplnovat. U kazdeho elementu mam anotaci ktera obsahuje > key, identifikator toho jakou hodnotu tam mam vlozit. Takze jak jsem psal, > tak asi jedinym zpusobem ktery me napadl je projit objektovou reprezentaci > XSD a vytvaret XML message. Tam kde narazim na element s anotaci tak tam > vlozim podle zadaneho key hodnotu. Tuto message pak poslu. V podstate jak > asi spravne pisete tak jiny zpusob ani neni mozny.. > > Je to velice specificke XSD. Mozna jsem mel rict ze XSD je vytvareno XSD > designerem treti strany. Tento designer neumoznuje vytvorit jinou strukturu > XSD nez ktera je pozadovana aplikaci. Tzn. jeden complexType se sequenci > ktera obsahuje elementy ruznych typu. > > Diky za pripominky a navrhy > > > > > > > > > > > > 2011/4/19 Petr Novak <[email protected]> > >> >> Stejně asi jako ostatní si myslím, že to, co chcete vytvořit je tak trochu >> nesmysl. Možná to bude fungovat ve velmi omezené podobě na drobné změny v >> xsd, ale i to, že žádná podobná knihovna asi vůbec neexistuje svědčí o tom, >> že takto se tato problematika neřeší. >> To budete psát parser s umělou inteligencí, který umí odpovídat na >> jakýkoliv dotaz - ty příklady se slovenštinou byly přesný :) . Jak už tu >> bylo několikrát uvedeno, těžko můžete vyplňovat data, která ani nevíte kam >> budete vyplňovat, případně, když po Vás XSD bude vyžadovat nové položky, tak >> to byste pak k tomu musel dynamicky dogenerovat i nějakou logiku v aplikaci, >> která by je vypočítala a doplnila a nebo to napojit na křišťálovou kouli :). >> >> Nevím jak často a jak moc se Vám ta XSD mění a kdo je jejich dodavatelem >> (jestli to je v rámci projektu, nebo externě). Ale z principu věci pokud >> Vám někdo mění to XSD - tedy vzdálené rozhraní, tak buď musí dělat >> kompatibilní změny, pak vy nemusíte nic měnit a nepotřebujete dynamické >> generování XML, protože to Vaše naimplementované bude stále validní. A nebo >> dělá nekompatibilní změny a pak vy musíte vytvořit novou knihovnu na základě >> nového XSD - standardní Change-Request-management. Pak by ty XSD měly být >> verzované, atd.. Navíc, pokud ta změna bude až takového rázu, že tam >> přibude třeba datový element navíc, tak to stejně může znamenat, že musíte >> upravit dotazy do DB, apod. abyste ty data vůbec získal a mohl je vložit do >> XML. >> >> Vždy když slyším podobný požadavek od svých kolegů, tak jim vysvětlím, co >> je to API a XSD je API a všem, co něco takového navrhují doporučuji >> nastudovat http://wiki.apidesign.org/wiki/Main_Page a především celou tu >> knížku Jardy Tulacha, a je úplně jedno, že to není o XSD, protože principy >> jsou stále stejné. Ale chápu, že jste možná v situaci, kdy Vám to API >> dodává třetí strana, která neumí držet zpětnou kompatibilitu a neustále něco >> mění - pak jsou jen 2 řešení - buď změnit dodavatele a nebo udělat >> mezivrstvu, která bude tuto nekompatibilitu řešit. I o tom je v té knize >> povídáno - řešení závislostí na třetích stranách. >> >> Proto se asi v těchto případech používají různé integrační servery, ESB, >> apod. - vlastně tvoří tu mezivrstvu. A tak mě napadá, že tím se můžete i >> inspirovat a použít XSL. >> >> Udělat to více volně vázané, tedy vy budete generovat nějaké své statické >> XML, které budete přes XSL transformovat na to požadované XML odpovídající >> tomu XSD. Ale ani to XSL nedokážete asi generovat dynamicky podle XSD. Ale >> mělo by to výhodu v tom, že nemusíte programovat, kompilovat, deployovat, >> apod. Prostě jen budete měnit transformační šablony umístěné v adresáři >> mimo. >> >> A nebo ještě mě napadlo použít šablony na generování toho XML z dat - >> tedy třeba vzít freemarker, nebo velocity - udělat si v něm šablonu XML >> elementů (prostě šablonu té message) a na patřičná místa doplňovat jen >> hodnoty. A když se změní API v podobě změny XSD, tak hold musí někdo >> sednout a ty šablony upravit pro tu novou verzi. A opět se nemusí řešit >> žádná kompilace, apod. Prostě jen nahrajete nová XSD, upravíte šablonu, >> vygenerujete si zkušební XML, proženete ho přes XSD validator, tím ověříte, >> že vše je OK, že šablona generuje správná XML, která pak můžete v klidu >> posílat dál do fronty. >> >> A nebo použít nějaký dynamický jazyk a skládat to jako DOM mimo javu, aby >> ty změny byly jednodušeji zapracovatelné - groovy, ruby, apod. Vlastně je to >> podobné těm šablonám, jen jiný způsob. >> >> Tak snad to dá zase trochu jiný pohled na Váš problém ... >> >> >> >> Dne 19.4.2011 15:27, Vladislav Krejčiřík napsal(a): >> >> Aplikace funguje nasledovne: >> >> Pri startu si aplikace natahne vsechny XSD ze zadaneho adresare. Pak >> potrebuju ke kazde XSD definici udelat validni XML message do ni vlozit >> potrebne hodnoty a poslat na zadanou queue. >> >> XSD definice ktere slouzi jako vstup jsou znacne omezene. Obsahuji jen >> jeden ComplexType se sequenci elementu ruznych typu. Ale chapu ze tohle je >> specialni pripad a obecne to jiste nelze.. >> >> >> Postup vyuziti xjc pro vygenerovani pomocnych trid neni podle me v mem >> pripade vhodny.. Situace je velice podobna pripadu, kdyz by se XSD menily za >> behu. >> >> Je nejaky obecny postup sestavovani validnich XML message z dynamicky se >> menicich XSD? >> >> Dekuji za vase nazory. >> >> >> XSD muze vypadat takto: >> >> <?xml version="1.0" encoding="ibm852"?> >> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> >> <xs:complexType name="L1_L2_CyclicDataRM"> >> <xs:annotation> >> <xs:appinfo> >> <Transport>EMS</Transport> >> <MessageType>Queue</MessageType> >> <MessageName>ems.topic.L1_L2_CyclicDataRM</MessageName> >> <Timer>2000</Timer> >> </xs:appinfo> >> </xs:annotation> >> <xs:sequence> >> <xs:element name="Bucket__Brigade"> >> <xs:complexType> >> <xs:sequence> >> <xs:element maxOccurs="unbounded" name="ArrayOfString" >> type="xs:string"> >> <xs:annotation> >> <xs:documentation>Bucket >> Brigade.ArrayOfString</xs:documentation> >> </xs:annotation> >> </xs:element> >> <xs:element name="UInt2" type="xs:unsignedShort"> >> <xs:annotation> >> <xs:documentation>Bucket Brigade.UInt2</xs:documentation> >> </xs:annotation> >> </xs:element> >> <xs:element name="Boolean" type="xs:boolean"> >> <xs:annotation> >> <xs:documentation>Bucket Brigade.Boolean</xs:documentation> >> </xs:annotation> >> </xs:element> >> <xs:element name="Int1" type="xs:string"> >> <xs:annotation> >> <xs:documentation>Bucket Brigade.Int1</xs:documentation> >> </xs:annotation> >> </xs:element> >> </xs:sequence> >> </xs:complexType> >> </xs:element> >> <xs:element name="Square__Waves"> >> <xs:complexType> >> <xs:sequence> >> <xs:element name="UInt1" type="xs:byte"> >> <xs:annotation> >> <xs:documentation>Square Waves.UInt1</xs:documentation> >> </xs:annotation> >> </xs:element> >> <xs:element name="Real8" type="xs:double"> >> <xs:annotation> >> <xs:documentation>Square Waves.Real8</xs:documentation> >> </xs:annotation> >> </xs:element> >> <xs:element name="Int2" type="xs:short"> >> <xs:annotation> >> <xs:documentation>Square Waves.Int2</xs:documentation> >> </xs:annotation> >> </xs:element> >> </xs:sequence> >> </xs:complexType> >> </xs:element> >> </xs:sequence> >> </xs:complexType> >> </xs:schema> >> >> >> >> >> >> 2011/4/19 Robert Novotny <[email protected]> >> >>> Vezmime si priklad zo slovenciny. Mam gramatiku, ktora hovori, ze >>> slovenska veta ma mat: >>> >>> Podmet - prisudok - predmet. >>> >>> Validacia sa pyta, ci veta ,,Pes zerie granule" splna gramatiku. Vy vsak >>> chcete riesit problem typu ,,potrebujem vyrobit slovensku vetu". Ako ma >>> kniznica vediet, ci ma vygenerovat slovensku vetu ,,Pes zerie granule" alebo >>> ,,Vyvojar miluje Javu" alebo ,,Ja mam psa"? >>> >>> Ako sa spominalo, JAXB na zaklade XSD vyrobi triedu s instancnymi >>> premennymi podmet, prisudok, predmet a anotaciami zaisti, ze objekt sa >>> serializuje spravne a teda ze vysledne XML bude splnat schemu. >>> >>> Ako nad tym uvazujem, tak bud chcete mat v kode obmedzene, aby ste >>> nevymysleli nahodou spravu, ktora nedava zmysel (,,Vonku prsi"), lenze to >>> vam zaisti prave typovy system, ktory je reprezentovany prave triedami, >>> ktore su vygenerovane v JAXB. >>> >>> Vy hovorite, ze nechcete generovat ziadne triedy ,,ukladane na >>> filesystem", ale mne to nie je jasne. Typicky workflow znamena, ze mam XSD, >>> v kompilacnom kroku z neho vypadnu klasicke Java triedy a tie pouzivam uplne >>> rovnako ako akekolvek ine triedy. Alebo mate situaciu, ked sa XSD meni za >>> behu? >>> >>> RN >>> >>> >>> >>> On 19. 4. 2011 14:11, Vladislav Krejčiřík wrote: >>> >>> ok, mozna jsem to spatne popsal. Zkusim znovu. Ja nechci nic validovat, >>> protoze nemam vlastne ani co. XSD mi definuje strukturu nejake message. Ja >>> bych potreboval takovou messge umet vytvorit, "vygenerovat" z XSD definice. >>> Myslel jsem ze bych ziskal nejakou objektovou reprezentaci te XML message >>> kde bych nastrkal hodnoty co potrebuju. Potom bych uz jen XML message poslal >>> do fronty. >>> >>> Nevim jestli existuje nejaka knihovna, ktera to umoznuje. Nebo budu >>> muset rucne takovou XML vystavet.. >>> >>> >>> >>> >>> >>> Dne 19. dubna 2011 12:48 Lukas "lzap" Zapletal >>> <[email protected]>napsal(a): >>> >>>> Vlado, >>>> >>>> myslim ze se tady snazis michat dve veci. DOM a XSD. Prvni jmenovany >>>> slouzi >>>> k manupulaci s (ted to zjednodusim) XML, druhy je urcen pro popis a >>>> kontrolu >>>> XML dokumentu. Krome jineho lze namapovat na JavaBeany a ruzne jine >>>> struktury zname z pocitacovych jazyku. >>>> >>>> To co asi chces je nejprve dokument zvalidovat pomoci XSD schematu >>>> (doporucuji ruzne tutorialy na netu), a pote jej proste a jednoudse >>>> nacist >>>> do DOMu a parsovat. Je mozne, ze nejaka DOM knihovna to bude umet udelat >>>> "v >>>> jednom", ale v podstate jsou to dve ruzne veci. >>>> >>>> Nebo jsem te mozna spatne pochopil. Zkus to reformulovat. >>>> >>>> http://en.wikipedia.org/wiki/Document_Object_Model >>>> http://en.wikipedia.org/wiki/XML_Schema_(W3C) >>>> >>>> >>>> ----- >>>> Later, >>>> Lukas >>>> -- >>>> View this message in context: >>>> http://konference-java-cz.958153.n3.nabble.com/Vytvoreni-instance-XML-objektu-z-XSD-definice-tp2837707p2838272.html >>>> Sent from the konference java.cz mailing list archive at Nabble.com. >>>> >>> >>> >>> >>> -- >>> >>> /**************************************/ >>> Best regards / S pozdravem >>> Vladislav Krejčiřík >>> http://www.vkrejcirik.info >>> >>> >>> >>> >> >> >> -- >> >> /**************************************/ >> Best regards / S pozdravem >> Vladislav Krejčiřík >> http://www.vkrejcirik.info >> >> >> >> >> -- >> Petr >> >> > > > -- > > /**************************************/ > Best regards / S pozdravem > Vladislav Krejčiřík > > http://www.vkrejcirik.info > > >
