File: KnowledgeExplorer.h

package info (click to toggle)
fact%2B%2B 1.6.5~dfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye, forky, sid, trixie
  • size: 4,496 kB
  • sloc: cpp: 28,000; java: 22,674; xml: 3,268; makefile: 102; ansic: 61; sh: 3
file content (135 lines) | stat: -rw-r--r-- 4,816 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/* This file is part of the FaCT++ DL reasoner
Copyright (C) 2011-2015 Dmitry Tsarkov and The University of Manchester
Copyright (C) 2015-2016 Dmitry Tsarkov

This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Lesser General Public License for more details.

You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/

#ifndef KNOWLEDGEEXPLORER_H
#define KNOWLEDGEEXPLORER_H

#include "taxNamEntry.h"
#include "tDag2Interface.h"

// forward declarations
class TBox;
class DlCompletionTree;

/// class to perform a knowledge exploration
class KnowledgeExplorer
{
public:		// types
		/// type for the node in the completion graph
	typedef const DlCompletionTree TCGNode;
		/// type for the node vector
	typedef std::vector<TCGNode*> TCGNodeVec;
		/// type for a set of role expressions (used in KE to return stuff)
	typedef std::set<const TDLRoleExpression*> TCGRoleSet;
		/// type for a vector of data/concept expressions (used in KE to return stuff)
	typedef std::vector<const TDLExpression*> TCGItemVec;

protected:	// classes
		/// class that maps named entity to a set of ENTITIES
	template<class Entity>
	class EE2Map
	{
	public:		// type interface
			/// set of entities
		typedef std::set<const Entity*> ESet;
			/// RO iterator to the ESet
		typedef typename ESet::const_iterator iterator;
	protected:	// members
			/// the map itself
		std::map<const TNamedEntity*, ESet> Base;
	public:		// interface
			/// empty c'tor
		EE2Map ( void ) {}
			/// empty d'tor
		~EE2Map ( void ) {}

			/// add an entity corresponding E to a map corresponding to E0
		void add ( const TNamedEntry* e0, const TNamedEntry* e )
		{
			const TNamedEntity* E0 = e0->getEntity(), *E = e->getEntity();
			// check for artificial constructions
			if ( E0 == NULL || E == NULL )
			{
				std::cerr << "No entity found for";
				if ( E0 == NULL )
					std::cerr << " '" << e0->getName() << "'";
				if ( E == NULL )
					std::cerr << " '" << e->getName() << "'";
				std::cerr << "\n";
				return;
			}
			Base[E0].insert(dynamic_cast<const Entity*>(E));
		}
			/// get the set corresponding to the entity E
		const ESet& get ( const TNamedEntity* e ) { return Base[e]; }
			/// get the begin iterator of a set corresponding to the entity E
		iterator begin ( const TNamedEntity* e ) { return Base[e].begin(); }
			/// get the end iterator of a set corresponding to the entity E
		iterator end ( const TNamedEntity* e ) { return Base[e].end(); }
	}; // EE2Map

protected:	// members
		/// map concept into set of its synonyms
	EE2Map<TDLConceptName> Cs;
		/// map individual into set of its synonyms
	EE2Map<TDLIndividualName> Is;
		/// map object role to the set of its super-roles (self included)
	EE2Map<TDLObjectRoleName> ORs;
		/// map data role to the set of its super-roles (self included)
	EE2Map<TDLDataRoleName> DRs;
		/// dag-2-interface translator used in knowledge exploration
	TDag2Interface D2I;
		/// node vector to return
	TCGNodeVec Nodes;
		/// role set to return
	TCGRoleSet Roles;
		/// concept vector to return
	TCGItemVec Concepts;

protected:	// methods
		/// adds an entity as a synonym to a map MAP
	template<class Entity>
	void addE ( EE2Map<Entity>& map, const ClassifiableEntry* entry )
	{
		map.add(entry,entry);
		if ( entry->isSynonym() )
			map.add ( entry->getSynonym(), entry );
	}
		/// add concept-like expression E (possibly with synonyms) to CONCEPTS
	void addC ( const TDLExpression* e );

public:		// interface
		/// init c'tor
	KnowledgeExplorer ( const TBox* box, TExpressionManager* pEM );
		/// empty d'tor
	~KnowledgeExplorer ( void ) {}

		/// @return the set of data neighbours of a NODE
	const TCGRoleSet& getDataRoles ( const TCGNode* node, bool onlyDet );
		/// @return the set of object neighbours of a NODE
	const TCGRoleSet& getObjectRoles ( const TCGNode* node, bool onlyDet, bool needIncoming );
		/// @return the set of neighbours of a NODE via role ROLE
	const TCGNodeVec& getNeighbours ( const TCGNode* node, const TRole* role );
		/// @return the set of all the expressions from the NODE label
	const TCGItemVec& getLabel ( const TCGNode* node, bool onlyDet );
		/// @return blocker of a blocked node NODE or NULL if node is not blocked
	const TCGNode* getBlocker ( const TCGNode* node ) const;
}; // KnowledgeExplorer

#endif