Avatar billede erk_ser Nybegynder
19. december 2005 - 23:15 Der er 10 kommentarer og
1 løsning

Validering af XML dokument når man bruger SAX eller DOM

Hej

Jeg har en XML dokument og en XML skema. Jeg vil gerne bruge SAX eller DOM til at parse XML dokumentet. Men hvordan er det med validering af XML dokumentet??


Sker der automatisk eller skal der programmeres noget?
Hvad bliver det tjekket når der valideres? Er det kun om strukturen i XML dokumenter er iorden, eller også elementerne og attributerne har den rigtige type? f.eks. har jeg en attribute "isbold" af typen boolean, går den så ind og tjekker om det er en boolean man har angivet?
Er der andet der tjekkes på, når man validere med SAX/DOM?
Avatar billede arne_v Ekspert
19. december 2005 - 23:17 #1
de fleste (alle ?) SAX og DOM parsere kan validere op mod DTD eller schema

mit gæt er at du sætter noget i dem inden du parser

java ?
Avatar billede erk_ser Nybegynder
19. december 2005 - 23:23 #2
Ja jeg bruger java.

jeg har fundet frem til at både sax og dom kan validere, men hvad er det der valideres:

er det kun selve strukturen af XML filen, om alle tags er placeret rigtig osv?
eller også datatyper?

Og om der valideres andet?
Avatar billede arne_v Ekspert
19. december 2005 - 23:27 #3
man checker om henholdsvis DTD og schema er valid

i en DTD kan du kun angive hvilke elemeneter med hvilke attributter der kan være
inden i hvilke elementer

i et schema kan du angive en del mere bl.a. også type
Avatar billede erk_ser Nybegynder
19. december 2005 - 23:35 #4
ok, men :

hvis jeg f.eks. vil tjekke en datatype er rigtig angivet, skal jeg så gøre noget kodemæssigt i sax/dom eller sker dette automatisk?
Avatar billede arne_v Ekspert
19. december 2005 - 23:37 #5
med schema sker det automatisk (hvis du holder dig indenfor de ting som schema nu kan)
Avatar billede erk_ser Nybegynder
19. december 2005 - 23:40 #6
ok, tak! der er noget med du skal lægge et svar for at jeg kan give point?
Avatar billede arne_v Ekspert
19. december 2005 - 23:41 #7
gerne
Avatar billede arne_v Ekspert
19. december 2005 - 23:41 #8
jeg tror at jeg har et schema validerings eksempel i Java liggende hvis du er interesseret
Avatar billede erk_ser Nybegynder
19. december 2005 - 23:44 #9
ja, jeg er interesseret.
Avatar billede arne_v Ekspert
19. december 2005 - 23:46 #10
import java.io.File;
import java.io.IOException;

import javax.xml.parsers.FactoryConfigurationError;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.SAXException;
import org.xml.sax.SAXNotRecognizedException;
import org.xml.sax.SAXNotSupportedException;
import org.xml.sax.SAXParseException;
import org.xml.sax.helpers.DefaultHandler;

public class ValWithSaxAndSchema {
  static final String JAXP_SCHEMA_LANGUAGE =
      "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
  static final String W3C_XML_SCHEMA =
        "http://www.w3.org/2001/XMLSchema";
  static final String JAXP_SCHEMA_SOURCE =
      "http://java.sun.com/xml/jaxp/properties/schemaSource";
  public static void main(String[] args) {
      try {
        SAXParserFactory factory = SAXParserFactory.newInstance();
        factory.setNamespaceAware(true);
        factory.setValidating(true);
        SAXParser saxParser = factory.newSAXParser();
        saxParser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
        saxParser.setProperty(JAXP_SCHEMA_SOURCE, new File(args[1]));
        saxParser.parse(new File(args[0]), new ValHandler());
      } catch (SAXNotRecognizedException e) {
        e.printStackTrace();
      } catch (SAXNotSupportedException e) {
        e.printStackTrace();
      } catch (FactoryConfigurationError e) {
        e.printStackTrace();
      } catch (ParserConfigurationException e) {
        e.printStackTrace();
      } catch (SAXException e) {
        e.printStackTrace();
      } catch (IOException e) {
        e.printStackTrace();
      }
  }
}

class ValHandler extends DefaultHandler {
    public void error(SAXParseException e) {
        e.printStackTrace();
    }
    public void warning(SAXParseException e) {
        e.printStackTrace();
    }
}
Avatar billede erk_ser Nybegynder
19. december 2005 - 23:48 #11
tak!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester