001: /*****************************************************************************
002: * Source code information
003: * -----------------------
004: * Original author Ian Dickinson, HP Labs Bristol
005: * Author email ian.dickinson@hp.com
006: * Package Jena 2
007: * Web http://sourceforge.net/projects/jena/
008: * Created 09-Dec-2003
009: * Filename $RCSfile: DIGQueryDifferentFromTranslator.java,v $
010: * Revision $Revision: 1.8 $
011: * Release status $State: Exp $
012: *
013: * Last modified on $Date: 2008/01/02 12:07:11 $
014: * by $Author: andy_seaborne $
015: *
016: * (c) Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
017: * [See end of file]
018: *****************************************************************************/package com.hp.hpl.jena.reasoner.dig;
019:
020: import java.util.*;
021: import java.util.List;
022:
023: import org.w3c.dom.*;
024: import org.w3c.dom.Document;
025:
026: import com.hp.hpl.jena.rdf.model.Model;
027: import com.hp.hpl.jena.reasoner.TriplePattern;
028: import com.hp.hpl.jena.util.iterator.*;
029: import com.hp.hpl.jena.util.iterator.ExtendedIterator;
030:
031: // Imports
032: ///////////////
033:
034: /**
035: * <p>
036: * Translator for queries as to whether two ground individuals are different-from each other.
037: * This does not have a direct translation in DIG at the moment; instead we ask if the
038: * class expressions formed from the set of each single individual are disjoint.
039: * </p>
040: *
041: * @author Ian Dickinson, HP Labs (<a href="mailto:Ian.Dickinson@hp.com" >email</a>)
042: * @version CVS $Id: DIGQueryDifferentFromTranslator.java,v 1.8 2008/01/02 12:07:11 andy_seaborne Exp $
043: */
044: public class DIGQueryDifferentFromTranslator extends DIGQueryTranslator {
045:
046: // Constants
047: //////////////////////////////////
048:
049: // Static variables
050: //////////////////////////////////
051:
052: // Instance variables
053: //////////////////////////////////
054:
055: // Constructors
056: //////////////////////////////////
057:
058: /**
059: * <p>Construct a translator to test whether two individuals are different</p>
060: * @param predicate The predicate we are matching on
061: */
062: public DIGQueryDifferentFromTranslator(String predicate) {
063: super (null, predicate, null);
064: }
065:
066: // External signature methods
067: //////////////////////////////////
068:
069: /**
070: * <p>Answer a query that will test difference between two individuals</p>
071: */
072: public Document translatePattern(TriplePattern pattern,
073: DIGAdapter da) {
074: DIGConnection dc = da.getConnection();
075: Document query = dc.createDigVerb(DIGProfile.ASKS, da
076: .getProfile());
077: Element disjoint = da.createQueryElement(query,
078: DIGProfile.DISJOINT);
079:
080: Element ind = da.addElement(disjoint, DIGProfile.ISET);
081: da.addNamedElement(ind, DIGProfile.INDIVIDUAL, da
082: .getNodeID(pattern.getSubject()));
083:
084: ind = da.addElement(disjoint, DIGProfile.ISET);
085: da.addNamedElement(ind, DIGProfile.INDIVIDUAL, da
086: .getNodeID(pattern.getObject()));
087:
088: return query;
089: }
090:
091: /**
092: * <p>Answer an iterator of triples that match the original find query.</p>
093: */
094: public ExtendedIterator translateResponseHook(Document response,
095: TriplePattern query, DIGAdapter da) {
096: List answer = new ArrayList();
097: if (isTrue(response)) {
098: // if response is true, the subsumption relationship holds
099: answer.add(query.asTriple());
100: }
101:
102: return WrappedIterator.create(answer.iterator());
103: }
104:
105: public Document translatePattern(TriplePattern pattern,
106: DIGAdapter da, Model premises) {
107: // premises not used
108: return translatePattern(pattern, da);
109: }
110:
111: public boolean checkSubject(com.hp.hpl.jena.graph.Node subject,
112: DIGAdapter da, Model premises) {
113: return da.isIndividual(subject);
114: }
115:
116: public boolean checkObject(com.hp.hpl.jena.graph.Node object,
117: DIGAdapter da, Model premises) {
118: return da.isIndividual(object);
119: }
120:
121: // Internal implementation methods
122: //////////////////////////////////
123:
124: //==============================================================================
125: // Inner class definitions
126: //==============================================================================
127:
128: }
129:
130: /*
131: * (c) Copyright 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Hewlett-Packard Development Company, LP
132: * All rights reserved.
133: *
134: * Redistribution and use in source and binary forms, with or without
135: * modification, are permitted provided that the following conditions
136: * are met:
137: * 1. Redistributions of source code must retain the above copyright
138: * notice, this list of conditions and the following disclaimer.
139: * 2. Redistributions in binary form must reproduce the above copyright
140: * notice, this list of conditions and the following disclaimer in the
141: * documentation and/or other materials provided with the distribution.
142: * 3. The name of the author may not be used to endorse or promote products
143: * derived from this software without specific prior written permission.
144: *
145: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
146: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
147: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
148: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
149: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
150: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
151: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
152: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
153: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
154: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
155: */
|