001: /******************************************************************
002: * File: PrintUtil.java
003: * Created by: Dave Reynolds
004: * Created on: 29-Mar-03
005: *
006: * (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
007: * [See end of file]
008: * $Id: PrintUtil.java,v 1.22 2008/01/02 12:07:44 andy_seaborne Exp $
009: *****************************************************************/package com.hp.hpl.jena.util;
010:
011: import java.util.*;
012: import java.io.*;
013: import com.hp.hpl.jena.vocabulary.*;
014: import com.hp.hpl.jena.datatypes.xsd.XSDDatatype;
015: import com.hp.hpl.jena.graph.*;
016: import com.hp.hpl.jena.rdf.model.*;
017: import com.hp.hpl.jena.reasoner.TriplePattern;
018: import com.hp.hpl.jena.shared.PrefixMapping;
019:
020: /**
021: * A collection of small utilites for pretty printing nodes, triples
022: * and associated things. The core functionality here is a static
023: * prefix map which is preloaded with known prefixes.
024: *
025: * <p>updated by Chris March 2004 to use a PrefixMapping rather than the
026: * specialised tables.
027: *
028: * @author <a href="mailto:der@hplb.hpl.hp.com">Dave Reynolds</a>
029: * @version $Revision: 1.22 $ on $Date: 2008/01/02 12:07:44 $
030: */
031: public class PrintUtil {
032:
033: protected static PrefixMapping prefixMapping = PrefixMapping.Factory
034: .create();
035:
036: /** Default built in eg namespace used in testing */
037: public static final String egNS = "urn:x-hp:eg/";
038:
039: static {
040: init();
041: }
042:
043: /**
044: * Load built in prefixes.
045: */
046: public static void init() {
047: registerPrefix("rdf", RDF.getURI());
048: registerPrefix("rdfs", RDFS.getURI());
049: registerPrefix("drdfs",
050: "urn:x-hp-direct-predicate:http_//www.w3.org/2000/01/rdf-schema#");
051: registerPrefix("owl", OWL.getURI());
052: registerPrefix("daml", DAML_OIL.NAMESPACE_DAML.getURI());
053: registerPrefix("jr", ReasonerVocabulary.getJenaReasonerNS());
054: registerPrefix("rb", ReasonerVocabulary.getRBNamespace());
055: registerPrefix("eg", egNS);
056: registerPrefix("xsd", XSDDatatype.XSD + "#");
057: }
058:
059: /**
060: * Register a new prefix/namespace mapping which will be used to shorten
061: * the print strings for resources in known namespaces.
062: */
063: public static void registerPrefix(String prefix, String namespace) {
064: prefixMapping.setNsPrefix(prefix, namespace);
065: }
066:
067: /**
068: * Register a set of new prefix/namespace mapping which will be used to shorten
069: * the print strings for resources in known namespaces.
070: */
071: public static void registerPrefixMap(Map map) {
072: prefixMapping.setNsPrefixes(map);
073: }
074:
075: /**
076: * Remove a registered prefix from the table of known short forms
077: */
078: public static void removePrefix(String prefix) {
079: prefixMapping.removeNsPrefix(prefix);
080: }
081:
082: /**
083: * Remove a set of prefix mappings from the table of known short forms
084: */
085: public static void removePrefixMap(Map map) {
086: for (Iterator i = map.keySet().iterator(); i.hasNext();) {
087: prefixMapping.removeNsPrefix((String) i.next());
088: }
089: }
090:
091: /**
092: * Return a simplified print string for a Node.
093: */
094: public static String print(Node node) {
095: if (node instanceof Node_URI) {
096: return node.toString(prefixMapping);
097: } else if (node instanceof Node_Literal) {
098: String lf = node.getLiteralLexicalForm();
099: return "'"
100: + lf
101: + "'"
102: + (node.getLiteralDatatype() == null ? "" : "^^"
103: + node.getLiteralDatatypeURI());
104: } else if (node instanceof Node_ANY) {
105: return "*";
106: }
107: if (node == null) {
108: return "null";
109: }
110: return node.toString();
111: }
112:
113: /**
114: * Return a simplified print string for an RDFNode.
115: */
116: public static String print(RDFNode node) {
117: if (node == null)
118: return "null";
119: return print(node.asNode());
120: }
121:
122: /**
123: * Return a simplified print string for a Triple
124: */
125: public static String print(Triple triple) {
126: if (triple == null)
127: return "(null)";
128: return "(" + print(triple.getSubject()) + " "
129: + print(triple.getPredicate()) + " "
130: + print(triple.getObject()) + ")";
131: }
132:
133: /**
134: * Return a simplified print string for a TriplePattern
135: */
136: public static String print(TriplePattern triple) {
137: if (triple == null)
138: return "(null)";
139: return "(" + print(triple.getSubject()) + " "
140: + print(triple.getPredicate()) + " "
141: + print(triple.getObject()) + ")";
142: }
143:
144: /**
145: * Return a simplified print string for a statment
146: */
147: public static String print(Statement stmt) {
148: if (stmt == null)
149: return "(null)";
150: return print(stmt.asTriple());
151: }
152:
153: /**
154: * Default print which just uses tostring
155: */
156: public static String print(Object obj) {
157: if (obj == null)
158: return "null";
159: if (obj instanceof Triple) {
160: return print((Triple) obj);
161: } else if (obj instanceof TriplePattern) {
162: return print((TriplePattern) obj);
163: } else if (obj instanceof Node) {
164: return print((Node) obj);
165: } else if (obj instanceof RDFNode) {
166: return print((RDFNode) obj);
167: } else if (obj instanceof Statement) {
168: return print((Statement) obj);
169: } else {
170: return obj.toString();
171: }
172: }
173:
174: /**
175: * Expand qnames to URIs. If the given URI appears
176: * to start with one of the registered prefixes then
177: * expand the prefix, otherwise return the original URI
178: */
179: public static String expandQname(String uri) {
180: return prefixMapping.expandPrefix(uri);
181: }
182:
183: /**
184: * Print an n-space indent to the given output stream
185: */
186: public static void printIndent(PrintWriter out, int indent) {
187: StringBuffer spaces = new StringBuffer();
188: for (int i = 0; i < indent; i++)
189: spaces.append(" ");
190: out.print(spaces.toString());
191: }
192:
193: /**
194: * Print all the Triple values from a find iterator.
195: */
196: public static void printOut(Iterator it) {
197: while (it.hasNext()) {
198: System.out.println(" " + print(it.next()));
199: }
200: }
201: }
202:
203: /*
204: (c) Copyright 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
205: All rights reserved.
206:
207: Redistribution and use in source and binary forms, with or without
208: modification, are permitted provided that the following conditions
209: are met:
210:
211: 1. Redistributions of source code must retain the above copyright
212: notice, this list of conditions and the following disclaimer.
213:
214: 2. Redistributions in binary form must reproduce the above copyright
215: notice, this list of conditions and the following disclaimer in the
216: documentation and/or other materials provided with the distribution.
217:
218: 3. The name of the author may not be used to endorse or promote products
219: derived from this software without specific prior written permission.
220:
221: THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
222: IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
223: OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
224: IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
225: INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
226: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
227: DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
228: THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
229: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
230: THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
231: */
|