001: //=============================================================================
002: //=== Copyright (C) 2001-2007 Food and Agriculture Organization of the
003: //=== United Nations (FAO-UN), United Nations World Food Programme (WFP)
004: //=== and United Nations Environment Programme (UNEP)
005: //===
006: //=== This program is free software; you can redistribute it and/or modify
007: //=== it under the terms of the GNU General Public License as published by
008: //=== the Free Software Foundation; either version 2 of the License, or (at
009: //=== your option) any later version.
010: //===
011: //=== This program is distributed in the hope that it will be useful, but
012: //=== WITHOUT ANY WARRANTY; without even the implied warranty of
013: //=== MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: //=== General Public License for more details.
015: //===
016: //=== You should have received a copy of the GNU General Public License
017: //=== along with this program; if not, write to the Free Software
018: //=== Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
019: //===
020: //=== Contact: Jeroen Ticheler - FAO - Viale delle Terme di Caracalla 2,
021: //=== Rome - Italy. email: geonetwork@osgeo.org
022: //==============================================================================
023:
024: package org.fao.oaipmh.util;
025:
026: import java.io.File;
027: import java.io.IOException;
028: import java.io.InputStream;
029: import javax.xml.XMLConstants;
030: import javax.xml.transform.Source;
031: import javax.xml.transform.stream.StreamSource;
032: import javax.xml.validation.Schema;
033: import javax.xml.validation.SchemaFactory;
034: import javax.xml.validation.Validator;
035: import org.jdom.Document;
036: import org.jdom.Element;
037: import org.jdom.JDOMException;
038: import org.jdom.input.SAXBuilder;
039: import org.jdom.transform.JDOMSource;
040: import org.xml.sax.SAXException;
041:
042: //=============================================================================
043:
044: /** This is a portion of the jeeves.utils.Xml class and is replicated here just
045: * to avoid the jeeves jar
046: */
047:
048: public class Xml {
049: //---------------------------------------------------------------------------
050: //---
051: //--- API methods
052: //---
053: //---------------------------------------------------------------------------
054:
055: /** Loads an xml stream and returns its root node (validates the xml with a dtd) */
056:
057: public static Element loadStream(InputStream input)
058: throws IOException, JDOMException {
059: SAXBuilder builder = new SAXBuilder();
060: Document jdoc = builder.build(input);
061:
062: return (Element) jdoc.getRootElement().detach();
063: }
064:
065: //---------------------------------------------------------------------------
066: /** Converts an xml element to a string */
067:
068: // public static String getString(Element data)
069: // {
070: // XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
071: //
072: // return outputter.outputString(data);
073: // }
074: //---------------------------------------------------------------------------
075: // public static String getString(Document data)
076: // {
077: // XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
078: //
079: // return outputter.outputString(data);
080: // }
081: //---------------------------------------------------------------------------
082: public static void validate(String schemaPath, Element xml)
083: throws IOException, SAXException {
084: Source schemaFile = new StreamSource(new File(schemaPath));
085: Schema schema = factory.newSchema(schemaFile);
086: Validator validator = schema.newValidator();
087:
088: validator.validate(new JDOMSource(xml));
089: }
090:
091: //---------------------------------------------------------------------------
092: //---
093: //--- Variables
094: //---
095: //---------------------------------------------------------------------------
096:
097: private static SchemaFactory factory = SchemaFactory
098: .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
099: }
100:
101: //=============================================================================
|