Üdv!
Kellene nekem egy olyan java lib, amelyik képes az xml schemakat kényelmes objektumokba tölteni, kényelmes függvényekkel mint például: "Xy tag milyen tag-eket tartalmazhat?"
A org.w3c.dom simán megcsinálja ezt xml-ekre.
Mivel a schema is xml, ezért simán megírhatnám a saját kis függvényeimet tudom...
de nem akarok semmit újra feltalálni.
Megtaláltam az eclipse xsd-t. Erre találták ki. (Egy kicsit nagy, ami -1.)
Már pár napja b*g*om, de még nem tudtam a tutorialt se beüzemelni...
http://www-128.ibm.com/developerworks/forums/thread.jspa?threadID=20896…
Nem adtam fel, mert menni fog ez... de most már rákérdezek:
Van valakinek ilyen tapasztalata(schema, java, xsd)?
Van más lib az eclise xsd-n kívül?
Kösz
cs
- 3336 megtekintés
Hozzászólások
JAXB?
- A hozzászóláshoz be kell jelentkezni
Elolvasgattam... de amennyire én értem a JAXB arra jó, hogy a Schema alapján osztályokat generál, amibe aztán a a Schemat használó XML fájlokat könnyedén lehet be/ki töltögetni (unmarshall/marshall).
Aztán lehet h arra is jo amire nekem kéne, de ez számomra a homályban maradt... Ez a jaxb csak tipp volt, hogy hátha, vagy használtad olyasmire ami nekem kéne?
- A hozzászóláshoz be kell jelentkezni
Te magát a sémát (xsd) akarod manipulálni? Akkor bocs, én úgy értettem, hogy betöltöd a séma szerinti xml fájlokat kényelmes kis objektumokba és azokat bizgerálod. Ez esetben elnézésed kérem, hogy tévútra vittelek és pazaroltam az idődet.
De az eclipse-nek egész jó a séma szerkesztője, szerintem. Ha már tényleg azt akarod szerkeszteni "vizuálisan". Ha nem, akkor notepad/vi és adjad neki. :D
- A hozzászóláshoz be kell jelentkezni
Nem! Nem akarom a sémát manipulálni. A sémáról szeretnék _könnyedén_ információt lekérdezgetni. Erre mondtam példának, hogy egy adott xmltag milyen gyermek tageket foglalhat magába. A JAXB másra való, de lehet ezt is tudja. Jól értem?
Konkrétan:
A JAXB-ben miután felépítettem a sémat reprezentáló osztályokat tudok olyat, hogy mondjuk "xpath szerűen" megadok egy tag-et és lekérdezem, hogy annak milyen gyermek tagjei lehetnek?
Elmondom miért kell és rögtön érteni fogsz. Szeretnék csinalni egy un. schema aware xml editort, ami csak olyan lehetőségeket kínál fel, amit a schema alapján szabad. Tudom hogy nem nagy szám, szal tekintsd házinak, vagy gyakorlásnak.
Azóta találtam egy egyetemi kódot:
http://dynvocation.selfip.net/xsd4j/
ami tök jól memóriába rakja a sémám, a lekérdezgetés megy is, viszont nem jövök rá, vagy lehet nem is tudja, hogy xpath szerűen lehessen megtalálni node-ot, és csak utána lekérdezgetni.
- A hozzászóláshoz be kell jelentkezni
A JAXB-vel egyszerűen manipulálhatsz xml-t. Az xsd alapján generál neked egy java objektum hierarchiát, megfelelő set és get metódusok mindenütt, hogy a tageket könnyen lehessen manipulálni ezeken keresztül. Az xml beolvasása és kiírása is hasonlóan egyszerűen megoldott (marshall, unmarshall).
Ha megadsz egy tag-et (=objektum), akkor az nyilván tudja magáról, hogy milyen gyermekei vannak (=set és geteken keresztül manipulálhatóak). De nem fogja kiadni, hogy na akkor ezek és felsorolja. Persze ki lehet kaparni a Class osztály getMethods, getFields, getAkármi hívásaival, hogy mi minden van az osztályban. De ez se nem szép, se nem elegáns, szerintem. Biztos van erre más célszerszám is.
- A hozzászóláshoz be kell jelentkezni
Korrekt válasz. Kösz.
- A hozzászóláshoz be kell jelentkezni
OK. Sikerült beüzemelnem az eclipse xsd-t.
http://wiki.eclipse.org/index.php/MDT-XSD-FAQ#Standalone_Uses
Csak a tanulság miatt, hátha másnak is nehéz elindulni, íme egy kis kód:
szükséges jar-ok:
org.eclipse.emf.common_2.3.2.v200802051830.jar
org.eclipse.emf.ecore.change_2.3.0.v200802051830.jar
org.eclipse.emf.ecore_2.3.2.v200802051830.jar
org.eclipse.xsd_2.3.2.v200802051830.jar
import:
import java.util.Iterator;
import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.xsd.XSDSchema;
import org.eclipse.xsd.XSDSchemaContent;
import org.eclipse.xsd.impl.XSDElementDeclarationImpl;
import org.eclipse.xsd.util.*;
használat:
public schanal2() {
URI uri = URI.createFileURI("proba.xsd");
ResourceSet resourceSet = new ResourceSetImpl();
resourceSet.getResourceFactoryRegistry().getExtensionToFactoryMap().
put("xsd", new XSDResourceFactoryImpl() );
XSDResourceImpl xsdResource = (XSDResourceImpl) resourceSet.getResource(uri,
true);
XSDSchema xsdSchema = xsdResource.getSchema();
EList xcc = xsdSchema.getContents();
for(Iterator i = xcc.iterator();i.hasNext();){
XSDSchemaContent cont = (XSDSchemaContent)i.next();
if(cont instanceof XSDElementDeclarationImpl){
System.out.println("elem:"+cont.toString());
}
System.out.println(cont.toString());
}
}
Kösz, a segítséget! GL
- A hozzászóláshoz be kell jelentkezni
A következő problémám van, sajnos nem találtam rá megfelelő fórumot.
XML Schemaban szeretném azt definiálni, hogy biznyos típusok egyes attribútumai a dokumentumon belül egyediek legyenek, valamint azt, hogy más típusban csak már definiált ID-vel rendelkező elemre lehessen hivatkozni.
Egy konkrétabb példa szemléltetés gyanánt:
<authors>
<author name="akarmi" />
<author name="akarmi2" />
</authors>
<books>
<book title="titleex1" author="akarmi" />
<book title="titleex2" author="akarmi" />
<book title="titleex3" author="akarmi2" />
</books>
Hogyan lehet XML Schemaban definiálni, hogy a book elem author attribútumának értéke csak az authors alatt az author elemek name értékei közül kerülhet ki?
- A hozzászóláshoz be kell jelentkezni
Szerintem semaban sehogy, mert nem erre valo.
XSLT-vel tudsz ellenorizni, en inkabb ebbe az iranyba mennek el. A kimenet a felteteleknek teljesen megfelelo XML fa, a hibas objektumok kidobasaval.
--
()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.
- A hozzászóláshoz be kell jelentkezni
Schemaban van ID meg IDREF adattipus, csak ez globalis ID-ket hataroz meg, az meg nekem tul korlatozo.
http://www.xml.com/pub/a/2003/02/05/wxs-enum.html?page=2
Itt van egy megoldas, csak sajnos ez nem XML Schema, hanem Schematron, ami nekem nem jo.
- A hozzászóláshoz be kell jelentkezni
A unique, key, keyref elemek kornyeken nezz szet, lehet ilyet csinalni.
- A hozzászóláshoz be kell jelentkezni