Commits

magicrebirth  committed 159ab7a

moved to github

  • Participants
  • Parent commits 364a9ad

Comments (0)

Files changed (9)

-# use glob syntax.
 syntax: glob
 
 *.pyc
-
+*.DS_Store
+.DS_Store

File __init__.py

-VERSION = 1.0.1
-
-
-
-"""
-ONTO_INSPECTOR.PY VERSION 1.0
-
-Created	 on 2011-03-17
-Modified on 2011-11-11
-
-Copyright (c) 2010 __Michele Pasin__ <michelepasin.org>. All rights reserved.
-
-
-
-
-****************
-Dependencies: rdflib <http://www.rdflib.net/>
-Tested on 2.4 and 3.0
-
-Essentially, I developed this in order to get the hang of of the RdfLib library.
-You can pass an OWL or RDFS ontology to this class, and it'll give you a bunch of useful information about it. That's all!
-
-The file can be used in standalone mode too.
-
-****************
-
-
-
-
-
-EXAMPLE: LOADING AND QUERYING the FOAF ONTOLOGY
-
-In [1]: from onto_inspector import *
-
-In [2]: onto = OntoInspector("http://xmlns.com/foaf/spec/20100809.rdf")
-
-In [3]: onto.toplayer
-Out[3]:
-[rdflib.URIRef('http://xmlns.com/foaf/0.1/Agent'),
- rdflib.URIRef('http://www.w3.org/2000/01/rdf-schema#Class'),
- rdflib.URIRef('http://www.w3.org/2004/02/skos/core#Concept'),
- rdflib.URIRef('http://xmlns.com/foaf/0.1/Document'),
- rdflib.URIRef('http://xmlns.com/foaf/0.1/LabelProperty'),
- rdflib.URIRef('http://www.w3.org/2000/01/rdf-schema#Literal'),
- rdflib.URIRef('http://www.w3.org/2000/10/swap/pim/contact#Person'),
- rdflib.URIRef('http://xmlns.com/foaf/0.1/Project'),
- rdflib.URIRef('http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing'),
- rdflib.URIRef('http://www.w3.org/2002/07/owl#Thing')]
-
-In [4]: onto.printTree()
-foaf:Agent
-----foaf:Group
-----foaf:Organization
-----foaf:Person
-rdfs:Class
-http://www.w3.org/2004/02/skos/core#Concept
-foaf:Document
-----foaf:Image
-----foaf:PersonalProfileDocument
-foaf:LabelProperty
-rdfs:Literal
-http://www.w3.org/2000/10/swap/pim/contact#Person
-----foaf:Person
-foaf:Project
-http://www.w3.org/2003/01/geo/wgs84_pos#SpatialThing
-----foaf:Person
-owl:Thing
-----foaf:OnlineAccount
---------foaf:OnlineChatAccount
---------foaf:OnlineEcommerceAccount
---------foaf:OnlineGamingAccount
-
-
-In [5]: document = onto.find_class_byname("document")
-
-In [6]: document
-Out[6]:
-[rdflib.URIRef('http://xmlns.com/foaf/0.1/Document'),
- rdflib.URIRef('http://xmlns.com/foaf/0.1/PersonalProfileDocument')]
-
-In [7]: document = document[0]
-
-In [8]: document
-Out[8]: rdflib.URIRef('http://xmlns.com/foaf/0.1/Document')
-
-In [9]: onto.get_classAllSubs(document)
-Out[9]:
-[rdflib.URIRef('http://xmlns.com/foaf/0.1/Image'),
- rdflib.URIRef('http://xmlns.com/foaf/0.1/PersonalProfileDocument')]
-
-In [10]: onto.get_classAllSupers(document)
-Out[10]: []
-
-In [11]: onto.get_classComment(document)
-Out[11]: rdflib.Literal('A document.', language=None, datatype=None)
-
-
-
-"""

File onto_inspector.py

-#!/usr/bin/env python
-
-# encoding: utf-8
-
-"""
-ONTO_INSPECTOR
-Copyright (c) 2010 __Michele Pasin__ <michelepasin.org>. All rights reserved.
-More info in the __init__.py file.
-
-
-Run it from the command line and it shows info about the default ontology; alternatively pass it a URI as an argument for where to look for an ontology. Eg: 
-
->>> python onto_inspector.py
->>> python onto_inspector.py http://xmlns.com/foaf/0.1/
->>> python onto_inspector.py http://purl.org/ontology/mo/
-
-"""
-
-
-
-
-import sys, os, urllib2
-
-import rdflib	 # so we have it available as a namespace
-
-from rdflib import ConjunctiveGraph, Namespace, exceptions
-from rdflib import URIRef, RDFS, RDF, BNode
-from vocabs import OWL
-
-from vocabs import DUBLINCORE as DC
-from utils import *
-
-
-
-
-
-##################
-#
-#  constants
-#
-##################
-
-STANDARD_ANNOTATION_URIS = [ RDFS.comment, OWL.incompatibleWith, RDFS.isDefinedBy, RDFS.label, OWL.priorVersion, RDFS.seeAlso, OWL.versionInfo]
-
-DC_ANNOTATION_URIS = [DC.contributor, DC.coverage, DC.creator, DC.date, DC.description, DC.format,
- DC.identifier, DC.language, DC.publisher, DC.relation, DC.rights, DC.source, DC.subject, DC.title, DC.type]
-
-
-DEFAULT_SESSION_NAMESPACE = "http://www.michelepasin.org/onto_inspector/resource#"
-
-
-
-
-
-##################
-#
-# The main class
-#
-##################
-
-
-
-class OntoInspector(object):
-	"""Class that includes methods for querying an RDFS/OWL ontology"""
-
-
-	def __init__(self, uri, language=""):
-		"""
-		local_path: flag for
-		"""
-		super(OntoInspector, self).__init__()
-
-		self.rdfGraph = ConjunctiveGraph()
-		try:
-			self.rdfGraph.parse(uri, format="xml")
-		except:
-			try:
-				self.rdfGraph.parse(uri, format="n3")
-			except:
-				raise exceptions.Error("Could not parse the file! Is it a valid RDF/OWL ontology?")
-		finally:
-			self.baseURI = self.get_OntologyURI() or uri
-			# let's cache some useful info for faster access
-			self.allclasses = self.__getAllClasses(language)
-			self.allobjproperties = self._getAllProperties(classPredicate = 'owl.objectproperty')
-			self.alldataproperties = self._getAllProperties(classPredicate = 'owl.datatypeproperty')
-			self.toplayer = self.__getTopclasses()
-			self.tree = self.__getTree()
-			self.maxdepth = self.__get_MAXTreeLevel()
-			self.sessionGraph = ConjunctiveGraph()
-			self.sessionNS = Namespace(DEFAULT_SESSION_NAMESPACE)
-
-
-
-	def __repr__(self):
-		return "<OntoInspector object [%d] for URI: %s>" % (id(self), self.baseURI)
-
-
-	def __isBlankNode(self, aClass):
-		""" small utility that checks if a class is a blank node """
-		if type(aClass) == BNode:
-			return True
-		else:
-			return False
-
-
-
-	def get_OntologyURI(self, return_as_string=True):
-		"""
-		In [15]: [x for x in o.rdfGraph.triples((None, RDF.type, OWL.Ontology))]
-		Out[15]:
-		[(rdflib.URIRef('http://purl.com/net/sails'),
-						rdflib.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'),
-						rdflib.URIRef('http://www.w3.org/2002/07/owl#Ontology'))]
-
-		Mind that this will work only for OWL ontologies.
-		In other cases we just return None, and use the URI passed at loading time
-
-		"""
-		test = [x for x, y, z in self.rdfGraph.triples((None, RDF.type, OWL.Ontology))]
-		if test:
-			if return_as_string:
-				return str(test[0])
-			else:
-				return test[0]
-		else:
-			return None
-
-	def get_OntoAnnotations(self, return_as_string=True):
-		"""
-		Tries to get all the available annotations for an OWL ontology.
-		Returns a list of annotations as triples, which can easily be transformed into strings
-		for pretty display.
-
-		In [4]: o.get_OntoAnnotations()
-		Out[4]:
-		[('http://www.w3.org/2000/01/rdf-schema#label',
-						rdflib.Literal('Sails: ontology the models the WW1 naval history domain', language=None, datatype=rdflib.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral'))),
-				('http://www.w3.org/2002/07/owl#versionInfo',
-						rdflib.Literal('0.4: refactored classes and added the inheritance info from CIDOC-CRM', language=None, datatype=rdflib.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral')))]
-
-		In [5]: [(str(x), str(y)) for x,y in o.get_OntoAnnotations()]
-		Out[5]:
-		[('http://www.w3.org/2000/01/rdf-schema#label',
-						'Sails: ontology the models the WW1 naval history domain'),
-				('http://www.w3.org/2002/07/owl#versionInfo',
-						'0.4: refactored classes and added the inheritance info from CIDOC-CRM')]
-
-		"""
-		exit = []
-		ontoURI = self.get_OntologyURI(return_as_string=False)
-		if ontoURI:
-			for annotationURI in STANDARD_ANNOTATION_URIS:
-				test = [z for x, y, z in self.rdfGraph.triples((ontoURI, annotationURI, None))]
-				if test:
-					exit.append((str(annotationURI), z))
-			for annotationURI in DC_ANNOTATION_URIS:
-				test = [z for x, y, z in self.rdfGraph.triples((ontoURI, annotationURI, None))]
-				if test:
-					exit.append((str(annotationURI), z))
-		if return_as_string:
-			return [(self.uri2niceString(x), str(y)) for x,y in exit]
-		else:
-			return exit
-
-
-
-	# NOTE: owl:Class is defined as a subclass of rdfs:Class. The rationale for having a separate OWL class construct lies in
-	# the restrictions on OWL DL (and thus also on OWL Lite), which imply that not all RDFS classes are legal OWL DL classes.
-	# In OWL Full these restrictions do not exist and therefore owl:Class and rdfs:Class are equivalent in OWL Full.
-	# http://www.w3.org/TR/owl-ref/			, section 3.1
-
-
-	def __getAllClasses(self, classPredicate = "", removeBlankNodes = True):
-		"""
-		Extracts all the classes from a model
-		We use the RDFS and OWL predicate by default; also, we extract non explicitly declared classes
-		"""
-		rdfGraph = self.rdfGraph
-		exit = []
-		if not classPredicate:
-			for s, v, o in rdfGraph.triples((None, RDF.type , OWL.Class)):
-				exit.append(s)
-			for s, v, o in rdfGraph.triples((None, RDF.type , RDFS.Class)):
-				exit.append(s)
-			# this extra routine makes sure we include classes not declared explicitly
-			# eg when importing another onto and subclassing one of its classes...
-			for s, v, o in rdfGraph.triples((None, RDFS.subClassOf , None)):
-				if s not in exit:
-					exit.append(s)
-				if o not in exit:
-					exit.append(o)
-			# this extra routine includes classes found only in rdfs:domain and rdfs:range definitions
-			for s, v, o in rdfGraph.triples((None, RDFS.domain , None)):
-				if o not in exit:
-					exit.append(o)
-			for s, v, o in rdfGraph.triples((None, RDFS.range , None)):
-				if o not in exit:
-					exit.append(o)
-		else:
-			if classPredicate == "rdfs" or classPredicate == "rdf":
-				for s, v, o in rdfGraph.triples((None, RDF.type , RDFS.Class)):
-					exit.append(s)
-			elif classPredicate == "owl":
-				for s, v, o in rdfGraph.triples((None, RDF.type , OWL.Class)):
-					exit.append(s)
-			else:
-				raise exceptions.Error("ClassPredicate must be either rdf, rdfs or owl")
-
-		exit = remove_duplicates(exit)
-		if removeBlankNodes:
-			exit = [x for x in exit if not self.__isBlankNode(x)]
-		return sort_uri_list_by_name(exit)
-
-
-	def __getTopclasses(self, classPredicate = ''):
-		""" Finds the topclass in an ontology (works also when we have more than on superclass)
-
-		"""
-		returnlist = []
-		# gets all the classes:
-		# 27/7: changed from:  for eachclass in self.__getAllClasses(classPredicate):
-		for eachclass in self.allclasses:
-			x = self.get_classDirectSupers(eachclass)
-			if not x:
-				returnlist.append(eachclass)
-		return sort_uri_list_by_name(returnlist)
-
-
-
-	def __getTree(self, father=None, out=None):
-		""" Reconstructs the taxonomical tree of an ontology, from the 'topClasses' (= classes with no supers, see below)
-				Returns a dictionary in which each class is a key, and its direct subs are the values.
-				The top classes have key = 0
-
-				Eg.
-				{'0' : [class1, class2], class1: [class1-2, class1-3], class2: [class2-1, class2-2]}
-		"""
-		if not father:
-			out = {}
-			topclasses = self.toplayer
-			out[0] = topclasses
-			for top in topclasses:
-				children = self.get_classDirectSubs(top)
-				out[top] = children
-				for potentialfather in children:
-					self.__getTree(potentialfather, out)
-			return out
-		else:
-			children = self.get_classDirectSubs(father)
-			out[father] = children
-			for ch in children:
-				self.__getTree(ch, out)
-
-
-
-	def get_allClassesFromTree(self, element = 0, out = None):
-		""" methods that returns all the classes found, from the Tree representation.
-			Useful for returning class list according to the tree, as it maintains the ordering of the tree.
-			(needs "__getTree" to be run first)
-				"""
-		if not out:
-			out = []
-		# out += [x for x in self.tree[element] if x not in out]
-		for each in self.tree[element]:
-			if each not in out:
-				out += [each]
-			out += self.get_allClassesFromTree(each, out)
-		return remove_duplicates(out)
-
-
-
-
-	def get_classTreeLevel(self, aClass, level = 0, key = 0):
-		""" basic function that returns the level of a class int he tree, by inspecting the tree dictionary.
-				In some cases a class may have different levels, here we just return the first two..... for now.
-				level = position_int, key=classkey_in_treedict
-				"""
-		for element in self.tree[key]:
-			if element == aClass:
-				return level
-			test = self.get_classTreeLevel(aClass, level + 1, element)
-			if test:
-				return test
-		# return 99 # fallback case..
-
-
-	def __get_MAXTreeLevel(self):
-		""" gets the max depth level of the ontology tree
-				"""
-		n = 0
-		for aClass in self.allclasses:
-			temp = self.get_classTreeLevel(aClass)
-			if temp > n:
-				n = temp
-		return n
-
-
-
-
-	def get_class_byname(self, name, exact = False):
-		"""
-		eg: ship = o.get_class_byname("http://purl.com/net/conflict#Ship", True)
-		Gets that class in particular
-		o.get_class_byname("http://purl.com/net/conflict#Ship")
-		GETS a list of classes beginning like that..
-		"""
-		temp = []
-		if name:
-			for x in self.allclasses:
-				if exact:
-					if x.__str__().lower() == str(name).lower():
-						return x
-				else:
-					if x.__str__().lower().find(str(name).lower()) >= 0:
-						temp.append(x)
-		return temp
-
-
-
-# methods for getting ancestores and descendants of classes: by default, we do not include blank nodes
-
-	def get_classDirectSupers(self, aClass, excludeBnodes = True):
-		returnlist = []
-		for s, v, o in self.rdfGraph.triples((aClass, RDFS.subClassOf , None)):
-			if excludeBnodes:
-				if not self.__isBlankNode(o):
-					returnlist.append(o)
-			else:
-				returnlist.append(o)
-		return sort_uri_list_by_name(remove_duplicates(returnlist))
-
-
-	def get_classAllSupers(self, aClass, returnlist = None, excludeBnodes = True ):
-		if returnlist == None:  # trick to avoid mutable objs python prob...
-			returnlist = []
-		for ssuper in self.get_classDirectSupers(aClass, excludeBnodes):
-			returnlist.append(ssuper)
-			self.get_classAllSupers(ssuper, returnlist, excludeBnodes)
-		return sort_uri_list_by_name(remove_duplicates(returnlist))
-
-
-	def get_classDirectSubs(self, aClass, excludeBnodes = True):
-		returnlist = []
-		for s, v, o in self.rdfGraph.triples((None, RDFS.subClassOf , aClass)):
-			if excludeBnodes:
-				if not self.__isBlankNode(s):
-					returnlist.append(s)
-			else:
-				returnlist.append(s)
-		return sort_uri_list_by_name(remove_duplicates(returnlist))
-
-
-	def get_classAllSubs(self, aClass, returnlist = None, excludeBnodes = True):
-		if returnlist == None:
-			returnlist = []
-		for sub in self.get_classDirectSubs(aClass, excludeBnodes):
-			returnlist.append(sub)
-			self.get_classAllSubs(sub, returnlist, excludeBnodes)
-		return sort_uri_list_by_name(remove_duplicates(returnlist))
-
-
-	def get_classSiblings(self, aClass, excludeBnodes = True):
-		returnlist = []
-		for father in self.get_classDirectSupers(aClass, excludeBnodes):
-			for child in self.get_classDirectSubs(father, excludeBnodes):
-				if child != aClass:
-					returnlist.append(child)
-		return sort_uri_list_by_name(remove_duplicates(returnlist))
-
-
-
-	def mostSpecialized(self, classlist):
-		"""
-		From a list of classes, returns a list of the leafs only. 
-		If the classes belong to different branches, or they are at the same depth level (= siblings), all of them are returned.
-		"""
-		returnlist = []
-		superslistlists = [self.get_classAllSupers(aClass) for aClass in classlist if aClass in self.allclasses]
-		for aClass in classlist:
-			flag = False
-			for superslist in superslistlists:
-				if aClass in superslist:
-					flag = True
-			if flag == False:
-				returnlist.append(aClass)
-		return returnlist
-
-
-	def mostGeneric(self, classlist):
-		"""
-		From a list of classes, returns a list of the most generic ones only. 
-		If the classes belong to different branches, or both are at the same level, all are returned
-		"""
-		returnlist = []
-		superslist = [self.get_classAllSubs(aClass) for aClass in classlist if aClass in self.allclasses]
-		for aClass in classlist:
-			flag = False
-			for supers in superslist:
-				if aClass in supers:
-					flag = True
-			if flag == False:
-				returnlist.append(aClass)
-		return returnlist
-				
-
-	def get_EntityLabel(self, anEntity, language = "default"):
-		"""		Returns the rdfs.label (english) value of an entity (class or property), if existing:
-		# temp = [x for x in g.triples((top,RDFS.label, None))]
-
-		(rdflib.URIRef('file:///Users/mac/Documents/Ontologies/CIDOC-CMR/cidoc_crm_v5.0.2.rdfs#E1'),
-				rdflib.URIRef('http://www.w3.org/2000/01/rdf-schema#label'),
-				rdflib.Literal('\u039f\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 CIDOC CRM', language=u'el', datatype=None))
-
-
-		"""
-		if language == 'default':
-			lang = 'en'
-		else:
-			lang = language
-		for s, p, o in self.rdfGraph.triples((anEntity, RDFS.label , None)):
-			try:
-				if o.language == lang:
-					return o # we're returning the RDF.Literal
-			except:
-				continue
-		# if no language specified, just returns the first label found....
-		if language == 'default':
-			for s, p, o in self.rdfGraph.triples((anEntity, RDFS.label , None)):
-				return o
-		return None
-		
-
-	# DEPRECATED : we should be using get_EntityLabel which is more generic
-	def get_classLabel(self, aClass, language = "default"):
-		"""		Returns the rdfs.label (english) value of a class, if existing:
-		# temp = [x for x in g.triples((top,RDFS.label, None))]
-
-		(rdflib.URIRef('file:///Users/mac/Documents/Ontologies/CIDOC-CMR/cidoc_crm_v5.0.2.rdfs#E1'),
-				rdflib.URIRef('http://www.w3.org/2000/01/rdf-schema#label'),
-				rdflib.Literal('\u039f\u03bd\u03c4\u03cc\u03c4\u03b7\u03c4\u03b1 CIDOC CRM', language=u'el', datatype=None))
-
-
-		"""
-		if language == 'default':
-			lang = 'en'
-		else:
-			lang = language
-		for s, p, o in self.rdfGraph.triples((aClass, RDFS.label , None)):
-			try:
-				if o.language == lang:
-					return o # we're returning the RDF.Literal
-			except:
-				continue
-		# if no language specified, just returns the first label found....
-		if language == 'default':
-			for s, p, o in self.rdfGraph.triples((aClass, RDFS.label , None)):
-				return o
-		return None
-
-
-
-	def get_classComment(self, aClass, language = "default"):
-		"""		Returns the rdf.comment value of a class, if existing:
-
-		[(rdflib.URIRef('http://cohereweb.net/ontology/cohere.owl#AIF-scheme_node'),
-						rdflib.URIRef('http://www.w3.org/2000/01/rdf-schema#comment'),
-						rdflib.Literal('In AIF, scheme nodes capture the application of schemes (= patterns of reasoning). In Cohere, this is equivalent to a typed link, where the type is the specific scheme used by the S-node in AIF. \nIt is important to remember that even in AIF we usually have the following structure conposing a graph, that is, an I-node --> edge --> S-node --> edge --> I-node, the translation into Cohere makes the edges instantiation superfluous. Namely, this is translated as follows: (connection (simple_idea --> link (type_S-node) --> simple_idea)).', language=None, datatype=rdflib.URIRef('http://www.w3.org/2001/XMLSchema#string'))),
-
-		"""
-		if language == 'default':
-			lang = 'en'
-		else:
-			lang = language
-		for s, p, o in self.rdfGraph.triples((aClass, RDFS.comment , None)):
-			try:
-				if o.language == lang:
-					return o # # note that we return the RDF literal, not the string (in theory, it can be examined further for lang or other attributes)
-			except:
-				continue
-		# if no language specified, just returns the first label found....
-		if language == 'default':
-			for s, p, o in self.rdfGraph.triples((aClass, RDFS.comment , None)):
-				return o
-		return None
-
-
-
-	def get_classRepresentation(self, aClass):
-		"""		method that returns a dictionary with chosen attributes of a class
-				Useful for creating arbitraty representation of a class, eg name + comments + label etc..
-				Modify as needed.. this could be the basis for an ORM built on top of rdflib...
-						"""
-		temp = {}
-		temp['class'] = aClass
-		temp['classname'] = self.uri2niceString(aClass)
-		temp['comment'] = self.get_classComment(aClass)
-		temp['label'] = self.get_EntityLabel(aClass)
-		temp['treelevel'] = self.get_classTreeLevel(aClass)
-		return temp
-
-
-
-
-	def get_namespaces(self, only_base = False):
-		""" wrapper function: return either the base namespace only, or all of them
-
-		Namespaces are given in this format:
-
-		In [01]: for x in rdfGraph.namespaces():
-				....:			print x
-				....:
-				....:
-		('xml', rdflib.URIRef('http://www.w3.org/XML/1998/namespace'))
-		('', rdflib.URIRef('http://cohereweb.net/ontology/cohere.owl#'))
-		(u'owl', rdflib.URIRef('http://www.w3.org/2002/07/owl#'))
-		('rdfs', rdflib.URIRef('http://www.w3.org/2000/01/rdf-schema#'))
-		('rdf', rdflib.URIRef('http://www.w3.org/1999/02/22-rdf-syntax-ns#'))
-		(u'xsd', rdflib.URIRef('http://www.w3.org/2001/XMLSchema#'))
-
-
-				"""
-		# we assume that a base namespace is implied by an empty prefix
-		if only_base:
-			ll = [x for x in self.rdfGraph.namespaces() if x[0] == '']
-			if ll:
-				return ll[0][1]
-			else:
-				return None
-		else:
-			out = []
-			for x in self.rdfGraph.namespaces():
-				if x[0]:
-					out.append(x)
-				else: # if the namespace is blank (== base)
-					prefix = self.inferNamespacePrefix(x[1])
-					if prefix:
-						out.append((prefix, x[1]))
-					else:
-						out.append(('base', x[1]))
-			return out
-
-
-
-
-	###########
-	# PROPERTY METHODS 
-	###########
-
-
-	def get_classProperties(self, aClass, class_role = "domain", prop_type = "", inherited = False):
-		"""
-		Gets all the properties for a class
-		Defaults to properties that have that class in the domain space; pass 'range' to have the other ones.
-		TODO: prop_type is meant to let us separate out ObjProps from DataTypeProps
-		TODO: If 'inherited' is set to True, it returns ONLY the inherited properties.
-		"""
-		exit = []
-		if aClass in self.allclasses:
-			if not inherited:
-				if class_role == "domain":
-					for s, v, o in self.rdfGraph.triples((None, RDFS.domain , aClass)):
-						if s not in exit:
-							exit.append(s)
-				elif class_role == "range":
-					for s, v, o in self.rdfGraph.triples((None, RDFS.range , aClass)):
-						if s not in exit:
-							exit.append(s)
-			else:
-				pass # TODO
-		return exit
-		
-
-
-	def get_propertyRange(self, prop):
-		exit = []
-		for s, v, o in self.rdfGraph.triples((prop, RDFS.range , None)):
-			if o not in exit:
-				exit.append(o)
-		return exit
-		
-	def get_propertyDomain(self, prop):
-		exit = []
-		for s, v, o in self.rdfGraph.triples((prop, RDFS.domain , None)):
-			if o not in exit:
-				exit.append(o)
-		return exit
-
-
-	def _getAllProperties(self, classPredicate = ""):
-		"""
-		Extracts all the properties (OWL.ObjectProperty, OWL.DatatypeProperty, RDF.Property) declared in a model.
-		The method is unprotected (single underscore) because we might want to call it from the OntoInspector object directly, just to see if there is *any* property available.... 
-		"""
-		rdfGraph = self.rdfGraph
-		exit = []
-		if not classPredicate:
-			for s, v, o in rdfGraph.triples((None, RDF.type , RDF.Property)):
-				exit.append(s)
-			for s, v, o in rdfGraph.triples((None, RDF.type , OWL.ObjectProperty)):
-				exit.append(s)
-			for s, v, o in rdfGraph.triples((None, RDF.type , OWL.DatatypeProperty)):
-				exit.append(s)
-		else:
-			if classPredicate == "rdf.property":
-				for s, v, o in rdfGraph.triples((None, RDF.type , RDF.Property)):
-					exit.append(s)
-			elif classPredicate == "owl.objectproperty":
-				for s, v, o in rdfGraph.triples((None, RDF.type , OWL.ObjectProperty)):
-					exit.append(s)
-			elif classPredicate == "owl.datatypeproperty":
-				for s, v, o in rdfGraph.triples((None, RDF.type , OWL.DatatypeProperty)):
-					exit.append(s)
-			else:
-				raise exceptions.Error("ClassPredicate must be either 'rdf.property' or 'owl.objectproperty' or 'owl.datatypeproperty'")
-
-		exit = remove_duplicates(exit)
-		return sort_uri_list_by_name(exit)
-
-
-
-	###########
-	# INSTANCE METHODS and SESSION GRAPH
-	###########
-
-
-	def setSessionGraphNamespace(self, ns):
-		if ns.startswith("http://"):
-			self.sessionNS = ns
-		else:
-			raise exceptions.Error("Please provide a URI starting with 'http://'..")
-
-	def serializeSessionGraph(self, format=""):
-		""" Shortcut that outputs the session graph
-			TODO: add format specs..
-	   """
-		return self.sessionGraph.serialize()
-
-
-
-	def get_instance_byname(self, name, exact = False):
-		"""
-		Not very fast: every time self.get_allInstances() is called.. 
-		TODO: find a better solution, maybe load all instances at startup?
-		"""
-		temp = []
-		if name:
-			for x in self.get_allInstances():
-				if exact:
-					if x.__str__().lower() == str(name).lower():
-						return x
-				else:
-					if x.__str__().lower().find(str(name).lower()) >= 0:
-						temp.append(x)
-		return temp
-		
-
-	def get_allInstances(self):
-		returnlist = []
-		for c in self.toplayer:
-			returnlist.extend(self.get_classInstances(c, onlydirect = False))
-		if returnlist:
-			return sort_uri_list_by_name(remove_duplicates(returnlist))
-		else:
-			return returnlist
-
-
-
-	def get_classInstances(self, aClass, onlydirect = True):
-		""" 
-		Gets all the (direct by default) instances of a class
-		"""
-		if aClass in self.allclasses:
-			returnlist = []
-			for s, v, o in self.rdfGraph.triples((None , RDF.type , aClass)):
-				returnlist.append(s)
-			if not onlydirect:
-				for sub in self.get_classAllSubs(aClass):
-					for s, v, o in self.rdfGraph.triples((None , RDF.type , sub)):
-						returnlist.append(s)
-			return sort_uri_list_by_name(remove_duplicates(returnlist))
-		else:
-			raise exceptions.Error("Class is not available in current ontology")
-
-
-	def addInstance(self, aClass, anInstance, ns = None):
-		""" 2011-07-26: 
-			Adds or creates a class-instance to the session-graph (and returns the instance).
-			If a URIRef object is passed, that's ok. Also, if a string is passed, we create a URI using the 
-			default namespace for the Session graph.
-			p.s. No need to check for duplicates: rdflib does that already!
-	   """
-		if aClass in self.allclasses:
-			if type(anInstance) == URIRef:
-				self.sessionGraph.add((anInstance, RDF.type, aClass))
-				return anInstance
-			elif type(anInstance) == type("string") or type(anInstance) == type(u"unicode"):
-				ns = ns or self.sessionNS  # needed?
-				self.sessionGraph.add((ns[anInstance], RDF.type, aClass))
-				return ns[anInstance]
-			else:
-				raise exceptions.Error("Instance must be a URIRef object or a String")
-		else:
-			raise exceptions.Error("Class is not available in current ontology")
-
-
-	def get_instanceFather(self, anInstance, most_specialized=True):
-		""" Returns the class an instance is instantiating.
-	
-		We should try to return only the direct father!		
-		"""
-		returnlist = []
-		for s, v, o in self.rdfGraph.triples((anInstance , RDF.type , None)):
-			if o in self.allclasses:  # sometimes there could be other stuff...
-				returnlist.append(o)
-		if most_specialized:
-			return sort_uri_list_by_name(remove_duplicates(self.mostSpecialized(returnlist)))
-		else:
-			return sort_uri_list_by_name(remove_duplicates(returnlist))
-
-	def get_instanceSiblings(self, anInstance):
-		""" Returns the siblings of an instance  """
-		returnlist = []
-		for aClass in self.get_instanceFather(anInstance):
-			returnlist.extend(self.get_classInstances(aClass))
-		return sort_uri_list_by_name(remove_duplicates(returnlist))
-
-
-
-	###########
-	# UTILITIES  
-	###########
-
-
-
-	def printTree(self):
-		""" print directly to stdout the taxonomical tree of an ontology """
-
-		def tree_inner(rdfGraph, aClass, level):
-			for sub in self.get_classDirectSubs(aClass):
-				print "%s%s" % ("-" * 4 * level, self.uri2niceString(sub))
-				tree_inner(rdfGraph, sub, (level + 1))
-
-		for top in self.toplayer:
-			print self.uri2niceString(top)
-			tree_inner(self.rdfGraph, top, 1)
-
-
-
-	def get_HTMLTree(self, element = 0, treedict = None):
-		""" outputs an html tree representation based on the dictionary one above
-		NOTE: Copy and modify this function if you need some different type of html..
-
-		EG:
-
-		<ul id="example" class="filetree">
-				<li><span class="folder">Folder 2</span>
-						<ul>
-								<li><span class="folder">Subfolder 2.1</span>
-										<ul>
-												<li><span class="file">File 2.1.1</span></li>
-												<li><span class="file">File 2.1.2</span></li>
-										</ul>
-								</li>
-								<li><span class="file">File 2.2</span></li>
-						</ul>
-				</li>
-				<li class="closed"><span class="folder">Folder 3 (closed at start)</span></li>
-				<li><span class="file">File 4</span></li>
-		</ul>
-
-		"""
-		if not treedict:
-			treedict = self.__getTree()
-		stringa = "<ul>"
-		for x in treedict[element]:
-			# print x
-			stringa += "<li>%s" % self.uri2niceString(x)
-			stringa += self.get_HTMLTree(x, treedict)
-			stringa += "</li>"
-		stringa += "</ul>"
-		return stringa
-
-
-
-
-	def uri2niceString(self, aUri):
-		""" from a URI, returns a nice string representation that uses also the namespace symbols
-				Cuts the uri of the namespace, and replaces it with its shortcut (for base, attempts to infer it or
-				leaves it blank)
-
-				In [77]: for x in g.namespaces():
-						....:	print x
-						....:
-						....:
-				('xml', rdflib.URIRef('http://www.w3.org/XML/1998/namespace'))
-				('', rdflib.URIRef('http://purl.org/ontology/bibo/'))	# <=== note it's blank for the base NS
-				(u'ns', rdflib.URIRef('http://www.w3.org/2003/06/sw-vocab-status/ns#'))
-
-		"""
-		stringa = aUri.__str__()		#gets the string within a URI
-		for aNamespaceTuple in self.rdfGraph.namespaces():
-			try: # check if it matches the available NS
-				if stringa.find(aNamespaceTuple[1].__str__()) == 0:
-					if aNamespaceTuple[0]: # for base NS, it's empty
-						stringa = aNamespaceTuple[0] + ":" + stringa[len(aNamespaceTuple[1].__str__()):]
-					else:
-						prefix = self.inferNamespacePrefix(aNamespaceTuple[1])
-						if prefix:
-							stringa = prefix + ":" + stringa[len(aNamespaceTuple[1].__str__()):]
-						else:
-							stringa = "base:" + stringa[len(aNamespaceTuple[1].__str__()):]
-			except:
-				stringa = "error"
-		return stringa
-
-
-
-	def inferNamespacePrefix(self, aUri):
-		""" Method that from a URI returns the last bit, eg from <'http://www.w3.org/2008/05/skos#'> we extract
-		the <skos> string and use it as a namespace prefix when rendering the ontology
-		"""
-		stringa = aUri.__str__()
-		try:
-			prefix = stringa.replace("#", "").split("/")[-1]
-		except:
-			prefix = ""
-		return prefix
-
-
-	def draw_ontograph(self, fileposition):
-		"""visualize the graph using pyGraphViz
-		Possible Layouts: http://rss.acs.unt.edu/Rdoc/library/Rgraphviz/html/GraphvizLayouts.html
-		"""
-		try:
-			import pygraphviz as pgv
-		except:
-			return "PyGraphViz needed!"
-
-		G = pgv.AGraph(rankdir="BT") # top bottom direction
-		for s, v, o in rdfGraph.triples((None, RDFS.subClassOf , None)):
-			G.add_edge(self.uri2niceString(s), self.uri2niceString(o))
-		G.layout(prog='dot')	# eg dot, neato, twopi, circo, fdp
-		G.draw(fileposition)
-		print "\n\n", "_" * 50, "\n\n"
-		print "Drawn graph at %s" % fileposition
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-##################
-# Thu Mar 17 19:07:30 GMT 2011
-# HOW TO USE THIS FILE IN STANDALONE MODE:
-#
-##################
-
-
-
-# DEFAULT_ONTO = "http://purl.org/ontology/mo/"
-DEFAULT_ONTO = "test/cidoc_crm_v5.0.2_english_label.rdfs"
-
-
-def main(argv):
-	"""
-	If you run from the command line, it shows info about the default onto, or pass it a URI as an argument for where to look for an ontology
-
-	>>> python onto_inspector.py
-	>>> python onto_inspector.py http://xmlns.com/foaf/0.1/
-	>>> python onto_inspector.py http://purl.org/ontology/mo/
-
-
-	"""
-	if argv:
-		ontoInspector = OntoInspector(argv[0])
-	else:
-		ontoInspector = OntoInspector(DEFAULT_ONTO)
-
-	rdfGraph = ontoInspector.rdfGraph
-
-	print "ONTOLOGY = %s" % ontoInspector.baseURI
-	print "_" * 50, "\n\n"
-	
-	for x, y in ontoInspector.get_OntoAnnotations():
-		print "%s : %s" % (x, y)
-	print "\n\nNAMESPACES:\n"
-	for x in ontoInspector.get_namespaces():
-		print "%s : %s" % (x[0], x[1])
-
-	print "_" * 50, "\n\n"
-
-
-	for top in ontoInspector.toplayer:
-		print "TOP CLASS ==========>", ontoInspector.uri2niceString(top)
-
-	print "_" * 50, "\n\n"
-
-	print "MAIN TAXONOMY:\n"
-	ontoInspector.printTree()
-
-
-	print "\n\n", "_" * 50, "\n\n"
-	print "Classes found: ", str(len(ontoInspector.allclasses)), " \n", str([ontoInspector.uri2niceString(x).upper() for x in ontoInspector.allclasses])
-	print "_" * 20
-	for s in ontoInspector.allclasses:
-		# get the subject, treat it as string and strip the initial namespace
-		print "Class : " , ontoInspector.uri2niceString(s).upper()
-		print "direct_subclasses: ", str(len(ontoInspector.get_classDirectSubs(s))), " = ", 			str([ontoInspector.uri2niceString(x) for x in  ontoInspector.get_classDirectSubs(s)])
-		print "all_subclasses : ", str(len(ontoInspector.get_classAllSubs(s, []))), " = ", 		 	str([ontoInspector.uri2niceString(x) for x in  ontoInspector.get_classAllSubs(s, [])])
-		print "direct_supers : ", str(len(ontoInspector.get_classDirectSupers(s))), " = ", 		 	str([ontoInspector.uri2niceString(x) for x in  ontoInspector.get_classDirectSupers(s)])
-		print "all_supers : ", str(len(ontoInspector.get_classAllSupers(s, []))), " = ", 		 	str([ontoInspector.uri2niceString(x) for x in  ontoInspector.get_classAllSupers(s, [])])
-		print "Domain of : ", str(len(ontoInspector.get_classProperties(s, class_role = "domain"))), " = ", 		 	str([ontoInspector.uri2niceString(x) for x in  ontoInspector.get_classProperties(s, class_role = "domain")])
-		print "Range of : ", str(len(ontoInspector.get_classProperties(s, class_role = "range"))), " = ", 		 	str([ontoInspector.uri2niceString(x) for x in  ontoInspector.get_classProperties(s, class_role = "range")])
-		print "_" * 10, "\n"
-
-	print "_" * 50, "\n\n", "_" * 50, "\n\n"
-	print "Object Properties found: ", str(len(ontoInspector.allobjproperties)), " \n", str([ontoInspector.uri2niceString(x).upper() for x in ontoInspector.allobjproperties])
-	print "\n\n"
-	for s in ontoInspector.allobjproperties: 
-		print "ObjProperty : " , ontoInspector.uri2niceString(s).upper()
-		print "Domain : ", str(len(ontoInspector.get_propertyDomain(s))), " = ", 		 	str([ontoInspector.uri2niceString(x) for x in  ontoInspector.get_propertyDomain(s)])
-		print "Range : ", str(len(ontoInspector.get_propertyRange(s))), " = ", 		 	str([ontoInspector.uri2niceString(x) for x in  ontoInspector.get_propertyRange(s)])
-		print "_" * 10, "\n"
-	
-	
-	print "_" * 50, "\n\n",
-	print "Datatype Properties found: ", str(len(ontoInspector.alldataproperties)), " \n", str([ontoInspector.uri2niceString(x).upper() for x in ontoInspector.alldataproperties])
-	print "\n\n"
-	for s in ontoInspector.alldataproperties: 
-		print "ObjProperty : " , ontoInspector.uri2niceString(s).upper()
-		print "Domain : ", str(len(ontoInspector.get_propertyDomain(s))), " = ", 		 	str([ontoInspector.uri2niceString(x) for x in  ontoInspector.get_propertyDomain(s)])
-		print "Range : ", str(len(ontoInspector.get_propertyRange(s))), " = ", 		 	str([ontoInspector.uri2niceString(x) for x in  ontoInspector.get_propertyRange(s)])
-		print "_" * 10, "\n"
-	
-	if False:
-		draw_ontograph(rdfGraph, '/Users/mac/Desktop/graph.png')
-
-
-
-
-
-
-
-
-
-
-if __name__ == '__main__':
-	main(sys.argv[1:])
+2013-04-08
+-----------------------------------------
+
+This project has moved to GitHub: https://github.com/lambdamusic/ontosPy

File test/cidoc_crm_v5.0.2_english_label.rdfs

-<?xml version="1.0"?>
-<!--
-CIDOC CRM v5.0.2  Encoded in RDFS
-
-RDFS created by FORTH-ICS  Wednesday August 11, 2010
-
-Encoding Rules:
-1. The RDF spelling rules do not allow blanks. Hence we have replaced them by underscores.
-   The blank between the concept identifier and concept name is replaced by dot.
-   For instance "E63.Beginning_of_Existence" or "P2B.is_type_of".
-
-2. RDF does not allow to instantiate properties beginning from a range value.
-   Therefore, each CRM property is represented as two RDFS properties.
-   For instance "P2 has type (is type of)" is represented as:
-   "P2F.has_type" for the domain to range direction and "P2B.is_type_of" for the range to domain direction.
-
-3. The primitive values "E60 Number", "E61 Time Primitive" and "E62 String" referred in
-   the Model for formal completeness are interpreted as rdf: literal.
-
-4. RDF does not support properties of properties, therefore, users may create their own
-   subProperties for CRM properties that have a type property such as "P3 has note":
-   Instead of P3 has note (P3.1 has type : parts description) declare
-   <rdf:Property rdf:ID="P3F.parts_description">
-      <rdfs:domain rdf:resource="#E1.CRM_Entity"/>
-      <rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
-      <rdfs:subPropertyOf rdf:resource="#P3F.has_note"/>
-   </rdf:Property>
--->
-<rdf:RDF xml:lang="en" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#">
-
-<rdfs:Class rdf:ID="E1.CRM_Entity">
-	<rdfs:comment>This class comprises all things in the universe of discourse of the CIDOC Conceptual Reference Model. 
-It is an abstract concept providing for three general properties:
-1.	Identification by name or appellation, and in particular by a preferred identifier
-2.	Classification by type, allowing further refinement of the specific subclass an instance belongs to 
-3.	Attachment of free text for the expression of anything not captured by formal properties
-With the exception of E59 Primitive Value, all other classes within the CRM are directly or indirectly specialisations of E1 CRM Entity. 
-</rdfs:comment>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E2.Temporal_Entity">
-	<rdfs:comment>This class comprises all phenomena, such as the instances of E4 Periods, E5 Events and states, which happen over a limited extent in time. 
-	In some contexts, these are also called perdurants. This class is disjoint from E77 Persistent Item. This is an abstract class and has no direct instances. E2 Temporal Entity is specialized into E4 Period, which applies to a particular geographic area (defined with a greater or lesser degree of precision), and E3 Condition State, which applies to instances of E18 Physical Thing.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E1.CRM_Entity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E3.Condition_State">
-	<rdfs:comment>This class comprises the states of objects characterised by a certain condition over a time-span. 
-An instance of this class describes the prevailing physical condition of any material object or feature during a specific E52 Time Span. In general, the time-span for which a certain condition can be asserted may be shorter than the real time-span, for which this condition held.
- The nature of that condition can be described using P2 has type. For example, the E3 Condition State “condition of the SS Great Britain between 22 September 1846 and 27 August 1847” can be characterized as E55 Type “wrecked”. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E2.Temporal_Entity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E4.Period">
-	<rdfs:comment>	This class comprises sets of coherent phenomena or cultural manifestations bounded in time and space. 
-It is the social or physical coherence of these phenomena that identify an E4 Period and not the associated spatio-temporal bounds. These bounds are a mere approximation of the actual process of growth, spread and retreat. Consequently, different periods can overlap and coexist in time and space, such as when a nomadic culture exists in the same area as a sedentary culture. 
-Typically this class is used to describe prehistoric or historic periods such as the “Neolithic Period”, the “Ming Dynasty” or the “McCarthy Era”. There are however no assumptions about the scale of the associated phenomena. In particular all events are seen as synthetic processes consisting of coherent phenomena. Therefore E4 Period is a superclass of E5 Event. For example, a modern clinical E67 Birth can be seen as both an atomic E5 Event and as an E4 Period that consists of multiple activities performed by multiple instances of E39 Actor. 
-There are two different conceptualisations of ‘artistic style’, defined either by physical features or by historical context. For example, “Impressionism” can be viewed as a period lasting from approximately 1870 to 1905 during which paintings with particular characteristics were produced by a group of artists that included (among others) Monet, Renoir, Pissarro, Sisley and Degas. Alternatively, it can be regarded as a style applicable to all paintings sharing the characteristics of the works produced by the Impressionist painters, regardless of historical context. The first interpretation is an E4 Period, and the second defines morphological object types that fall under E55 Type.
-Another specific case of an E4 Period is the set of activities and phenomena associated with a settlement, such as the populated period of Nineveh.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E2.Temporal_Entity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E5.Event">
-	<rdfs:comment>This class comprises changes of states in cultural, social or physical systems, regardless of scale, brought about by a series or group of coherent physical, cultural, technological or legal phenomena. Such changes of state will affect instances of E77 Persistent Item or its subclasses.
-The distinction between an E5 Event and an E4 Period is partly a question of the scale of observation. Viewed at a coarse level of detail, an E5 Event is an ‘instantaneous’ change of state. At a fine level, the E5 Event can be analysed into its component phenomena within a space and time frame, and as such can be seen as an E4 Period. The reverse is not necessarily the case: not all instances of E4 Period give rise to a noteworthy change of state.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E4.Period"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E6.Destruction">
-	<rdfs:comment>This class comprises events that destroy one or more instances of E18 Physical Thing such that they lose their identity as the subjects of documentation.  
-Some destruction events are intentional, while others are independent of human activity. Intentional destruction may be documented by classifying the event as both an E6 Destruction and E7 Activity. 
-The decision to document an object as destroyed, transformed or modified is context sensitive: 
-1.  If the matter remaining from the destruction is not documented, the event is modelled solely as E6 Destruction. 
-2. An event should also be documented using E81 Transformation if it results in the destruction of one or more objects and the simultaneous production of others using parts or material from the original. In this case, the new items have separate identities. Matter is preserved, but identity is not.
-3. When the initial identity of the changed instance of E18 Physical Thing is preserved, the event should be documented as E11 Modification. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E64.End_of_Existence"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E7.Activity">
-	<rdfs:comment>This class comprises actions intentionally carried out by instances of E39 Actor that result in changes of state in the cultural, social, or physical systems documented. 
-This notion includes complex, composite and long-lasting actions such as the building of a settlement or a war, as well as simple, short-lived actions such as the opening of a door.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E5.Event"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E8.Acquisition">
-	<rdfs:comment>This class comprises transfers of legal ownership from one or more instances of E39 Actor to one or more other instances of E39 Actor. 
-The class also applies to the establishment or loss of ownership of instances of E18 Physical Thing. It does not, however, imply changes of any other kinds of right. The recording of the donor and/or recipient is optional. It is possible that in an instance of E8 Acquisition there is either no donor or no recipient. Depending on the circumstances, it may describe:
-1.	the beginning of ownership
-2.	the end of ownership
-3.	the transfer of ownership
-4.	the acquisition from an unknown source 
-5.	the loss of title due to destruction of the item
-It may also describe events where a collector appropriates legal title, for example by annexation or field collection. The interpretation of the museum notion of "accession" differs between institutions. The CRM therefore models legal ownership (E8 Acquisition) and physical custody (E10 Transfer of Custody) separately. Institutions will then model their specific notions of accession and deaccession as combinations of these.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E7.Activity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E9.Move">
-	<rdfs:comment>This class comprises changes of the physical location of the instances of E19 Physical Object. 
-Note, that the class E9 Move inherits the property P7 took place at (witnessed): E53 Place. This property should be used to describe the trajectory or a larger area within which a move takes place, whereas the properties P26 moved to (was destination of), P27 moved from (was origin of) describe the start and end points only. Moves may also be documented to consist of other moves (via P9 consists of (forms part of)), in order to describe intermediate stages on a trajectory. In that case, start and end points of the partial moves should match appropriately between each other and with the overall event.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E7.Activity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E10.Transfer_of_Custody">
-	<rdfs:comment>This class comprises transfers of physical custody of objects between instances of E39 Actor. 
-The recording of the donor and/or recipient is optional. It is possible that in an instance of E10 Transfer of Custody there is either no donor or no recipient. Depending on the circumstances it may describe:
-1.	the beginning of custody 
-2.	the end of custody 
-3.	the transfer of custody 
-4.	the receipt of custody from an unknown source
-5.	the declared loss of an object
-The distinction between the legal responsibility for custody and the actual physical possession of the object should be expressed using the property P2 has type (is type of). A specific case of transfer of custody is theft.
-The interpretation of the museum notion of "accession" differs between institutions. The CRM therefore models legal ownership and physical custody separately. Institutions will then model their specific notions of accession and deaccession as combinations of these.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E7.Activity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E11.Modification">
-	<rdfs:comment>This class comprises all instances of E7 Activity that create, alter or change E24 Physical Man-Made Thing. 
-
-This class includes the production of an item from raw materials, and other so far undocumented objects, and the preventive treatment or restoration of an object for conservation. 
-
-Since the distinction between modification and production is not always clear, modification is regarded as the more generally applicable concept. This implies that some items may be consumed or destroyed in a Modification, and that others may be produced as a result of it. An event should also be documented using E81 Transformation if it results in the destruction of one or more objects and the simultaneous production of others using parts or material from the originals. In this case, the new items have separate identities. 
-If the instance of the E29 Design or Procedure utilised for the modification prescribes the use of specific materials, they should be documented using properties of the design or procedure, rather than via P126 employed (was employed in): E57 Material.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E7.Activity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E12.Production">
-	<rdfs:comment>This class comprises activities that are designed to, and succeed in, creating one or more new items. 
-It specializes the notion of modification into production. The decision as to whether or not an object is regarded as new is context sensitive. Normally, items are considered “new” if there is no obvious overall similarity between them and the consumed items and material used in their production. In other cases, an item is considered “new” because it becomes relevant to documentation by a modification. For example, the scribbling of a name on a potsherd may make it a voting token. The original potsherd may not be worth documenting, in contrast to the inscribed one. 
-
-This entity can be collective: the printing of a thousand books, for example, would normally be considered a single event. 
-
-An event should also be documented using E81 Transformation if it results in the destruction of one or more objects and the simultaneous production of others using parts or material from the originals. In this case, the new items have separate identities and matter is preserved, but identity is not.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E11.Modification"/>
-	<rdfs:subClassOf rdf:resource="#E63.Beginning_of_Existence"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E13.Attribute_Assignment">
-	<rdfs:comment>This class comprises the actions of making assertions about properties of an object or any relation between two items or concepts. 
-This class allows the documentation of how the respective assignment came about, and whose opinion it was. All the attributes or properties assigned in such an action can also be seen as directly attached to the respective item or concept, possibly as a collection of contradictory values. All cases of properties in this model that are also described indirectly through an action are characterised as "short cuts" of this action. This redundant modelling of two alternative views is preferred because many implementations may have good reasons to model either the action or the short cut, and the relation between both alternatives can be captured by simple rules. 
-In particular, the class describes the actions of people making propositions and statements during certain museum procedures, e.g. the person and date when a condition statement was made, an identifier was assigned, the museum object was measured, etc. Which kinds of such assignments and statements need to be documented explicitly in structures of a schema rather than free text, depends on if this information should be accessible by structured queries. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E7.Activity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E14.Condition_Assessment">
-	<rdfs:comment>This class describes the act of assessing the state of preservation of an object during a particular period. 
-The condition assessment may be carried out by inspection, measurement or through historical research. This class is used to document circumstances of the respective assessment that may be relevant to interpret its quality at a later stage, or to continue research on related documents. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E13.Attribute_Assignment"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E15.Identifier_Assignment">
-	<rdfs:comment>This class comprises activities that result in the allocation of an identifier to an instance of E1 CRM Entity. An E15 Identifier Assignment may include the creation of the identifier from multiple constituents, which themselves may be instances of E41 Appellation. The syntax and kinds of constituents to be used may be declared in a rule constituting an instance of E29 Design or Procedure.
-Examples of such identifiers include Find Numbers, Inventory Numbers, uniform titles in the sense of librarianship and Digital Object Identifiers (DOI). Documenting the act of identifier assignment and deassignment is especially useful when objects change custody or the identification system of an organization is changed. In order to keep track of the identity of things in such cases, it is important to document by whom, when and for what purpose an identifier is assigned to an item.
-The fact that an identifier is a preferred one for an organisation can be expressed by using the property E1 CRM Entity. P48 has preferred identifier (is preferred identifier of): E42 Identifier. It can better be expressed in a context independent form by assigning a suitable E55 Type, such as “preferred identifier assignment”, to the respective instance of E15 Identifier Assignment via the P2 has type property.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E13.Attribute_Assignment"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E16.Measurement">
-	<rdfs:comment>This class comprises actions measuring physical properties and other values that can be determined by a systematic procedure. 
-Examples include measuring the monetary value of a collection of coins or the running time of a specific video cassette. 
-The E16 Measurement may use simple counting or tools, such as yardsticks or radiation detection devices. The interest is in the method and care applied, so that the reliability of the result may be judged at a later stage, or research continued on the associated documents. The date of the event is important for dimensions, which may change value over time, such as the length of an object subject to shrinkage. Details of methods and devices are best handled as free text, whereas basic techniques such as "carbon 14 dating" should be encoded using P2 has type (is type of:) E55 Type.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E13.Attribute_Assignment"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E17.Type_Assignment">
-	<rdfs:comment>This class comprises the actions of classifying items of whatever kind. Such items include objects, specimens, people, actions and concepts. 
-This class allows for the documentation of the context of classification acts in cases where the value of the classification depends on the personal opinion of the classifier, and the date that the classification was made. This class also encompasses the notion of "determination," i.e. the systematic and molecular identification of a specimen in biology. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E13.Attribute_Assignment"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E18.Physical_Thing">
-	<rdfs:comment>This class comprises all persistent physical items with a relatively stable form, man-made or natural. 
-Depending on the existence of natural boundaries of such things, the CRM distinguishes the instances of E19 Physical Object from instances of E26 Physical Feature, such as holes, rivers, pieces of land etc. Most instances of E19 Physical Object can be moved (if not too heavy), whereas features are integral to the surrounding matter. 
-The CRM is generally not concerned with amounts of matter in fluid or gaseous states. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E72.Legal_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E19.Physical_Object">
-	<rdfs:comment>This class comprises items of a material nature that are units for documentation and have physical boundaries that separate them completely in an objective way from other objects. 
-The class also includes all aggregates of objects made for functional purposes of whatever kind, independent of physical coherence, such as a set of chessmen. Typically, instances of E19 Physical Object can be moved (if not too heavy).
-In some contexts, such objects, except for aggregates, are also called “bona fide objects” (Smith &amp; Varzi, 2000, pp.401-420), i.e. naturally defined objects. 
-The decision as to what is documented as a complete item, rather than by its parts or components, may be a purely administrative decision or may be a result of the order in which the item was acquired.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E18.Physical_Thing"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E20.Biological_Object">
-	<rdfs:comment>This class comprises individual items of a material nature, which live, have lived or are natural products of or from living organisms. 
-Artificial objects that incorporate biological elements, such as Victorian butterfly frames, can be documented as both instances of E20 Biological Object and E22 Man-Made Object. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E19.Physical_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E21.Person">
-	<rdfs:comment>This class comprises real persons who live or are assumed to have lived. 
-Legendary figures that may have existed, such as Ulysses and King Arthur, fall into this class if the documentation refers to them as historical figures. In cases where doubt exists as to whether several persons are in fact identical, multiple instances can be created and linked to indicate their relationship. The CRM does not propose a specific form to support reasoning about possible identity.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E20.Biological_Object"/>
-	<rdfs:subClassOf rdf:resource="#E39.Actor"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E22.Man-Made_Object">
-	<rdfs:comment>This class comprises physical objects purposely created by human activity.
-No assumptions are made as to the extent of modification required to justify regarding an object as man-made. For example, an inscribed piece of rock or a preserved butterfly are both regarded as instances of E22 Man-Made Object.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E19.Physical_Object"/>
-	<rdfs:subClassOf rdf:resource="#E24.Physical_Man-Made_Thing"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E24.Physical_Man-Made_Thing">
-	<rdfs:comment>This class comprises all persistent physical items that are purposely created by human activity.
-This class comprises man-made objects, such as a swords, and man-made features, such as rock art. No assumptions are made as to the extent of modification required to justify regarding an object as man-made. For example, a “cup and ring” carving on bedrock is regarded as instance of E24 Physical Man-Made Thing. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E18.Physical_Thing"/>
-	<rdfs:subClassOf rdf:resource="#E71.Man-Made_Thing"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E25.Man-Made_Feature">
-	<rdfs:comment>This class comprises physical features that are purposely created by human activity, such as scratches, artificial caves, artificial water channels, etc. 
-No assumptions are made as to the extent of modification required to justify regarding a feature as man-made. For example, rock art or even “cup and ring” carvings on bedrock a regarded as types of E25 Man-Made Feature.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E24.Physical_Man-Made_Thing"/>
-	<rdfs:subClassOf rdf:resource="#E26.Physical_Feature"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E26.Physical_Feature">
-	<rdfs:comment>This class comprises identifiable features that are physically attached in an integral way to particular physical objects. 
-Instances of E26 Physical Feature share many of the attributes of instances of E19 Physical Object. They may have a one-, two- or three-dimensional geometric extent, but there are no natural borders that separate them completely in an objective way from the carrier objects. For example, a doorway is a feature but the door itself, being attached by hinges, is not. 
-Instances of E26 Physical Feature can be features in a narrower sense, such as scratches, holes, reliefs, surface colours, reflection zones in an opal crystal or a density change in a piece of wood. In the wider sense, they are portions of particular objects with partially imaginary borders, such as the core of the Earth, an area of property on the surface of the Earth, a landscape or the head of a contiguous marble statue. They can be measured and dated, and it is sometimes possible to state who or what is or was responsible for them. They cannot be separated from the carrier object, but a segment of the carrier object may be identified (or sometimes removed) carrying the complete feature. 
-This definition coincides with the definition of "fiat objects" (Smith &amp; Varzi, 2000, pp.401-420), with the exception of aggregates of “bona fide objects”. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E18.Physical_Thing"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E27.Site">
-	<rdfs:comment>This class comprises pieces of land or sea floor. 
-In contrast to the purely geometric notion of E53 Place, this class describes constellations of matter on the surface of the Earth or other celestial body, which can be represented by photographs, paintings and maps.
- Instances of E27 Site are composed of relatively immobile material items and features in a particular configuration at a particular location</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E26.Physical_Feature"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E28.Conceptual_Object">
-	<rdfs:comment>This class comprises non-material products of our minds and other human produced data that 		have become objects of a discourse about their identity, circumstances of creation or historical 		implication. The production of such information may have been supported by the use of    		technical devices such as cameras or computers.
-Characteristically, instances of this class are created, invented or thought by someone, and then may be documented or communicated between persons. Instances of E28 Conceptual Object have the ability to exist on more than one particular carrier at the same time, such as paper, electronic signals, marks, audio media, paintings, photos, human memories, etc.
-They cannot be destroyed. They exist as long as they can be found on at least one carrier or in at least one human memory. Their existence ends when the last carrier and the last memory are lost. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E71.Man-Made_Thing"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E29.Design_or_Procedure">
-	<rdfs:comment>This class comprises documented plans for the execution of actions in order to achieve a result of a specific quality, form or contents. In particular it comprises plans for deliberate human activities that may result in the modification or production of instances of E24 Physical Thing. 
-Instances of E29 Design or Procedure can be structured in parts and sequences or depend on others. This is modelled using P69 is associated with. 
-Designs or procedures can be seen as one of the following:
-
-1.	A schema for the activities it describes
-2.	A schema of the products that result from their application. 
-3.	An independent intellectual product that may have never been applied, such as Leonardo da Vinci’s famous plans for flying machines.
-Because designs or procedures may never be applied or only partially executed, the CRM models a loose relationship between the plan and the respective product.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E73.Information_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E30.Right">
-	<rdfs:comment>This class comprises legal privileges concerning material and immaterial things or their derivatives. 
-These include reproduction and property rights</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E89.Propositional_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E31.Document">
-	<rdfs:comment>This class comprises identifiable immaterial items that make propositions about reality.
-These propositions may be expressed in text, graphics, images, audiograms, videograms or by other similar means. Documentation databases are regarded as a special case of E31 Document. This class should not be confused with the term “document” in Information Technology, which is compatible with E73 Information Object.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E73.Information_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E32.Authority_Document">
-	<rdfs:comment>This class comprises encyclopaedia, thesauri, authority lists and other documents that define terminology or conceptual systems for consistent use.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E31.Document"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E33.Linguistic_Object">
-	<rdfs:comment>This class comprises identifiable expressions in natural language or languages. 
-Instances of E33 Linguistic Object can be expressed in many ways: e.g. as written texts, recorded speech or sign language. However, the CRM treats instances of E33 Linguistic Object independently from the medium or method by which they are expressed. Expressions in formal languages, such as computer code or mathematical formulae, are not treated as instances of E33 Linguistic Object by the CRM. These should be modelled as instances of E73 Information Object.
-The text of an instance of E33 Linguistic Object can be documented in a note by P3 has note: E62 String
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E73.Information_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E34.Inscription">
-	<rdfs:comment>This class comprises recognisable, short texts attached to instances of E24 Physical Man-Made Thing. 
-The transcription of the text can be documented in a note by P3 has note: E62 String. The alphabet used can be documented by P2 has type: E55 Type. This class does not intend to describe the idiosyncratic characteristics of an individual physical embodiment of an inscription, but the underlying prototype. The physical embodiment is modelled in the CRM as E24 Physical Man-Made Thing.
-The relationship of a physical copy of a book to the text it contains is modelled using E84 Information Carrier. P128 carries (is carried by): E33 Linguistic Object. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E33.Linguistic_Object"/>
-	<rdfs:subClassOf rdf:resource="#E37.Mark"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E35.Title">
-	<rdfs:comment>This class comprises the names assigned to works, such as texts, artworks or pieces of music. 
-Titles are proper noun phrases or verbal phrases, and should not be confused with generic object names such as “chair”, “painting” or “book” (the latter are common nouns that stand for instances of E55 Type). Titles may be assigned by the creator of the work itself, or by a social group. 
-This class also comprises the translations of titles that are used as surrogates for the original titles in different social contexts.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E33.Linguistic_Object"/>
-	<rdfs:subClassOf rdf:resource="#E41.Appellation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E36.Visual_Item">
-	<rdfs:comment>This class comprises the intellectual or conceptual aspects of recognisable marks and images.
-This class does not intend to describe the idiosyncratic characteristics of an individual physical embodiment of a visual item, but the underlying prototype. For example, a mark such as the ICOM logo is generally considered to be the same logo when used on any number of publications. The size, orientation and colour may change, but the logo remains uniquely identifiable. The same is true of images that are reproduced many times. This means that visual items are independent of their physical support. 
-The class E36 Visual Item provides a means of identifying and linking together instances of E24 Physical Man-Made Thing that carry the same visual symbols, marks or images etc. The property P62 depicts (is depicted by) between E24 Physical Man-Made Thing and depicted subjects (E1 CRM Entity) can be regarded as a short-cut of the more fully developed path from E24 Physical Man-Made Thing through P65 shows visual item (is shown by), E36 Visual Item, P138 represents (has representation) to E1CRM Entity, which in addition captures the optical features of the depiction.  
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E73.Information_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E37.Mark">
-	<rdfs:comment>This class comprises symbols, signs, signatures or short texts applied to instances of E24 Physical Man-Made Thing by arbitrary techniques in order to indicate the creator, owner, dedications, purpose, etc. 
-
-This class specifically excludes features that have no semantic significance, such as scratches or tool marks. These should be documented as instances of E25 Man-Made Feature. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E36.Visual_Item"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E38.Image">
-	<rdfs:comment>This class comprises distributions of form, tone and colour that may be found on surfaces such as photos, paintings, prints and sculptures or directly on electronic media. 
-The degree to which variations in the distribution of form and colour affect the identity of an instance of E38 Image depends on a given purpose. The original painting of the Mona Lisa in the Louvre may be said to bear the same instance of E38 Image as reproductions in the form of transparencies, postcards, posters or T-shirts, even though they may differ in size and carrier and may vary in tone and colour. The images in a “spot the difference” competition are not the same with respect to their context, however similar they may at first appear.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E36.Visual_Item"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E39.Actor">
-	<rdfs:comment>This class comprises people, either individually or in groups, who have the potential to perform intentional actions for which they can be held responsible. 
-The CRM does not attempt to model the inadvertent actions of such actors. Individual people should be documented as instances of E21 Person, whereas groups should be documented as instances of either E74 Group or its subclass E40 Legal Body.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E77.Persistent_Item"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E40.Legal_Body">
-	<rdfs:comment>This class comprises institutions or groups of people that have obtained a legal recognition as a group and can act collectively as agents.  
-This means that they can perform actions, own property, create or destroy things and can be held collectively responsible for their actions like individual people. The term 'personne morale' is often used for this in French. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E74.Group"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E41.Appellation">
-	<rdfs:comment>This class comprises all sequences of signs of any nature, either meaningful or not, that are used or can be used to refer to and identify a specific instance of some class within a certain context.
-Instances of E41 Appellation do not identify things by their meaning, even if they happen to have one, but by convention, tradition, or agreement. Instances of E41 Appellation are cultural constructs; as such, they have a context, a history, and a use in time and space by some group of users. A given instance of E41 Appellation can have alternative forms, i.e., other instances of E41 Appellation that are always regarded as equivalent independent from the thing it denotes. 
-Specific subclasses of E41 Appellation should be used when instances of E41 Appellation of a characteristic form are used for particular objects. Instances of E49 Time Appellation, for example, which take the form of instances of E50 Date, can be easily recognised.
-E41 Appellation should not be confused with the act of naming something. Cf. E15 Identifier Assignment
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E90.Symbolic_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E42.Identifier">
-	<rdfs:comment>This class comprises strings or codes assigned to instances of E1 CRM Entity in order to identify them uniquely and permanently within the context of one or more organisations. Such codes are often known as inventory numbers, registration codes, etc. and are typically composed of alphanumeric sequences. The class E42 Identifier is not normally used for machine-generated identifiers used for automated processing unless these are also used by human agents.</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E41.Appellation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E44.Place_Appellation">
-	<rdfs:comment>This class comprises any sort of identifier characteristically used to refer to an E53 Place. 
-Instances of E44 Place Appellation may vary in their degree of precision and their meaning may vary over time - the same instance of E44 Place Appellation may be used to refer to several places, either because of cultural shifts, or because objects used as reference points have moved around. Instances of E44 Place Appellation can be extremely varied in form: postal addresses, instances of E47 Spatial Coordinate, and parts of buildings can all be considered as instances of E44 Place Appellation.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E41.Appellation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E45.Address">
-	<rdfs:comment>This class comprises identifiers expressed in coding systems for places, such as postal addresses used for mailing.
-An E45 Address can be considered both as the name of an E53 Place and as an E51 Contact Point for an E39 Actor. This dual aspect is reflected in the multiple inheritance. However, some forms of mailing addresses, such as a postal box, are only instances of E51 Contact Point, since they do not identify any particular Place. These should not be documented as instances of E45 Address.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E44.Place_Appellation"/>
-	<rdfs:subClassOf rdf:resource="#E51.Contact_Point"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E46.Section_Definition">
-	<rdfs:comment>This class comprises areas of objects referred to in terms specific to the general geometry or structure of its kind. 
-The 'prow' of the boat, the 'frame' of the picture, the 'front' of the building are all instances of E46 Section Definition. The class highlights the fact that parts of objects can be treated as locations. This holds in particular for features without natural boundaries, such as the “head” of a marble statue made out of one block (cf. E53 Place). In answer to the question 'where is the signature?' one might reply 'on the lower left corner'. (Section Definition is closely related to the term “segment” in Gerstl, P.&amp; Pribbenow, S, 1996 “ A conceptual theory of part – whole relations and its applications”, Data &amp; Knowledge 	Engineering 20 305-322, North Holland- Elsevier ).
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E44.Place_Appellation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E47.Spatial_Coordinates">
-	<rdfs:comment>This class comprises the textual or numeric information required to locate specific instances of E53 Place within schemes of spatial identification. 
-
-Coordinates are a specific form of E44 Place Appellation, that is, a means of referring to a particular E53 Place. Coordinates are not restricted to longitude, latitude and altitude. Any regular system of reference that maps onto an E19 Physical Object can be used to generate coordinates.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E44.Place_Appellation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E48.Place_Name">
-	<rdfs:comment>This class comprises particular and common forms of E44 Place Appellation. 
-Place Names may change their application over time: the name of an E53 Place may change, and a name may be reused for a different E53 Place. Instances of E48 Place Name are typically subject to place name gazetteers.</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E44.Place_Appellation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E49.Time_Appellation">
-	<rdfs:comment>This class comprises all forms of names or codes, such as historical periods, and dates, which are characteristically used to refer to a specific E52 Time-Span. 
-The instances of E49 Time Appellation may vary in their degree of precision, and they may be relative to other time frames, “Before Christ” for example. Instances of E52 Time-Span are often defined by reference to a cultural period or an event e.g. ‘the duration of the Ming Dynasty’.</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E41.Appellation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E50.Date">
-	<rdfs:comment>This class comprises specific forms of E49 Time Appellation.</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E49.Time_Appellation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E51.Contact_Point">
-	<rdfs:comment>This class comprises identifiers employed, or understood, by communication services to direct communications to an instance of E39 Actor.  These include E-mail addresses, telephone numbers, post office boxes,  Fax numbers, etc. Most postal addresses can be considered both as  instances of E44 Place Appellation and E51 Contact Point.  In such cases the subclass E45 Address should be used</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E41.Appellation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E52.Time-Span">
-	<rdfs:comment>This class comprises abstract temporal extents, in the sense of Galilean physics, having a beginning, an end and a duration. 
-Time Span has no other semantic connotations. Time-Spans are used to define the temporal extent of instances of E4 Period, E5 Event and any other phenomena valid for a certain time. An E52 Time-Span may be identified by one or more instances of E49 Time Appellation. 
-Since our knowledge of history is imperfect, instances of E52 Time-Span can best be considered as approximations of the actual Time-Spans of temporal entities. The properties of E52 Time-Span are intended to allow these approximations to be expressed precisely.  An extreme case of approximation, might, for example, define an E52 Time-Span having unknown beginning, end and duration. Used as a common E52 Time-Span for two events, it would nevertheless define them as being simultaneous, even if nothing else was known. 
-	Automatic processing and querying of instances of E52 Time-Span is facilitated if data can be parsed into an E61 Time Primitive.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E1.CRM_Entity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E53.Place">
-	<rdfs:comment>This class comprises extents in space, in particular on the surface of the earth, in the pure sense of physics: independent from temporal phenomena and matter. 
-The instances of E53 Place are usually determined by reference to the position of “immobile” objects such as buildings, cities, mountains, rivers, or dedicated geodetic marks. A Place can be determined by combining a frame of reference and a location with respect to this frame. It may be identified by one or more instances of E44 Place Appellation.
- It is sometimes argued that instances of E53 Place are best identified by global coordinates or absolute reference systems. However, relative references are often more relevant in the context of cultural documentation and tend to be more precise. In particular, we are often interested in position in relation to large, mobile objects, such as ships. For example, the Place at which Nelson died is known with reference to a large mobile object – H.M.S Victory. A resolution of this Place in terms of absolute coordinates would require knowledge of the movements of the vessel and the precise time of death, either of which may be revised, and the result would lack historical and cultural relevance.
-Any object can serve as a frame of reference for E53 Place determination. The model foresees the notion of a "section" of an E19 Physical Object as a valid E53 Place determination.</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E1.CRM_Entity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E54.Dimension">
-	<rdfs:comment>This class comprises quantifiable properties that can be measured by some calibrated means and can be approximated by values, i.e. points or regions in a mathematical or conceptual space, such as natural or real numbers, RGB values etc.
-An instance of E54 Dimension represents the true quantity, independent from its numerical approximation, e.g. in inches or in cm. The properties of the class E54 Dimension allow for expressing the numerical approximation of the values of an instance of E54 Dimension. If the true values belong to a non-discrete space, such as spatial distances, it is recommended to record them as approximations by intervals or regions of indeterminacy enclosing the assumed true values. For instance, a length of 5 cm may be recorded as 4.5-5.5 cm, according to the precision of the respective observation. Note, that interoperability of values described in different units depends critically on the representation as value regions.
-Numerical approximations in archaic instances of E58 Measurement Unit used in historical records should be preserved. Equivalents corresponding to current knowledge should be recorded as additional instances of E54 Dimension as appropriate.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E1.CRM_Entity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E55.Type">
-	<rdfs:comment>This class comprises concepts denoted by terms from thesauri and controlled vocabularies used to characterize and classify instances of CRM classes. Instances of E55 Type represent concepts  in contrast to instances of E41 Appellation which are used to name instances of CRM classes. 
-E55 Type is the CRM’s interface to domain specific ontologies and thesauri. These can be represented in the CRM as subclasses of E55 Type, forming hierarchies of terms, i.e. instances of E55 Type linked via P127 has broader  term (has narrower term). Such hierarchies may be extended with additional properties. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E28.Conceptual_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E56.Language">
-	<rdfs:comment>This class is a specialization of E55 Type and comprises the natural languages in the sense of concepts. 
-This type is used categorically in the model without reference to instances of it, i.e. the Model does not foresee the description of instances of instances of E56 Language, e.g.: “instances of  Mandarin Chinese”.
-It is recommended that internationally or nationally agreed codes and terminology are used to denote instances of E56 Language, such as those defined in ISO 639:1988. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E55.Type"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E57.Material">
-	<rdfs:comment>This class is a specialization of E55 Type and comprises the concepts of materials. 
-Instances of E57 Material may denote properties of matter before its use, during its use, and as incorporated in an object, such as ultramarine powder, tempera paste, reinforced concrete. Discrete pieces of raw-materials kept in museums, such as bricks, sheets of fabric, pieces of metal, should be modelled individually in the same way as other objects. Discrete used or processed pieces, such as the stones from Nefer Titi's temple, should be modelled as parts (cf. P46 is composed of).
-This type is used categorically in the model without reference to instances of it, i.e. the Model does not foresee the description of instances of instances of E57 Material, e.g.: “instances of  gold”.
-It is recommended that internationally or nationally agreed codes and terminology are used.</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E55.Type"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E58.Measurement_Unit">
-	<rdfs:comment>This class is a specialization of E55 Type and comprises the types of measurement units: feet, inches, centimetres, litres, lumens, etc. 
-This type is used categorically in the model without reference to instances of it, i.e. the Model does not foresee the description of instances of instances of E58 Measurement Unit, e.g.: “instances of cm”.
-Syst?me International (SI) units or internationally recognized non-SI terms should be used whenever possible. (ISO 1000:1992). Archaic Measurement Units used in historical records should be preserved.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E55.Type"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E63.Beginning_of_Existence">
-	<rdfs:comment>This class comprises events that bring into existence any E77 Persistent Item. 
-It may be used for temporal reasoning about things (intellectual products, physical items, groups of people, living beings) beginning to exist; it serves as a hook for determination of a terminus post quem and ante quem. </rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E5.Event"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E64.End_of_Existence">
-	<rdfs:comment>This class comprises events that end the existence of any E77 Persistent Item. 
-It may be used for temporal reasoning about things (physical items, groups of people, living beings) ceasing to exist; it serves as a hook for determination of a terminus postquem and antequem. In cases where substance from a Persistent Item continues to exist in a new form, the process would be documented by E81 Transformation.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E5.Event"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E65.Creation">
-	<rdfs:comment>This class comprises events that result in the creation of conceptual items or immaterial products, such as legends, poems, texts, music, images, movies, laws, types etc.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E7.Activity"/>
-	<rdfs:subClassOf rdf:resource="#E63.Beginning_of_Existence"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E66.Formation">
-	<rdfs:comment>This class comprises events that result in the formation of a formal or informal E74 Group of people, such as a club, society, association, corporation or nation. 
-E66 Formation does not include the arbitrary aggregation of people who do not act as a collective.
-The formation of an instance of E74 Group does not mean that the group is populated with members at the time of formation. In order to express the joining of members at the time of formation, the respective activity should be simultaneously an instance of both E66 Formation and E85 Joining. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E7.Activity"/>
-	<rdfs:subClassOf rdf:resource="#E63.Beginning_of_Existence"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E67.Birth">
-	<rdfs:comment>This class comprises the births of human beings. E67 Birth is a biological event focussing on the context of people coming into life. (E63 Beginning of Existence comprises the coming into life of any living beings). 
-Twins, triplets etc. are brought into life by the same E67 Birth event. The introduction of the E67 Birth event as a documentation element allows the description of a range of family relationships in a simple model. Suitable extensions may describe more details and the complexity of motherhood with the intervention of modern medicine. In this model, the biological father is not seen as a necessary participant in the E67 Birth event.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E63.Beginning_of_Existence"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E68.Dissolution">
-	<rdfs:comment>This class comprises the events that result in the formal or informal termination of an E74 Group of people. 
-If the dissolution was deliberate, the Dissolution event should also be instantiated as an E7 Activity.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E64.End_of_Existence"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E69.Death">
-	<rdfs:comment>This class comprises the deaths of human beings. 
-If a person is killed, their death should be instantiated as E69 Death and as E7 Activity. The death or perishing of other living beings should be documented using E64 End of Existence.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E64.End_of_Existence"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E70.Thing">
-	<rdfs:comment>This general class comprises usable discrete, identifiable, instances of E77 Persistent Item that are documented as single units. 
-They can be either intellectual products or physical things, and are characterized by relative stability. They may for instance either have a solid physical form, an electronic encoding, or they may be logical concept or structure. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E77.Persistent_Item"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E71.Man-Made_Thing">
-	<rdfs:comment>This class comprises discrete, identifiable man-made items that are documented as single units. 
-These items are either intellectual products or man-made physical things, and are characterized by relative stability. They may for instance have a solid physical form, an electronic encoding, or they may be logical concepts or structures.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E70.Thing"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E72.Legal_Object">
-	<rdfs:comment>This class comprises those material or immaterial items to which instances of E30 Right, such as the right of ownership or use, can be applied. 
-This is true for all E18 Physical Thing. In the case of instances of E28 Conceptual Object, however, the identity of the E28 Conceptual Object or the method of its use may be too ambiguous to reliably establish instances of E30 Right, as in the case of taxa and inspirations. Ownership of corporations is currently regarded as out of scope of the CRM. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E70.Thing"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E73.Information_Object">
-	<rdfs:comment>This class comprises identifiable immaterial items, such as a poems, jokes, data sets, images, texts, multimedia objects, procedural prescriptions, computer program code, algorithm or mathematical formulae, that have an objectively recognizable structure and are documented as single units. 
-An E73 Information Object does not depend on a specific physical carrier, which can include human memory, and it can exist on one or more carriers simultaneously.
-Instances of E73 Information Object of a linguistic nature should be declared as instances of the E33 Linguistic Object subclass. Instances of E73 Information Object of a documentary nature should be declared as instances of the E31 Document subclass. Conceptual items such as types and classes are not instances of E73 Information Object, nor are ideas without a reproducible expression. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E89.Propositional_Object"/>
-	<rdfs:subClassOf rdf:resource="#E90.Symbolic_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E74.Group">
-	<rdfs:comment>This class comprises any gatherings or organizations of two or more people that act collectively or in a similar way due to any form of unifying relationship. In the wider sense this class also comprises official positions which used to be regarded in certain contexts as one actor, independent of the current holder of the office, such as the president of a country. 
-A gathering of people becomes an E74 Group when it exhibits organizational characteristics usually typified by a set of ideas or beliefs held in common, or actions performed together. These might be communication, creating some common artifact, a common purpose such as study, worship, business, sports, etc. Nationality can be modeled as membership in an E74 Group (cf. HumanML markup). Married couples and other concepts of family are regarded as particular examples of E74 Group.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E39.Actor"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E75.Conceptual_Object_Appellation">
-	<rdfs:comment>This class comprises all appellations specific to intellectual products or standardized patterns.</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E41.Appellation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E77.Persistent_Item">
-	<rdfs:comment>This class comprises items that have a persistent identity, sometimes known as “endurants” in philosophy. 
-They can be repeatedly recognized within the duration of their existence by identity criteria rather than by continuity or observation. Persistent Items can be either physical entities, such as people, animals or things, or conceptual entities such as ideas, concepts, products of the imagination or common names.
-The criteria that determine the identity of an item are often difficult to establish -; the decision depends largely on the judgement of the observer. For example, a building is regarded as no longer existing if it is dismantled and the materials reused in a different configuration. On the other hand, human beings go through radical and profound changes during their life-span, affecting both material composition and form, yet preserve their identity by other criteria. Similarly, inanimate objects may be subject to exchange of parts and matter. The class E77 Persistent Item does not take any position about the nature of the applicable identity criteria and if actual knowledge about identity of an instance of this class exists. There may be cases, where the identity of an E77 Persistent Item is not decidable by a certain state of knowledge.
-The main classes of objects that fall outside the scope the E77 Persistent Item class are temporal objects such as periods, events and acts, and descriptive properties. </rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E1.CRM_Entity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E78.Collection">
-	<rdfs:comment>This class comprises aggregations of instances of E18 Physical Thing that are assembled and maintained (“curated” and “preserved,” in museological terminology) by one or more instances of E39 Actor over time for a specific purpose and audience, and according to a particular collection development plan.  
-
-Items may be added or removed from an E78 Collection in pursuit of this plan. This class should not be confused with the E39 Actor maintaining the E78 Collection often referred to with the name of the E78 Collection (e.g. “The Wallace Collection decided…”).
-Collective objects in the general sense, like a tomb full of gifts, a folder with stamps or a set of chessmen, should be documented as instances of E19 Physical Object, and not as instances of E78 Collection. This is because they form wholes either because they are physically bound together or because they are kept together for their functionality.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E24.Physical_Man-Made_Thing"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E79.Part_Addition">
-	<rdfs:comment>This class comprises activities that result in an instance of E24 Physical Man-Made Thing being increased, enlarged or augmented by the addition of a part. 
-Typical scenarios include the attachment of an accessory, the integration of a component, the addition of an element to an aggregate object, or the accessioning of an object into a curated E78 Collection. Objects to which parts are added are, by definition, man-made, since the addition of a part implies a human activity. Following the addition of parts, the resulting man-made assemblages are treated objectively as single identifiable wholes, made up of constituent or component parts bound together either physically (for example the engine becoming a part of the car), or by sharing a common purpose (such as the 32 chess pieces that make up a chess set). This class of activities forms a basis for reasoning about the history and continuity of identity of objects that are integrated into other objects over time, such as precious gemstones being repeatedly incorporated into different items of jewellery, or cultural artifacts being added to different museum instances of E78 Collection over their lifespan.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E11.Modification"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E80.Part_Removal">
-	<rdfs:comment>This class comprises the activities that result in an instance of E18 Physical Thing being decreased by the removal of a part.
-Typical scenarios include the detachment of an accessory, the removal of a component or part of a composite object, or the deaccessioning of an object from a curated E78 Collection. If the E80 Part Removal results in the total decomposition of the original object into pieces, such that the whole ceases to exist, the activity should instead be modelled as an E81 Transformation, i.e. a simultaneous destruction and production. In cases where the part removed has no discernible identity prior to its removal but does have an identity subsequent to its removal, the activity should be regarded as both E80 Part Removal and E12 Production. This class of activities forms a basis for reasoning about the history, and continuity of identity over time, of objects that are removed from other objects, such as precious gemstones being extracted from different items of jewelry, or cultural artifacts being deaccessioned from different museum collections over their lifespan.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E11.Modification"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E81.Transformation">
-	<rdfs:comment>This class comprises the events that result in the simultaneous destruction of one or more than one E77 Persistent Item and the creation of one or more than one E77 Persistent Item that preserves recognizable substance from the first one(s) but has fundamentally different nature and identity. 
-Although the old and the new instances of E77 Persistent Item are treated as discrete entities having separate, unique identities, they are causally connected through the E81 Transformation; the destruction of the old E77 Persistent Item(s) directly causes the creation of the new one(s) using or preserving some relevant substance. Instances of E81 Transformation are therefore distinct from re-classifications (documented using E17 Type Assignment) or modifications (documented using E11 Modification) of objects that do not fundamentally change their nature or identity. Characteristic cases are reconstructions and repurposing of historical buildings or ruins, fires leaving buildings in ruins, taxidermy of specimen in natural history and the reorganization of a corporate body into a new one.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E63.Beginning_of_Existence"/>
-	<rdfs:subClassOf rdf:resource="#E64.End_of_Existence"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E82.Actor_Appellation">
-	<rdfs:comment>This class comprises any sort of name, number, code or symbol characteristically used to identify an E39 Actor. 
-An E39 Actor will typically have more than one E82 Actor Appellation, and instances of E82 Actor Appellation in turn may have alternative representations. The distinction between corporate and personal names, which is particularly important in library applications, should be made by explicitly linking the E82 Actor Appellation to an instance of either E21 Person or E74 Group/E40 Legal Body. If this is not possible, the distinction can be made through the use of the P2 has type mechanism. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E41.Appellation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E83.Type_Creation">
-	<rdfs:comment>This class comprises activities formally defining new types of items. 
-It is typically a rigorous scholarly or scientific process that ensures a type is exhaustively described and appropriately named. In some cases, particularly in archaeology and the life sciences, E83 Type Creation requires the identification of an exemplary specimen and the publication of the type definition in an appropriate scholarly forum. The activity of E83 Type Creation is central to research in the life sciences, where a type would be referred to as a “taxon,” the type description as a “protologue,” and the exemplary specimens as “orgininal element” or “holotype”.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E65.Creation"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E84.Information_Carrier">
-	<rdfs:comment>This class comprises all instances of E22 Man-Made Object that are explicitly designed to act as persistent physical carriers for instances of E73 Information Object. 
-This allows a relationship to be asserted between an E19 Physical Object and its immaterial information contents. An E84 Information Carrier may or may not contain information, e.g., a diskette. Note that any E18 Physical Thing may carry information, such as an E34 Inscription. However, unless it was specifically designed for this purpose, it is not an Information Carrier. Therefore the property P128 carries (is carried by) applies to E18 Physical Thing in general.</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E22.Man-Made_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E85.Joining">
-	<rdfs:comment>This class comprises the activities that result in an instance of E39 Actor becoming a member of an instance of E74 Group. This class does not imply initiative by either party.
-Typical scenarios include becoming a member of a social organisation, becoming employee of a company, marriage, the adoption of a child by a family and the inauguration of somebody into an official position. 
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E7.Activity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E86.Leaving">
-	<rdfs:comment>This class comprises the activities that result in an instance of E39 Actor to be disassociated from an instance of E74 Group. This class does not imply initiative by either party. 
-Typical scenarios include the termination of membership in a social organisation, ending the employment at a company, divorce, and the end of tenure of somebody in an official position.</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E7.Activity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E87.Curation_Activity">
-	<rdfs:comment>This class comprises the activities that result in the continuity of management and the preservation and evolution of instances of E78 Collection, following an implicit or explicit curation plan. 
-It specializes the notion of activity into the curation of a collection and allows the history of curation to be recorded.
-Items are accumulated and organized following criteria like subject, chronological period, material type, style of art etc. and can be added or removed from an E78 Collection for a specific purpose and/or audience. The initial aggregation of items of a collection is regarded as an instance of E12 Production Event while the activity of evolving, preserving and promoting a collection is regarded as an instance of E87 Curation Activity.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E7.Activity"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E89.Propositional_Object">
-	<rdfs:comment>This class comprises immaterial items, including but not limited to stories, plots, procedural prescriptions, algorithms, laws of physics or images that are, or represent in some sense, sets of propositions about real or mental things and that are documented as single units or serve as topic of discourse. 
-	
-This class also comprises items that are “about” something in the sense of a subject. In the wider sense, this class includes expressions of psychological value such as non-figural art and musical themes. However, conceptual items such as types and classes are not instances of E89 Propositional Object. This should not be confused with the definition of a type, which is indeed an instance of E89 Propositional Object.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E28.Conceptual_Object"/>
-</rdfs:Class>
-<rdfs:Class rdf:ID="E90.Symbolic_Object">
-	<rdfs:comment>This class comprises identifiable symbols and any aggregation of symbols, such as characters, identifiers, traffic signs, emblems, texts, data sets, images, musical scores, multimedia objects, computer program code or mathematical formulae that have an objectively recognizable structure and that are documented as single units.
-It includes sets of signs of any nature, which may serve to designate something, or to communicate some propositional content. 
-An instance of E90 Symbolic Object does not depend on a specific physical carrier, which can include human memory, and it can exist on one or more carriers simultaneously. An instance of E90 Symbolic Object may or may not have a specific meaning, for example an arbitrary character string.
-</rdfs:comment>
-	<rdfs:subClassOf rdf:resource="#E28.Conceptual_Object"/>
-	<rdfs:subClassOf rdf:resource="#E72.Legal_Object"/>
-</rdfs:Class>
-<rdf:Property rdf:ID="P1F.is_identified_by">
-<rdfs:comment>This property describes the naming or identification of any real world item by a name or any other identifier. 
-
-This property is intended for identifiers in general use, which form part of the world the model intends to describe, and not merely for internal database identifiers which are specific to a technical system, unless these latter also have a more general use outside the technical context. This property includes in particular identification by mathematical expressions such as coordinate systems used for the identification of instances of E53 Place. The property does not reveal anything about when, where and by whom this identifier was used. A more detailed representation can be made using the fully developed (i.e. indirect) path through E15 Identifier Assignment.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E1.CRM_Entity"/>
-	<rdfs:range rdf:resource="#E41.Appellation"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P1B.identifies">
-	<rdfs:domain rdf:resource="#E41.Appellation"/>
-	<rdfs:range rdf:resource="#E1.CRM_Entity"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P2F.has_type">
-<rdfs:comment>This property allows sub typing of CRM entities - a form of specialisation – through the use of a terminological hierarchy, or thesaurus. 
-
-The CRM is intended to focus on the high-level entities and relationships needed to describe data structures. Consequently, it does not specialise entities any further than is required for this immediate purpose. However, entities in the isA hierarchy of the CRM may by specialised into any number of sub entities, which can be defined in the E55 Type hierarchy. E51 Contact Point, for example, may be specialised into “e-mail address”, “telephone number”, “post office box”, “URL” etc. none of which figures explicitly in the CRM hierarchy. Sub typing obviously requires consistency between the meaning of the terms assigned and the more general intent of the CRM entity in question.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E1.CRM_Entity"/>
-	<rdfs:range rdf:resource="#E55.Type"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P2B.is_type_of">
-	<rdfs:domain rdf:resource="#E55.Type"/>
-	<rdfs:range rdf:resource="#E1.CRM_Entity"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P3F.has_note">
-<rdfs:comment>This property is a container for all informal descriptions about an object that have not been expressed in terms of CRM constructs. 
-
-In particular it captures the characterisation of the item itself, its internal structures, appearance etc.
-Like property P2 has type (is type of), this property is a consequence of the restricted focus of the CRM. The aim is not to capture, in a structured form, everything that can be said about an item; indeed, the CRM formalism is not regarded as sufficient to express everything that can be said. Good practice requires use of distinct note fields for different aspects of a characterisation. The P3.1 has type property of P3 has note allows differentiation of specific notes, e.g. “construction”, “decoration” etc. 
-An item may have many notes, but a note is attached to a specific item.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E1.CRM_Entity"/>
-	<rdfs:range rdf:resource="http://www.w3.org/2000/01/rdf-schema#Literal"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P4F.has_time-span">
-<rdfs:comment>This property describes the temporal confinement of an instance of an E2 Temporal Entity.
-
-The related E52 Time-Span is understood as the real Time-Span during which the phenomena were active, which make up the temporal entity instance. It does not convey any other meaning than a positioning on the “time-line” of chronology. The Time-Span in turn is approximated by a set of dates (E61 Time Primitive). A temporal entity can have in reality only one Time-Span, but there may exist alternative opinions about it, which we would express by assigning multiple Time-Spans. Related temporal entities may share a Time-Span. Time-Spans may have completely unknown dates but other descriptions by which we can infer knowledge.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E2.Temporal_Entity"/>
-	<rdfs:range rdf:resource="#E52.Time-Span"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P4B.is_time-span_of">
-	<rdfs:domain rdf:resource="#E52.Time-Span"/>
-	<rdfs:range rdf:resource="#E2.Temporal_Entity"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P5F.consists_of">
-<rdfs:comment>This property describes the decomposition of an E3 Condition State into discrete, subsidiary states. 
-
-It is assumed that the sub-states into which the condition state is analysed form a logical whole - although the entire story may not be completely known – and that the sub-states are in fact constitutive of the general condition state. For example, a general condition state of “in ruins” may be decomposed into the individual stages of decay</rdfs:comment>
-	<rdfs:domain rdf:resource="#E3.Condition_State"/>
-	<rdfs:range rdf:resource="#E3.Condition_State"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P5B.forms_part_of">
-	<rdfs:domain rdf:resource="#E3.Condition_State"/>
-	<rdfs:range rdf:resource="#E3.Condition_State"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P7F.took_place_at">
-<rdfs:comment>This property describes the spatial location of an instance of E4 Period. 
-
-The related E53 Place should be seen as an approximation of the geographical area within which the phenomena that characterise the period in question occurred. P7took place at (witnessed) does not convey any meaning other than spatial positioning (generally on the surface of the earth).  For example, the period “R?volution fran?aise” can be said to have taken place in “France”, the “Victorian” period, may be said to have taken place in “Britain” and its colonies, as well as other parts of Europe and north America.
-A period can take place at multiple locations.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E4.Period"/>
-	<rdfs:range rdf:resource="#E53.Place"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P7B.witnessed">
-	<rdfs:domain rdf:resource="#E53.Place"/>
-	<rdfs:range rdf:resource="#E4.Period"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P8F.took_place_on_or_within">
-<rdfs:comment>This property describes the location of an instance of E4 Period with respect to an E19 Physical Object.
-P8 took place on or within (witnessed) is a short-cut of a path defining a E53 Place with respect to the geometry of an object. cf. E46 Section Definition.
-
-This property is in effect a special case of P7 took place at. It describes a period that can be located with respect to the space defined by an E19 Physical Object such as a ship or a building. The precise geographical location of the object during the period in question may be unknown or unimportant. 
-For example, the French and German armistice of 22 June 1940 was signed in the same railway carriage as the armistice of 11 November 1918.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E4.Period"/>
-	<rdfs:range rdf:resource="#E19.Physical_Object"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P8B.witnessed">
-	<rdfs:domain rdf:resource="#E19.Physical_Object"/>
-	<rdfs:range rdf:resource="#E4.Period"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P9F.consists_of">
-<rdfs:comment>This property describes the decomposition of an instance of E4 Period into discrete, subsidiary periods.
-
-The sub-periods into which the period is decomposed form a logical whole - although the entire picture may not be completely known - and the sub-periods are constitutive of the general period.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E4.Period"/>
-	<rdfs:range rdf:resource="#E4.Period"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P9B.forms_part_of">
-	<rdfs:domain rdf:resource="#E4.Period"/>
-	<rdfs:range rdf:resource="#E4.Period"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P10F.falls_within">
-<rdfs:comment>This property describes an instance of E4 Period, which falls within the E53 Place and E52 Time-Span of another. 
-
-The difference with P9 consists of (forms part of) is subtle. Unlike P9 consists of (forms part of), P10 falls within (contains) does not imply any logical connection between the two periods and it may refer to a period of a completely different type.
-
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E4.Period"/>
-	<rdfs:range rdf:resource="#E4.Period"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P10B.contains">
-	<rdfs:domain rdf:resource="#E4.Period"/>
-	<rdfs:range rdf:resource="#E4.Period"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P11F.had_participant">
-<rdfs:comment>This property describes the active or passive participation of instances of E39 Actors in an E5 Event. 
-
-It connects the life-line of the related E39 Actor with the E53 Place and E50 Date of the event. The property implies that the Actor was involved in the event but does not imply any causal relationship. The subject of a portrait can be said to have participated in the creation of the portrait.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E5.Event"/>
-	<rdfs:range rdf:resource="#E39.Actor"/>
-	<rdfs:subPropertyOf rdf:resource="#P12F.occurred_in_the_presence_of"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P11B.participated_in">
-	<rdfs:domain rdf:resource="#E39.Actor"/>
-	<rdfs:range rdf:resource="#E5.Event"/>
-	<rdfs:subPropertyOf rdf:resource="#P12B.was_present_at"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P12F.occurred_in_the_presence_of">
-<rdfs:comment>This property describes the active or passive presence of an E77 Persistent Item in an E5 Event without implying any specific role. 
-
-It connects the history of a thing with the E53 Place and E50 Date of an event. For example, an object may be the desk, now in a museum on which a treaty was signed. The presence of an immaterial thing implies the presence of at least one of its carriers.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E5.Event"/>
-	<rdfs:range rdf:resource="#E77.Persistent_Item"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P12B.was_present_at">
-	<rdfs:domain rdf:resource="#E77.Persistent_Item"/>
-	<rdfs:range rdf:resource="#E5.Event"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P13F.destroyed">
-<rdfs:comment>This property allows specific instances of E18 Physical Thing that have been destroyed to be related to a destruction event. 
-Destruction implies the end of an item’s life as a subject of cultural documentation – the physical matter of which the item was composed may in fact continue to exist. A destruction event may be contiguous with a Production that brings into existence a derived object composed partly of matter from the destroyed object.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E6.Destruction"/>
-	<rdfs:range rdf:resource="#E18.Physical_Thing"/>
-	<rdfs:subPropertyOf rdf:resource="#P93F.took_out_of_existence"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P13B.was_destroyed_by">
-	<rdfs:domain rdf:resource="#E18.Physical_Thing"/>
-	<rdfs:range rdf:resource="#E6.Destruction"/>
-	<rdfs:subPropertyOf rdf:resource="#P93B.was_taken_out_of_existence_by"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P14F.carried_out_by">
-<rdfs:comment>This property describes the active participation of an E39 Actor in an E7 Activity. 
-It implies causal or legal responsibility. The P14.1 in the role of property of the property allows the nature of an Actor’s participation to be specified.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E7.Activity"/>
-	<rdfs:range rdf:resource="#E39.Actor"/>
-	<rdfs:subPropertyOf rdf:resource="#P11F.had_participant"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P14B.performed">
-	<rdfs:domain rdf:resource="#E39.Actor"/>
-	<rdfs:range rdf:resource="#E7.Activity"/>
-	<rdfs:subPropertyOf rdf:resource="#P11B.participated_in"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P15F.was_influenced_by">
-<rdfs:comment>This is a high level property, which captures the relationship between an E7 Activity and anything that may have had some bearing upon it.
-The property has more specific sub properties.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E7.Activity"/>
-	<rdfs:range rdf:resource="#E1.CRM_Entity"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P15B.influenced">
-	<rdfs:domain rdf:resource="#E1.CRM_Entity"/>
-	<rdfs:range rdf:resource="#E7.Activity"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P16F.used_specific_object">
-<rdfs:comment>This property describes the use of material or immaterial things in a way essential to the performance or the outcome of an E7 Activity. 
-
-This property typically applies to tools, instruments, moulds, raw materials and items embedded in a product. It implies that the presence of the object in question was a necessary condition for the action. For example, the activity of writing this text required the use of a computer. An immaterial thing can be used if at least one of its carriers is present. For example, the software tools on a computer.
-
-Another example is the use of a particular name by a particular group of people over some span to identify a thing, such as a settlement. In this case, the physical carriers of this name are at least the people understanding its use.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E7.Activity"/>
-	<rdfs:range rdf:resource="#E70.Thing"/>
-	<rdfs:subPropertyOf rdf:resource="#P12F.occurred_in_the_presence_of"/>
-	<rdfs:subPropertyOf rdf:resource="#P15F.was_influenced_by"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P16B.was_used_for">
-	<rdfs:domain rdf:resource="#E70.Thing"/>
-	<rdfs:range rdf:resource="#E7.Activity"/>
-	<rdfs:subPropertyOf rdf:resource="#P12B.was_present_at"/>
-	<rdfs:subPropertyOf rdf:resource="#P15B.influenced"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P17F.was_motivated_by">
-<rdfs:comment>This property describes an item or items that are regarded as a reason for carrying out the E7 Activity. 
-
-For example, the discovery of a large hoard of treasure may call for a celebration, an order from head quarters can start a military manoeuvre. 
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E7.Activity"/>
-	<rdfs:range rdf:resource="#E1.CRM_Entity"/>
-	<rdfs:subPropertyOf rdf:resource="#P15F.was_influenced_by"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P17B.motivated">
-	<rdfs:domain rdf:resource="#E1.CRM_Entity"/>
-	<rdfs:range rdf:resource="#E7.Activity"/>
-	<rdfs:subPropertyOf rdf:resource="#P15B.influenced"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P19F.was_intended_use_of">
-<rdfs:comment>This property relates an E7 Activity with objects created specifically for use in the activity. 
-
-This is distinct from the intended use of an item in some general type of activity such as the book of common prayer which was intended for use in Church of England services (see P101 had as general use (was use of)).</rdfs:comment>
-	<rdfs:domain rdf:resource="#E7.Activity"/>
-	<rdfs:range rdf:resource="#E71.Man-Made_Thing"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P19B.was_made_for">
-	<rdfs:domain rdf:resource="#E71.Man-Made_Thing"/>
-	<rdfs:range rdf:resource="#E7.Activity"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P20F.had_specific_purpose">
-<rdfs:comment>This property identifies the relationship between a preparatory activity and the event it is intended to be preparation for.
-		
-This includes activities, orders and other organisational actions, taken in preparation for other activities or events. 
-
-P20 had specific purpose (was purpose of) implies that an activity succeeded in achieving its aim. If it does not succeed, such as the setting of a trap that did not catch anything, one may document the unrealized intention using P21 had general purpose (was purpose of):E55 Type and/or  P33 used specific technique (was used by): E29 Design or Procedure.</rdfs:comment>
-	<rdfs:domain rdf:resource="#E7.Activity"/>
-	<rdfs:range rdf:resource="#E5.Event"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P20B.was_purpose_of">
-	<rdfs:domain rdf:resource="#E5.Event"/>
-	<rdfs:range rdf:resource="#E7.Activity"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P21F.had_general_purpose">
-<rdfs:comment>This property describes an intentional relationship between an E7 Activity and some general goal or purpose. 
-
-This may involve activities intended as preparation for some type of activity or event. P21had general purpose (was purpose of) differs from P20 had specific purpose (was purpose of) in that no occurrence of an event is implied as the purpose. 
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E7.Activity"/>
-	<rdfs:range rdf:resource="#E55.Type"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P21B.was_purpose_of">
-	<rdfs:domain rdf:resource="#E55.Type"/>
-	<rdfs:range rdf:resource="#E7.Activity"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P22F.transferred_title_to">
-<rdfs:comment>This property identifies the E39 Actor that acquires the legal ownership of an object as a result of an E8 Acquisition. 
-
-The property will typically describe an Actor purchasing or otherwise acquiring an object from another Actor. However, title may also be acquired, without any corresponding loss of title by another Actor, through legal fieldwork such as hunting, shooting or fishing.
-In reality the title is either transferred to or from someone, or both.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E8.Acquisition"/>
-	<rdfs:range rdf:resource="#E39.Actor"/>
-	<rdfs:subPropertyOf rdf:resource="#P14F.carried_out_by"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P22B.acquired_title_through">
-	<rdfs:domain rdf:resource="#E39.Actor"/>
-	<rdfs:range rdf:resource="#E8.Acquisition"/>
-	<rdfs:subPropertyOf rdf:resource="#P14B.performed"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P23F.transferred_title_from">
-<rdfs:comment>This property identifies the E39 Actor or Actors who relinquish legal ownership as the result of an E8 Acquisition.
-
-The property will typically be used to describe a person donating or selling an object to a museum. In reality title is either transferred to or from someone, or both.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E8.Acquisition"/>
-	<rdfs:range rdf:resource="#E39.Actor"/>
-	<rdfs:subPropertyOf rdf:resource="#P14F.carried_out_by"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P23B.surrendered_title_through">
-	<rdfs:domain rdf:resource="#E39.Actor"/>
-	<rdfs:range rdf:resource="#E8.Acquisition"/>
-	<rdfs:subPropertyOf rdf:resource="#P14B.performed"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P24F.transferred_title_of">
-<rdfs:comment>This property identifies the E18 Physical Thing or things involved in an E8 Acquisition. 
-In reality, an acquisition must refer to at least one transferred item.
-</rdfs:comment>
-	<rdfs:domain rdf:resource="#E8.Acquisition"/>
-	<rdfs:range rdf:resource="#E18.Physical_Thing"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P24B.changed_ownership_through">
-	<rdfs:domain rdf:resource="#E18.Physical_Thing"/>
-	<rdfs:range rdf:resource="#E8.Acquisition"/>
-</rdf:Property>
-<rdf:Property rdf:ID="P25F.moved">
-<rdfs:comment>This property identifies the E19 Physical Object that is m