001: /*
002: * (c) Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
003: * All rights reserved.
004: *
005: * Redistribution and use in source and binary forms, with or without
006: * modification, are permitted provided that the following conditions
007: * are met:
008: * 1. Redistributions of source code must retain the above copyright
009: * notice, this list of conditions and the following disclaimer.
010: * 2. Redistributions in binary form must reproduce the above copyright
011: * notice, this list of conditions and the following disclaimer in the
012: * documentation and/or other materials provided with the distribution.
013: * 3. The name of the author may not be used to endorse or promote products
014: * derived from this software without specific prior written permission.
015:
016: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
017: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
018: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
019: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
020: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
021: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
022: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
023: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
024: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
025: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
026: *
027: * RDFNode.java
028: *
029: * Created on 25 July 2000, 13:13
030: */
031:
032: package com.hp.hpl.jena.rdf.model;
033:
034: import com.hp.hpl.jena.graph.FrontsNode;
035:
036: /**
037: Interface covering RDF resources and literals. Allows probing whether a
038: node is a literal/[blank, URI]resource, moving nodes from model to model,
039: and viewing them as different Java types using the .as() polymorphism.
040:
041: @author bwm, kers
042: */
043: public interface RDFNode extends FrontsNode {
044: /**
045: Answer a String representation of the node. The form of the string
046: depends on the type of the node and is intended for human consumption,
047: not machine analysis.
048: */
049: public String toString();
050:
051: /**
052: Answer true iff this RDFNode is an anonynous resource. Useful for
053: one-off tests: see also visitWith() for making literal/anon/URI choices.
054: */
055: public boolean isAnon();
056:
057: /**
058: Answer true iff this RDFNode is a literal resource. Useful for
059: one-off tests: see also visitWith() for making literal/anon/URI choices.
060: */
061: public boolean isLiteral();
062:
063: /**
064: Answer true iff this RDFNode is an named resource. Useful for
065: one-off tests: see also visitWith() for making literal/anon/URI choices.
066: */
067: public boolean isURIResource();
068:
069: /**
070: Answer true iff this RDFNode is a URI resource or an anonynous
071: resource (ie is not a literal). Useful for one-off tests: see also
072: visitWith() for making literal/anon/URI choices.
073: */
074: public boolean isResource();
075:
076: /**
077: RDFNodes can be converted to different implementation types. Convert
078: this RDFNode to a type supporting the <code>view</code>interface. The
079: resulting RDFNode should be an instance of <code>view</code> and should
080: have any internal invariants as specified.
081: <p>
082: If the RDFNode has no Model attached, it can only be .as()ed to
083: a type it (this particular RDFNOde) already has.
084: <p>
085: If the RDFNode cannot be converted, an UnsupportedPolymorphism
086: exception is thrown..
087: */
088: public RDFNode as(Class view);
089:
090: /**
091: Answer true iff this RDFNode can be viewed as an instance of
092: <code>view</code>: that is, if it has already been viewed in this
093: way, or if it has an attached model in which it has properties that
094: permit it to be viewed in this way. If <code>canAs</code> returns
095: <code>true</code>, <code>as</code> on the same view should
096: deliver an instance of that class.
097: */
098: public boolean canAs(Class view);
099:
100: /**
101: Answer a .equals() version of this node, except that it's in the model
102: <code>m</code>.
103:
104: @param m a model to move the node to
105: @return this, if it's already in m (or no model), a copy in m otherwise
106: */
107: public RDFNode inModel(Model m);
108:
109: /**
110: Apply the appropriate method of the visitor to this node's content and
111: return the result.
112:
113: @param rv an RDFVisitor with a method for URI/blank/literal nodes
114: @return the result returned by the selected method
115: */
116: public Object visitWith(RDFVisitor rv);
117: }
|