[java] Schema aan xml koppelen.

Pagina: 1
Acties:
  • 240 views sinds 30-01-2008
  • Reageer

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
ik zit al weer een hele ochtend te zoeken naar iets heel simpels, namelijk hoe ik in java mbv jdom een schema bestand aan een xml bestand kan koppelen.

ps: heeft geen vriendelijke woorden meer over voor XML (ben er echt ziek van) maar ik moet helaas dit ding klaar krijgen.

jdom loopt te rommelen met utf character sets. Ik heb hier dus nog nooit last van gehad. Ik krijg dus het ene probleem na het andere probleem, nergens documentatie en XML 10.000 implementaties. Het is lang geleden dat ik zo iets onoverzichtelijks ben tegengekomen. Wat is XML een chaos.

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Is er misschien iets anders dan dat JDOM gebeuren, wat wel goed gedocumenteerd is? Gewoon met voorbeeltjes voor mensen die geen ervaring hebben zoals ik:

1. hoe een simpel xml bestand weg te schrijven
2. hoe een xml wegschrijven met validatie
2.1 hoe een xml bestand wegschrijven met dtd
2.2 hoe een xml bestand wegschrijven met schema

3. hoe een xml bestand inlezen.

Gewoon de dingen die de normale sterveling nou zo handig vind. Het is toch niet te veel gevraagd?

