| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package org.apache.jena.rdfxml.xmlinput0; |
| |
| import javax.xml.transform.Source; |
| import javax.xml.transform.Transformer; |
| import javax.xml.transform.dom.DOMSource; |
| import javax.xml.transform.sax.SAXResult; |
| |
| import org.apache.jena.rdf.model.Model ; |
| import org.apache.jena.shared.JenaException ; |
| import org.apache.jena.util.JenaXMLOutput; |
| import org.slf4j.Logger; |
| import org.slf4j.LoggerFactory; |
| import org.w3c.dom.Node; |
| import org.xml.sax.SAXParseException; |
| |
| /** |
| * Transform DOM nodes of RDF.XML into Jena Models. Known not to work with Java |
| * 1.4.1. |
| */ |
| public class DOM2Model extends SAX2Model { |
| |
| static Logger logger = LoggerFactory.getLogger(DOM2Model.class) ; |
| |
| /** |
| * Create a new DOM2Model. |
| * |
| * @param base |
| * The retrieval URL, or the base URI to be used while parsing. |
| * @param m |
| * A Jena Model in which to put the triples, this can be null. If |
| * it is null, then use {@link SAX2RDF#getHandlers}or |
| * {@link SAX2RDF#setHandlersWith}to provide a {@link StatementHandler}, |
| * and usually an {@link org.xml.sax.ErrorHandler} |
| * @throws SAXParseException |
| */ |
| static public DOM2Model createD2M(String base, Model m) throws SAXParseException { |
| return new DOM2Model(base, m, "", true) ; |
| } |
| /** |
| * Create a new DOM2Model. This is particularly intended for when parsing a |
| * non-root element within an XML document. In which case the application |
| * needs to find this value in the outer context. Optionally, namespace |
| * prefixes can be passed from the outer context using |
| * {@link SAX2RDF#startPrefixMapping}. |
| * |
| * @param base |
| * The retrieval URL, or the base URI to be used while parsing. |
| * @param m |
| * A Jena Model in which to put the triples, this can be null. If |
| * it is null, then use {@link SAX2RDF#getHandlers}or |
| * {@link SAX2RDF#setHandlersWith}to provide a {@link StatementHandler}, |
| * and usually an {@link org.xml.sax.ErrorHandler} |
| * @param lang |
| * The current value of <code>xml:lang</code> when parsing |
| * starts, usually "". |
| * @throws SAXParseException |
| */ |
| static public DOM2Model createD2M(String base, Model m, String lang) throws SAXParseException { |
| return new DOM2Model(base, m, lang, true) ; |
| } |
| |
| DOM2Model(String base, Model m, String lang, boolean dummy) |
| throws SAXParseException { |
| super(base, m, lang); |
| } |
| |
| /** |
| * Parse a DOM Node with the RDF/XML parser, loading the triples into the |
| * associated Model. Known not to work with Java 1.4.1. |
| * |
| * @param document |
| */ |
| public void load(Node document) { |
| Source input = new DOMSource(document); |
| |
| // Make a SAXResult object using this handler |
| SAXResult output = new SAXResult(this); |
| output.setLexicalHandler(this); |
| |
| // Run transform |
| try { |
| Transformer idTransform = JenaXMLOutput.xmlTransformer(); |
| idTransform.transform(input, output); |
| } |
| catch (FatalParsingErrorException e) { |
| // Old code ignored this, |
| // given difficult bug report, don't be silent. |
| logger.error("Unexpected exception in DOM2Model", e) ; |
| |
| } |
| catch (RuntimeException rte) { |
| throw rte; |
| } catch (Exception nrte) { |
| throw new JenaException(nrte); |
| } finally { |
| close(); |
| } |
| } |
| |
| } |