| /* |
| * 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.stanbol.commons.web.base.writers; |
| |
| import java.util.Set; |
| |
| import javax.xml.parsers.DocumentBuilderFactory; |
| import javax.xml.parsers.ParserConfigurationException; |
| |
| import org.apache.clerezza.commons.rdf.BlankNode; |
| import org.apache.clerezza.commons.rdf.Language; |
| import org.apache.clerezza.commons.rdf.RDFTerm; |
| import org.apache.clerezza.commons.rdf.IRI; |
| import org.apache.clerezza.commons.rdf.Literal; |
| import org.apache.clerezza.rdf.core.sparql.ResultSet; |
| import org.apache.clerezza.rdf.core.sparql.SolutionMapping; |
| import org.apache.clerezza.rdf.core.sparql.query.Variable; |
| import org.w3c.dom.Document; |
| import org.w3c.dom.Element; |
| |
| class ResultSetToXml { |
| |
| private final DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); |
| |
| Document toDocument(ResultSet rs) throws ParserConfigurationException { |
| final Document doc = dbf.newDocumentBuilder().newDocument(); |
| |
| // root element |
| Element root = doc.createElement("sparql"); |
| root.setAttribute("xmlns", "http://www.w3.org/2005/sparql-results#"); |
| doc.appendChild(root); |
| Element head = doc.createElement("head"); |
| root.appendChild(head); |
| |
| // result set |
| Element results = doc.createElement("results"); |
| SolutionMapping solutionMapping = null; |
| while (rs.hasNext()) { |
| solutionMapping = rs.next(); |
| createResultElement(solutionMapping, results, doc); |
| } |
| createVariable(solutionMapping, head, doc); |
| root.appendChild(results); |
| |
| return doc; |
| } |
| |
| private void createResultElement(SolutionMapping solutionMap, Element results, Document doc) { |
| Set<Variable> keys = solutionMap.keySet(); |
| Element result = doc.createElement("result"); |
| results.appendChild(result); |
| for (Variable key : keys) { |
| Element bindingElement = doc.createElement("binding"); |
| bindingElement.setAttribute("name", key.getName()); |
| bindingElement.appendChild(createValueElement( |
| solutionMap.get(key), doc)); |
| result.appendChild(bindingElement); |
| } |
| } |
| |
| private void createVariable(SolutionMapping solutionMap, Element head, Document doc) { |
| if(solutionMap != null) { |
| Set<Variable> keys = solutionMap.keySet(); |
| for (Variable key : keys) { |
| Element varElement = doc.createElement("variable"); |
| varElement.setAttribute("name", key.getName()); |
| head.appendChild(varElement); |
| } |
| } |
| } |
| |
| private Element createValueElement(RDFTerm resource, Document doc) { |
| Element value; |
| if (resource instanceof IRI) { |
| value = doc.createElement("uri"); |
| value.appendChild(doc.createTextNode(((IRI) resource) |
| .getUnicodeString())); |
| } else if (resource instanceof Literal) { |
| value = doc.createElement("literal"); |
| value.appendChild(doc.createTextNode(((Literal)resource) |
| .getLexicalForm())); |
| value.setAttribute("datatype", (((Literal) resource) |
| .getDataType().getUnicodeString())); |
| Language lang = ((Literal) resource).getLanguage(); |
| if (lang != null) { |
| value.setAttribute("xml:lang", (lang.toString())); |
| } |
| } else { |
| value = doc.createElement("bnode"); |
| value.appendChild(doc.createTextNode(resource.toString())); |
| } |
| return value; |
| } |
| } |