Changeset 3041 for trunk


Ignore:
Timestamp:
08/03/07 16:36:52 (13 years ago)
Author:
curtis
Message:

Add OME-XML validation to showinf.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/loci/formats/ConsoleTools.java

    r3019 r3041  
    147147    if (map != null) Location.mapId(id, map); 
    148148    if (omexml) { 
    149       reader.setOriginalMetadataPopulated(true);  
     149      reader.setOriginalMetadataPopulated(true); 
    150150      try { 
    151151        // NB: avoid dependencies on optional loci.formats.ome package 
     
    517517    } 
    518518 
    519     // output OME-XML 
     519    // output and validate OME-XML 
    520520    if (omexml) { 
    521521      LogTools.println(); 
     
    527527        "loci.formats.ome.OMEXMLMetadataStore")) 
    528528      { 
     529        // output OME-XML 
    529530        try { 
    530531          Method m = ms.getClass().getMethod("dumpXML", (Class[]) null); 
     
    535536          LogTools.println("Error generating OME-XML:"); 
    536537          LogTools.trace(t); 
     538        } 
     539 
     540        // check Java version (XML validation only works in Java 1.5+) 
     541        String version = System.getProperty("java.version"); 
     542        int dot = version.indexOf("."); 
     543        if (dot >= 0) dot = version.indexOf(".", dot + 1); 
     544        float ver = Float.NaN; 
     545        if (dot >= 0) { 
     546          try { 
     547            ver = Float.parseFloat(version.substring(0, dot)); 
     548          } 
     549          catch (NumberFormatException exc) { } 
     550        } 
     551        if (ver != ver) { 
     552          LogTools.println("Warning: cannot determine if Java version\"" + 
     553            version + "\" supports Java v1.5. OME-XML validation may fail."); 
     554        } 
     555 
     556        if (ver != ver || ver >= 1.5f) { 
     557          // validate OME-XML (Java 1.5+ only) 
     558          LogTools.println("Validating OME-XML"); 
     559 
     560          // use reflection to avoid dependency on optional 
     561          // org.openmicroscopy.xml or javax.xml.validation packages 
     562          ReflectedUniverse r = new ReflectedUniverse(); 
     563 
     564          try { 
     565            // look up a factory for the W3C XML Schema language 
     566            r.exec("import javax.xml.validation.SchemaFactory"); 
     567            r.setVar("schemaPath", "http://www.w3.org/2001/XMLSchema"); 
     568            r.exec("factory = SchemaFactory.newInstance(schemaPath)"); 
     569 
     570            // compile the schema 
     571            r.exec("import java.net.URL"); 
     572            r.setVar("omePath", 
     573              "http://www.openmicroscopy.org/XMLschemas/OME/FC/ome.xsd"); 
     574            r.exec("schemaLocation = new URL(omePath)"); 
     575            r.exec("schema = factory.newSchema(schemaLocation)"); 
     576 
     577            // get a validator from the schema 
     578            r.exec("validator = schema.newValidator()"); 
     579 
     580            // prepare the XML source 
     581            r.exec("import javax.xml.transform.dom.DOMSource"); 
     582            r.setVar("ms", ms); 
     583            r.exec("root = ms.getRoot()"); 
     584            r.exec("domElement = root.getDOMElement()"); 
     585            r.exec("source = new DOMSource(domElement)"); 
     586 
     587            // validate the OME-XML 
     588            try { 
     589              r.exec("validator.validate(source)"); 
     590              LogTools.println("No validation errors found."); 
     591            } 
     592            catch (ReflectException exc) { 
     593              // NB: validation errors are shown anyway 
     594            } 
     595          } 
     596          catch (ReflectException exc) { 
     597            LogTools.println("Error validating OME-XML:"); 
     598            LogTools.trace(exc); 
     599          } 
    537600        } 
    538601      } 
Note: See TracChangeset for help on using the changeset viewer.