en de bedoeling is dat je dan niet ettelijke pagina`s door moet ploegen naar kleine brokstukjes, platgebombardeerd worden met kreten en acroniemen. En waar kleine stukjes voorbeeld code bij staan.

  • JapJap
  • Registratie: Maart 2001
  • Laatst online: 07-01 11:02
Het is lang geleden dat ik zo iets onoverzichtelijks ben tegengekomen. Wat is XML een chaos.
:)

1.
code:
1
2
3
4
5
6
7
8
public static void writeToFile(Document document, File f) 
throws Exception {
  FileOutputStream out = new FileOutputStream(f);
  XMLOutputter serializer = new XMLOutputter("", false);
  serializer.output(document, out);
  out.flush();
  out.close();
}

3.
code:
1
2
3
4
5
public static Document readFromFile(File f) 
throws JDOMException {
  SAXBuilder builder = new SAXBuilder();
  return builder.build(f);
}

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
het gaat mij om de koppeling met schema bestand, dit had ik zelf ook al.

  • JapJap
  • Registratie: Maart 2001
  • Laatst online: 07-01 11:02

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
[zeurmode]
ik vind het gewoon super jammer dat je geen info kan vinden over iets gevorderde onderwerpen. Ten 1e moet je maar kiezen uit SAX,DOM en JDOM. Hoe moet je daar nou een keuze tussen kunnen maken?

De keuze was gevallen op JDOM omdat dit het makkelijkste was. Je vind een hele lading tutorials maar die zijn allemaal voor beginners. Maar voor de wat serieuzere onderwerpen mag je zelf alles maar gaan uitzoeken.

Zelfs als je bij SUN alles gaat doorlezen dan moet je meteen weten wat JAXP,JAXB etc is zonder even een kleine inleiding voor amateurs zoals ik. Dit slaat toch werkelijk nergens op?

ps: ik ben al 2 dagen kwijt aan xml (zonder dat er iets bij is gekomen). En dit probleem is niet het probleem wat ik aan het oplossen was, dus vandaar mijn irritatie.
[/zeurmode]

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Op maandag 11 februari 2002 14:06 schreef JapJap het volgende:
Misschien heb je hier wat aan:
http://www.javaworld.com/javaworld/jw-11-2000/jw-1110-validation3.html
is voor inlezen en niet voor wegschrijven. (heb al een enorme lading artikels op javaworld (en andere sites) door zitten spitten).

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Is SAX of DOM misschien beter gedocumenteert? En dan bedoel ik ook met een enorme lading voorbeelden (zoals het vroeger ook was... eerst de simpele dingetjes.. en daarna stap voor stop moeilijkere...)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Validatie is volkomen onafhankelijk van JDOM. JDOM is gewoon een (imho betere) DOM variant. JDOM heeft dus niet met parsen, valideren of wat dan ook te maken. Het enige wat je wilt bij het gebruik van JDOM, is het bouwen van een JDOM. Dit kan je op heel veel manieren doen via de Builders van JDOM. Deze Builders kunnen hun input verkrijgen uit een andere DOM, maar bijvoorbeeld ook uit een SAX parser.

Als je wilt valideren tegen een XML Schema heb je niets direct met JDOM te maken. Je moet aan een aantal voorwaarden voldoen:

1. Je moet in je XML bron op een correcte manier verwijzen naar je XML Schema (dit staat uitstekend beschreven in de tutorials op www.xfront.com) .

2. Je moet een XML parser hebben die kan valideren tegen een XML Schema. Dit kan Crimson, de standaard parser in JAXP en 1.4.0 niet. Daarom moet je even Xerces downloaden en deze in je classpath zetten. Hij wordt dan automatisch opgepikt door JAXP.

3. Je moet je JDOM opbouwen via een validerende parser. Waarschijnlijk gewoon via een SAXBuilder.

Das alles. Toch niet zo heel erg complex en waardeloos gedocumenteerd?

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Alarmnummer: Zelfs als je bij SUN alles gaat doorlezen dan moet je meteen weten wat JAXP,JAXB etc is zonder even een kleine inleiding voor amateurs zoals ik. Dit slaat toch werkelijk nergens op?
Er wordt indersaad ook veel met termen gegooid en dat is vervelend. Ik dacht dat ik ooit echter alles vrij snel en simpel heb uitgelegd. Kijk nog eens hier terug:

[topic=324232/1/25]

Ik word een klein beetje moe van de vrachten kritiek die je uitstort.... Op zich is er niets mis met kritiek, maar nieuwe technologie beheersen gaat zoals je zelf wel weet nooit automatisch. XML biedt generieke oplossingen voor ontzettend veel problemen. Er zijn veel standaarden en nog meer implementaties. Dat iets onduidelijkt lijkt, wil nog niet zeggen dat het onduidelijk is. Van mij mag je best commentaar leveren, maar als het te bar wordt ga ik met enige tegenzin helpen, en daar kom ik hier niet voor...

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
ik was lichtelijk geirriteerd omdat het de zoveelste keer is dat simpele dingen niet te vinden zijn.

maar ik weet dat jdom niet met validatie nodig heeft, maar wat ik zoek is het jdom commando om een schema bestand aan een xml bestand te koppelen als ik deze genereer. Bij een dtd gebruik je setDocumentType geloof ik maar bij schema kan ik het niet vinden.

En als je redelijk in tijd nood zit dan word je van dit soort dingen ook niet echt vriendelijk, mijn excuses daarvoor.

  • Tomatrix
  • Registratie: Juni 1999
  • Laatst online: 27-02-2025
Op dinsdag 12 februari 2002 01:10 schreef Alarmnummer het volgende:
En als je redelijk in tijd nood zit
Als je redelijk in tijdnood zit kan je beter niet gaan stoeien met technieken die je niet kent...

  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Op dinsdag 12 februari 2002 01:15 schreef Tomatrix het volgende:

[..]

Als je redelijk in tijdnood zit kan je beter niet gaan stoeien met technieken die je niet kent...
Ben ik met je eens, maar een onderdeel was al in xml en wil het meteen goed erin zetten met een schema bestand (ipv dtd) , zodat daar binnenkort door (speciale) gebruiker al wat mee gestoeid kan worden.

Verwijderd

Wellicht helpt het als je de specificaties leest van de technieken die je gebruikt. Ik bedoel niet de API documentatie van bibliotheek XYZ, maar dat wat die bibliotheek makelijker probeert te maken in het gebruik. Over het algemeen zijn specificaties redelijk leesbare dingen, zo ook de XML schema spec... zie: http://www.w3.org/TR/2000/CR-xmlschema-0-20001024/#schemaLocation

En dan zal het in JDom wel iets zijn als:

rootElement.addAttribute("xsi:schemaLocation", "vage-url-naar-schema");

(5 minuten lezen in de spec. overigens..)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Alarmnummer: maar wat ik zoek is het jdom commando om een schema bestand aan een xml bestand te koppelen als ik deze genereer. Bij een dtd gebruik je setDocumentType geloof ik maar bij schema kan ik het niet vinden.
Ah, ik begrijp de verwarring een beetje. Er is geen speciaal commando om een schema aan een JDOM te koppelen. Je koppelt een XML Schema namelijk niet met een speciale syntax constructie zoals bij DTDs.

XML Schema instantie delcaraties maken gewoon onderdeel uit van de XML structuur en dus ook van de DOM. Dit werkt allemaal door het gebruik van Namespaces. Je moet dus gewoon je DOM uitbreiden met de vereiste constructie voor namespaces en schemaLocation. Ik neem aan dat je die al gevonden hebt...

Hier een voorbeeldje voor SOAP:
code:
1
2
3
4
5
6
public static final Namespace SCHEMA_INSTANCE
   = Namespace.getNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
public static final Namespace SCHEMA
   = Namespace.getNamespace("xsd", "http://www.w3.org/2001/XMLSchema");
public static final Namespace SOAP_ENVELOPE
   = Namespace.getNamespace("SOAP-ENV", "http://schemas.xmlsoap.org/soap/envelope/");

en de bijbehorende DOM opbouw:
code:
1
2
3
4
5
6
7
8
_root = new Element("Envelope", SOAPNamespaces.SOAP_ENVELOPE);

_root.addNamespaceDeclaration(SOAPNamespaces.SOAP_ENVELOPE);
_root.addNamespaceDeclaration(SOAPNamespaces.SCHEMA_INSTANCE);
_root.addNamespaceDeclaration(SOAPNamespaces.SCHEMA);

_body = new Element("Body", SOAPNamespaces.SOAP_ENVELOPE);
_root.addContent(_body);

Duidelijk?
En als je redelijk in tijd nood zit dan word je van dit soort dingen ook niet echt vriendelijk, mijn excuses daarvoor.
Geefnie, ik snap het wel :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Alarmnummer
  • Registratie: Juli 2001
  • Laatst online: 09-07-2024
Op dinsdag 12 februari 2002 14:41 schreef mbravenboer het volgende:
antwoord op een van de grote raadsels van het universum
dank u, dank u.. *knielt nederig* ;)

hehe... kan ik eindelijk die schema aansluiten (heb het tijdelijk allemaal uitgezet omdat het xml bestand voorlopig toch gegenereerd wordt).

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Alarmnummer: dank u, dank u.. *knielt nederig* ;)
Slijmerd ;) .
hehe... kan ik eindelijk die schema aansluiten
Ik had trouwens de schemaLocation er nog geeneens bijstaan, maar dat is dus kennelijk al gelukt :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1