From waterbug at step.nasa.gov Wed Nov 1 02:44:58 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Wed Nov 1 02:44:59 2006 Subject: [pangalactic-commits] Add EXPRESS-XMI parser. Message-ID: <200611010744.kA17iwVh029749@ned.gsfc.nasa.gov> Modified files: PanGalactic/sandbox/parsers/express_xmi.py None 1.1 Log message: Add EXPRESS-XMI parser. From waterbug at step.nasa.gov Wed Nov 1 09:39:00 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Wed Nov 1 09:39:03 2006 Subject: [pangalactic-commits] Directory /repo/step_testbed/PanGalactic/src/express/xmi added to the repository Message-ID: <200611011439.kA1Ed0kF000760@ned.gsfc.nasa.gov> Modified files: PanGalactic/src/express/xmi Log message: Directory /repo/step_testbed/PanGalactic/src/express/xmi added to the repository From waterbug at step.nasa.gov Wed Nov 1 16:08:23 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Wed Nov 1 16:08:25 2006 Subject: [pangalactic-commits] Add EXPRESS-XMI files for AP203 and AP209. Message-ID: <200611012108.kA1L8Nme005857@ned.gsfc.nasa.gov> Modified files: PanGalactic/src/express/xmi/WG3N972_AP209_AIM_Long_Form.xmi None 1.1 PanGalactic/src/express/xmi/ap203_mod_POD.xmi None 1.1 PanGalactic/src/express/xmi/p203tc2.xmi None 1.1 Log message: Add EXPRESS-XMI files for AP203 and AP209. From waterbug at step.nasa.gov Wed Nov 1 17:02:32 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Wed Nov 1 17:02:33 2006 Subject: [pangalactic-commits] Add a human-readable EXPRESS-XMI example. Message-ID: <200611012202.kA1M2Wsg006952@ned.gsfc.nasa.gov> Modified files: PanGalactic/sandbox/parsers/entity_examples.xmi None 1.1 PanGalactic/sandbox/parsers/express_xmi.py 1.1 1.2 Log message: Add a human-readable EXPRESS-XMI example. From waterbug at step.nasa.gov Wed Nov 1 17:04:30 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Wed Nov 1 17:04:32 2006 Subject: [pangalactic-commits] Add EXPRESS for AP203 TC2. Message-ID: <200611012204.kA1M4Usf006994@ned.gsfc.nasa.gov> Modified files: PanGalactic/src/express/exp/p203tc2.exp None 1.1 Log message: Add EXPRESS for AP203 TC2. From waterbug at step.nasa.gov Wed Nov 1 20:24:41 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Wed Nov 1 20:24:42 2006 Subject: [pangalactic-commits] Bad idea to include these in the dist. Message-ID: <200611020124.kA21Ofh8009528@ned.gsfc.nasa.gov> Modified files: PanGalactic/src/express/xmi/WG3N972_AP209_AIM_Long_Form.xmi 1.1 None PanGalactic/src/express/xmi/ap203_mod_POD.xmi 1.1 None PanGalactic/src/express/xmi/p203tc2.xmi 1.1 None Log message: Bad idea to include these in the dist. From waterbug at step.nasa.gov Wed Nov 1 20:25:39 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Wed Nov 1 20:25:41 2006 Subject: [pangalactic-commits] ... and these, too. Message-ID: <200611020125.kA21PdYO009559@ned.gsfc.nasa.gov> Modified files: PanGalactic/src/express/xml/Config_control_design.xsd 1.1 None PanGalactic/src/express/xml/Structural_analysis_design.xsd 1.1 None Log message: .. and these, too. From waterbug at step.nasa.gov Wed Nov 1 20:28:01 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Wed Nov 1 20:28:03 2006 Subject: [pangalactic-commits] ... and these, too! Message-ID: <200611020128.kA21S1e3009629@ned.gsfc.nasa.gov> Modified files: PanGalactic/src/express/exp/ap203.exp 1.1.1.1 None PanGalactic/src/express/exp/ap203_mod_POD.exp 1.1 None PanGalactic/src/express/exp/ap210.exp 1.1.1.1 None PanGalactic/src/express/exp/ap214.exp 1.1.1.1 None PanGalactic/src/express/exp/p203tc2.exp 1.1 None PanGalactic/src/express/exp/pdm-schema.exp 1.1.1.1 None PanGalactic/src/express/exp/pgef.exp 1.1 None Log message: .. and these, too! From waterbug at step.nasa.gov Thu Nov 2 02:57:17 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 2 02:57:18 2006 Subject: [pangalactic-commits] This guy's functions moved to p.meta.names. Message-ID: <200611020757.kA27vHRf010566@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/utils/io/xmlns.py 1.1 None Log message: This guy's functions moved to p.meta.names. From waterbug at step.nasa.gov Thu Nov 2 04:02:43 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 2 04:02:50 2006 Subject: [pangalactic-commits] Deep changes to namespaces and Ontology identification ... Message-ID: <200611020902.kA292hVp011480@ned.gsfc.nasa.gov> Modified files: PanGalactic/TODO 1.103 1.104 PanGalactic/pangalactic/meta/kb.py 1.2 1.3 PanGalactic/pangalactic/meta/names.py 1.29 1.30 PanGalactic/pangalactic/meta/registry.py 1.143 1.144 PanGalactic/pangalactic/node/pangalaxian.py 1.146 1.147 PanGalactic/pangalactic/node/uberorb.py 1.107 1.108 PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py 1.13 1.14 PanGalactic/sandbox/onto/owl.rdf 1.1 1.2 PanGalactic/sandbox/onto/space_mission.owl 1.2 1.3 Log message: Deep changes to namespaces and Ontology identification ... now using elementtree to find the owl:Ontology node. Index: PanGalactic/pangalactic/meta/kb.py diff -u PanGalactic/pangalactic/meta/kb.py:1.2 PanGalactic/pangalactic/meta/kb.py:1.3 --- PanGalactic/pangalactic/meta/kb.py:1.2 Wed Oct 25 04:03:34 2006 +++ PanGalactic/pangalactic/meta/kb.py Thu Nov 2 04:02:35 2006 @@ -1,12 +1,12 @@ -# $Id: kb.py,v 1.2 2006/10/25 08:03:34 waterbug Exp $ +# $Id: kb.py,v 1.3 2006/11/02 09:02:35 waterbug Exp $ """ OWL import/export module. Reads and writes OWL graphs. Such graphs are sets of statements (known in RDF as "triples": node-arc-node or subject-predicate-object). -@version: $Revision: 1.2 $ +@version: $Revision: 1.3 $ """ -__version__ = "$Revision: 1.2 $"[11:-2] +__version__ = "$Revision: 1.3 $"[11:-2] # Python modules import base64 @@ -21,6 +21,12 @@ from pprint import pprint from zope.interface import implements +# ElementTree +try: + import cElementTree as ET +except: + import ElementTree as ET + # RDFLib from rdflib import ConjunctiveGraph from rdflib import RDF, RDFS @@ -28,9 +34,9 @@ from rdflib.syntax.parsers.RDFXMLParser import RDFXMLParser # PanGalactic -from pangalactic.meta.names import PgefNamespace, allspace -from pangalactic.meta.names import registerNamespace, u2q, getAddr -from pangalactic.utils.io.xmlns import getXmlnsTuples +from pangalactic.meta.names import PgefNamespace, registerNamespaces +from pangalactic.meta.names import u2q, getAddr, getETName +from pangalactic.meta.names import allprefix, allspace def fixFunkyUris(s): @@ -214,9 +220,9 @@ def readRdf(self, datastream): """ - Read a graph from an RDF/XML file, register its namespaces, incorporate - its triples, and update self.class_nodes from its Class and Property - nodes. + Read a graph from an RDF/XML file (the parser adds all its triples to + self), register its namespaces, and add all locally-defined names to the + appropriate registered namespace in C{p.meta.names.allspace}. @param datastream: an object with a read() method containing RDF/XML data @@ -231,17 +237,11 @@ # fix any malformed uri's s = fixFunkyUris(datastream.read()) self.parser.parse(StringIO(s), self) - nstuples = getXmlnsTuples(StringIO(s)) - # self.log.debug('nstuples: %s' % str(nstuples)) - # register any new namespaces from this data # self.log.debug('registering namespaces ...') - for prefix, namespace in nstuples: - # self.log.debug(' - prefix: %s' % prefix) - # not registering namespaces with null prefixes - if prefix and prefix not in allspace: - # self.log.debug(' not in allspace; registering ...') - registerNamespace( - PgefNamespace(id=prefix, uri=namespace)) + # **NOTE: it's important to register the namespaces before calling + # getOntologyName, since the latter depends on the ontology name's + # namespace being registered! + registerNamespaces(StringIO(s)) for triple in self: # add all (local) names to their namespaces for rdfnode in triple: @@ -255,27 +255,6 @@ if name not in ns.names: ns.names.add(name) return self.getOntologyName(StringIO(s)) -# # update self.class_nodes_by_type from this graph's class_nodes_by_type -# class_nodes_by_type = self._getClassNodesByType(graph) -# if not hasattr(self, 'class_nodes_by_type'): -# self.class_nodes_by_type = class_nodes_by_type -# else: -# for nodetype in class_nodes_by_type: -# if not self.class_nodes_by_type.get(nodetype): -# self.class_nodes_by_type[nodetype] = {} -# self.class_nodes_by_type[nodetype].update( -# class_nodes_by_type[nodetype]) -# # update self.property_nodes_by_type from this graph's -# # property_nodes_by_type -# property_nodes_by_type = self._getPropertyNodesByType(graph) -# if not hasattr(self, 'property_nodes_by_type'): -# self.property_nodes_by_type = property_nodes_by_type -# else: -# for nodetype in property_nodes_by_type: -# if not self.property_nodes_by_type.get(nodetype): -# self.property_nodes_by_type[nodetype] = {} -# self.property_nodes_by_type[nodetype].update( -# property_nodes_by_type[nodetype]) def _findNodesByType(self, typeqn, graph): """ @@ -402,21 +381,6 @@ objects.append(o) return objects - def getNamespaces(self, unicode=False): - """ - Return the local names (a.k.a. prefixes) of all namespaces - currently contained in this KB. - - @param unicode: if True, return names as C{unicode} instances; - otherwise, return them as C{str}s - @type unicode: C{bool} - """ - if unicode: - prefixes = [p for p, ns in self.namespaces()] - else: - prefixes = [str(p) for p, ns in self.namespaces()] - return prefixes - def getClassNames(self, nsprefix, unicode=False): """ Return the local names of all Classes defined in the specified @@ -698,29 +662,21 @@ def getOntologyName(self, datastream): """ Find the principal Ontology node of a source. For now, the assumption - is that there is one Ontology element per source (file, datastream, - etc.), and that it will be the 'base' namespace of the source. That - Ontology element may contain 'imports' elements that reference other - resources (ontologies), but as OWL is structured, these imported - ontology references take the form of 'resource' attributes of the - 'imports' element, rather than Ontology nodes in their own right. + is that there is one and only one Ontology element per source (file, + datastream, etc.). That Ontology element may contain 'imports' elements + that reference other resources (ontologies), but as OWL is structured, + these imported ontology references take the form of 'resource' + attributes of an 'imports' element, rather than Ontology nodes in their + own right. @param datastream: a stream of OWL data @type datastream: an object with a read() method """ - graph = ConjunctiveGraph() - s = fixFunkyUris(datastream.read()) - self.parser.parse(StringIO(s), graph) - onodes = self._findNodesByType('owl:Ontology', graph) - # for name in onodes: - # print 'name = %s, uri = %s' % (name, onodes[name]) - name = '' - # look for the name that ends in ':' -- i.e., the local namespace of - # this dataset, which is the Ontology name (prefix). - for name in onodes: - if name.endswith(':'): - prefix = name[:-1] - return prefix + root = ET.parse(datastream) + onode = root.find(getETName('owl:Ontology')) + # there must be one and only one Ontology element per source + pprint(allprefix) + return allprefix[onode.get(getETName('rdf:about'))] def report(self): """ Index: PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py diff -u PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py:1.13 PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py:1.14 --- PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py:1.13 Sun Oct 29 03:06:09 2006 +++ PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py Thu Nov 2 04:02:37 2006 @@ -1,12 +1,12 @@ -# $Id: pgxnobjectwiz.py,v 1.13 2006/10/29 08:06:09 waterbug Exp $ +# $Id: pgxnobjectwiz.py,v 1.14 2006/11/02 09:02:37 waterbug Exp $ """ PanGalaxian Object Wizard A wizard to assist creation and cloning of PanGalaxianObject instances. -@version: $Revision: 1.13 $ +@version: $Revision: 1.14 $ """ -__version__ = "$Revision: 1.13 $"[11:-2] +__version__ = "$Revision: 1.14 $"[11:-2] from pprint import pprint import wx @@ -184,8 +184,6 @@ def onSelectNs(self, event): # print '- onSelectNs' # print ' namespace is now set to: ', self.ns_combo.selected - name_count = orb.getNameCount(self.ns_combo.selected) - # print ' name_count =', name_count if self.parent.iface in orb.versionables: self.existing_ids = orb.getBaseIds(self.ns_combo.selected) else: Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.143 PanGalactic/pangalactic/meta/registry.py:1.144 --- PanGalactic/pangalactic/meta/registry.py:1.143 Sun Oct 29 03:06:08 2006 +++ PanGalactic/pangalactic/meta/registry.py Thu Nov 2 04:02:35 2006 @@ -1,9 +1,9 @@ -# $Id: registry.py,v 1.143 2006/10/29 08:06:08 waterbug Exp $ +# $Id: registry.py,v 1.144 2006/11/02 09:02:35 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.143 $ +@version: $Revision: 1.144 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of @@ -12,7 +12,7 @@ objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.143 $"[11:-2] +__version__ = "$Revision: 1.144 $"[11:-2] # Python import glob @@ -911,7 +911,7 @@ registry @type e: C{dict} """ - ns_uri = allspace['id_ns'] + ns_uri = allspace['id_ns'].uri e['oid'] = ns_uri + e['id'] # DO NOT USE -- NOT DONE YET !! Index: PanGalactic/pangalactic/node/pangalaxian.py diff -u PanGalactic/pangalactic/node/pangalaxian.py:1.146 PanGalactic/pangalactic/node/pangalaxian.py:1.147 --- PanGalactic/pangalactic/node/pangalaxian.py:1.146 Sun Oct 29 03:06:08 2006 +++ PanGalactic/pangalactic/node/pangalaxian.py Thu Nov 2 04:02:36 2006 @@ -2,16 +2,16 @@ # -*- coding: ANSI_X3.4-1968 -*- # generated by wxGlade 0.3.5.1 on Tue Feb 1 00:19:02 2005 -# $Id: pangalaxian.py,v 1.146 2006/10/29 08:06:08 waterbug Exp $ +# $Id: pangalaxian.py,v 1.147 2006/11/02 09:02:36 waterbug Exp $ """ Main application module for PanGalaxian, the PGEF desktop client. WE ARE THE PANGALAXIANS! :) -@version: $Revision: 1.146 $ +@version: $Revision: 1.147 $ """ -__version__ = "$Revision: 1.146 $"[11:-2] +__version__ = "$Revision: 1.147 $"[11:-2] # Python import logging @@ -862,8 +862,6 @@ # self.tools_search.Enable(1) self.tools_getmystuff.Enable(1) self.tools_passwd.Enable(1) - # get list of namespaces from the server (to cache) - orb.getNamespaces() else: # self.options_proxy.Enable(1) # self.options_userid.Enable(1) Index: PanGalactic/pangalactic/meta/names.py diff -u PanGalactic/pangalactic/meta/names.py:1.29 PanGalactic/pangalactic/meta/names.py:1.30 --- PanGalactic/pangalactic/meta/names.py:1.29 Wed Oct 25 23:05:11 2006 +++ PanGalactic/pangalactic/meta/names.py Thu Nov 2 04:02:35 2006 @@ -1,14 +1,15 @@ -# $Id: names.py,v 1.29 2006/10/26 03:05:11 waterbug Exp $ +# $Id: names.py,v 1.30 2006/11/02 09:02:35 waterbug Exp $ """ Classes, functions, and services for handling identifiers, addresses, and namespaces. -@version: $Revision: 1.29 $ +@version: $Revision: 1.30 $ """ -__version__ = "$Revision: 1.29 $"[11:-2] +__version__ = "$Revision: 1.30 $"[11:-2] from sets import Set +from elementtree.ElementTree import iterparse class PgefNamespace: @@ -100,6 +101,9 @@ """ Add a new C{PgefNamespace} to allspace and allprefix so that it can be included in name lookups. + + @param ns: a namespace + @type ns: C{PgefNamespace} """ if ns.id not in allspace: allspace[ns.id] = ns @@ -242,3 +246,37 @@ addr = q2u(identifier) return addr +def registerNamespaces(source): + """ + Parse XML data and return a list of namespace tuples of the form: + + C{[(nsprefix, url), ...]} + + @param source: source of the XML data to be parsed, which can be either a + file-like object (anything with a read() method) or the path to a file, + which iterparse will open. + @type source: C{file} or C{str} + """ + for event, elem in iterparse(source, events=['start-ns']): + if event == 'start-ns': + registerNamespace(PgefNamespace(id=elem[0], uri=elem[1])) + +def getETName(name): + """ + Get the ElementTree-style qualified name: + + '{namespace_uri}local_name' + + for a more colloquial XML short name: + + 'ns_prefix:local_name' + + @param name: a colloquial XML short name + @type name: C{str} + + @param nsdict: a mapping from ns_prefixes to uris + @type nsdict: C{dict} + """ + ns_prefix, local_name = name.split(':') + return ''.join(['{', allspace[ns_prefix].uri, '}', local_name]) + Index: PanGalactic/TODO diff -u PanGalactic/TODO:1.103 PanGalactic/TODO:1.104 --- PanGalactic/TODO:1.103 Sun Oct 29 15:01:40 2006 +++ PanGalactic/TODO Thu Nov 2 04:02:34 2006 @@ -17,6 +17,11 @@ its metaobjects, with info about their versions, so that it realizes what's going on when one of them is redefined in a user owl file (or, when runtime metaobject editing and management is implemented, redefined at runtime). +[-] ENHANCEMENTS: Namespace handling + [-] UberORB.getNames and UberORB.getBaseIds should be local-only and aimed + at "project" (i.e., user-writable) namespaces only, not any and all + namespaces. + [-] Namespace name addition "events" should be *pushed* to the client [-] ENHANCEMENT: use Python UUID algorithm to generate oid's [-] ENHANCEMENTS: [-] LDAP/X.500 interface @@ -505,5 +510,5 @@ [+] one-many (aggregate attrs) -------------------------------------------------------------------------- -# $Id: TODO,v 1.103 2006/10/29 20:01:40 waterbug Exp $ +# $Id: TODO,v 1.104 2006/11/02 09:02:34 waterbug Exp $ Index: PanGalactic/pangalactic/node/uberorb.py diff -u PanGalactic/pangalactic/node/uberorb.py:1.107 PanGalactic/pangalactic/node/uberorb.py:1.108 --- PanGalactic/pangalactic/node/uberorb.py:1.107 Sun Oct 29 03:06:08 2006 +++ PanGalactic/pangalactic/node/uberorb.py Thu Nov 2 04:02:36 2006 @@ -1,11 +1,11 @@ -# $Id: uberorb.py,v 1.107 2006/10/29 08:06:08 waterbug Exp $ +# $Id: uberorb.py,v 1.108 2006/11/02 09:02:36 waterbug Exp $ # -*- test-case-name: pangalactic.test.test_uberorb -*- """ A PanGalaxian node's UberORB -@version: $Revision: 1.107 $ +@version: $Revision: 1.108 $ """ -__version__ = "$Revision: 1.107 $"[11:-2] +__version__ = "$Revision: 1.108 $"[11:-2] import codecs import copy @@ -29,6 +29,7 @@ from pangalactic.meta.defaults import READ_ONLY_NS from pangalactic.meta.registry import PanGalacticRegistry from pangalactic.meta.interfaces import IMofFactory +from pangalactic.meta.names import allspace from pangalactic.node import state, prefs from pangalactic.node.gui.utils.defaults import VERSION_PROPERTIES from pangalactic.node.gui.utils.display_maps import updateDisplayMaps @@ -775,50 +776,37 @@ self.projects.keys()) return self.projects - def getNamespaces(self, writable=True): - """ - Get the list of known namespaces. If writable is True, get only - namespaces that are writable for the current user. If logged in, get - them from the repository, save them locally, and return them as a list. - If local, check whether there are any in cache. - """ - # TODO: some way to determine which namespaces the user has permission - # to pollute. ;) - self.log.info(' - getNamespaces') - if state['repo'] and self.xmlrpc: - self.log.info(' + logged in -- going to the server ...') - params = {'owner' : 'admin'} - nsexts = self.xmlrpc.getObjects('PmofNamespace', - params=params) - namespaces = [self.remember(e) for e in nsexts] - if namespaces: - self.save(namespaces) - self.log.info('dispatching signal "updates received"') - dispatcher.send(signal='updates received') - else: - self.log.info(' + in local mode -- using cached namespaces ...') - namespaces = self.getLocalObjects( - _schema=self.interfaces['PmofNamespace']) - return namespaces - - def getNameCount(self, ns): - """ - Get a count of the known names for the specified namespace. - """ - self.log.info(' - getNameCount(ns)') - if state['repo'] and self.xmlrpc: - self.log.info(' + logged in -- going to the server ...') - params = [['id_ns', '=', ns]] - count = self.xmlrpc.getCount('Identifiable', 0, 1, params) - else: - self.log.info(" + in local mode -- can't give a good answer.") - count = 0 - return count +# def getNamespaces(self, writable=True): +# """ +# Get the list of known namespaces. If writable is True, get only +# namespaces that are writable for the current user. If logged in, get +# them from the repository, save them locally, and return them as a list. +# If local, check whether there are any in cache. +# """ +# # TODO: some way to determine which namespaces the user has permission +# # to pollute. ;) +# self.log.info(' - getNamespaces') +# if state['repo'] and self.xmlrpc: +# self.log.info(' + logged in -- going to the server ...') +# params = {'owner' : 'admin'} +# nsexts = self.xmlrpc.getObjects('PmofNamespace', +# params=params) +# namespaces = [self.remember(e) for e in nsexts] +# if namespaces: +# self.save(namespaces) +# self.log.info('dispatching signal "updates received"') +# dispatcher.send(signal='updates received') +# else: +# self.log.info(' + in local mode -- using cached namespaces ...') +# namespaces = self.getLocalObjects( +# _schema=self.interfaces['PmofNamespace']) +# return namespaces def getNames(self, ns): """ Get the known names (C{id} Property values) for the specified namespace. """ + # TODO: see "TODO" doc under ENHANCEMENTS: Namespace handling. self.log.info(' - getNames(ns)') if state['repo'] and self.xmlrpc: self.log.info(' + logged in -- going to the server ...') @@ -832,6 +820,7 @@ """ Get the known base_ids for the specified namespace. """ + # TODO: see "TODO" doc under ENHANCEMENTS: Namespace handling. self.log.info(' - getBaseIds(ns)') if state['repo'] and self.xmlrpc: self.log.info(' + logged in -- going to the server ...') Index: PanGalactic/sandbox/onto/owl.rdf diff -u PanGalactic/sandbox/onto/owl.rdf:1.1 PanGalactic/sandbox/onto/owl.rdf:1.2 --- PanGalactic/sandbox/onto/owl.rdf:1.1 Mon Oct 2 05:47:05 2006 +++ PanGalactic/sandbox/onto/owl.rdf Thu Nov 2 04:02:38 2006 @@ -13,7 +13,7 @@ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" > - + Index: PanGalactic/sandbox/onto/space_mission.owl diff -u PanGalactic/sandbox/onto/space_mission.owl:1.2 PanGalactic/sandbox/onto/space_mission.owl:1.3 --- PanGalactic/sandbox/onto/space_mission.owl:1.2 Mon Sep 4 05:51:53 2006 +++ PanGalactic/sandbox/onto/space_mission.owl Thu Nov 2 04:02:38 2006 @@ -7,7 +7,7 @@ xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#" xml:base="http://www.gsfc.nasa.gov/ontologies/space_mission/"> - + From waterbug at step.nasa.gov Thu Nov 2 14:40:07 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 2 14:40:09 2006 Subject: [pangalactic-commits] Moved IPgefObject to p.meta.interfaces. Message-ID: <200611021940.kA2Je7HV019822@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/core/interfaces.py 1.7 None Log message: Moved IPgefObject to p.meta.interfaces. From waterbug at step.nasa.gov Thu Nov 2 14:44:46 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 2 14:44:47 2006 Subject: [pangalactic-commits] Moved pgefobject to p.meta ... Message-ID: <200611021944.kA2JijIA019904@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/core/__init__.py 1.12 None PanGalactic/pangalactic/core/pgefobject.py 1.60 None PanGalactic/pangalactic/meta/pgefobject.py None 1.1 PanGalactic/pangalactic/meta/interfaces.py 1.10 1.11 PanGalactic/pangalactic/meta/kb.py 1.3 1.4 PanGalactic/pangalactic/meta/names.py 1.30 1.31 Log message: Moved pgefobject to p.meta ... 'core' package had shrunk to a single module, pgefobject, which can quite justifiably be moved into pangalactic.meta so we can trim off the core subpackage. Index: PanGalactic/pangalactic/meta/interfaces.py diff -u PanGalactic/pangalactic/meta/interfaces.py:1.10 PanGalactic/pangalactic/meta/interfaces.py:1.11 --- PanGalactic/pangalactic/meta/interfaces.py:1.10 Mon Oct 9 03:07:27 2006 +++ PanGalactic/pangalactic/meta/interfaces.py Thu Nov 2 14:44:43 2006 @@ -1,20 +1,33 @@ -# $Id: interfaces.py,v 1.10 2006/10/09 07:07:27 waterbug Exp $ +# $Id: interfaces.py,v 1.11 2006/11/02 19:44:43 waterbug Exp $ """ Interfaces for meta modules. -@version: $Revision: 1.10 $ +@version: $Revision: 1.11 $ """ -__version__ = "$Revision: 1.10 $"[11:-2] +__version__ = "$Revision: 1.11 $"[11:-2] from zope.interface import Interface, Attribute from zope.interface.interfaces import IAttribute +class ISource(Interface): + """ + Interface for an object from which data (which can be meta**n) is obtained. + This usage of "Source" is exactly the same as its meaning in "source code", + "data source", etc. ISource either extends or is identical to IFile, + depending on how IFile is defined. + """ + + local_ns_uri = Attribute("""The URI of the namespace for local symbols in + this source.""") + + class INamespace(Interface): """ Interface for an object that contains and manages a set of names. """ + # TODO: Look at PEAK namespace handling ... possibly borrow some. class ISchema(Interface): @@ -33,6 +46,46 @@ # specify that formally. +class IPgefObject(Interface): + """ + Interface for objects that participate in a PanGalactic application. Any + object that provides the C{IPgefObject} interface can be used in a + PanGalactic application -- e.g., can be viewed and edited in the + C{PanGalaxianObject} viewer/editor, displayed in the + C{PanGalaxianObjectGrid}, stored in C{PanGalaxian} C{ObjectCache} instances + and in the C{PGER} object repository, etc. + """ + + _schema = Attribute("""An object that provides + L{pangalactic.meta.interfaces.ISchema}, a subtype of + zope.interface.Interface) that defines the IPgefProperty + data descriptors (in the Python sense, i.e.: descriptors + that have both C{__get__} and C{__set__} methods, as opposed + to non-data descriptors, which have only C{__get__} methods) + that represent characteristics of the domain thing that the + PgefObject is supposed to represent.""") + + def getSchemaName(): + """Get the __name__ of the _schema of this object.""" + + def update(self, **kw): + """ + Update attributes in the object's _schema from keyword arguments. + + @param kw: a dictionary of name:value pairs to be useed in updates + @type kw: C{dict} + """ + + def clone(**kw): + """ + Return a copy of the object with the same _schema, a new oid, and the + same attribute values (except for objects that provide the Versionable + interface, which have the special requirement that their version-control + attributes must receive at least one value that distinguishes the + clone's version from the parent's). + """ + + class IPgefProperty(IAttribute): """ Interface for an object that specifies the characteristics of an attribute @@ -136,4 +189,3 @@ # createFromString() # convertToString() - Index: PanGalactic/pangalactic/meta/kb.py diff -u PanGalactic/pangalactic/meta/kb.py:1.3 PanGalactic/pangalactic/meta/kb.py:1.4 --- PanGalactic/pangalactic/meta/kb.py:1.3 Thu Nov 2 04:02:35 2006 +++ PanGalactic/pangalactic/meta/kb.py Thu Nov 2 14:44:43 2006 @@ -1,12 +1,12 @@ -# $Id: kb.py,v 1.3 2006/11/02 09:02:35 waterbug Exp $ +# $Id: kb.py,v 1.4 2006/11/02 19:44:43 waterbug Exp $ """ OWL import/export module. Reads and writes OWL graphs. Such graphs are sets of statements (known in RDF as "triples": node-arc-node or subject-predicate-object). -@version: $Revision: 1.3 $ +@version: $Revision: 1.4 $ """ -__version__ = "$Revision: 1.3 $"[11:-2] +__version__ = "$Revision: 1.4 $"[11:-2] # Python modules import base64 @@ -663,11 +663,12 @@ """ Find the principal Ontology node of a source. For now, the assumption is that there is one and only one Ontology element per source (file, - datastream, etc.). That Ontology element may contain 'imports' elements - that reference other resources (ontologies), but as OWL is structured, - these imported ontology references take the form of 'resource' - attributes of an 'imports' element, rather than Ontology nodes in their - own right. + datastream, etc.), and that ontology element must contain the full uri + of the ontology in its 'about' attribute. That Ontology element may + contain 'imports' elements that reference other resources (ontologies), + but as OWL is structured, these imported ontology references take the + form of 'resource' attributes of an 'imports' element, rather than + Ontology nodes in their own right. @param datastream: a stream of OWL data @type datastream: an object with a read() method @@ -675,7 +676,6 @@ root = ET.parse(datastream) onode = root.find(getETName('owl:Ontology')) # there must be one and only one Ontology element per source - pprint(allprefix) return allprefix[onode.get(getETName('rdf:about'))] def report(self): Index: PanGalactic/pangalactic/meta/names.py diff -u PanGalactic/pangalactic/meta/names.py:1.30 PanGalactic/pangalactic/meta/names.py:1.31 --- PanGalactic/pangalactic/meta/names.py:1.30 Thu Nov 2 04:02:35 2006 +++ PanGalactic/pangalactic/meta/names.py Thu Nov 2 14:44:43 2006 @@ -1,12 +1,12 @@ -# $Id: names.py,v 1.30 2006/11/02 09:02:35 waterbug Exp $ +# $Id: names.py,v 1.31 2006/11/02 19:44:43 waterbug Exp $ """ Classes, functions, and services for handling identifiers, addresses, and namespaces. -@version: $Revision: 1.30 $ +@version: $Revision: 1.31 $ """ -__version__ = "$Revision: 1.30 $"[11:-2] +__version__ = "$Revision: 1.31 $"[11:-2] from sets import Set from elementtree.ElementTree import iterparse @@ -105,9 +105,8 @@ @param ns: a namespace @type ns: C{PgefNamespace} """ - if ns.id not in allspace: + if (ns.id not in allspace) and (ns.uri not in allprefix): allspace[ns.id] = ns - if ns.uri not in allprefix: allprefix[ns.uri] = ns.id # Define some reference namespaces ... From waterbug at step.nasa.gov Thu Nov 2 14:58:15 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 2 14:58:19 2006 Subject: [pangalactic-commits] p.core.pgefobject -> p.meta.pgefobject Message-ID: <200611021958.kA2JwFhp020171@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/pgefobject.py 1.1 1.2 PanGalactic/pangalactic/meta/registry.py 1.144 1.145 PanGalactic/pangalactic/node/cache.py 1.25 1.26 PanGalactic/pangalactic/node/pangalaxian.py 1.147 1.148 PanGalactic/pangalactic/node/uberorb.py 1.108 1.109 PanGalactic/pangalactic/node/gui/dialogs/useradmin.py 1.23 1.24 PanGalactic/pangalactic/node/gui/widgets/cachebrowser.py 1.28 1.29 PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py 1.126 1.127 PanGalactic/pangalactic/node/gui/widgets/pgxnobjectgrid.py 1.31 1.32 PanGalactic/pangalactic/node/gui/widgets/pgxnpanes.py 1.42 1.43 PanGalactic/pangalactic/node/gui/widgets/pgxnproperty.py 1.57 1.58 PanGalactic/pangalactic/repo/chronosynclastic.py 1.105 1.106 PanGalactic/pangalactic/repo/pger.py 1.136 1.137 PanGalactic/pangalactic/repo/pgersoap.py 1.11 1.12 PanGalactic/pangalactic/test/test_chronosynclastic_.py 1.20 1.21 PanGalactic/pangalactic/test/test_chronosynclastic_record2RowKey.py 1.12 1.13 PanGalactic/pangalactic/test/utils4test.py 1.31 1.32 Log message: p.core.pgefobject -> p.meta.pgefobject Index: PanGalactic/pangalactic/node/pangalaxian.py diff -u PanGalactic/pangalactic/node/pangalaxian.py:1.147 PanGalactic/pangalactic/node/pangalaxian.py:1.148 --- PanGalactic/pangalactic/node/pangalaxian.py:1.147 Thu Nov 2 04:02:36 2006 +++ PanGalactic/pangalactic/node/pangalaxian.py Thu Nov 2 14:58:09 2006 @@ -2,16 +2,16 @@ # -*- coding: ANSI_X3.4-1968 -*- # generated by wxGlade 0.3.5.1 on Tue Feb 1 00:19:02 2005 -# $Id: pangalaxian.py,v 1.147 2006/11/02 09:02:36 waterbug Exp $ +# $Id: pangalaxian.py,v 1.148 2006/11/02 19:58:09 waterbug Exp $ """ Main application module for PanGalaxian, the PGEF desktop client. WE ARE THE PANGALAXIANS! :) -@version: $Revision: 1.147 $ +@version: $Revision: 1.148 $ """ -__version__ = "$Revision: 1.147 $"[11:-2] +__version__ = "$Revision: 1.148 $"[11:-2] # Python import logging @@ -34,7 +34,7 @@ from twisted.python.reflect import allYourBase # PanGalactic -from pangalactic.core.pgefobject import PgefObject +from pangalactic.meta.pgefobject import PgefObject from pangalactic.node import state, prefs from pangalactic.node import readState, readPrefs from pangalactic.node import writeState, writePrefs Index: PanGalactic/pangalactic/node/uberorb.py diff -u PanGalactic/pangalactic/node/uberorb.py:1.108 PanGalactic/pangalactic/node/uberorb.py:1.109 --- PanGalactic/pangalactic/node/uberorb.py:1.108 Thu Nov 2 04:02:36 2006 +++ PanGalactic/pangalactic/node/uberorb.py Thu Nov 2 14:58:09 2006 @@ -1,11 +1,11 @@ -# $Id: uberorb.py,v 1.108 2006/11/02 09:02:36 waterbug Exp $ +# $Id: uberorb.py,v 1.109 2006/11/02 19:58:09 waterbug Exp $ # -*- test-case-name: pangalactic.test.test_uberorb -*- """ A PanGalaxian node's UberORB -@version: $Revision: 1.108 $ +@version: $Revision: 1.109 $ """ -__version__ = "$Revision: 1.108 $"[11:-2] +__version__ = "$Revision: 1.109 $"[11:-2] import codecs import copy @@ -25,10 +25,10 @@ from zope.interface import implements # PanGalactic imports -from pangalactic.core.pgefobject import PgefObject from pangalactic.meta.defaults import READ_ONLY_NS -from pangalactic.meta.registry import PanGalacticRegistry from pangalactic.meta.interfaces import IMofFactory +from pangalactic.meta.pgefobject import PgefObject +from pangalactic.meta.registry import PanGalacticRegistry from pangalactic.meta.names import allspace from pangalactic.node import state, prefs from pangalactic.node.gui.utils.defaults import VERSION_PROPERTIES Index: PanGalactic/pangalactic/repo/pger.py diff -u PanGalactic/pangalactic/repo/pger.py:1.136 PanGalactic/pangalactic/repo/pger.py:1.137 --- PanGalactic/pangalactic/repo/pger.py:1.136 Wed Oct 25 23:05:13 2006 +++ PanGalactic/pangalactic/repo/pger.py Thu Nov 2 14:58:11 2006 @@ -1,10 +1,10 @@ -# $Id: pger.py,v 1.136 2006/10/26 03:05:13 waterbug Exp $ +# $Id: pger.py,v 1.137 2006/11/02 19:58:11 waterbug Exp $ """ Pan Galactic Entropy Reverser module -@version: $Revision: 1.136 $ +@version: $Revision: 1.137 $ """ -__version__ = "$Revision: 1.136 $"[11:-2] +__version__ = "$Revision: 1.137 $"[11:-2] import base64 import sys @@ -360,7 +360,7 @@ # @type ret: C{str} ('object' or 'extract') # # @param objects: a list of instances of subtypes of -# L{pangalactic.core.pgefobject.PgefObject} to be added to +# L{pangalactic.meta.pgefobject.PgefObject} to be added to # the repository # @type objects: C{list} # """ @@ -425,7 +425,7 @@ @type ret: C{str} ('object' or 'extract') @param objects: a list of instances of subtypes of - L{pangalactic.core.pgefobject.PgefObject} to be added to + L{pangalactic.meta.pgefobject.PgefObject} to be added to the repository @type objects: C{list} """ @@ -453,7 +453,7 @@ @type requestor: C{str} @param objects: a list of instances of subtypes of - L{pangalactic.core.pgefobject.PgefObject} to be updated + L{pangalactic.meta.pgefobject.PgefObject} to be updated @type objects: list @param input: the form of the submitted objects @@ -626,7 +626,7 @@ @type requestor: C{str} @param extr: an L{extract} -- see - L{pangalactic.core.pgefobject.PgefObject} + L{pangalactic.meta.pgefobject.PgefObject} @type extr: C{dict} @return: an extract of the newly committed object Index: PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.126 PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.127 --- PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.126 Sun Oct 29 03:06:10 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py Thu Nov 2 14:58:10 2006 @@ -1,10 +1,10 @@ -# $Id: pgxnobject.py,v 1.126 2006/10/29 08:06:10 waterbug Exp $ +# $Id: pgxnobject.py,v 1.127 2006/11/02 19:58:10 waterbug Exp $ """ PanGalaxianObject (a C{PgefObject} viewer/editor) -@version: $Revision: 1.126 $ +@version: $Revision: 1.127 $ """ -__version__ = "$Revision: 1.126 $"[11:-2] +__version__ = "$Revision: 1.127 $"[11:-2] import logging from pprint import pprint @@ -21,7 +21,7 @@ from wx.lib.rcsizer import RowColSizer # PanGalactic -from pangalactic.core.pgefobject import PgefObject +from pangalactic.meta.pgefobject import PgefObject from pangalactic.node import state, prefs from pangalactic.node.gui.dialogs.pgxnobjectwiz import PgxnObjectWizard from pangalactic.node.gui.widgets.pgxnstatusbar import PgxnStatusBar Index: PanGalactic/pangalactic/node/gui/widgets/cachebrowser.py diff -u PanGalactic/pangalactic/node/gui/widgets/cachebrowser.py:1.28 PanGalactic/pangalactic/node/gui/widgets/cachebrowser.py:1.29 --- PanGalactic/pangalactic/node/gui/widgets/cachebrowser.py:1.28 Sun Oct 29 03:06:10 2006 +++ PanGalactic/pangalactic/node/gui/widgets/cachebrowser.py Thu Nov 2 14:58:10 2006 @@ -1,5 +1,5 @@ #!/bin/env python -# $Id: cachebrowser.py,v 1.28 2006/10/29 08:06:10 waterbug Exp $ +# $Id: cachebrowser.py,v 1.29 2006/11/02 19:58:10 waterbug Exp $ #---------------------------------------------------------------------------- # Authors: Ginny, Steve #---------------------------------------------------------------------------- @@ -7,9 +7,9 @@ PanGalaxian cache browser and display customizer (Works with PgefObjects in a local ZODB) -@version: $Revision: 1.28 $ +@version: $Revision: 1.29 $ """ -__version__ = "$Revision: 1.28 $"[11:-2] +__version__ = "$Revision: 1.29 $"[11:-2] from pprint import pprint @@ -24,7 +24,7 @@ from ZODB import * # PanGalactic -from pangalactic.core.pgefobject import PgefObject +from pangalactic.meta.pgefobject import PgefObject from pangalactic.node.uberorb import orb from pangalactic.node.gui.widgets.pgxnobjectgrid import PanGalaxianObjectGrid Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.144 PanGalactic/pangalactic/meta/registry.py:1.145 --- PanGalactic/pangalactic/meta/registry.py:1.144 Thu Nov 2 04:02:35 2006 +++ PanGalactic/pangalactic/meta/registry.py Thu Nov 2 14:58:08 2006 @@ -1,9 +1,9 @@ -# $Id: registry.py,v 1.144 2006/11/02 09:02:35 waterbug Exp $ +# $Id: registry.py,v 1.145 2006/11/02 19:58:08 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.144 $ +@version: $Revision: 1.145 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of @@ -12,7 +12,7 @@ objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.144 $"[11:-2] +__version__ = "$Revision: 1.145 $"[11:-2] # Python import glob @@ -31,12 +31,12 @@ from zope.interface.interface import InterfaceClass, TAGGED_DATA # PanGalactic -from pangalactic.core.pgefobject import PgefObject from pangalactic.meta.defaults import READ_ONLY from pangalactic.meta.kb import KB from pangalactic.meta.metaobjects import classes, namespaces, properties from pangalactic.meta.names import PgefNamespace, registerNamespace from pangalactic.meta.names import allspace, allprefix +from pangalactic.meta.pgefobject import PgefObject from pangalactic.meta.pgefproperty import PgefProperty from pangalactic.meta.utils import getDefault from pangalactic.utils.safe import safe_eval Index: PanGalactic/pangalactic/node/gui/widgets/pgxnobjectgrid.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnobjectgrid.py:1.31 PanGalactic/pangalactic/node/gui/widgets/pgxnobjectgrid.py:1.32 --- PanGalactic/pangalactic/node/gui/widgets/pgxnobjectgrid.py:1.31 Sun Oct 29 03:06:11 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnobjectgrid.py Thu Nov 2 14:58:10 2006 @@ -1,10 +1,10 @@ -# $Id: pgxnobjectgrid.py,v 1.31 2006/10/29 08:06:11 waterbug Exp $ +# $Id: pgxnobjectgrid.py,v 1.32 2006/11/02 19:58:10 waterbug Exp $ """ A table-based, late-bound, configurable object grid -@version: $Revision: 1.31 $ +@version: $Revision: 1.32 $ """ -__version__ = "$Revision: 1.31 $"[11:-2] +__version__ = "$Revision: 1.32 $"[11:-2] from pprint import pprint @@ -31,7 +31,7 @@ Initialize a PanGalaxianObjectTable. @param objs: a collection (set or list) of instances of - L{pangalactic.core.pgefobject.PgefObject}. For now, the + L{pangalactic.meta.pgefobject.PgefObject}. For now, the assumption is that all of these instances have the same _schema (C{Interface}). @type objs: C{list or Set} @@ -200,7 +200,7 @@ @type parent: C{wx.Something} @param objs: a collection (set or list) of instances of - L{pangalactic.core.pgefobject.PgefObject}. For now, the + L{pangalactic.meta.pgefobject.PgefObject}. For now, the assumption is that all of these instances have the same _schema (C{Interface}). @type objs: C{list or Set} @@ -473,7 +473,7 @@ # TODO: this needs to go into a unit test! ############### -from pangalactic.core.pgefobject import PgefObject as PO +from pangalactic.meta.pgefobject import PgefObject as PO from pangalactic.test.utils4test import popTestData test_if = 'PanGalacticObject' testobjs = [PO(_schema=orb.interfaces[test_if], id='spam'), Index: PanGalactic/pangalactic/test/test_chronosynclastic_record2RowKey.py diff -u PanGalactic/pangalactic/test/test_chronosynclastic_record2RowKey.py:1.12 PanGalactic/pangalactic/test/test_chronosynclastic_record2RowKey.py:1.13 --- PanGalactic/pangalactic/test/test_chronosynclastic_record2RowKey.py:1.12 Mon Oct 2 05:47:04 2006 +++ PanGalactic/pangalactic/test/test_chronosynclastic_record2RowKey.py Thu Nov 2 14:58:12 2006 @@ -1,5 +1,5 @@ from pprint import pprint -from pangalactic.core.pgefobject import PgefObject +from pangalactic.meta.pgefobject import PgefObject from pangalactic.repo.chronosynclastic import Infundibulum as I from pangalactic.test.utils4test import popTestData Index: PanGalactic/pangalactic/repo/chronosynclastic.py diff -u PanGalactic/pangalactic/repo/chronosynclastic.py:1.105 PanGalactic/pangalactic/repo/chronosynclastic.py:1.106 --- PanGalactic/pangalactic/repo/chronosynclastic.py:1.105 Thu Oct 26 13:49:47 2006 +++ PanGalactic/pangalactic/repo/chronosynclastic.py Thu Nov 2 14:58:11 2006 @@ -1,12 +1,12 @@ -# $Id: chronosynclastic.py,v 1.105 2006/10/26 17:49:47 waterbug Exp $ +# $Id: chronosynclastic.py,v 1.106 2006/11/02 19:58:11 waterbug Exp $ """ The Chronosynclastic Infundibulum: an asynchronous, ontology-driven object-relational mapping and database interface. -@version: $Revision: 1.105 $ +@version: $Revision: 1.106 $ """ -__version__ = "$Revision: 1.105 $"[11:-2] +__version__ = "$Revision: 1.106 $"[11:-2] import os import re @@ -753,7 +753,7 @@ @param requestor: the userid of the user making the request. @param schema_name: the id of the class of objects to search for - (i.e., a subtype of L{pangalactic.core.pgefobject.PgefObject}) + (i.e., a subtype of L{pangalactic.meta.pgefobject.PgefObject}) @param refs: specifies whether to include the objects referenced by the specified class. Index: PanGalactic/pangalactic/test/test_chronosynclastic_.py diff -u PanGalactic/pangalactic/test/test_chronosynclastic_.py:1.20 PanGalactic/pangalactic/test/test_chronosynclastic_.py:1.21 --- PanGalactic/pangalactic/test/test_chronosynclastic_.py:1.20 Tue Sep 26 14:51:21 2006 +++ PanGalactic/pangalactic/test/test_chronosynclastic_.py Thu Nov 2 14:58:12 2006 @@ -1,4 +1,4 @@ -# $Id: test_chronosynclastic_.py,v 1.20 2006/09/26 18:51:21 waterbug Exp $ +# $Id: test_chronosynclastic_.py,v 1.21 2006/11/02 19:58:12 waterbug Exp $ """ Test for Chronosynclastic Infundibulum @@ -121,7 +121,7 @@ # # reactor.run() # -# # $Id: test_chronosynclastic_.py,v 1.20 2006/09/26 18:51:21 waterbug Exp $ +# # $Id: test_chronosynclastic_.py,v 1.21 2006/11/02 19:58:12 waterbug Exp $ # # """ # Test for inserting a row using pangalactic.repo.pgerdb module @@ -132,7 +132,7 @@ # # from pprint import pprint # from twisted.internet import reactor -# from pangalactic.core.pgefobject import PanGalacticObject +# from pangalactic.meta.pgefobject import PanGalacticObject # from pangalactic.repo.pgerdb import PgerDb # from pangalactic.repo.registry import PanGalacticRegistry as PGR # from pangalactic.repo.factory import PgerObjectFactory as PGF @@ -194,7 +194,7 @@ # # reactor.run() # -# # $Id: test_chronosynclastic_.py,v 1.20 2006/09/26 18:51:21 waterbug Exp $ +# # $Id: test_chronosynclastic_.py,v 1.21 2006/11/02 19:58:12 waterbug Exp $ # # """ # Test for inserting a row using pangalactic.repo.pgerdb module @@ -236,7 +236,7 @@ # reactor.run() # # -# # $Id: test_chronosynclastic_.py,v 1.20 2006/09/26 18:51:21 waterbug Exp $ +# # $Id: test_chronosynclastic_.py,v 1.21 2006/11/02 19:58:12 waterbug Exp $ # # """ # Tests for pgerdb @@ -437,7 +437,7 @@ # PsycopgTestCase.skip = "Connection to PostgreSQL using psycopg failed: " + str(e) # # -# # $Id: test_chronosynclastic_.py,v 1.20 2006/09/26 18:51:21 waterbug Exp $ +# # $Id: test_chronosynclastic_.py,v 1.21 2006/11/02 19:58:12 waterbug Exp $ # # """ # Functional test for pangalactic.repo.pgerdb module @@ -471,7 +471,7 @@ # # reactor.run() # start the main loop # -# # $Id: test_chronosynclastic_.py,v 1.20 2006/09/26 18:51:21 waterbug Exp $ +# # $Id: test_chronosynclastic_.py,v 1.21 2006/11/02 19:58:12 waterbug Exp $ # # """ # Functional test for PgerDb running a query on a sequence value @@ -508,7 +508,7 @@ # # reactor.run() # start the main loop # -# # $Id: test_chronosynclastic_.py,v 1.20 2006/09/26 18:51:21 waterbug Exp $ +# # $Id: test_chronosynclastic_.py,v 1.21 2006/11/02 19:58:12 waterbug Exp $ # # """ # Test for updating a row using pangalactic.repo.pgerdb module @@ -552,7 +552,7 @@ # # # # reactor.run() # # -# # $Id: test_chronosynclastic_.py,v 1.20 2006/09/26 18:51:21 waterbug Exp $ +# # $Id: test_chronosynclastic_.py,v 1.21 2006/11/02 19:58:12 waterbug Exp $ # # """ # Test for updating a row using pangalactic.repo.pgerdb module Index: PanGalactic/pangalactic/meta/pgefobject.py diff -u PanGalactic/pangalactic/meta/pgefobject.py:1.1 PanGalactic/pangalactic/meta/pgefobject.py:1.2 --- PanGalactic/pangalactic/meta/pgefobject.py:1.1 Thu Nov 2 14:44:43 2006 +++ PanGalactic/pangalactic/meta/pgefobject.py Thu Nov 2 14:58:08 2006 @@ -1,4 +1,4 @@ -# $Id: pgefobject.py,v 1.1 2006/11/02 19:44:43 waterbug Exp $ +# $Id: pgefobject.py,v 1.2 2006/11/02 19:58:08 waterbug Exp $ """ The Mother of all PanGalactic "domain objects". @@ -32,9 +32,9 @@ Note that PgefObject does not (yet) implement all of these characteristics, but that is its ultimate goal. -@version: $Revision: 1.1 $ +@version: $Revision: 1.2 $ """ -__version__ = "$Revision: 1.1 $"[11:-2] +__version__ = "$Revision: 1.2 $"[11:-2] # Python from datetime import datetime @@ -43,8 +43,7 @@ from zope.interface import implements # PanGalactic -from pangalactic.core.interfaces import IPgefObject -from pangalactic.meta.interfaces import IMofObject +from pangalactic.meta.interfaces import IPgefObject, IMofObject from pangalactic.utils import pgefexceptions from pangalactic.utils.identity import generateOid from pangalactic.utils.toolbox import isAString Index: PanGalactic/pangalactic/repo/pgersoap.py diff -u PanGalactic/pangalactic/repo/pgersoap.py:1.11 PanGalactic/pangalactic/repo/pgersoap.py:1.12 --- PanGalactic/pangalactic/repo/pgersoap.py:1.11 Mon Dec 5 21:16:53 2005 +++ PanGalactic/pangalactic/repo/pgersoap.py Thu Nov 2 14:58:11 2006 @@ -1,10 +1,10 @@ """ PGER SOAP Interfaces module -@version: $Revision: 1.11 $ +@version: $Revision: 1.12 $ """ -__version__ = "$Revision: 1.11 $"[11:-2] -# $Id: pgersoap.py,v 1.11 2005/12/06 02:16:53 waterbug Exp $ +__version__ = "$Revision: 1.12 $"[11:-2] +# $Id: pgersoap.py,v 1.12 2006/11/02 19:58:11 waterbug Exp $ from twisted.web import soap from twisted.internet.defer import succeed, fail @@ -74,7 +74,7 @@ @type typename: string @param typename: the name of a class that extends - L{pangalactic.core.pgefobject.PgefObject} + L{pangalactic.meta.pgefobject.PgefObject} @type refs: boolean @param refs: whether to return all referenced objects or Index: PanGalactic/pangalactic/node/gui/widgets/pgxnproperty.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnproperty.py:1.57 PanGalactic/pangalactic/node/gui/widgets/pgxnproperty.py:1.58 --- PanGalactic/pangalactic/node/gui/widgets/pgxnproperty.py:1.57 Sun Oct 29 03:06:11 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnproperty.py Thu Nov 2 14:58:10 2006 @@ -1,10 +1,10 @@ -# $Id: pgxnproperty.py,v 1.57 2006/10/29 08:06:11 waterbug Exp $ +# $Id: pgxnproperty.py,v 1.58 2006/11/02 19:58:10 waterbug Exp $ """ PanGalaxianProperty (the Mother of all PanGalaxian Property widgets) -@version: $Revision: 1.57 $ +@version: $Revision: 1.58 $ """ -__version__ = "$Revision: 1.57 $"[11:-2] +__version__ = "$Revision: 1.58 $"[11:-2] import logging from pprint import pprint @@ -47,7 +47,7 @@ @ivar value: the current value of the C{PgefProperty}. @type value: any PanGalactic datatype or an instance of - L{pangalactic.core.pgefobject.PgefObject} + L{pangalactic.meta.pgefobject.PgefObject} """ def __init__(self, parent, prop, obj): Index: PanGalactic/pangalactic/node/cache.py diff -u PanGalactic/pangalactic/node/cache.py:1.25 PanGalactic/pangalactic/node/cache.py:1.26 --- PanGalactic/pangalactic/node/cache.py:1.25 Sun Oct 29 03:06:08 2006 +++ PanGalactic/pangalactic/node/cache.py Thu Nov 2 14:58:09 2006 @@ -1,9 +1,9 @@ """ Local object cache manager -@version: $Revision: 1.25 $ +@version: $Revision: 1.26 $ """ -__version__ = "$Revision: 1.25 $"[11:-2] +__version__ = "$Revision: 1.26 $"[11:-2] # Python import os @@ -109,7 +109,7 @@ @param objs: objects to be saved @type objs: list (usually of instances of - L{pangalactic.core.pgefobject.PgefObject} + L{pangalactic.meta.pgefobject.PgefObject} """ # print " - ObjectCache.saveObjects" # TODO: 'merge' -- i.e., in case of oid collision, compare Index: PanGalactic/pangalactic/node/gui/widgets/pgxnpanes.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnpanes.py:1.42 PanGalactic/pangalactic/node/gui/widgets/pgxnpanes.py:1.43 --- PanGalactic/pangalactic/node/gui/widgets/pgxnpanes.py:1.42 Sun Oct 29 03:06:11 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnpanes.py Thu Nov 2 14:58:10 2006 @@ -1,9 +1,9 @@ """ The central widgets of the PanGalaxian main window. -@version: $Revision: 1.42 $ +@version: $Revision: 1.43 $ """ -__version__ = "$Revision: 1.42 $"[11:-2] +__version__ = "$Revision: 1.43 $"[11:-2] import wx @@ -239,7 +239,7 @@ Add a page for each object type in val @param val: a list or set of instances of - L{pangalactic.core.pgefobject.PgefObject} + L{pangalactic.meta.pgefobject.PgefObject} @type val: C{list} or C{Set} """ # TODO: set a default tab order and make it customizable Index: PanGalactic/pangalactic/node/gui/dialogs/useradmin.py diff -u PanGalactic/pangalactic/node/gui/dialogs/useradmin.py:1.23 PanGalactic/pangalactic/node/gui/dialogs/useradmin.py:1.24 --- PanGalactic/pangalactic/node/gui/dialogs/useradmin.py:1.23 Sun Oct 29 03:06:09 2006 +++ PanGalactic/pangalactic/node/gui/dialogs/useradmin.py Thu Nov 2 14:58:09 2006 @@ -2,9 +2,9 @@ A dialog to enable the admin user to add, modify, or delete users for a PGER Node. -@version: $Revision: 1.23 $ +@version: $Revision: 1.24 $ """ -__version__ = "$Revision: 1.23 $"[11:-2] +__version__ = "$Revision: 1.24 $"[11:-2] # allow Python 2.3 ('sets' module) or 2.4 ('set' built-in) try: set @@ -12,7 +12,7 @@ import wx -from pangalactic.core.pgefobject import PgefObject +from pangalactic.meta.pgefobject import PgefObject from pangalactic.node import state from pangalactic.node.gui.widgets.pgxnchoice import PgxnChoice from pangalactic.node.uberorb import orb Index: PanGalactic/pangalactic/test/utils4test.py diff -u PanGalactic/pangalactic/test/utils4test.py:1.31 PanGalactic/pangalactic/test/utils4test.py:1.32 --- PanGalactic/pangalactic/test/utils4test.py:1.31 Wed Oct 25 17:09:52 2006 +++ PanGalactic/pangalactic/test/utils4test.py Thu Nov 2 14:58:12 2006 @@ -1,4 +1,4 @@ -# $Id: utils4test.py,v 1.31 2006/10/25 21:09:52 waterbug Exp $ +# $Id: utils4test.py,v 1.32 2006/11/02 19:58:12 waterbug Exp $ """ Utilities for testing. @@ -7,7 +7,7 @@ from datetime import datetime from random import randint from pangalactic.utils.datetimes import dtstamp -from pangalactic.core.pgefobject import PgefObject +from pangalactic.meta.pgefobject import PgefObject from pangalactic.meta.registry import PanGalacticRegistry From waterbug at step.nasa.gov Thu Nov 2 18:50:35 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 2 18:50:37 2006 Subject: [pangalactic-commits] Overhauling of namespace machinery in progress ... Message-ID: <200611022350.kA2NoZhi023809@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/kb.py 1.4 1.5 PanGalactic/pangalactic/meta/names.py 1.31 1.32 PanGalactic/pangalactic/meta/registry.py 1.145 1.146 Log message: Overhauling of namespace machinery in progress ... Index: PanGalactic/pangalactic/meta/names.py diff -u PanGalactic/pangalactic/meta/names.py:1.31 PanGalactic/pangalactic/meta/names.py:1.32 --- PanGalactic/pangalactic/meta/names.py:1.31 Thu Nov 2 14:44:43 2006 +++ PanGalactic/pangalactic/meta/names.py Thu Nov 2 18:50:33 2006 @@ -1,12 +1,12 @@ -# $Id: names.py,v 1.31 2006/11/02 19:44:43 waterbug Exp $ +# $Id: names.py,v 1.32 2006/11/02 23:50:33 waterbug Exp $ """ Classes, functions, and services for handling identifiers, addresses, and namespaces. -@version: $Revision: 1.31 $ +@version: $Revision: 1.32 $ """ -__version__ = "$Revision: 1.31 $"[11:-2] +__version__ = "$Revision: 1.32 $"[11:-2] from sets import Set from elementtree.ElementTree import iterparse @@ -91,23 +91,9 @@ return d -# allspace and allprefix are dictionaries of namespaces by prefix and by -# URI, respectively. They are used to support lookups (qnameByUri and -# uriByQname). -allspace = {} -allprefix = {} - -def registerNamespace(ns): - """ - Add a new C{PgefNamespace} to allspace and allprefix so that it can be - included in name lookups. - - @param ns: a namespace - @type ns: C{PgefNamespace} - """ - if (ns.id not in allspace) and (ns.uri not in allprefix): - allspace[ns.id] = ns - allprefix[ns.uri] = ns.id +# namespaces is a dictionary containing some reference namespaces, which the +# registry will use as the initial entries in its registry.namespaces dictionary. +namespaces = {} # Define some reference namespaces ... @@ -126,22 +112,22 @@ u'gYear', u'gMonthDay', u'gDay', u'gMonth', u'anyURI', u'token', u'language', u'NMTOKEN', u'Name', u'NCName']) -registerNamespace(xsd) +namespaces['xsd'] = xsd # RDF namespace rdf = PgefNamespace(id=u'rdf', uri=u'http://www.w3.org/1999/02/22-rdf-syntax-ns#') -registerNamespace(rdf) +namespaces['rdf'] = rdf # RDFS namespace rdfs = PgefNamespace(id=u'rdfs', - uri=u'http://www.w3.org/2000/01/rdf-schema#') -registerNamespace(rdfs) + uri=u'http://www.w3.org/2000/01/rdf-schema#') +namespaces['rdfs'] = rdfs # OWL namespace owl = PgefNamespace(id=u'owl', uri=u'http://www.w3.org/2002/07/owl#') -registerNamespace(owl) +namespaces['owl'] = owl # PGEF permanent test object namespace. This namespace is intended to include # *only* the id's of test objects included in the initial set up of PGER -- @@ -150,32 +136,39 @@ # this namespace may cause some unit tests to fail. pgeftest = PgefNamespace(id='pgeftest', uri='http://pangalactic.us/test/lib/') -registerNamespace(pgeftest) +namespaces['pgef_test'] = pgef_test # PGEF temporary test object namespace (for objects created during test runs). # NOTE: insertion of other names into this namespace may cause some unit tests # to fail. pgeftesttmp = PgefNamespace(id='pgeftesttmp', uri='http://pangalactic.us/test/tmp/') -registerNamespace(pgeftesttmp) +namespaces['pgeftesttmp'] = pgeftesttmp # Namespace for PGEF reference objects (e.g., the 'admin' Person object). pgefobjects = PgefNamespace(id='pgefobjects', uri='http://pangalactic.us/objects/') -registerNamespace(pgefobjects) +namespaces['pgefobjects'] = pgefobjects # A completely generic namespace for use when no specific namespace seems # appropriate -- should be used with the awareness that it may get "crowded" # eventually ... ;) world = PgefNamespace(id='world', uri='http://earth.milkyway.universe/') -registerNamespace(world) +namespaces['world'] = world # MIME media-types namespace mime = PgefNamespace(id='mime', uri='http://www.iana.org/assignments/media-types/') -registerNamespace(mime) +namespaces['mime'] = mime +# allspace maps namespace prefixes to uris; +# allprefix maps namespace uris to prefixes. +allspace = {} +allprefix = {} +for ns in namespaces.values() + allspace[ns.id] = ns.uri + allprefix[ns.uri] = ns.id def u2q(uri): """ @@ -194,15 +187,15 @@ using_hash = True ns_uri = uri[:hash] name = uri[hash+1:] - if ns_uri not in allprefix: + if ns_uri not in allprefixes: if using_hash: # try funky, stupid, idiotic, illegal uri ns_uri = ns_uri+'#' - if ns_uri not in allprefix: + if ns_uri not in allprefixes: raise ValueError, 'unknown namespace: %s' % ns_uri else: raise ValueError, 'unknown namespace: %s' % ns_uri - qname = ':'.join([allprefix[ns_uri], name]) + qname = ':'.join([allprefixes[ns_uri], name]) return qname def q2u(qname): @@ -245,22 +238,27 @@ addr = q2u(identifier) return addr -def registerNamespaces(source): +def getNamespacesFromSource(source): """ Parse XML data and return a list of namespace tuples of the form: C{[(nsprefix, url), ...]} - @param source: source of the XML data to be parsed, which can be either a - file-like object (anything with a read() method) or the path to a file, - which iterparse will open. + @param source: source (ISource) of the XML data to be parsed, which can be + either a file-like object (anything with a read() method) or the path to + a file, which iterparse will open. @type source: C{file} or C{str} + + @return: a C{dict} mapping the source's namespace prefixes to + C{PgefNamespace} instances """ + nsdict = {} for event, elem in iterparse(source, events=['start-ns']): if event == 'start-ns': - registerNamespace(PgefNamespace(id=elem[0], uri=elem[1])) + nsdict[elem[0]] = (PgefNamespace(id=elem[0], uri=elem[1])) + return nsdict -def getETName(name): +def getETName(name, nsdict): """ Get the ElementTree-style qualified name: @@ -277,5 +275,5 @@ @type nsdict: C{dict} """ ns_prefix, local_name = name.split(':') - return ''.join(['{', allspace[ns_prefix].uri, '}', local_name]) + return ''.join(['{', nsdict[ns_prefix].uri, '}', local_name]) Index: PanGalactic/pangalactic/meta/kb.py diff -u PanGalactic/pangalactic/meta/kb.py:1.4 PanGalactic/pangalactic/meta/kb.py:1.5 --- PanGalactic/pangalactic/meta/kb.py:1.4 Thu Nov 2 14:44:43 2006 +++ PanGalactic/pangalactic/meta/kb.py Thu Nov 2 18:50:33 2006 @@ -1,12 +1,12 @@ -# $Id: kb.py,v 1.4 2006/11/02 19:44:43 waterbug Exp $ +# $Id: kb.py,v 1.5 2006/11/02 23:50:33 waterbug Exp $ """ OWL import/export module. Reads and writes OWL graphs. Such graphs are sets of statements (known in RDF as "triples": node-arc-node or subject-predicate-object). -@version: $Revision: 1.4 $ +@version: $Revision: 1.5 $ """ -__version__ = "$Revision: 1.4 $"[11:-2] +__version__ = "$Revision: 1.5 $"[11:-2] # Python modules import base64 @@ -34,9 +34,9 @@ from rdflib.syntax.parsers.RDFXMLParser import RDFXMLParser # PanGalactic -from pangalactic.meta.names import PgefNamespace, registerNamespaces -from pangalactic.meta.names import u2q, getAddr, getETName -from pangalactic.meta.names import allprefix, allspace +from pangalactic.meta.names import PgefNamespace +from pangalactic.meta.names import getNamespacesFromSource, getETName +from pangalactic.meta.names import u2q, getAddr def fixFunkyUris(s): @@ -218,34 +218,64 @@ self.readRdf(ds) ds.close() - def readRdf(self, datastream): + def getOntologyName(self, source): """ - Read a graph from an RDF/XML file (the parser adds all its triples to - self), register its namespaces, and add all locally-defined names to the - appropriate registered namespace in C{p.meta.names.allspace}. + Find the principal Ontology node of a source. For now, the assumption + is that there is one and only one Ontology element per source (file, + datastream, etc.), and that ontology element must contain the full uri + of the ontology in its 'about' attribute. That Ontology element may + contain 'imports' elements that reference other resources (ontologies), + but as OWL is structured, these imported ontology references take the + form of 'resource' attributes of an 'imports' element, rather than + Ontology nodes in their own right. + + @param source: a stream of OWL data + @type source: an object with a read() method - @param datastream: an object with a read() method containing RDF/XML + @param nsdict: a dictionary of the namespaces referenced in the source, + mapping namespace prefixes to C{PgefNamespace} objects + @type nsdict: C{dict} + + @return: the short name (a C{str}) of the Ontology defined in source + """ + s = source.read() + nsdict = getNamespacesFromSource(StringIO(s)) + root = ET.parse(StringIO(s)) + onode = root.find('{http://www.w3.org/2002/07/owl#}Ontology') + # there should be one and only one Ontology element per source + oref = onode.get('{http://www.w3.org/1999/02/22-rdf-syntax-ns#}about') + if oref == '': + ons = nsdict[''] + for n in nsdict: + if nsdict[n].uri == uri: + prefix = n + break + return prefix + + def readRdf(self, source): + """ + Read a graph from an RDF/XML source, adding all its triples to self and + returning a dictionary of its namespaces with associated names as + defined in the source. + + @param source: an object with a read() method containing RDF/XML data - @type datastream: C{Ifile} + @type source: C{Ifile} """ # TODO: implement real logging # class logger: pass # self.log = logger() # self.log.debug = pprint # self.log.debug(' - readRdf') - # self.log.debug(' datastream: %s' % str(datastream)) + # self.log.debug(' source: %s' % str(source)) # fix any malformed uri's - s = fixFunkyUris(datastream.read()) + s = fixFunkyUris(source.read()) self.parser.parse(StringIO(s), self) - # self.log.debug('registering namespaces ...') - # **NOTE: it's important to register the namespaces before calling - # getOntologyName, since the latter depends on the ontology name's - # namespace being registered! - registerNamespaces(StringIO(s)) + nsdict = getNamespacesFromSource(StringIO(s)) for triple in self: # add all (local) names to their namespaces for rdfnode in triple: - for ns in allspace.values(): + for ns in nsdict.values(): if ns.uri and ns.uri in rdfnode: name = rdfnode[len(ns.uri):] if name: @@ -254,7 +284,7 @@ name = name[1:] if name not in ns.names: ns.names.add(name) - return self.getOntologyName(StringIO(s)) + return nsdict def _findNodesByType(self, typeqn, graph): """ @@ -659,25 +689,6 @@ # pprint(cdict) return cdict - def getOntologyName(self, datastream): - """ - Find the principal Ontology node of a source. For now, the assumption - is that there is one and only one Ontology element per source (file, - datastream, etc.), and that ontology element must contain the full uri - of the ontology in its 'about' attribute. That Ontology element may - contain 'imports' elements that reference other resources (ontologies), - but as OWL is structured, these imported ontology references take the - form of 'resource' attributes of an 'imports' element, rather than - Ontology nodes in their own right. - - @param datastream: a stream of OWL data - @type datastream: an object with a read() method - """ - root = ET.parse(datastream) - onode = root.find(getETName('owl:Ontology')) - # there must be one and only one Ontology element per source - return allprefix[onode.get(getETName('rdf:about'))] - def report(self): """ Return a report on stuff I contain. Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.145 PanGalactic/pangalactic/meta/registry.py:1.146 --- PanGalactic/pangalactic/meta/registry.py:1.145 Thu Nov 2 14:58:08 2006 +++ PanGalactic/pangalactic/meta/registry.py Thu Nov 2 18:50:33 2006 @@ -1,18 +1,18 @@ -# $Id: registry.py,v 1.145 2006/11/02 19:58:08 waterbug Exp $ +# $Id: registry.py,v 1.146 2006/11/02 23:50:33 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.145 $ +@version: $Revision: 1.146 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of the PanGalactic core interfaces) and any custom schemas that a PanGalactic -application registers. The registered schemas are used in both creating new +application registers. The registered schemas are used both in creating new objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.145 $"[11:-2] +__version__ = "$Revision: 1.146 $"[11:-2] # Python import glob @@ -31,11 +31,12 @@ from zope.interface.interface import InterfaceClass, TAGGED_DATA # PanGalactic +from pangalactic.meta import names from pangalactic.meta.defaults import READ_ONLY from pangalactic.meta.kb import KB from pangalactic.meta.metaobjects import classes, namespaces, properties -from pangalactic.meta.names import PgefNamespace, registerNamespace -from pangalactic.meta.names import allspace, allprefix +from pangalactic.meta.names import PgefNamespace +from pangalactic.meta.names import namespaces, allspace, allprefix from pangalactic.meta.pgefobject import PgefObject from pangalactic.meta.pgefproperty import PgefProperty from pangalactic.meta.utils import getDefault @@ -67,28 +68,28 @@ is used in both creating new objects and in marshalling/unmarshalling existing objects in a PanGalactic application. - Note: allspace is a dictionary that maps all PanGalactic's known namespace - prefixes to C{PgefNamespace} instances (allspace is a module-level name in - p.m.names and is updated whenever new RDF data is imported by the registry). - - @ivar allprefix: A mapping of the namespace URIs to Namespace prefixes - (allprefix is a module-level name in p.m.names, to which the registry - keeps a reference for convenience). - @type allprefix: C{dict} - - @ivar metaobject_sources: A dictionary that maps the name of each principal - namespace metaobject (Ontology, UML Model, etc.) known to the registry - to the name of its source file(s). - @type metaobject_sources: C{dict} + @ivar sources: A dictionary that maps the name of each registered + metaobject (Namespace, Vocabulary, Taxonomy, Ontology, Model, Class, + Property, etc.) known to the registry to the name(s) of its source(s) + (usually files). + @type sources: C{dict} @ivar owl_graph: An instance of L{rdflib.ConjunctiveGraph) that incorporates all OWL ontology graphs known to the registry. @type owl_graph: C{dict} + @ivar namespaces: A mapping of the namespace prefixes to C{PgefNamespace} + objects. + @type namespaces: C{dict} + @ivar interfaces: A mapping of the names of C{Interface}s known to the registry to their instances. @type interfaces: C{dict} + @ivar interface_base_order: A C{list} of the registered C{Interface}s such + that no interface occurs in the C{list} before its bases. + @type interface_base_order: C{list} + @ivar properties: A mapping of the names of C{PgefProperty}s known to the registry to their instances. @type interfaces: C{dict} @@ -98,12 +99,9 @@ @type persistables: C{Set} @ivar refs: A mapping of the names of C{Interface}s to the set of names of - C{Interface}s that they reference as the range of a C{PgefProperty}. + C{Interface}s that occur as the range of a C{PgefProperty} of which they + are the domain. @type refs: C{dict} - - @ivar interface_base_order: A C{list} of the registered C{Interface}s such - that no interface occurs in the C{list} before its bases. - @type interface_base_order: C{list} """ def __init__(self, server=False, debug=False, test_home=None): @@ -147,9 +145,10 @@ self.log.temp = [] self.log.info = lambda x: self.log.temp.append(x) self.log.debug = lambda x: self.log.temp.append(x) - self.metaobject_sources = {} + self.sources = {} self.owl_graph = None - self.namespaces = {} + # namespaces will be updated by registerNamespace() + self.namespaces = namespaces self.interfaces = {} self.properties = {} self.extracts = {} @@ -212,14 +211,13 @@ # self.log.debug('interface names: %s' % str(i_names)) # self.log.debug('property names: %s' % str(p_names)) for nsprefix in n_names: - # TODO: not sure if allspace has much purpose any more -- review! - if nsprefix not in allspace: + if nsprefix not in self.namespaces: nsextr = getattr(namespaces, nsprefix) ns = PgefNamespace(id=nsprefix, uri=nsextr['uri'], names=nsextr['names'], complete=nsextr['complete']) - registerNamespace(ns) + self.registerNamespace(ns) for n in i_names: props[n] = [] for name in p_names: @@ -297,7 +295,7 @@ # create managed meta objects for the 'pgef' namespace and for the # generic 'world' object namespace ... nsextr = getattr(namespaces, 'pgef') - pgef_uri = allspace['pgef'].uri + pgef_uri = self.namespaces['pgef'].uri pgef_iteration = nsextr.get('iteration', 0) pgef_oid = ''.join([pgef_uri, 'PmofNamespace/instances/pgef.', @@ -305,13 +303,13 @@ pgefns = PgefObject( _schema=self.interfaces['PmofNamespace'], oid=pgef_oid, base_id='pgef', uri=pgef_uri, - iteration=pgef_iteration, names=allspace['pgef'].names, + iteration=pgef_iteration, names=self.namespaces['pgef'].names, complete=True) self.extracts['pgef'] = pgefns.extract() self.namespaces['pgef'] = pgefns # now 'world' ns nsextr = getattr(namespaces, 'world') - world_uri = allspace['world'].uri + world_uri = self.namespaces['world'].uri world_iteration = nsextr.get('iteration', 0) world_oid = ''.join([world_uri, 'PmofNamespace/instances/world.', @@ -319,7 +317,7 @@ worldns = PgefObject( _schema=self.interfaces['PmofNamespace'], oid=world_oid, base_id='world', uri=world_uri, - iteration=world_iteration, names=allspace['world'].names, + iteration=world_iteration, names=self.namespaces['world'].names, complete=True) self.extracts['world'] = worldns.extract() self.namespaces['world'] = worldns @@ -368,12 +366,15 @@ # NOTE: if OWL file(s) are found in 'plugins/owl', the domain # interfaces will always be rebuilt. (TODO: make this # user-selectable.) - owl_datastream = open(owl_file, 'r') - ontology_name = self.owl_graph.readRdf(owl_datastream) - if not self.metaobject_sources.get(ontology_name): - self.metaobject_sources[ontology_name] = [] - self.metaobject_sources[ontology_name].append(owl_file) + owl_data = open(owl_file, 'r').read() + ontology_name = kb.getOntologyName(StringIO(owl_data)) + if not self.sources.get(ontology_name): + self.sources[ontology_name] = [] + # TODO: use a PgefSource object here instead of owl_file + # (hopefully with some more metadata) + self.sources[ontology_name].append(owl_file) app_prefixes.append(ontology_name) + namespaces = self.owl_graph.readRdf(StringIO(owl_data)) for prefix in app_prefixes: self.createInterfacesFromSource(nsprefix=prefix) else: @@ -467,7 +468,7 @@ # names (of meta objects) for its defined ontology's namespace (not # including "imported" ontologies) -- this "policy" will depend on the # context ... at any rate, for now set complete = True. - ns = allspace[nsprefix] + ns = self.namespaces[nsprefix] pgns = PgefObject( _schema=self.interfaces['PmofNamespace'], base_id=nsprefix, uri=ns.uri, @@ -810,7 +811,7 @@ # self.log.debug('interface names: %s' % str(i_names)) # self.log.debug('property names: %s' % str(p_names)) for nsprefix in n_names: - if nsprefix not in allspace: + if nsprefix not in self.namespaces: f = open(os.path.join(cachepath, 'registry', 'Namespaces', nsprefix)) nsextr = safe_eval(f.read()) @@ -819,7 +820,7 @@ uri=nsextr['uri'], names=nsextr['names'], complete=nsextr['complete']) - registerNamespace(ns) + self.registerNamespace(ns) for n in i_names: props[n] = [] for name in p_names: @@ -899,7 +900,7 @@ # restored ... self.interface_base_order = self.getInterfaceBaseOrder() - # DO NOT USE -- NOT DONE YET !! + # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! def createMetaObjectFromExtract(self, e): """ Create a C{Pmof} meta object from an extract. The most frequent use @@ -911,10 +912,11 @@ registry @type e: C{dict} """ - ns_uri = allspace['id_ns'].uri + ns_uri = self.namespaces['id_ns'].uri e['oid'] = ns_uri + e['id'] + # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! - # DO NOT USE -- NOT DONE YET !! + # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! def createPmofClassExtractFromInterface(self, i): """ Create a C{PmofClass} extract from an C{Interface} object created @@ -926,7 +928,20 @@ """ e = dict([(a, i.getTaggedValue(a)) for a in i.getTaggedValueTags()]) e['_schema_name'] = 'PmofClass' - # DO NOT USE -- NOT DONE YET !! + # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! + + def registerNamespace(self, namespace): + """ + Add a C{PgefNamespace} to the registry's C{namespaces} dictionary. + + @param namespace: a namespace + @type namespace: C{PgefNamespace} + """ + if ((namespace.id not in self.namespaces) and + (namespace.uri not in [ns.uri for ns in self.namespaces.values()): + self.namespaces[namespace.id] = namespace + allspace[namespace.id] = namespace.uri + allprefix[namespace.uri] = namespace.id def registerInterface(self, interface): """ @@ -965,7 +980,7 @@ i += 1 return schema_name - def report(self, names=None): + def report(self, iface_names=None): """ Generate a plain text report on the registry's contents. """ @@ -981,12 +996,12 @@ # else: # output += " - None.\n" # output += '--------------------------------------------------\n' - if names: - if type(names) is str: - names = [names] + if iface_names: + if type(iface_names) is str: + iface_names = [iface_names] else: - names = self.interface_base_order - for name in names: + iface_names = self.interface_base_order + for name in iface_names: interface = self.interfaces[name] bases = interface.__bases__ output += '\nInterface ................... %s\n' % (name) From waterbug at step.nasa.gov Thu Nov 2 23:52:16 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 2 23:52:18 2006 Subject: [pangalactic-commits] Good example for 'Ontology' element in local namespace. Message-ID: <200611030452.kA34qGMP025458@ned.gsfc.nasa.gov> Modified files: PanGalactic/sandbox/onto/space_mission.owl 1.3 1.4 Log message: Good example for 'Ontology' element in local namespace. This one works fine with Protege. Index: PanGalactic/sandbox/onto/space_mission.owl diff -u PanGalactic/sandbox/onto/space_mission.owl:1.3 PanGalactic/sandbox/onto/space_mission.owl:1.4 --- PanGalactic/sandbox/onto/space_mission.owl:1.3 Thu Nov 2 04:02:38 2006 +++ PanGalactic/sandbox/onto/space_mission.owl Thu Nov 2 23:52:14 2006 @@ -6,17 +6,16 @@ xmlns:xsd="http://www.w3.org/2001/XMLSchema#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:owl="http://www.w3.org/2002/07/owl#" + xmlns="http://www.gsfc.nasa.gov/ontologies/space_mission/" xml:base="http://www.gsfc.nasa.gov/ontologies/space_mission/"> - + - - @@ -30,4 +29,3 @@ - From waterbug at step.nasa.gov Fri Nov 3 03:19:54 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Fri Nov 3 03:19:56 2006 Subject: [pangalactic-commits] Rename p.m.metaobjects.namespaces -> nspaces ... Message-ID: <200611030819.kA38JsFA026309@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/metaobjects/nspaces.py None 1.1 PanGalactic/pangalactic/meta/metaobjects/namespaces.py 1.3 None Log message: Rename p.m.metaobjects.namespaces -> nspaces ... to distinguish it from p.m.names.namespaces, which are the runtime namespaces (PgefNamespace instances), as opposed to the nspaces, which are PGEF MOF objects with PmofNamespace as their _schema (the versioned object counterparts to runtime PgefNamespace instances). From waterbug at step.nasa.gov Fri Nov 3 10:19:16 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Fri Nov 3 10:19:23 2006 Subject: [pangalactic-commits] Toward a more syntactically-correct pgef.owl, etc. Message-ID: <200611031519.kA3FJGQm031305@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/names.py 1.32 1.33 PanGalactic/pangalactic/meta/registry.py 1.146 1.147 PanGalactic/src/owl/pgef.owl 1.1 1.2 PanGalactic/src/owl/pgef_meta.owl 1.2 1.3 Log message: Toward a more syntactically-correct pgef.owl, etc. Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.146 PanGalactic/pangalactic/meta/registry.py:1.147 --- PanGalactic/pangalactic/meta/registry.py:1.146 Thu Nov 2 18:50:33 2006 +++ PanGalactic/pangalactic/meta/registry.py Fri Nov 3 10:19:12 2006 @@ -1,9 +1,9 @@ -# $Id: registry.py,v 1.146 2006/11/02 23:50:33 waterbug Exp $ +# $Id: registry.py,v 1.147 2006/11/03 15:19:12 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.146 $ +@version: $Revision: 1.147 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of @@ -12,7 +12,7 @@ objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.146 $"[11:-2] +__version__ = "$Revision: 1.147 $"[11:-2] # Python import glob @@ -34,7 +34,7 @@ from pangalactic.meta import names from pangalactic.meta.defaults import READ_ONLY from pangalactic.meta.kb import KB -from pangalactic.meta.metaobjects import classes, namespaces, properties +from pangalactic.meta.metaobjects import classes, nspaces, properties from pangalactic.meta.names import PgefNamespace from pangalactic.meta.names import namespaces, allspace, allprefix from pangalactic.meta.pgefobject import PgefObject @@ -78,10 +78,6 @@ incorporates all OWL ontology graphs known to the registry. @type owl_graph: C{dict} - @ivar namespaces: A mapping of the namespace prefixes to C{PgefNamespace} - objects. - @type namespaces: C{dict} - @ivar interfaces: A mapping of the names of C{Interface}s known to the registry to their instances. @type interfaces: C{dict} @@ -147,8 +143,6 @@ self.log.debug = lambda x: self.log.temp.append(x) self.sources = {} self.owl_graph = None - # namespaces will be updated by registerNamespace() - self.namespaces = namespaces self.interfaces = {} self.properties = {} self.extracts = {} @@ -156,9 +150,10 @@ self.createCoreMetaObjects() # TODO: possibly, push the core ontology into self.owl_graph, *if* we # plan to use the kb for anything besides importing ontologies from OWL. - # [NOTE: on a client (PanGalaxian) node, importApplicationOntologies is - # called by the orb (using getAppOntologies()) after the home directory - # has been specified.] + # [NOTE: if server=False (e.g. on a client (PanGalaxian) node), + # importApplicationOntologies is called by the orb (getAppOntologies()) + # after the home directory has been specified, which is why it's not + # called here in __init__.] if server: vgerpath = os.environ.get('VGER') if vgerpath is not None: @@ -195,7 +190,7 @@ """ Build a dictionary of C{Interface} instances from the auto-generated L{pangalactic.meta.metaobjects} modules, C{classes}, C{properties}, and - C{namespaces}. + C{ns}. @param module: a name to be used as the C{__module__} attribute for the C{Interface} instances that will be created @@ -204,15 +199,15 @@ interface_extracts = {} props = {} property_extracts = {} - n_names = [n for n in list(namespaces.__dict__) if '__' not in n] + n_names = [n for n in list(nspaces.__dict__) if '__' not in n] i_names = [n for n in list(classes.__dict__) if '__' not in n] p_names = [n for n in list(properties.__dict__) if '__' not in n] # self.log.debug('namespace names: %s' % str(n_names)) # self.log.debug('interface names: %s' % str(i_names)) # self.log.debug('property names: %s' % str(p_names)) for nsprefix in n_names: - if nsprefix not in self.namespaces: - nsextr = getattr(namespaces, nsprefix) + if nsprefix not in nspaces: + nsextr = getattr(nspaces, nsprefix) ns = PgefNamespace(id=nsprefix, uri=nsextr['uri'], names=nsextr['names'], @@ -292,35 +287,6 @@ # self.log.debug(' looking at attribute %s' % a) if self.interfaces[name][a].range in self.interfaces: self.refs[name].add(self.interfaces[name][a].range) - # create managed meta objects for the 'pgef' namespace and for the - # generic 'world' object namespace ... - nsextr = getattr(namespaces, 'pgef') - pgef_uri = self.namespaces['pgef'].uri - pgef_iteration = nsextr.get('iteration', 0) - pgef_oid = ''.join([pgef_uri, - 'PmofNamespace/instances/pgef.', - str(pgef_iteration)]) - pgefns = PgefObject( - _schema=self.interfaces['PmofNamespace'], - oid=pgef_oid, base_id='pgef', uri=pgef_uri, - iteration=pgef_iteration, names=self.namespaces['pgef'].names, - complete=True) - self.extracts['pgef'] = pgefns.extract() - self.namespaces['pgef'] = pgefns - # now 'world' ns - nsextr = getattr(namespaces, 'world') - world_uri = self.namespaces['world'].uri - world_iteration = nsextr.get('iteration', 0) - world_oid = ''.join([world_uri, - 'PmofNamespace/instances/world.', - str(world_iteration)]) - worldns = PgefObject( - _schema=self.interfaces['PmofNamespace'], - oid=world_oid, base_id='world', uri=world_uri, - iteration=world_iteration, names=self.namespaces['world'].names, - complete=True) - self.extracts['world'] = worldns.extract() - self.namespaces['world'] = worldns def importApplicationOntologies(self, homedir): """ @@ -413,12 +379,12 @@ C{to_python} is set to a C{string}, it will be interpreted as the path to a directory into which the interfaces should be written as named L{pangalactic.core.pgefobject.PgefObject.extract}s (with - _schemas of C{PmofNamespace}, C{PmofClass}, and - C{PmofProperty}, respectively) into the modules - C{namespaces}, C{classes}, and C{properties}. This mode is intended - to be used in a development environment, rather than at runtime, to - regenerate the python modules from which the pgef core ontology is - imported and regenerated at start-up. + _schemas of C{PmofNamespace}, C{PmofClass}, and C{PmofProperty}, + respectively) into the modules C{namespaces}, C{classes}, and + C{properties}. This mode is intended to be used in a development + environment, rather than at runtime, to regenerate the python + modules from which the pgef core ontology is imported and + regenerated at start-up. @type to_python: C{None} or C{str} """ self.log.info(' - createInterfacesFromSource') @@ -468,7 +434,7 @@ # names (of meta objects) for its defined ontology's namespace (not # including "imported" ontologies) -- this "policy" will depend on the # context ... at any rate, for now set complete = True. - ns = self.namespaces[nsprefix] + ns = namespaces[nsprefix] pgns = PgefObject( _schema=self.interfaces['PmofNamespace'], base_id=nsprefix, uri=ns.uri, @@ -811,7 +777,7 @@ # self.log.debug('interface names: %s' % str(i_names)) # self.log.debug('property names: %s' % str(p_names)) for nsprefix in n_names: - if nsprefix not in self.namespaces: + if nsprefix not in namespaces: f = open(os.path.join(cachepath, 'registry', 'Namespaces', nsprefix)) nsextr = safe_eval(f.read()) @@ -912,7 +878,7 @@ registry @type e: C{dict} """ - ns_uri = self.namespaces['id_ns'].uri + ns_uri = namespaces['id_ns'].uri e['oid'] = ns_uri + e['id'] # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! @@ -937,9 +903,9 @@ @param namespace: a namespace @type namespace: C{PgefNamespace} """ - if ((namespace.id not in self.namespaces) and - (namespace.uri not in [ns.uri for ns in self.namespaces.values()): - self.namespaces[namespace.id] = namespace + if ((namespace.id not in namespaces) and + (namespace.uri not in [ns.uri for ns in namespaces.values()])): + namespaces[namespace.id] = namespace allspace[namespace.id] = namespace.uri allprefix[namespace.uri] = namespace.id Index: PanGalactic/pangalactic/meta/names.py diff -u PanGalactic/pangalactic/meta/names.py:1.32 PanGalactic/pangalactic/meta/names.py:1.33 --- PanGalactic/pangalactic/meta/names.py:1.32 Thu Nov 2 18:50:33 2006 +++ PanGalactic/pangalactic/meta/names.py Fri Nov 3 10:19:12 2006 @@ -1,12 +1,12 @@ -# $Id: names.py,v 1.32 2006/11/02 23:50:33 waterbug Exp $ +# $Id: names.py,v 1.33 2006/11/03 15:19:12 waterbug Exp $ """ Classes, functions, and services for handling identifiers, addresses, and namespaces. -@version: $Revision: 1.32 $ +@version: $Revision: 1.33 $ """ -__version__ = "$Revision: 1.32 $"[11:-2] +__version__ = "$Revision: 1.33 $"[11:-2] from sets import Set from elementtree.ElementTree import iterparse @@ -134,42 +134,38 @@ # currently created by SQL scripts called from the script # PanGalactic/src/sql/populate_pgerdb.sh. NOTE: insertion of other names into # this namespace may cause some unit tests to fail. -pgeftest = PgefNamespace(id='pgeftest', - uri='http://pangalactic.us/test/lib/') -namespaces['pgef_test'] = pgef_test +namespaces['pgeftest'] = PgefNamespace(id='pgeftest', + uri='http://pangalactic.us/test/lib/') # PGEF temporary test object namespace (for objects created during test runs). # NOTE: insertion of other names into this namespace may cause some unit tests # to fail. -pgeftesttmp = PgefNamespace(id='pgeftesttmp', - uri='http://pangalactic.us/test/tmp/') -namespaces['pgeftesttmp'] = pgeftesttmp +namespaces['pgeftesttmp'] = PgefNamespace(id='pgeftesttmp', + uri='http://pangalactic.us/test/tmp/') # Namespace for PGEF reference objects (e.g., the 'admin' Person object). -pgefobjects = PgefNamespace(id='pgefobjects', - uri='http://pangalactic.us/objects/') -namespaces['pgefobjects'] = pgefobjects +namespaces['pgefobjects'] = PgefNamespace(id='pgefobjects', + uri='http://pangalactic.us/objects/') # A completely generic namespace for use when no specific namespace seems # appropriate -- should be used with the awareness that it may get "crowded" # eventually ... ;) -world = PgefNamespace(id='world', - uri='http://earth.milkyway.universe/') -namespaces['world'] = world +namespaces['world'] = PgefNamespace(id='world', + uri='http://earth.milkyway.universe/') # MIME media-types namespace -mime = PgefNamespace(id='mime', - uri='http://www.iana.org/assignments/media-types/') -namespaces['mime'] = mime +namespaces['mime'] = PgefNamespace(id='mime', + uri='http://www.iana.org/assignments/media-types/') # allspace maps namespace prefixes to uris; # allprefix maps namespace uris to prefixes. allspace = {} allprefix = {} -for ns in namespaces.values() +for ns in namespaces.values(): allspace[ns.id] = ns.uri allprefix[ns.uri] = ns.id + def u2q(uri): """ Get the qname for a URI. From waterbug at step.nasa.gov Fri Nov 3 12:00:07 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Fri Nov 3 12:00:10 2006 Subject: [pangalactic-commits] More work on namespaces, etc. Message-ID: <200611031700.kA3H07Ts000704@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/kb.py 1.5 1.6 PanGalactic/pangalactic/meta/names.py 1.33 1.34 PanGalactic/pangalactic/meta/registry.py 1.147 1.148 Log message: More work on namespaces, etc. Index: PanGalactic/pangalactic/meta/names.py diff -u PanGalactic/pangalactic/meta/names.py:1.33 PanGalactic/pangalactic/meta/names.py:1.34 --- PanGalactic/pangalactic/meta/names.py:1.33 Fri Nov 3 10:19:12 2006 +++ PanGalactic/pangalactic/meta/names.py Fri Nov 3 12:00:01 2006 @@ -1,12 +1,12 @@ -# $Id: names.py,v 1.33 2006/11/03 15:19:12 waterbug Exp $ +# $Id: names.py,v 1.34 2006/11/03 17:00:01 waterbug Exp $ """ Classes, functions, and services for handling identifiers, addresses, and namespaces. -@version: $Revision: 1.33 $ +@version: $Revision: 1.34 $ """ -__version__ = "$Revision: 1.33 $"[11:-2] +__version__ = "$Revision: 1.34 $"[11:-2] from sets import Set from elementtree.ElementTree import iterparse @@ -98,36 +98,33 @@ # Define some reference namespaces ... # XML Schema namespace (not available anywhere in RDF that I could find). -xsd = PgefNamespace(id=u'xsd', - uri=u'http://www.w3.org/2001/XMLSchema', - names=[ - u'string', u'normalizedString', u'boolean', - u'decimal', u'float', u'double', - u'integer', u'nonNegativeInteger', u'positiveInteger', - u'nonPositiveInteger', u'negativeInteger', - u'long', u'int', u'short', u'byte', - u'unsignedLong', u'unsignedInt', u'unsignedShort', - u'unsignedByte', u'hexBinary', u'base64Binary', - u'dateTime', u'time', u'date', u'gYearMonth', - u'gYear', u'gMonthDay', u'gDay', u'gMonth', - u'anyURI', u'token', u'language', - u'NMTOKEN', u'Name', u'NCName']) -namespaces['xsd'] = xsd +namespaces['xsd'] = PgefNamespace(id=u'xsd', + uri=u'http://www.w3.org/2001/XMLSchema', + names=[ + u'string', u'normalizedString', u'boolean', + u'decimal', u'float', u'double', + u'integer', u'nonNegativeInteger', u'positiveInteger', + u'nonPositiveInteger', u'negativeInteger', + u'long', u'int', u'short', u'byte', + u'unsignedLong', u'unsignedInt', u'unsignedShort', + u'unsignedByte', u'hexBinary', u'base64Binary', + u'dateTime', u'time', u'date', u'gYearMonth', + u'gYear', u'gMonthDay', u'gDay', u'gMonth', + u'anyURI', u'token', u'language', + u'NMTOKEN', u'Name', u'NCName']) # RDF namespace -rdf = PgefNamespace(id=u'rdf', - uri=u'http://www.w3.org/1999/02/22-rdf-syntax-ns#') -namespaces['rdf'] = rdf +namespaces['rdf'] = PgefNamespace( + id=u'rdf', + uri=u'http://www.w3.org/1999/02/22-rdf-syntax-ns#') # RDFS namespace -rdfs = PgefNamespace(id=u'rdfs', - uri=u'http://www.w3.org/2000/01/rdf-schema#') -namespaces['rdfs'] = rdfs +namespaces['rdfs'] = PgefNamespace(id=u'rdfs', + uri=u'http://www.w3.org/2000/01/rdf-schema#') # OWL namespace -owl = PgefNamespace(id=u'owl', - uri=u'http://www.w3.org/2002/07/owl#') -namespaces['owl'] = owl +namespaces['owl'] = PgefNamespace(id=u'owl', + uri=u'http://www.w3.org/2002/07/owl#') # PGEF permanent test object namespace. This namespace is intended to include # *only* the id's of test objects included in the initial set up of PGER -- @@ -271,5 +268,5 @@ @type nsdict: C{dict} """ ns_prefix, local_name = name.split(':') - return ''.join(['{', nsdict[ns_prefix].uri, '}', local_name]) + return ''.join(['{', nsdict[ns_prefix], '}', local_name]) Index: PanGalactic/pangalactic/meta/kb.py diff -u PanGalactic/pangalactic/meta/kb.py:1.5 PanGalactic/pangalactic/meta/kb.py:1.6 --- PanGalactic/pangalactic/meta/kb.py:1.5 Thu Nov 2 18:50:33 2006 +++ PanGalactic/pangalactic/meta/kb.py Fri Nov 3 12:00:01 2006 @@ -1,12 +1,12 @@ -# $Id: kb.py,v 1.5 2006/11/02 23:50:33 waterbug Exp $ +# $Id: kb.py,v 1.6 2006/11/03 17:00:01 waterbug Exp $ """ OWL import/export module. Reads and writes OWL graphs. Such graphs are sets of statements (known in RDF as "triples": node-arc-node or subject-predicate-object). -@version: $Revision: 1.5 $ +@version: $Revision: 1.6 $ """ -__version__ = "$Revision: 1.5 $"[11:-2] +__version__ = "$Revision: 1.6 $"[11:-2] # Python modules import base64 @@ -220,16 +220,16 @@ def getOntologyName(self, source): """ - Find the principal Ontology node of a source. For now, the assumption - is that there is one and only one Ontology element per source (file, - datastream, etc.), and that ontology element must contain the full uri - of the ontology in its 'about' attribute. That Ontology element may - contain 'imports' elements that reference other resources (ontologies), - but as OWL is structured, these imported ontology references take the - form of 'resource' attributes of an 'imports' element, rather than - Ontology nodes in their own right. + Find the principal Ontology node of a source. - @param source: a stream of OWL data + There should be one and only one Ontology element per source, and that + ontology element's 'about' attribute can either be an empty string + (meaning the ontology is defined in the local namespace) or must contain + the full uri of the ontology. That Ontology element may contain + 'imports' elements that reference other ontologies, as C{resource} + attributes. + + @param source: OWL data source @type source: an object with a read() method @param nsdict: a dictionary of the namespaces referenced in the source, @@ -240,12 +240,11 @@ """ s = source.read() nsdict = getNamespacesFromSource(StringIO(s)) + localns = nsdict.get('', None) root = ET.parse(StringIO(s)) onode = root.find('{http://www.w3.org/2002/07/owl#}Ontology') - # there should be one and only one Ontology element per source oref = onode.get('{http://www.w3.org/1999/02/22-rdf-syntax-ns#}about') if oref == '': - ons = nsdict[''] for n in nsdict: if nsdict[n].uri == uri: prefix = n Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.147 PanGalactic/pangalactic/meta/registry.py:1.148 --- PanGalactic/pangalactic/meta/registry.py:1.147 Fri Nov 3 10:19:12 2006 +++ PanGalactic/pangalactic/meta/registry.py Fri Nov 3 12:00:01 2006 @@ -1,9 +1,9 @@ -# $Id: registry.py,v 1.147 2006/11/03 15:19:12 waterbug Exp $ +# $Id: registry.py,v 1.148 2006/11/03 17:00:01 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.147 $ +@version: $Revision: 1.148 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of @@ -12,7 +12,7 @@ objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.147 $"[11:-2] +__version__ = "$Revision: 1.148 $"[11:-2] # Python import glob @@ -68,11 +68,10 @@ is used in both creating new objects and in marshalling/unmarshalling existing objects in a PanGalactic application. - @ivar sources: A dictionary that maps the name of each registered - metaobject (Namespace, Vocabulary, Taxonomy, Ontology, Model, Class, - Property, etc.) known to the registry to the name(s) of its source(s) - (usually files). - @type sources: C{dict} + @ivar sources: A dictionary that maintains information about files from + which data has been imported. It maps from a file's path to a + dictionary of information. + @type sources: C{list} @ivar owl_graph: An instance of L{rdflib.ConjunctiveGraph) that incorporates all OWL ontology graphs known to the registry. @@ -327,7 +326,7 @@ if self.owl_graph is None: self.owl_graph = KB() for owl_file in app_owl_filepaths: - self.log.info(' found: %s' % owl_file) + self.log.info(' + found: %s' % owl_file) # build app-specific interfaces # NOTE: if OWL file(s) are found in 'plugins/owl', the domain # interfaces will always be rebuilt. (TODO: make this @@ -344,7 +343,7 @@ for prefix in app_prefixes: self.createInterfacesFromSource(nsprefix=prefix) else: - self.log.info(' no files found.') + self.log.info(' + no files found.') def createInterfacesFromSource(self, source=None, nsprefix=None, module='pangalactic.meta.names', @@ -896,9 +895,24 @@ e['_schema_name'] = 'PmofClass' # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! + def registerSource(self, source): + """ + Add a source to the registry's C{sources} dictionary, and + update p.meta.names.[allspace, allprefix]. + + @param namespace: a namespace + @type namespace: C{PgefNamespace} + """ + if ((namespace.id not in namespaces) and + (namespace.uri not in [ns.uri for ns in namespaces.values()])): + namespaces[namespace.id] = namespace + allspace[namespace.id] = namespace.uri + allprefix[namespace.uri] = namespace.id + def registerNamespace(self, namespace): """ - Add a C{PgefNamespace} to the registry's C{namespaces} dictionary. + Add a C{PgefNamespace} to the registry's C{namespaces} dictionary, and + update p.meta.names.[allspace, allprefix]. @param namespace: a namespace @type namespace: C{PgefNamespace} From waterbug at step.nasa.gov Fri Nov 3 17:38:31 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Fri Nov 3 17:38:36 2006 Subject: [pangalactic-commits] New namespace architecture beginning to work. Message-ID: <200611032238.kA3McVQ3006089@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/kb.py 1.6 1.7 PanGalactic/pangalactic/meta/names.py 1.34 1.35 PanGalactic/pangalactic/meta/registry.py 1.148 1.149 Log message: New namespace architecture beginning to work. Index: PanGalactic/pangalactic/meta/kb.py diff -u PanGalactic/pangalactic/meta/kb.py:1.6 PanGalactic/pangalactic/meta/kb.py:1.7 --- PanGalactic/pangalactic/meta/kb.py:1.6 Fri Nov 3 12:00:01 2006 +++ PanGalactic/pangalactic/meta/kb.py Fri Nov 3 17:38:29 2006 @@ -1,12 +1,12 @@ -# $Id: kb.py,v 1.6 2006/11/03 17:00:01 waterbug Exp $ +# $Id: kb.py,v 1.7 2006/11/03 22:38:29 waterbug Exp $ """ OWL import/export module. Reads and writes OWL graphs. Such graphs are sets of statements (known in RDF as "triples": node-arc-node or subject-predicate-object). -@version: $Revision: 1.6 $ +@version: $Revision: 1.7 $ """ -__version__ = "$Revision: 1.6 $"[11:-2] +__version__ = "$Revision: 1.7 $"[11:-2] # Python modules import base64 @@ -34,8 +34,9 @@ from rdflib.syntax.parsers.RDFXMLParser import RDFXMLParser # PanGalactic -from pangalactic.meta.names import PgefNamespace -from pangalactic.meta.names import getNamespacesFromSource, getETName +from pangalactic.meta.names import PgefNamespace, namespaces +from pangalactic.meta.names import allspace, allprefix +from pangalactic.meta.names import getNamespacesFromSource from pangalactic.meta.names import u2q, getAddr @@ -218,7 +219,7 @@ self.readRdf(ds) ds.close() - def getOntologyName(self, source): + def getOntologyName(self, source, nsdict=None): """ Find the principal Ontology node of a source. @@ -233,35 +234,58 @@ @type source: an object with a read() method @param nsdict: a dictionary of the namespaces referenced in the source, - mapping namespace prefixes to C{PgefNamespace} objects + mapping namespace prefixes to URIs (this is None by default; only + passed in if the source's namespaces were already found by the + parent process). @type nsdict: C{dict} @return: the short name (a C{str}) of the Ontology defined in source """ s = source.read() - nsdict = getNamespacesFromSource(StringIO(s)) - localns = nsdict.get('', None) + if not nsdict: + nsdict = getNamespacesFromSource(StringIO(s)) + nsdict.update(allspace) + # allprefix should already have been updated from the local namespaces, + # and will have all prefixes except '', which we don't need + # reverse-lookup for anyway. + localnsuri = nsdict.get('', None) root = ET.parse(StringIO(s)) onode = root.find('{http://www.w3.org/2002/07/owl#}Ontology') oref = onode.get('{http://www.w3.org/1999/02/22-rdf-syntax-ns#}about') + if oref is None: + raise ValueError, 'Ontology has no prefix or URI.' if oref == '': - for n in nsdict: - if nsdict[n].uri == uri: - prefix = n - break + if localnsuri: + prefix = allprefix.get(localnsuri, None) + if not prefix: + prefix = localnsuri + else: + msg = 'Ontology uses the local namespace, ' + msg += 'but the local namespace is not assigned a URI.' + raise ValueError, msg + else: + prefix = allprefix.get(oref, None) + if not prefix: + prefix = oref return prefix - def readRdf(self, source): + def readRdf(self, source, nsdict=None): """ Read a graph from an RDF/XML source, adding all its triples to self and - returning a dictionary of its namespaces with associated names as - defined in the source. + adding to the relevant namespace in p.meta.names.namespaces any names + that are defined for that namespace in this graph. - @param source: an object with a read() method containing RDF/XML - data + @param source: an RDF/XML data container object with a read() method @type source: C{Ifile} + + @param nsdict: a dictionary of the namespaces referenced in the source, + mapping namespace prefixes to URIs (this is None by default; only + passed in if the source's namespaces were already found by the + parent process). + @type nsdict: C{dict} """ - # TODO: implement real logging + # TODO: implement real logging + # TODO: record "source" for names # class logger: pass # self.log = logger() # self.log.debug = pprint @@ -270,20 +294,21 @@ # fix any malformed uri's s = fixFunkyUris(source.read()) self.parser.parse(StringIO(s), self) - nsdict = getNamespacesFromSource(StringIO(s)) + if not nsdict: + nsdict = getNamespacesFromSource(StringIO(s)) for triple in self: - # add all (local) names to their namespaces + # add all (local) names to p.meta.names.namespaces[prefix].names for rdfnode in triple: - for ns in nsdict.values(): - if ns.uri and ns.uri in rdfnode: - name = rdfnode[len(ns.uri):] + for prefix, uri in nsdict.items(): + if uri and uri in rdfnode: + name = rdfnode[len(uri):] if name: # don't allow fragments as local names if name.startswith('#'): name = name[1:] - if name not in ns.names: + ns = namespaces.get(prefix) + if ns and name not in ns.names: ns.names.add(name) - return nsdict def _findNodesByType(self, typeqn, graph): """ @@ -294,7 +319,7 @@ """ nodes = {} for node in graph.subjects(RDF.type, URIRef(getAddr(typeqn))): - for ns in allspace.values(): + for ns in namespaces.values(): # 'if ns.uri' eliminates blank Class nodes (if it doesn't # have an ID, we're nagonna use it) if ns.uri and ns.uri in node: @@ -695,7 +720,7 @@ print "==========" print "Namespaces" print "==========" - for ns in allspace.values(): + for ns in namespaces.values(): print '- %s: %s' % (ns.id, ns.uri) if ns: for name in ns.names: Index: PanGalactic/pangalactic/meta/names.py diff -u PanGalactic/pangalactic/meta/names.py:1.34 PanGalactic/pangalactic/meta/names.py:1.35 --- PanGalactic/pangalactic/meta/names.py:1.34 Fri Nov 3 12:00:01 2006 +++ PanGalactic/pangalactic/meta/names.py Fri Nov 3 17:38:29 2006 @@ -1,12 +1,12 @@ -# $Id: names.py,v 1.34 2006/11/03 17:00:01 waterbug Exp $ +# $Id: names.py,v 1.35 2006/11/03 22:38:29 waterbug Exp $ """ Classes, functions, and services for handling identifiers, addresses, and namespaces. -@version: $Revision: 1.34 $ +@version: $Revision: 1.35 $ """ -__version__ = "$Revision: 1.34 $"[11:-2] +__version__ = "$Revision: 1.35 $"[11:-2] from sets import Set from elementtree.ElementTree import iterparse @@ -95,10 +95,35 @@ # registry will use as the initial entries in its registry.namespaces dictionary. namespaces = {} -# Define some reference namespaces ... +# allspace maps namespace prefixes to uris; +allspace = {} + +# allprefix maps namespace uris to prefixes. +allprefix = {} + + +def registerNamespace(namespace): + """ + Add a C{PgefNamespace} to the registry's C{namespaces} dictionary, and + update namespaces, allspace, and allprefix. Note that local namespaces + (namespace.id == '') are automatically ignored -- they cannot be registered, + but they can be read from a source (see getNamespacesFromSource) and they + can be persisted as an attribute of a source. + + @param namespace: a namespace + @type namespace: C{PgefNamespace} + """ + if (namespace.id and + (namespace.id not in namespaces) and + (namespace.uri not in [ns.uri for ns in namespaces.values()])): + namespaces[namespace.id] = namespace + allspace[namespace.id] = namespace.uri + allprefix[namespace.uri] = namespace.id + +# Define and register some reference namespaces ... # XML Schema namespace (not available anywhere in RDF that I could find). -namespaces['xsd'] = PgefNamespace(id=u'xsd', +registerNamespace(PgefNamespace(id=u'xsd', uri=u'http://www.w3.org/2001/XMLSchema', names=[ u'string', u'normalizedString', u'boolean', @@ -111,61 +136,58 @@ u'dateTime', u'time', u'date', u'gYearMonth', u'gYear', u'gMonthDay', u'gDay', u'gMonth', u'anyURI', u'token', u'language', - u'NMTOKEN', u'Name', u'NCName']) + u'NMTOKEN', u'Name', u'NCName'])) # RDF namespace -namespaces['rdf'] = PgefNamespace( - id=u'rdf', - uri=u'http://www.w3.org/1999/02/22-rdf-syntax-ns#') +registerNamespace(PgefNamespace(id='rdf', + uri='http://www.w3.org/1999/02/22-rdf-syntax-ns#')) # RDFS namespace -namespaces['rdfs'] = PgefNamespace(id=u'rdfs', - uri=u'http://www.w3.org/2000/01/rdf-schema#') +registerNamespace(PgefNamespace(id='rdfs', + uri='http://www.w3.org/2000/01/rdf-schema#')) # OWL namespace -namespaces['owl'] = PgefNamespace(id=u'owl', - uri=u'http://www.w3.org/2002/07/owl#') +registerNamespace(PgefNamespace(id='owl', uri='http://www.w3.org/2002/07/owl#')) +# 'pgeftest' namespace # PGEF permanent test object namespace. This namespace is intended to include # *only* the id's of test objects included in the initial set up of PGER -- # currently created by SQL scripts called from the script # PanGalactic/src/sql/populate_pgerdb.sh. NOTE: insertion of other names into # this namespace may cause some unit tests to fail. -namespaces['pgeftest'] = PgefNamespace(id='pgeftest', - uri='http://pangalactic.us/test/lib/') +registerNamespace(PgefNamespace(id='pgeftest', + uri='http://pangalactic.us/test/lib/')) +# 'pgeftesttmp' namespace # PGEF temporary test object namespace (for objects created during test runs). # NOTE: insertion of other names into this namespace may cause some unit tests # to fail. -namespaces['pgeftesttmp'] = PgefNamespace(id='pgeftesttmp', - uri='http://pangalactic.us/test/tmp/') +registerNamespace(PgefNamespace(id='pgeftesttmp', + uri='http://pangalactic.us/test/tmp/')) +# 'pgefobjects' namespace # Namespace for PGEF reference objects (e.g., the 'admin' Person object). -namespaces['pgefobjects'] = PgefNamespace(id='pgefobjects', - uri='http://pangalactic.us/objects/') +registerNamespace(PgefNamespace(id='pgefobjects', + uri='http://pangalactic.us/objects/')) +# 'world' namespace # A completely generic namespace for use when no specific namespace seems # appropriate -- should be used with the awareness that it may get "crowded" # eventually ... ;) -namespaces['world'] = PgefNamespace(id='world', - uri='http://earth.milkyway.universe/') - -# MIME media-types namespace -namespaces['mime'] = PgefNamespace(id='mime', - uri='http://www.iana.org/assignments/media-types/') - -# allspace maps namespace prefixes to uris; -# allprefix maps namespace uris to prefixes. -allspace = {} -allprefix = {} -for ns in namespaces.values(): - allspace[ns.id] = ns.uri - allprefix[ns.uri] = ns.id +registerNamespace(PgefNamespace(id='world', + uri='http://earth.milkyway.universe/')) +# 'mime' namespace +# MIME media-types +registerNamespace(PgefNamespace(id='mime', + uri='http://www.iana.org/assignments/media-types/')) def u2q(uri): """ Get the qname for a URI. + + @param uri: a URI + @type uri: C{str} """ using_hash = False slash = uri.rfind('/') @@ -180,20 +202,23 @@ using_hash = True ns_uri = uri[:hash] name = uri[hash+1:] - if ns_uri not in allprefixes: + if ns_uri not in allprefix: if using_hash: # try funky, stupid, idiotic, illegal uri ns_uri = ns_uri+'#' - if ns_uri not in allprefixes: + if ns_uri not in allprefix: raise ValueError, 'unknown namespace: %s' % ns_uri else: raise ValueError, 'unknown namespace: %s' % ns_uri - qname = ':'.join([allprefixes[ns_uri], name]) + qname = ':'.join([allprefix[ns_uri], name]) return qname def q2u(qname): """ Get the URI for a qname. + + @param qname: a string of the form C{'prefix:localname'} + @type qname: C{str} """ if ':' not in qname: if not '#' in qname: @@ -202,8 +227,8 @@ raise ValueError, 'invalid qname' else: prefix, name = qname.split(':') - if prefix in allspace: - ns = allspace[prefix] + if prefix in namespaces: + ns = namespaces[prefix] if ns.uri.endswith('/') or ns.uri.endswith('#'): uri = ''.join([ns.uri, name]) else: @@ -248,7 +273,8 @@ nsdict = {} for event, elem in iterparse(source, events=['start-ns']): if event == 'start-ns': - nsdict[elem[0]] = (PgefNamespace(id=elem[0], uri=elem[1])) + nsdict[elem[0]] = elem[1] + registerNamespace(PgefNamespace(elem[0], elem[1])) return nsdict def getETName(name, nsdict): Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.148 PanGalactic/pangalactic/meta/registry.py:1.149 --- PanGalactic/pangalactic/meta/registry.py:1.148 Fri Nov 3 12:00:01 2006 +++ PanGalactic/pangalactic/meta/registry.py Fri Nov 3 17:38:29 2006 @@ -1,9 +1,9 @@ -# $Id: registry.py,v 1.148 2006/11/03 17:00:01 waterbug Exp $ +# $Id: registry.py,v 1.149 2006/11/03 22:38:29 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.148 $ +@version: $Revision: 1.149 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of @@ -12,7 +12,7 @@ objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.148 $"[11:-2] +__version__ = "$Revision: 1.149 $"[11:-2] # Python import glob @@ -35,7 +35,7 @@ from pangalactic.meta.defaults import READ_ONLY from pangalactic.meta.kb import KB from pangalactic.meta.metaobjects import classes, nspaces, properties -from pangalactic.meta.names import PgefNamespace +from pangalactic.meta.names import PgefNamespace, registerNamespace from pangalactic.meta.names import namespaces, allspace, allprefix from pangalactic.meta.pgefobject import PgefObject from pangalactic.meta.pgefproperty import PgefProperty @@ -205,13 +205,13 @@ # self.log.debug('interface names: %s' % str(i_names)) # self.log.debug('property names: %s' % str(p_names)) for nsprefix in n_names: - if nsprefix not in nspaces: + if nsprefix not in namespaces: nsextr = getattr(nspaces, nsprefix) ns = PgefNamespace(id=nsprefix, uri=nsextr['uri'], names=nsextr['names'], complete=nsextr['complete']) - self.registerNamespace(ns) + registerNamespace(ns) for n in i_names: props[n] = [] for name in p_names: @@ -322,25 +322,33 @@ app_owl_filepaths = glob.glob(os.path.join(app_kb_dir, '*.owl')) self.log.info(' - registry: checking for files in plugins/owl ...') if app_owl_filepaths: + # NOTE: if OWL file(s) are found in 'plugins/owl', the domain + # interfaces will always be rebuilt. (TODO: make this + # user-selectable.) app_prefixes = [] if self.owl_graph is None: self.owl_graph = KB() for owl_file in app_owl_filepaths: self.log.info(' + found: %s' % owl_file) - # build app-specific interfaces - # NOTE: if OWL file(s) are found in 'plugins/owl', the domain - # interfaces will always be rebuilt. (TODO: make this - # user-selectable.) + if not self.sources.get(owl_file): + self.sources[owl_file] = {} owl_data = open(owl_file, 'r').read() - ontology_name = kb.getOntologyName(StringIO(owl_data)) - if not self.sources.get(ontology_name): - self.sources[ontology_name] = [] + nsdict = getNamespacesFromSource(StringIO(owl_data)) + self.sources[owl_file]['namespaces'] = nsdict + for prefix, uri in nsdict.items(): + registerNamespace(PgefNamespace(prefix, uri)) + # use nsdict (instead of p.m.names.namespaces) with + # getOntologyName because the Ontology might be in a local + # namespace (prefix == ''), which nsdict would resolve but would + # not be registered in p.m.names.namespaces + ontology_name = kb.getOntologyName(StringIO(owl_data), nsdict) # TODO: use a PgefSource object here instead of owl_file # (hopefully with some more metadata) self.sources[ontology_name].append(owl_file) app_prefixes.append(ontology_name) - namespaces = self.owl_graph.readRdf(StringIO(owl_data)) + self.owl_graph.readRdf(StringIO(owl_data), nsdict=nsdict) for prefix in app_prefixes: + # build app-specific interfaces self.createInterfacesFromSource(nsprefix=prefix) else: self.log.info(' + no files found.') @@ -391,7 +399,7 @@ if hasattr(self, 'owl_graph'): source = self.owl_graph else: - self.log.info(' + no source and no owl_graph; nothing done.') + nsdict=self.log.info(' + no source and no owl_graph; nothing done.') return self.log.info(' + source = %s' % str(source)) self.log.info(' + nsprefix = %s' % nsprefix) @@ -785,7 +793,7 @@ uri=nsextr['uri'], names=nsextr['names'], complete=nsextr['complete']) - self.registerNamespace(ns) + registerNamespace(ns) for n in i_names: props[n] = [] for name in p_names: @@ -895,6 +903,7 @@ e['_schema_name'] = 'PmofClass' # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! + # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! def registerSource(self, source): """ Add a source to the registry's C{sources} dictionary, and @@ -908,20 +917,7 @@ namespaces[namespace.id] = namespace allspace[namespace.id] = namespace.uri allprefix[namespace.uri] = namespace.id - - def registerNamespace(self, namespace): - """ - Add a C{PgefNamespace} to the registry's C{namespaces} dictionary, and - update p.meta.names.[allspace, allprefix]. - - @param namespace: a namespace - @type namespace: C{PgefNamespace} - """ - if ((namespace.id not in namespaces) and - (namespace.uri not in [ns.uri for ns in namespaces.values()])): - namespaces[namespace.id] = namespace - allspace[namespace.id] = namespace.uri - allprefix[namespace.uri] = namespace.id + # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! def registerInterface(self, interface): """ From waterbug at step.nasa.gov Sat Nov 4 00:48:16 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Sat Nov 4 00:48:18 2006 Subject: [pangalactic-commits] Amusing how hard this was to see! Message-ID: <200611040548.kA45mGNu008296@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/test/runtests 1.24 1.25 Log message: Amusing how hard this was to see! Index: PanGalactic/pangalactic/test/runtests diff -u PanGalactic/pangalactic/test/runtests:1.24 PanGalactic/pangalactic/test/runtests:1.25 --- PanGalactic/pangalactic/test/runtests:1.24 Tue Sep 26 00:40:57 2006 +++ PanGalactic/pangalactic/test/runtests Sat Nov 4 00:48:14 2006 @@ -1,6 +1,6 @@ #!/bin/sh -# $Id: runtests,v 1.24 2006/09/26 04:40:57 waterbug Exp $ +# $Id: runtests,v 1.25 2006/11/04 05:48:14 waterbug Exp $ trial test_sql.py @@ -23,7 +23,7 @@ test_chronosynclastic_addRecords.py \ test_chronosynclastic_addObjects.py \ test_chronosynclastic_updateObjects.py \ -test_pger_changePasswd.py \ +test_pger_changePassword.py \ test_pger_getObjectsByOids.py \ test_pger_getObjectsE.py \ test_pger_getObjectsO.py \ @@ -36,7 +36,7 @@ test_pger_updateObjects.py \ test_pger_addFile.py \ test_pger_addVersions.py \ -test_xmlrpc_changePasswd.py \ +test_xmlrpc_changePassword.py \ test_xmlrpc_getObjects.py \ test_xmlrpc_getObjectsByOids.py \ test_xmlrpc_search.py \ From waterbug at step.nasa.gov Sat Nov 4 00:49:42 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Sat Nov 4 00:49:44 2006 Subject: [pangalactic-commits] New namespace machinery now passing tests ... Message-ID: <200611040549.kA45ngSP008335@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/names.py 1.35 1.36 PanGalactic/pangalactic/meta/registry.py 1.149 1.150 PanGalactic/pangalactic/node/uberorb.py 1.109 1.110 PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py 1.14 1.15 PanGalactic/pangalactic/repo/pger.py 1.137 1.138 PanGalactic/pangalactic/utils/io/interfaces.py 1.2 1.3 Log message: New namespace machinery now passing tests ... so far so good. Index: PanGalactic/pangalactic/node/uberorb.py diff -u PanGalactic/pangalactic/node/uberorb.py:1.109 PanGalactic/pangalactic/node/uberorb.py:1.110 --- PanGalactic/pangalactic/node/uberorb.py:1.109 Thu Nov 2 14:58:09 2006 +++ PanGalactic/pangalactic/node/uberorb.py Sat Nov 4 00:49:38 2006 @@ -1,11 +1,11 @@ -# $Id: uberorb.py,v 1.109 2006/11/02 19:58:09 waterbug Exp $ +# $Id: uberorb.py,v 1.110 2006/11/04 05:49:38 waterbug Exp $ # -*- test-case-name: pangalactic.test.test_uberorb -*- """ A PanGalaxian node's UberORB -@version: $Revision: 1.109 $ +@version: $Revision: 1.110 $ """ -__version__ = "$Revision: 1.109 $"[11:-2] +__version__ = "$Revision: 1.110 $"[11:-2] import codecs import copy @@ -29,7 +29,6 @@ from pangalactic.meta.interfaces import IMofFactory from pangalactic.meta.pgefobject import PgefObject from pangalactic.meta.registry import PanGalacticRegistry -from pangalactic.meta.names import allspace from pangalactic.node import state, prefs from pangalactic.node.gui.utils.defaults import VERSION_PROPERTIES from pangalactic.node.gui.utils.display_maps import updateDisplayMaps Index: PanGalactic/pangalactic/meta/names.py diff -u PanGalactic/pangalactic/meta/names.py:1.35 PanGalactic/pangalactic/meta/names.py:1.36 --- PanGalactic/pangalactic/meta/names.py:1.35 Fri Nov 3 17:38:29 2006 +++ PanGalactic/pangalactic/meta/names.py Sat Nov 4 00:49:38 2006 @@ -1,12 +1,12 @@ -# $Id: names.py,v 1.35 2006/11/03 22:38:29 waterbug Exp $ +# $Id: names.py,v 1.36 2006/11/04 05:49:38 waterbug Exp $ """ Classes, functions, and services for handling identifiers, addresses, and namespaces. -@version: $Revision: 1.35 $ +@version: $Revision: 1.36 $ """ -__version__ = "$Revision: 1.35 $"[11:-2] +__version__ = "$Revision: 1.36 $"[11:-2] from sets import Set from elementtree.ElementTree import iterparse @@ -217,7 +217,7 @@ """ Get the URI for a qname. - @param qname: a string of the form C{'prefix:localname'} + @param qname: a string of the form C{'[prefix:]localname'} @type qname: C{str} """ if ':' not in qname: Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.149 PanGalactic/pangalactic/meta/registry.py:1.150 --- PanGalactic/pangalactic/meta/registry.py:1.149 Fri Nov 3 17:38:29 2006 +++ PanGalactic/pangalactic/meta/registry.py Sat Nov 4 00:49:38 2006 @@ -1,9 +1,9 @@ -# $Id: registry.py,v 1.149 2006/11/03 22:38:29 waterbug Exp $ +# $Id: registry.py,v 1.150 2006/11/04 05:49:38 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.149 $ +@version: $Revision: 1.150 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of @@ -12,7 +12,7 @@ objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.149 $"[11:-2] +__version__ = "$Revision: 1.150 $"[11:-2] # Python import glob @@ -22,6 +22,7 @@ import string import sys from sets import Set +from StringIO import StringIO from pprint import pprint # Twisted @@ -37,6 +38,7 @@ from pangalactic.meta.metaobjects import classes, nspaces, properties from pangalactic.meta.names import PgefNamespace, registerNamespace from pangalactic.meta.names import namespaces, allspace, allprefix +from pangalactic.meta.names import getNamespacesFromSource from pangalactic.meta.pgefobject import PgefObject from pangalactic.meta.pgefproperty import PgefProperty from pangalactic.meta.utils import getDefault @@ -341,10 +343,8 @@ # getOntologyName because the Ontology might be in a local # namespace (prefix == ''), which nsdict would resolve but would # not be registered in p.m.names.namespaces - ontology_name = kb.getOntologyName(StringIO(owl_data), nsdict) - # TODO: use a PgefSource object here instead of owl_file - # (hopefully with some more metadata) - self.sources[ontology_name].append(owl_file) + ontology_name = self.owl_graph.getOntologyName( + StringIO(owl_data), nsdict) app_prefixes.append(ontology_name) self.owl_graph.readRdf(StringIO(owl_data), nsdict=nsdict) for prefix in app_prefixes: @@ -542,8 +542,8 @@ f.close() if to_python: # Write imported interfaces, properties, and namespaces to the - # [classes, properties, namespaces] modules, respectively. In case - # the files exist, clear them first by opening in write mode ... + # [classes, properties, nspaces] modules, respectively. In case the + # files exist, clear them first by opening in write mode ... f = open(os.path.join(to_python, 'classes.py'), 'w') f.close() # ... and then in append mode to write the extracts ... @@ -567,16 +567,16 @@ # self.log.debug(' %s properties written to properties.py' % ( # str(len(propdict)))) # save namespaces as extracts of PmofNamespace objects - f = open(os.path.join(to_python, 'namespaces.py'), 'w') + f = open(os.path.join(to_python, 'nspaces.py'), 'w') f.close() - f = open(os.path.join(to_python, 'namespaces.py'), 'a') + f = open(os.path.join(to_python, 'nspaces.py'), 'a') nswritten = 0 for n in nsdict: pprint(extracts[n], f) f.write('\n') nswritten += 1 f.close() - # self.log.debug(' %s namespaces written to namespaces.py' % ( + # self.log.debug(' %s namespaces written to nspaces.py' % ( # str(len(nswritten)))) # update registry [meta object] extracts from the imported ontology -- # its Classes and Properties are assumed authoritative (modulo Index: PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py diff -u PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py:1.14 PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py:1.15 --- PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py:1.14 Thu Nov 2 04:02:37 2006 +++ PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py Sat Nov 4 00:49:39 2006 @@ -1,12 +1,12 @@ -# $Id: pgxnobjectwiz.py,v 1.14 2006/11/02 09:02:37 waterbug Exp $ +# $Id: pgxnobjectwiz.py,v 1.15 2006/11/04 05:49:39 waterbug Exp $ """ PanGalaxian Object Wizard A wizard to assist creation and cloning of PanGalaxianObject instances. -@version: $Revision: 1.14 $ +@version: $Revision: 1.15 $ """ -__version__ = "$Revision: 1.14 $"[11:-2] +__version__ = "$Revision: 1.15 $"[11:-2] from pprint import pprint import wx @@ -14,7 +14,7 @@ from wx.lib.rcsizer import RowColSizer from pangalactic.meta.defaults import READ_ONLY_NS -from pangalactic.meta.names import allspace +from pangalactic.meta.names import namespaces from pangalactic.node.gui.dialogs.pgxnwizard import PanGalaxianWizard from pangalactic.node.gui.dialogs.pgxnwizard import TitledPage from pangalactic.node.gui.dialogs.pgxnwizard import makePageTitle @@ -133,9 +133,8 @@ # namespace selection # TODO: this needs to be sensitive to mode, e.g. 'meta' or 'normal', # and show only the appropriate namespaces for the mode. - namespaces = filter(lambda x: x.id not in READ_ONLY_NS, - allspace.values()) - ns_choices = [(ns.id, ns.uri) for ns in namespaces] + nslist = filter(lambda x: x.id not in READ_ONLY_NS, namespaces.values()) + ns_choices = [(ns.id, ns.uri) for ns in nslist] self.st_select_ns = wx.StaticText(self, label='Select a namespace:') self.st_select_ns.SetFont(bold) Index: PanGalactic/pangalactic/repo/pger.py diff -u PanGalactic/pangalactic/repo/pger.py:1.137 PanGalactic/pangalactic/repo/pger.py:1.138 --- PanGalactic/pangalactic/repo/pger.py:1.137 Thu Nov 2 14:58:11 2006 +++ PanGalactic/pangalactic/repo/pger.py Sat Nov 4 00:49:40 2006 @@ -1,10 +1,10 @@ -# $Id: pger.py,v 1.137 2006/11/02 19:58:11 waterbug Exp $ +# $Id: pger.py,v 1.138 2006/11/04 05:49:40 waterbug Exp $ """ Pan Galactic Entropy Reverser module -@version: $Revision: 1.137 $ +@version: $Revision: 1.138 $ """ -__version__ = "$Revision: 1.137 $"[11:-2] +__version__ = "$Revision: 1.138 $"[11:-2] import base64 import sys @@ -19,11 +19,11 @@ from twisted.python import reflect # PanGalactic imports ... +from pangalactic.repo.chronosynclastic import Infundibulum +from pangalactic.repo.pgercred import UserDbCredChecker from pangalactic.utils import pgefexceptions from pangalactic.utils.datetimes import dt2str, dtstamp from pangalactic.utils.identity import generateOid -from pangalactic.repo.chronosynclastic import Infundibulum -from pangalactic.repo.pgercred import UserDbCredChecker class Pger(MultiService): @@ -788,33 +788,3 @@ res.addCallback(lambda x: [r[0] for r in x]) return res - # TODO: this does not work yet -- just moved here from chronosynclastic. - # (Definitely belongs here and not there.) - def _syncNamespaces(self): - """ - If any namespaces in self.registry do not exist in PGER, add them to - PGER. - """ - # print " - in _syncNamespaces" - dt = dtstamp() - ns_extracts = [] - getns = 'select _oid from _pan_galactic_namespace;' - conn = psycopg2.connect(database=self.database) - curs = conn.cursor() - curs.execute(getns) - ns_ids = [r[0] for r in curs.fetchall()] - conn.commit() - for i in self.registry.allspace: - if i and i not in ns_ids: - nsex = {'_schema_name' : 'PmofNamespace', - 'oid' : self.registry.allspace[i].uri, - 'id' : i, 'uri' : self.registry.allspace[i].uri, - 'owner' : 'admin', 'creator' : 'admin', - 'modifier' : 'admin', 'create_datetime' : dt, - 'mod_datetime' : dt} - ns_extracts.append(nsex) - if ns_extracts: - print " adding namespaces to repository" - self._addRecordsBlocking(self._extracts2Records(ns_extracts)) - return - From waterbug at step.nasa.gov Sun Nov 5 01:29:29 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Sun Nov 5 01:29:31 2006 Subject: [pangalactic-commits] PgxnObjectWizard: right-click shows class description. Message-ID: <200611050629.kA56TTcc011224@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py 1.4 1.5 Log message: PgxnObjectWizard: right-click shows class description. Index: PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py:1.4 PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py:1.5 --- PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py:1.4 Sun Oct 29 03:06:10 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py Sun Nov 5 01:29:27 2006 @@ -1,11 +1,12 @@ """ PanGalaxian's custom choice widget -@version: $Revision: 1.4 $ +@version: $Revision: 1.5 $ """ -__version__ = "$Revision: 1.4 $"[11:-2] +__version__ = "$Revision: 1.5 $"[11:-2] from pprint import pprint +import wx from pangalactic.node.gui.widgets.pgxncombo import PgxnCombo from pangalactic.node.uberorb import orb @@ -24,6 +25,7 @@ items = self.getIfChoices() PgxnCombo.__init__(self, parent, label=label, size=size, items=items, any=False) + self.Bind(wx.EVT_RIGHT_DOWN, self.onHelp) def getIfSel(self): return self.items[self.GetSelection()] @@ -66,3 +68,9 @@ if_choices.append((label, iname_lookup[label])) return if_choices + def onHelp(self, event): + """ + Display the definition of the selected Class. + """ + text = str(orb.interfaces[self.selected].getTaggedValue('description')) + helpwin = wx.TipWindow(self, text or 'No definition', 250) From waterbug at step.nasa.gov Sun Nov 5 02:31:57 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Sun Nov 5 02:31:59 2006 Subject: [pangalactic-commits] Better docstring for importApplicationOntologies. Message-ID: <200611050731.kA57VvDn011271@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/registry.py 1.150 1.151 Log message: Better docstring for importApplicationOntologies. Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.150 PanGalactic/pangalactic/meta/registry.py:1.151 --- PanGalactic/pangalactic/meta/registry.py:1.150 Sat Nov 4 00:49:38 2006 +++ PanGalactic/pangalactic/meta/registry.py Sun Nov 5 02:31:55 2006 @@ -1,9 +1,9 @@ -# $Id: registry.py,v 1.150 2006/11/04 05:49:38 waterbug Exp $ +# $Id: registry.py,v 1.151 2006/11/05 07:31:55 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.150 $ +@version: $Revision: 1.151 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of @@ -12,7 +12,7 @@ objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.150 $"[11:-2] +__version__ = "$Revision: 1.151 $"[11:-2] # Python import glob @@ -295,9 +295,9 @@ Application ontologies are imported from OWL files found in the 'plugins/owl' subdirectory of the user's PANGALAXIAN home directory or - the server's home directory. Currently, each application ontology must - be contained in a single OWL file, and the base name of the OWL file - must be the application's namespace prefix. + the server's home directory. Current PanGalactic OWL reading + capabilities allow each application ontology to span multiple OWL files, + but each OWL file can only contain all or part of a single ontology. @param homedir: the directory in which live the cache directory ('registry') and the plugins directory ('plugins/owl'). From waterbug at step.nasa.gov Sun Nov 5 03:14:43 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Sun Nov 5 03:14:44 2006 Subject: [pangalactic-commits] PgxnObjectWizard: class definition in TextCtrl ... Message-ID: <200611050814.kA58EhGH011364@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py 1.15 1.16 PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py 1.5 1.6 Log message: PgxnObjectWizard: class definition in TextCtrl ... better cross-platform support -- Mac doesn't allow right-click on a select widget to have a different action than left-click ... :( Index: PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py diff -u PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py:1.15 PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py:1.16 --- PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py:1.15 Sat Nov 4 00:49:39 2006 +++ PanGalactic/pangalactic/node/gui/dialogs/pgxnobjectwiz.py Sun Nov 5 03:14:40 2006 @@ -1,12 +1,12 @@ -# $Id: pgxnobjectwiz.py,v 1.15 2006/11/04 05:49:39 waterbug Exp $ +# $Id: pgxnobjectwiz.py,v 1.16 2006/11/05 08:14:40 waterbug Exp $ """ PanGalaxian Object Wizard A wizard to assist creation and cloning of PanGalaxianObject instances. -@version: $Revision: 1.15 $ +@version: $Revision: 1.16 $ """ -__version__ = "$Revision: 1.15 $"[11:-2] +__version__ = "$Revision: 1.16 $"[11:-2] from pprint import pprint import wx @@ -94,9 +94,16 @@ self.sizer.Add(wx.StaticText(self, -1, """Select the Class of the object you wish to create:""")) self.if_combo = PgxnIfCombo(self) + self.if_def_label = wx.StaticText(self, -1, 'Class Definition:') + text = str(orb.interfaces['Identifiable'].getTaggedValue('description')) + self.if_def = wx.TextCtrl(self, -1, text, + style=wx.TE_READONLY|wx.TE_MULTILINE, + size=(250, 250)) # PgxnIfCombo's 'if_sel' member gives the selected Interface name fgsizer = wx.FlexGridSizer(1, 1, 5, 0) - fgsizer.Add(self.if_combo, 0, wx.EXPAND|wx.ALIGN_LEFT|wx.ALL, 5) + fgsizer.Add(self.if_combo, 0, wx.EXPAND|wx.ALIGN_LEFT) + fgsizer.Add(self.if_def_label, 0, wx.EXPAND|wx.ALIGN_LEFT) + fgsizer.Add(self.if_def, 0, wx.EXPAND|wx.ALIGN_LEFT) self.sizer.Add(fgsizer, -1) self.fgsizer = fgsizer self.Bind(wx.EVT_COMBOBOX, self.onClassSelect, self.if_combo) @@ -115,8 +122,12 @@ def onClassSelect(self, event): # print ' onClassSelect' + text = str(orb.interfaces[self.if_combo.selected + ].getTaggedValue('description')) or '[No definition available]' + self.if_def.SetValue(text) self.parent.FindWindowById(wx.ID_FORWARD).Enable() + class IdSelectionPage(wiz.PyWizardPage): """ A wizard page to specify identification information for a new object. Index: PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py:1.5 PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py:1.6 --- PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py:1.5 Sun Nov 5 01:29:27 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnifcombo.py Sun Nov 5 03:14:41 2006 @@ -1,9 +1,9 @@ """ PanGalaxian's custom choice widget -@version: $Revision: 1.5 $ +@version: $Revision: 1.6 $ """ -__version__ = "$Revision: 1.5 $"[11:-2] +__version__ = "$Revision: 1.6 $"[11:-2] from pprint import pprint import wx @@ -25,7 +25,6 @@ items = self.getIfChoices() PgxnCombo.__init__(self, parent, label=label, size=size, items=items, any=False) - self.Bind(wx.EVT_RIGHT_DOWN, self.onHelp) def getIfSel(self): return self.items[self.GetSelection()] @@ -68,9 +67,3 @@ if_choices.append((label, iname_lookup[label])) return if_choices - def onHelp(self, event): - """ - Display the definition of the selected Class. - """ - text = str(orb.interfaces[self.selected].getTaggedValue('description')) - helpwin = wx.TipWindow(self, text or 'No definition', 250) From waterbug at step.nasa.gov Mon Nov 6 01:18:00 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Mon Nov 6 01:18:03 2006 Subject: [pangalactic-commits] Updates to TODO list and PMOF docs. Message-ID: <200611060618.kA66I091030493@ned.gsfc.nasa.gov> Modified files: PanGalactic/TODO 1.104 1.105 PanGalactic/doc/PgefManual.txt 1.45 1.46 Log message: Updates to TODO list and PMOF docs. Index: PanGalactic/TODO diff -u PanGalactic/TODO:1.104 PanGalactic/TODO:1.105 --- PanGalactic/TODO:1.104 Thu Nov 2 04:02:34 2006 +++ PanGalactic/TODO Mon Nov 6 01:17:58 2006 @@ -46,6 +46,10 @@ i.e., changes automatically saved to cache upon changing from edit mode to view mode; persistent journal enables undo/redo of any uncommitted changes + [-] help for "New Object" dialog: link or button for more help on selected + Class bring up help viewer or browser (configurable) with more detailed + help, including verbose definition, examples, all Property definitions, + etc. [-] journalling options: [-] after commit, journal is discarded [-] absolute: journal is persisted until user clears it, to it retains @@ -510,5 +514,5 @@ [+] one-many (aggregate attrs) -------------------------------------------------------------------------- -# $Id: TODO,v 1.104 2006/11/02 09:02:34 waterbug Exp $ +# $Id: TODO,v 1.105 2006/11/06 06:17:58 waterbug Exp $ Index: PanGalactic/doc/PgefManual.txt diff -u PanGalactic/doc/PgefManual.txt:1.45 PanGalactic/doc/PgefManual.txt:1.46 --- PanGalactic/doc/PgefManual.txt:1.45 Wed Oct 25 17:09:48 2006 +++ PanGalactic/doc/PgefManual.txt Mon Nov 6 01:17:58 2006 @@ -7,8 +7,8 @@ :Author: Stephen Waterbury :Author: Ginny Keech -:Version: $Revision: 1.45 $ -:Date: $Date: 2006/10/25 21:09:48 $ +:Version: $Revision: 1.46 $ +:Date: $Date: 2006/11/06 06:17:58 $ .. contents:: Table of Contents @@ -608,8 +608,9 @@ PanGalactic application. The **PanGalactic Meta Object Facility** does not conform to the `OMG Meta Object Facility` (`MOF`) standard [TODO: MOF link] but has in common with it the purpose of managing meta objects that are used -to define application classes and objects, and importing and exporting class -definitions and other information via XMI is on the **PanGalactic** Roadmap. +to define application classes and objects, and (`not implemented yet`) +importing and exporting class definitions and other information via XMI is on +the **PanGalactic** Roadmap. The modules in ``pangalactic.meta``, and in particular ``pangalactic.meta.registry.PanGalacticRegistry``, implement the **PanGalactic @@ -626,7 +627,49 @@ instances, defining only non-method attributes. The PanGalactic Meta Object classes defined in the **PanGalactic Meta Object -Facility** are: +Facility** mirror their runtime counterparts and are intended to be used as +`models` of the runtime metaobjects, which can be edited, versioned, and +managed just like any other PanGalactic object. + ++------------------------+--------------------------------+--------------------------------+ +| | | | +| PanGalactic Metaobject | PGEF Runtime Metaobject | Purpose and Characteristics | +| | | | ++========================+================================+================================+ +| PmofNamespace | PgefNamespace | Enables scoped local names. | ++------------------------+--------------------------------+--------------------------------+ +| PmofProperty | PgefProperty | Represents an attribute, | +| | | relation, or mapping between | +| | | the instances of a class and | +| | | instances of another class or | +| | | a datatype. | ++------------------------+--------------------------------+--------------------------------+ +| PmofClass | Interface | Represents a named set of | +| | | characteristics and | +| | | functionalities. | ++------------------------+--------------------------------+--------------------------------+ +| `[the metaobjects below are not yet implemented in PanGalactic:]` | ++------------------------+--------------------------------+--------------------------------+ +| PmofOntology | | A named set of Classes, | +| | | Properties, and constraints. | ++------------------------+--------------------------------+--------------------------------+ +| PmofVocabulary | | A Namespace whose names have | +| | | associated definitions. | ++------------------------+--------------------------------+--------------------------------+ +| PmofTaxonomy | | A Vocabulary with an | +| | | inheritance relationship. | ++------------------------+--------------------------------+--------------------------------+ +| PmofSchema | | Structurally isomorphic to an | +| | | Ontology, but with a | +| | | prescriptive, rather than | +| | | descriptive, semantic. | ++------------------------+--------------------------------+--------------------------------+ +| PmofModel | | The superclass of the family | +| | | of "information models" (e.g. | +| | | UML models, etc.) | ++------------------------+--------------------------------+--------------------------------+ + + - **pgefmeta:PmofNamespace** @@ -634,8 +677,8 @@ ``uri``, and its semantics is the same as that of an XML namespace. Identifiers (the ``id`` attribute) and names (the ``name`` attribute) of **PanGalactic** objects are expected to be defined within explicit - namespaces, which could be, e.g., the `URI` of a ``project`` or an - ``organization``. + namespaces, which could be, e.g., the `URI` of a project or an + organization. - **pgefmeta:PmofVocabulary** `(not implemented yet)` @@ -1825,15 +1868,18 @@ .. _OWL: http://www.w3.org/TR/owl-guide/ .. _OWL Property: http://www.w3.org/TR/2004/REC-owl-guide-20040210/#SimpleProperties .. _PanGalaxian: `The PGEF GUI: PanGalaxian`_ +.. _PanGalactic: `The PanGalactic Engineering Framework (PGEF)`_ .. _PanGalactic Core Ontology: `The PanGalactic Core Ontology`_ .. _PanGalactic Fu: `The PanGalactic Fu`_ .. _PanGalactic Meta Ontology: `The PanGalactic Meta Ontology`_ .. _PanGalactic Meta Object Facility: `The PanGalactic Meta Object Facility`_ .. _PanGalactic Meta Module: http://ned.gsfc.nasa.gov/pangalapidoc/pangalactic.meta.html .. _PanGalactic Ontology: `The PanGalactic Ontology`_ +.. _PanGalacticRegistry: pangalactic.meta.registry.PanGalacticRegistry .. _PEP 245: http://python.org/peps/pep-0245.html .. _PgefObject: http://ned.gsfc.nasa.gov/pangalapidoc/pangalactic.core.pgefobject.PgefObject.html .. _PanGalaxianObjectGrid: http://ned.gsfc.nasa.gov/pangalapidoc/pangalactic.node.gui.widget.pgxnobjectgrid.PanGalaxianObjectGrid.html +.. _PGEF: `The PanGalactic Engineering Framework (PGEF)`_ .. _PGER: `Repository Services: The PanGalactic Entropy Reverser (PGER)`_ .. _PgerXmlrpcService: http://ned.gsfc.nasa.gov/pangalapidoc/pangalactic.repo.pgerxmlrpc.PgerXmlrpcService.html .. _PostgreSQL: http://www.postgresql.org @@ -1843,6 +1889,7 @@ .. _ReportLab: http://www.reportlab.org .. _SciPy: http://www.scipy.org .. _Subversion: http://subversion.tigris.org/ +.. _The PanGalactic Engineering Framework (PGEF): http://ned.gsfc.nasa.gov .. _Twisted: http://twistedmatrix.com .. _The Wiki: http://c2.com/cgi/wiki .. _UberORB: `The PanGalaxian UberORB`_ @@ -1850,4 +1897,4 @@ .. _Interfaces: http://www.zope.org/Wikis/Interfaces/FrontPage .. _Interface: Interfaces_ -$Id: PgefManual.txt,v 1.45 2006/10/25 21:09:48 waterbug Exp $ +$Id: PgefManual.txt,v 1.46 2006/11/06 06:17:58 waterbug Exp $ From waterbug at step.nasa.gov Mon Nov 6 10:57:05 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Mon Nov 6 10:57:13 2006 Subject: [pangalactic-commits] pgef_meta needed 'pgef' ns definition. Message-ID: <200611061557.kA6Fv536001943@ned.gsfc.nasa.gov> Modified files: PanGalactic/src/owl/pgef_meta.owl 1.3 1.4 Log message: pgef_meta needed 'pgef' ns definition. From waterbug at step.nasa.gov Mon Nov 6 16:57:15 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Mon Nov 6 16:57:17 2006 Subject: [pangalactic-commits] Rearrange status bar so menu help shows ... Message-ID: <200611062157.kA6LvFAT008143@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/gui/widgets/pgxnstatusbar.py 1.31 1.32 Log message: Rearrange status bar so menu help shows ... in first pane; no more pangalacticon (it should go onto the menu bar as a throbber eventually); offline or repo state is still in the second pane, etc. Index: PanGalactic/pangalactic/node/gui/widgets/pgxnstatusbar.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnstatusbar.py:1.31 PanGalactic/pangalactic/node/gui/widgets/pgxnstatusbar.py:1.32 --- PanGalactic/pangalactic/node/gui/widgets/pgxnstatusbar.py:1.31 Thu Oct 26 15:38:47 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnstatusbar.py Mon Nov 6 16:57:13 2006 @@ -1,11 +1,11 @@ -# $Id: pgxnstatusbar.py,v 1.31 2006/10/26 19:38:47 waterbug Exp $ +# $Id: pgxnstatusbar.py,v 1.32 2006/11/06 21:57:13 waterbug Exp $ """ Custom status bar for PanGalaxian (the PGEF desktop client). -@version: $Revision: 1.31 $ +@version: $Revision: 1.32 $ """ -__version__ = "$Revision: 1.31 $"[11:-2] +__version__ = "$Revision: 1.32 $"[11:-2] # Python core modules import logging @@ -37,21 +37,20 @@ self.SetFieldsCount(6) self.log = logging.getLogger('pgxnstatusbar') # fields: - # 0 - multi-purpose PanGalacticon - # 1 - help on current menu item (maybe) - # 2 - offline or repo status - # 3 - reserved for gauge - # 4 - online/offline images - # 5 - secure/insecure images - # 6 - empty (corner resize handle) - self.SetStatusWidths([22, -4, -1, 50, 25, 25]) + # 0 - help on current menu item (maybe) + # 1 - offline or repo status + # 2 - reserved for gauge + # 3 - online/offline images + # 4 - secure/insecure images + # 5 - empty (corner resize handle) + self.SetStatusWidths([-2, -2, -1, 50, 25, 25]) # PanGalacticon image (field 0): - self.SetStatusText("", 0) - pangalacticon = toolkitimages.getPanGalacticon16Bitmap() - self.pangalacticon = wx.StaticBitmap(self, -1, pangalacticon) - self.pangalacticon.Show() - self.SetStatusText(state.get('repo', ''), 1) # placeholder for field 2 - # online/offline image (field 3): + # self.SetStatusText("", 0) + # pangalacticon = toolkitimages.getPanGalacticon16Bitmap() + # self.pangalacticon = wx.StaticBitmap(self, -1, pangalacticon) + # self.pangalacticon.Show() + self.SetStatusText(state.get('repo', ''), 1) + # online/offline image (field 4): self.bmpon = toolkitimages.getOnlineBitmap() self.bmpoff = toolkitimages.getOfflineBitmap() rect = self.GetFieldRect(3) @@ -71,9 +70,9 @@ """ Reposition widgets within their fields (call this when resized). """ - rect = self.GetFieldRect(0) - self.pangalacticon.SetPosition((rect.x+2, rect.y+2)) - self.pangalacticon.SetSize((rect.width, rect.height)) + # rect = self.GetFieldRect(0) + # self.pangalacticon.SetPosition((rect.x+2, rect.y+2)) + # self.pangalacticon.SetSize((rect.width, rect.height)) rect = self.GetFieldRect(3) self.onbutton.SetPosition((rect.x+1, rect.y+1)) self.onbutton.SetSize((rect.width-2, rect.height)) @@ -114,6 +113,7 @@ self.log.debug(" - state['repo'] = '%s'" % state['repo']) self.log.debug(" - logged in") self.SetStatusText('repo: ' + state['repo'], 1) + # self.SetBackgroundColour((100, 255, 0)) self.onbutton.Hide() self.onbutton.Enable(False) self.offbutton.Show() @@ -127,6 +127,7 @@ state.get('repo'))) self.log.debug(" - logged out") self.SetStatusText('offline', 1) + # self.SetBackgroundColour((255, 255, 255)) self.onbutton.Show() self.onbutton.Enable(True) self.onbutton.SetToolTipString('To log on, click the icon') From waterbug at step.nasa.gov Mon Nov 6 22:53:15 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Mon Nov 6 22:53:17 2006 Subject: [pangalactic-commits] Fully decoupling gui from orb ... Message-ID: <200611070353.kA73rFVl010837@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/pangalaxian.py 1.148 1.149 PanGalactic/pangalactic/node/uberorb.py 1.110 1.111 PanGalactic/pangalactic/node/orb.py 1.1 None Log message: Fully decoupling gui from orb ... also, separate orb module is unnecessary. Index: PanGalactic/pangalactic/node/uberorb.py diff -u PanGalactic/pangalactic/node/uberorb.py:1.110 PanGalactic/pangalactic/node/uberorb.py:1.111 --- PanGalactic/pangalactic/node/uberorb.py:1.110 Sat Nov 4 00:49:38 2006 +++ PanGalactic/pangalactic/node/uberorb.py Mon Nov 6 22:53:13 2006 @@ -1,11 +1,11 @@ -# $Id: uberorb.py,v 1.110 2006/11/04 05:49:38 waterbug Exp $ +# $Id: uberorb.py,v 1.111 2006/11/07 03:53:13 waterbug Exp $ # -*- test-case-name: pangalactic.test.test_uberorb -*- """ A PanGalaxian node's UberORB -@version: $Revision: 1.110 $ +@version: $Revision: 1.111 $ """ -__version__ = "$Revision: 1.110 $"[11:-2] +__version__ = "$Revision: 1.111 $"[11:-2] import codecs import copy @@ -31,7 +31,6 @@ from pangalactic.meta.registry import PanGalacticRegistry from pangalactic.node import state, prefs from pangalactic.node.gui.utils.defaults import VERSION_PROPERTIES -from pangalactic.node.gui.utils.display_maps import updateDisplayMaps from pangalactic.node.cache import ObjectCache from pangalactic.utils.httpupload import upload from pangalactic.utils.pgefexceptions import LocalStorageError @@ -145,7 +144,6 @@ @type home: C{str} """ self.importApplicationOntologies(home) - updateDisplayMaps(self.interfaces, list(self.properties)) self.log.info('dispatching signal "interfaces updated"') dispatcher.send(signal='interfaces updated') Index: PanGalactic/pangalactic/node/pangalaxian.py diff -u PanGalactic/pangalactic/node/pangalaxian.py:1.148 PanGalactic/pangalactic/node/pangalaxian.py:1.149 --- PanGalactic/pangalactic/node/pangalaxian.py:1.148 Thu Nov 2 14:58:09 2006 +++ PanGalactic/pangalactic/node/pangalaxian.py Mon Nov 6 22:53:13 2006 @@ -2,16 +2,16 @@ # -*- coding: ANSI_X3.4-1968 -*- # generated by wxGlade 0.3.5.1 on Tue Feb 1 00:19:02 2005 -# $Id: pangalaxian.py,v 1.148 2006/11/02 19:58:09 waterbug Exp $ +# $Id: pangalaxian.py,v 1.149 2006/11/07 03:53:13 waterbug Exp $ """ Main application module for PanGalaxian, the PGEF desktop client. WE ARE THE PANGALAXIANS! :) -@version: $Revision: 1.148 $ +@version: $Revision: 1.149 $ """ -__version__ = "$Revision: 1.148 $"[11:-2] +__version__ = "$Revision: 1.149 $"[11:-2] # Python import logging @@ -45,6 +45,7 @@ from pangalactic.node.gui.dialogs.reposelect import RepoSelectDialog from pangalactic.node.gui.dialogs.searchframe import SearchFrame from pangalactic.node.gui.dialogs.useradmin import UserAdminDialog +from pangalactic.node.gui.utils.display_maps import updateDisplayMaps from pangalactic.node.gui.widgets.aboutbox import AboutBox from pangalactic.node.gui.widgets.cachebrowser import CacheBrowser from pangalactic.node.gui.widgets.pgxnobject import spawnPgxnObject @@ -329,6 +330,10 @@ self.log.debug(" * %s = %s" % (s, state[s])) # start orb logging orb.startLogging() + # the "interfaces updated" event needs to be registered before + # orb.getAppOntologies is called, because it sends the "interfaces + # updated" message, which needs to trigger onInterfaceUpdate ... + orb.register(self.onInterfaceUpdate, 'interfaces updated') # look for application ontologies in $PANGALAXIAN/plugins/owl and if any # are found, add them to the local registry. (IMPORTANT: currently, # this must be done before initializing the object cache so that cache @@ -503,6 +508,12 @@ # checkin, getProjects, getNamespaces, and getAcusByAssemblyOid. orb.register(self.refreshView, 'updates received') + def onInterfaceUpdate(self): + """ + Perform required actions when the application's interfaces are updated. + (For now, just update the display maps.) + """ + # Event handlers def onSize(self, event): From waterbug at step.nasa.gov Mon Nov 6 22:56:07 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Mon Nov 6 22:56:09 2006 Subject: [pangalactic-commits] orb is now fully decoupled from gui. Message-ID: <200611070356.kA73u785010873@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/uberorb.py 1.111 1.112 Log message: orb is now fully decoupled from gui. Index: PanGalactic/pangalactic/node/uberorb.py diff -u PanGalactic/pangalactic/node/uberorb.py:1.111 PanGalactic/pangalactic/node/uberorb.py:1.112 --- PanGalactic/pangalactic/node/uberorb.py:1.111 Mon Nov 6 22:53:13 2006 +++ PanGalactic/pangalactic/node/uberorb.py Mon Nov 6 22:56:06 2006 @@ -1,11 +1,11 @@ -# $Id: uberorb.py,v 1.111 2006/11/07 03:53:13 waterbug Exp $ +# $Id: uberorb.py,v 1.112 2006/11/07 03:56:06 waterbug Exp $ # -*- test-case-name: pangalactic.test.test_uberorb -*- """ A PanGalaxian node's UberORB -@version: $Revision: 1.111 $ +@version: $Revision: 1.112 $ """ -__version__ = "$Revision: 1.111 $"[11:-2] +__version__ = "$Revision: 1.112 $"[11:-2] import codecs import copy @@ -30,7 +30,6 @@ from pangalactic.meta.pgefobject import PgefObject from pangalactic.meta.registry import PanGalacticRegistry from pangalactic.node import state, prefs -from pangalactic.node.gui.utils.defaults import VERSION_PROPERTIES from pangalactic.node.cache import ObjectCache from pangalactic.utils.httpupload import upload from pangalactic.utils.pgefexceptions import LocalStorageError @@ -896,5 +895,4 @@ directory may not have been specified yet. """ orb = UberORB() -orb.version_controls = VERSION_PROPERTIES From waterbug at step.nasa.gov Tue Nov 7 08:18:02 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Tue Nov 7 08:18:04 2006 Subject: [pangalactic-commits] PanGalaxianObject still borked, but somewhat better ... Message-ID: <200611071318.kA7DI2ZM013266@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py 1.127 1.128 Log message: PanGalaxianObject still borked, but somewhat better ... Index: PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.127 PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.128 --- PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.127 Thu Nov 2 14:58:10 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py Tue Nov 7 08:18:00 2006 @@ -1,10 +1,10 @@ -# $Id: pgxnobject.py,v 1.127 2006/11/02 19:58:10 waterbug Exp $ +# $Id: pgxnobject.py,v 1.128 2006/11/07 13:18:00 waterbug Exp $ """ PanGalaxianObject (a C{PgefObject} viewer/editor) -@version: $Revision: 1.127 $ +@version: $Revision: 1.128 $ """ -__version__ = "$Revision: 1.127 $"[11:-2] +__version__ = "$Revision: 1.128 $"[11:-2] import logging from pprint import pprint @@ -91,6 +91,7 @@ title=obj._schema.__name__+' :: '+obj.id, pos=pos, size=size, style=style) self.parent = parent + self.panel = wx.Panel(self) self.obj = obj self.log.debug(' - setting up interface map ...') self.interface_map = state['imaps'][self.obj._schema.__name__] @@ -146,7 +147,7 @@ #################################### # Initialize tool bar and all tools #################################### - tb = self.CreateToolBar(wx.TB_HORIZONTAL | wx.NO_BORDER + tb = wx.ToolBar(self.panel, style=wx.TB_HORIZONTAL | wx.NO_BORDER | wx.TB_FLAT | wx.TB_TEXT) self.tb = tb self.exit_tool = tb.AddSimpleTool(80, @@ -199,7 +200,7 @@ if self.versionable: # set up panel for version controls self.log.debug(' - versionable, setting up version info panel') - ctrl_panel = wx.Panel(self) + ctrl_panel = wx.Panel(self.panel) ctrl_sbox = wx.StaticBox(ctrl_panel) ctrl_sizer = wx.StaticBoxSizer(ctrl_sbox, wx.HORIZONTAL) self.base_id_label = wx.StaticText(ctrl_panel, label='Base ID:') @@ -237,21 +238,23 @@ _icon = wx.EmptyIcon() _icon.CopyFromBitmap(toolkitimages.getPanGalacticon16Bitmap()) self.SetIcon(_icon) - self.notebook = PgxnPropertybook(self) + self.notebook = PgxnPropertybook(self.panel, self) self.initPropertybook() - vbox = wx.BoxSizer(wx.VERTICAL) - hbox = wx.BoxSizer(wx.HORIZONTAL) - hbox.Add(self.notebook, 1, wx.EXPAND) - # ctrl_panel has been created above if self.versionable + self.statusbar = PgxnStatusBar(self.panel) + mainsizer = RowColSizer() + mainsizer.Add(self.tb, row=0, col=0, flag=wx.EXPAND) if self.versionable: - vbox.Add(ctrl_panel, 0, wx.EXPAND, 10) - vbox.Add(hbox, 1, wx.EXPAND, 5) - self.statusbar = PgxnStatusBar(self) - vbox.Add(self.statusbar, 0, wx.FIXED_MINSIZE) - self.SetSizer(vbox) - vbox.Fit(self) - vbox.SetSizeHints(self) - self.vbox = vbox + # ctrl_panel has been created above if self.versionable + mainsizer.Add(ctrl_panel, row=1, col=0, flag=wx.EXPAND) + mainsizer.Add(self.notebook, row=2, col=0, flag=wx.EXPAND) + mainsizer.Add(self.statusbar, row=3, col=0, flag=wx.EXPAND) + else: + mainsizer.Add(self.notebook, row=1, col=0, flag=wx.EXPAND) + mainsizer.Add(self.statusbar, row=2, col=0, flag=wx.EXPAND) + self.SetAutoLayout(True) + self.panel.SetSizer(mainsizer) + mainsizer.Fit(self.panel) + mainsizer.SetSizeHints(self) self.Layout() self.Bind(wx.EVT_CLOSE, self.onExit) # register statusbar.onStateChange to receive 'state changed' message @@ -623,7 +626,7 @@ object -- C{pobj.obj}). @type pobj: C{PanGalaxianObject} """ - def __init__(self, parent): + def __init__(self, parent, pobj): """ Initialize a new PgxnPropertybook. @@ -632,7 +635,7 @@ """ self.log = logging.getLogger('PgxnPropertyBook') wx.Notebook.__init__(self, parent) - self.pobj = parent + self.pobj = pobj self.obj = self.pobj.obj self.pages = {} self.panels = {} @@ -675,7 +678,11 @@ # NOTE: the order in which the panels are instantiated is important # here, because the sizer needs to be adjusted to the 'edit' mode, which # is the larger of the view/edit panels. - for mode in ['edit', 'view']: + # NOTE: actually, that's not true any more (since narrative-style text + # editing is now done in an external pop-up): the 'view' mode currently + # turns out to be larger (go figure -- has to do with minutiae of the + # widgets) ... [scw, 2006-11-07] + for mode in ['view', 'edit']: panel = wx.Panel(win, style=wx.CLIP_CHILDREN | wx.FULL_REPAINT_ON_RESIZE | @@ -729,16 +736,18 @@ self.pobj.p_view_widgets[a] = pw else: self.pobj.p_edit_widgets[a] = pw - gridsizer.Add((10, 0), row=row, col=0, flag=wx.EXPAND) + gridsizer.Add((10, -1), row=row, col=0, flag=wx.EXPAND) gridsizer.Add(pw.link, row=row, col=1, flag=wx.ALIGN_RIGHT|wx.ALIGN_CENTER_VERTICAL) - gridsizer.Add((10, 0), row=row, col=2, flag=wx.EXPAND) + gridsizer.Add((10, -1), row=row, col=2, flag=wx.EXPAND) for widget in pw.widgets: if widget: gridsizer.Add(widget, row=row, col=3, flag=wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL) row += 1 - panel.SetSizerAndFit(gridsizer) + # panel.SetSizerAndFit(gridsizer) + panel.SetAutoLayout(True) + panel.SetSizer(gridsizer) gridsizer.SetSizeHints(panel) def resync(self): @@ -756,12 +765,14 @@ if __name__ == '__main__': import os + from pangalactic.node.gui.utils.defaults import DEFAULT_PROPERTY_MAPS from pangalactic.node.gui.utils.display_maps import getDefaultInterfaceMaps from pangalactic.node.gui.utils.display_maps import getDefaultPropertyMaps home = os.environ.get('PANGALAXIAN') if home: state['imaps'] = getDefaultInterfaceMaps(orb.interfaces) - state['pmaps'] = getDefaultPropertyMaps(list(orb.properties)) + state['pmaps'] = getDefaultPropertyMaps(list(orb.properties), + DEFAULT_PROPERTY_MAPS) orb.getAppOntologies(home) p = PgefObject(_schema=orb.interfaces['Mime'], id='Test-1') From waterbug at step.nasa.gov Tue Nov 7 15:17:27 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Tue Nov 7 15:17:29 2006 Subject: [pangalactic-commits] Fix for sizing bug in PanGalaxianObject ... Message-ID: <200611072017.kA7KHRQ5021180@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py 1.128 1.129 Log message: Fix for sizing bug in PanGalaxianObject ... this is funky, but "as it ever was ...": since switching to external editing of narrative text, the 'view mode' widgets are bigger than the 'edit mode' widgets, so in the last few lines of __init__, mode is set to 'view' ('editing=False') transiently, just to get the correct sizing, and then switched to whatever the mode is supposed to be. Ugh, but it works. Index: PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.128 PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.129 --- PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.128 Tue Nov 7 08:18:00 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py Tue Nov 7 15:17:24 2006 @@ -1,10 +1,10 @@ -# $Id: pgxnobject.py,v 1.128 2006/11/07 13:18:00 waterbug Exp $ +# $Id: pgxnobject.py,v 1.129 2006/11/07 20:17:24 waterbug Exp $ """ PanGalaxianObject (a C{PgefObject} viewer/editor) -@version: $Revision: 1.128 $ +@version: $Revision: 1.129 $ """ -__version__ = "$Revision: 1.128 $"[11:-2] +__version__ = "$Revision: 1.129 $"[11:-2] import logging from pprint import pprint @@ -129,10 +129,10 @@ else: self.obj.editor = prefs.get('userid') self.closing = False - # set self.editing True initially so the notebook pages will size to - # their edit mode (larger), then set self.editing to the actual value of + # set self.editing False initially so the notebook pages will size to + # their view mode (larger), then set self.editing to the actual value of # the 'editing' parameter. - self.editing = True + self.editing = False self.setup(parent) self.editing = editing if editing: From waterbug at step.nasa.gov Tue Nov 7 15:41:55 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Tue Nov 7 15:41:57 2006 Subject: [pangalactic-commits] Record bug fix + urgent TODO items. Message-ID: <200611072041.kA7Kftw5021622@ned.gsfc.nasa.gov> Modified files: PanGalactic/TODO 1.105 1.106 Log message: Record bug fix + urgent TODO items. Index: PanGalactic/TODO diff -u PanGalactic/TODO:1.105 PanGalactic/TODO:1.106 --- PanGalactic/TODO:1.105 Mon Nov 6 01:17:58 2006 +++ PanGalactic/TODO Tue Nov 7 15:41:52 2006 @@ -9,6 +9,24 @@ -------------------------------- IMMEDIATE STUFF (this means NOW) -------------------------------- +[-] ENHANCEMENTS: Object updating + [-] Bring repo interaction semantics into line with WebDAV / Subversion: + [-] 'update' should be an explicit, requested action (menu option; button on + toolbar, etc.) -- *not* automatic + [-] versioned objects are *frozen* -- once you have one, it never changes + unless it's a working copy + [-] for working copies, request for update should be explicit, but also + could have publish/subscribe for loosely coupled collaboration on + working copies, or optional tight coupling using pb for real-time + collaboration. +[-] ENHANCEMENTS: Namespace and identity handling + [-] Objects should be identified by namespace-local id's in the user + interface -- oid's are internal + [-] UberORB.getNames and UberORB.getBaseIds should be local-only and aimed + at "project" (i.e., user-writable) namespaces only, not any and all + namespaces. + [-] Namespace name addition "events" should be *pushed* to the client + [-] use Python UUID algorithm to generate oid's [-] *** BUG: if a new version of an interface is defined, PanGalaxian might hang during creation of a new object with that interface because the display_maps stored in state still reflect the previous version. FIX: the @@ -17,12 +35,6 @@ its metaobjects, with info about their versions, so that it realizes what's going on when one of them is redefined in a user owl file (or, when runtime metaobject editing and management is implemented, redefined at runtime). -[-] ENHANCEMENTS: Namespace handling - [-] UberORB.getNames and UberORB.getBaseIds should be local-only and aimed - at "project" (i.e., user-writable) namespaces only, not any and all - namespaces. - [-] Namespace name addition "events" should be *pushed* to the client -[-] ENHANCEMENT: use Python UUID algorithm to generate oid's [-] ENHANCEMENTS: [-] LDAP/X.500 interface [-] ENHANCEMENT: Fix admin capability to add a user: @@ -395,6 +407,12 @@ ---- DONE ---- +[+] *** BUG FIXED: Fix for sizing bug in PanGalaxianObject ... + this is funky, but "same as it ever was ...": since switching to external + editing of narrative text, the 'view mode' widgets are bigger than the 'edit + mode' widgets, so in the last few lines of __init__, mode is set to 'view' + ('editing=False') transiently, just to get the correct sizing, and then + switched to whatever the mode is supposed to be. Ugh, but it works. [+] ENHANCEMENTS: PanGalaxian "Tools/Change Password" dialog [+] ENHANCEMENTS: admin users/"set user password" function [+] is now smarter about adding or changing a user's passwd, and does @@ -514,5 +532,5 @@ [+] one-many (aggregate attrs) -------------------------------------------------------------------------- -# $Id: TODO,v 1.105 2006/11/06 06:17:58 waterbug Exp $ +# $Id: TODO,v 1.106 2006/11/07 20:41:52 waterbug Exp $ From waterbug at step.nasa.gov Thu Nov 9 02:24:16 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 9 02:24:18 2006 Subject: [pangalactic-commits] Update Roadmap to include core interfaces. Message-ID: <200611090724.kA97OGw7009178@ned.gsfc.nasa.gov> Modified files: PanGalactic/doc/PgefRoadmap.txt 1.14 1.15 Log message: Update Roadmap to include core interfaces. Index: PanGalactic/doc/PgefRoadmap.txt diff -u PanGalactic/doc/PgefRoadmap.txt:1.14 PanGalactic/doc/PgefRoadmap.txt:1.15 --- PanGalactic/doc/PgefRoadmap.txt:1.14 Sun Oct 15 04:58:24 2006 +++ PanGalactic/doc/PgefRoadmap.txt Thu Nov 9 02:24:14 2006 @@ -10,20 +10,28 @@ In Order of Priority -------------------- +[*] identify true core PanGalactic interfaces + [*] pre-compile just those + [*] all others will be defined by ontologies (OWL) and other models, at + runtime + [-] document method for adapting ordinary Python objects to the + PanGalactic-Fu interfaces + [*] make registry into a Twisted/Zope-style interface-and-adapter registry +[*] make ui identify all objects by id/id_ns, with oids hidden (this is needed + before Projects admin fns are created/enhanced) [*] add needed admin fns for users and projects [-] add namespaces corresponding to projects to cache and PGER [*] add fns to treat ontologies, Classes, and Properties like any other versioned objects [-] fix orb.kb to keep total graph bound/accessible - * add fns for reporting and exporting to N3 - * also fn to add Ontos/Classes/Props at runtime and save them -[-] add fns to read STEP schema from XSD (Jen-X generated schemas) + [-] add fns for reporting and exporting to N3 + [*] also fn to add Ontos/Classes/Props at runtime and save them +[-] add reader for Expresso/MEXICO-generated XMI reps. of STEP schemas [-] add fns for mapping from STEP schema to pgef, etc. [-] WebDAV interface -- look at Twisted's WebDAV [-] fringe benefit: CalDAV (used by Apple) [-] also look how to integrate with SVN - * direct with pysvn - * trac (fringe benefit: a web interface for issues) + [-] direct with pysvn [-] add ACLs / permissions [-] default: only owner/creator can edit the object (for versioned objects, this means any object with the namespace/baseID of the @@ -101,5 +109,5 @@ [+] implement build process for Mac platform ----------------------------------------------------------------- -# $Id: PgefRoadmap.txt,v 1.14 2006/10/15 08:58:24 waterbug Exp $ +# $Id: PgefRoadmap.txt,v 1.15 2006/11/09 07:24:14 waterbug Exp $ From waterbug at step.nasa.gov Thu Nov 9 12:47:18 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 9 12:47:20 2006 Subject: [pangalactic-commits] getObjectsByProject is not used any more. Message-ID: <200611091747.kA9HlIq8017403@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/uberorb.py 1.112 1.113 Log message: getObjectsByProject is not used any more. Index: PanGalactic/pangalactic/node/uberorb.py diff -u PanGalactic/pangalactic/node/uberorb.py:1.112 PanGalactic/pangalactic/node/uberorb.py:1.113 --- PanGalactic/pangalactic/node/uberorb.py:1.112 Mon Nov 6 22:56:06 2006 +++ PanGalactic/pangalactic/node/uberorb.py Thu Nov 9 12:47:15 2006 @@ -1,11 +1,11 @@ -# $Id: uberorb.py,v 1.112 2006/11/07 03:56:06 waterbug Exp $ +# $Id: uberorb.py,v 1.113 2006/11/09 17:47:15 waterbug Exp $ # -*- test-case-name: pangalactic.test.test_uberorb -*- """ A PanGalaxian node's UberORB -@version: $Revision: 1.112 $ +@version: $Revision: 1.113 $ """ -__version__ = "$Revision: 1.112 $"[11:-2] +__version__ = "$Revision: 1.113 $"[11:-2] import codecs import copy @@ -49,10 +49,10 @@ @ivar interfaces: a C{dict} of C{Interface} objects (inherited from the C{PanGalacticRegistry}) - @type interfaces: L{pangalactic.node.objectcache.ObjectCache} + @type interfaces: L{pangalactic.node.cache.ObjectCache} @ivar cache: an instance of C{ObjectCache} - @type cache: L{pangalactic.node.objectcache.ObjectCache} + @type cache: L{pangalactic.node.cache.ObjectCache} """ implements(IMofFactory) @@ -260,66 +260,6 @@ def getUser(self, userid): return self.getObject(userid) - def getObjectsByProject(self, project): - """ - Retrieve the latest versions of all Versionable objects managed by a - project. Also, get any C{Relationship} instances in which any of the - retrieved objects are the C{parent}. - - @param project: oid of the project - @type project: C{str} - - @return: the list of C{VersionedObject} instances on the project plus - any C{Relationship} instances in which any of the retrieved objects - are the C{parent} - @rtype: C{list} - """ - objs = [] - self.log.info(' - getObjectsByProject()') - if state['repo']: - # TODO: optimize this -- check with server to see if - # object has been changed from what (if anything) I have in - # the cache (if there is one) - params = [('cm_authority', '=', project), - ('is_head', '=', True)] - parts = self.search('Part', refs=True, subtypes=True, - params=params) - models = self.search('Model', refs=True, subtypes=True, - params=params) - docs = self.search('Document', refs=True, subtypes=True, - params=params) - objs = parts + models + docs - elif self.cache: - objs = self.getLocalObjects(cm_authority=project) - self.log.info(' * not logged in; checking local cache ...') - if objs: - oids = [obj.oid for obj in objs] - self.log.info(' * total objects found: %s' % len(objs)) - self.log.info(' ... now looking for Relationship instances ...') - # get Relationships in which any found objects are the parent - # and add them to the cache (ZODB) and self.assy_maps - if state['repo']: - schema_name = 'Relationship' - params = [('parent', 'in', oids)] - rels = self.search(schema_name, subtypes=True, params=params) - if rels: - acus = filter(lambda x: x._schema.__name__ == 'Acu', rels) - assy_oids = list(Set([a.parent for a in acus])) - assy_map = {} - for assy_oid in assy_oids: - assy_map[assy_oid] = filter( - lambda x: x.parent == assy_oid, acus) - self.assy_maps.update(assy_map) - self.log.info(' found %i.' % len(rels)) - else: - # pass - self.log.info(' none found.') - # else: - # objs = self.getLocalObjects(cm_authority=project) - else: - self.log.info(' * no data found.') - return objs - def updateProject(self, project): """ Retrieve from a repository the latest versions of all Versionable From waterbug at step.nasa.gov Thu Nov 9 13:46:55 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 9 13:46:57 2006 Subject: [pangalactic-commits] Make PanGalaxianObject's frame non-resizable. Message-ID: <200611091846.kA9Ikt8v018711@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py 1.129 1.130 Log message: Make PanGalaxianObject's frame non-resizable. Index: PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.129 PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.130 --- PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.129 Tue Nov 7 15:17:24 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py Thu Nov 9 13:46:53 2006 @@ -1,10 +1,10 @@ -# $Id: pgxnobject.py,v 1.129 2006/11/07 20:17:24 waterbug Exp $ +# $Id: pgxnobject.py,v 1.130 2006/11/09 18:46:53 waterbug Exp $ """ PanGalaxianObject (a C{PgefObject} viewer/editor) -@version: $Revision: 1.129 $ +@version: $Revision: 1.130 $ """ -__version__ = "$Revision: 1.129 $"[11:-2] +__version__ = "$Revision: 1.130 $"[11:-2] import logging from pprint import pprint @@ -68,7 +68,9 @@ def __init__(self, parent, obj, editing=False, pos=wx.DefaultPosition, size=wx.DefaultSize, - style=wx.DEFAULT_FRAME_STYLE): + style=(wx.DEFAULT_FRAME_STYLE & + # these make the frame non-resizable: + ~(wx.RESIZE_BORDER | wx.RESIZE_BOX | wx.MAXIMIZE_BOX))): """ Create a PanGalaxianObject instance. From waterbug at step.nasa.gov Thu Nov 9 17:04:31 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 9 17:04:32 2006 Subject: [pangalactic-commits] TODO tweaks; and no more getObjectsByProject fn. Message-ID: <200611092204.kA9M4V8I023438@ned.gsfc.nasa.gov> Modified files: PanGalactic/TODO 1.106 1.107 PanGalactic/pangalactic/node/pangalaxian.py 1.149 1.150 Log message: TODO tweaks; and no more getObjectsByProject fn. Index: PanGalactic/TODO diff -u PanGalactic/TODO:1.106 PanGalactic/TODO:1.107 --- PanGalactic/TODO:1.106 Tue Nov 7 15:41:52 2006 +++ PanGalactic/TODO Thu Nov 9 17:04:28 2006 @@ -14,7 +14,10 @@ [-] 'update' should be an explicit, requested action (menu option; button on toolbar, etc.) -- *not* automatic [-] versioned objects are *frozen* -- once you have one, it never changes - unless it's a working copy + unless it's a working copy -- so do not check for updates of versioned + objects. (Even if they are a working version, it should either result + from a "status" request or a pushed notification that it has changed -- + see next bullet.) [-] for working copies, request for update should be explicit, but also could have publish/subscribe for loosely coupled collaboration on working copies, or optional tight coupling using pb for real-time @@ -89,6 +92,10 @@ [-] special context: 'meta', makes meta objects accessible [-] special context: a taxonomy, category, or collection of categories [-] enable ad-hoc contexts/taxonomies by "tagging" of specified objects +[-] ENHANCEMENTS: PanGalaxian look and feel + [-] make default panel "state" -- configurable info about state, prefs, + repositories, connections, processes, etc. + [-] enable prefs for ordering of tabs in panel window [-] ENHANCEMENTS: PanGalaxian "modes" [-] set views (context) *and* behaviors of PanGalaxian [-] have a "representation" mode vs. "naked" mode -- in representation mode, @@ -532,5 +539,5 @@ [+] one-many (aggregate attrs) -------------------------------------------------------------------------- -# $Id: TODO,v 1.106 2006/11/07 20:41:52 waterbug Exp $ +# $Id: TODO,v 1.107 2006/11/09 22:04:28 waterbug Exp $ Index: PanGalactic/pangalactic/node/pangalaxian.py diff -u PanGalactic/pangalactic/node/pangalaxian.py:1.149 PanGalactic/pangalactic/node/pangalaxian.py:1.150 --- PanGalactic/pangalactic/node/pangalaxian.py:1.149 Mon Nov 6 22:53:13 2006 +++ PanGalactic/pangalactic/node/pangalaxian.py Thu Nov 9 17:04:29 2006 @@ -2,16 +2,16 @@ # -*- coding: ANSI_X3.4-1968 -*- # generated by wxGlade 0.3.5.1 on Tue Feb 1 00:19:02 2005 -# $Id: pangalaxian.py,v 1.149 2006/11/07 03:53:13 waterbug Exp $ +# $Id: pangalaxian.py,v 1.150 2006/11/09 22:04:29 waterbug Exp $ """ Main application module for PanGalaxian, the PGEF desktop client. WE ARE THE PANGALAXIANS! :) -@version: $Revision: 1.149 $ +@version: $Revision: 1.150 $ """ -__version__ = "$Revision: 1.149 $"[11:-2] +__version__ = "$Revision: 1.150 $"[11:-2] # Python import logging @@ -504,8 +504,8 @@ # in addition to triggering self.refreshView, # 'updates received' triggers all PanGalaxianObjects to resync() # -- it's dispatched by the following UberORB methods: - # getObject, getObjectsFromServer, getObjectsByProject, - # checkin, getProjects, getNamespaces, and getAcusByAssemblyOid. + # getObject, getObjectsFromServer, checkin, getProjects, getNamespaces, + # and getAcusByAssemblyOid. orb.register(self.refreshView, 'updates received') def onInterfaceUpdate(self): From waterbug at step.nasa.gov Tue Nov 14 02:00:47 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Tue Nov 14 02:00:49 2006 Subject: [pangalactic-commits] Beginnings of an MS Project XML file parser. Message-ID: <200611140700.kAE70l96014224@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/utils/io/msproject.py None 1.1 Log message: Beginnings of an MS Project XML file parser. From waterbug at step.nasa.gov Tue Nov 14 16:12:14 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Tue Nov 14 16:12:16 2006 Subject: [pangalactic-commits] Move EXPRESS XMI parser into p.utils.io. Message-ID: <200611142112.kAELCEwX024924@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/utils/io/express_xmi.py None 1.1 PanGalactic/sandbox/parsers/express_xmi.py 1.2 None Log message: Move EXPRESS XMI parser into p.utils.io. From waterbug at step.nasa.gov Tue Nov 14 16:57:17 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Tue Nov 14 16:57:19 2006 Subject: [pangalactic-commits] It's ALIVE! (so far ...) Message-ID: <200611142157.kAELvHQZ025824@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/utils/io/express_xmi.py 1.1 1.2 Log message: It's ALIVE! (so far ...) From waterbug at step.nasa.gov Tue Nov 14 17:45:09 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Tue Nov 14 17:45:11 2006 Subject: [pangalactic-commits] More tidying up of the xmi entity examples. Message-ID: <200611142245.kAEMj9xQ026587@ned.gsfc.nasa.gov> Modified files: PanGalactic/sandbox/parsers/entity_examples.xmi 1.1 1.2 Log message: More tidying up of the xmi entity examples. From waterbug at step.nasa.gov Wed Nov 15 17:38:49 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Wed Nov 15 17:38:51 2006 Subject: [pangalactic-commits] More prettying-up of exp-xmi examples. Message-ID: <200611152238.kAFMcnVL011758@ned.gsfc.nasa.gov> Modified files: PanGalactic/sandbox/parsers/entity_examples.xmi 1.2 1.3 Log message: More prettying-up of exp-xmi examples. From waterbug at step.nasa.gov Thu Nov 16 01:02:40 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 16 01:02:42 2006 Subject: [pangalactic-commits] Directory /repo/step_testbed/PanGalactic/src/express/exp-xmi added to the repository Message-ID: <200611160602.kAG62eTq014801@ned.gsfc.nasa.gov> Modified files: PanGalactic/src/express/exp-xmi Log message: Directory /repo/step_testbed/PanGalactic/src/express/exp-xmi added to the repository From waterbug at step.nasa.gov Thu Nov 16 01:04:09 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 16 01:04:10 2006 Subject: [pangalactic-commits] Add simple spec of express-xmi schema elements. Message-ID: <200611160604.kAG649jG014832@ned.gsfc.nasa.gov> Modified files: PanGalactic/src/express/exp-xmi/exp-xmi-structure.txt None 1.1 Log message: Add simple spec of express-xmi schema elements. From waterbug at step.nasa.gov Thu Nov 16 15:57:58 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 16 15:58:00 2006 Subject: [pangalactic-commits] TODO and Roadmap updates. Message-ID: <200611162057.kAGKvwuq029753@ned.gsfc.nasa.gov> Modified files: PanGalactic/TODO 1.107 1.108 PanGalactic/doc/PgefRoadmap.txt 1.15 1.16 Log message: TODO and Roadmap updates. Index: PanGalactic/TODO diff -u PanGalactic/TODO:1.107 PanGalactic/TODO:1.108 --- PanGalactic/TODO:1.107 Thu Nov 9 17:04:28 2006 +++ PanGalactic/TODO Thu Nov 16 15:57:54 2006 @@ -83,7 +83,7 @@ [-] Create new version (similar to clone but with replicated base_id) [-] Import ontology (select owl file from anywhere); option to add file to owl/plugins for automated inclusion -[-] ENHANCEMENTS: PanGalaxian UI context filters +[-] ENHANCEMENTS: PanGalaxian UI context filters [see NOTES, below] [-] make PanGalaxian's context choices (the three Choice widgets 'project', 'system', and 'context') configurable at run-time, able to be set to any object type that implements the appropriate Interface(s). (E.g., @@ -91,6 +91,8 @@ high-level object.) Essentially, 'contexts' are 'view filters'. [-] special context: 'meta', makes meta objects accessible [-] special context: a taxonomy, category, or collection of categories + [-] special context: any kind of namespace (ontologies, taxonomies, and + vocabularies are all subclasses of namespace) [-] enable ad-hoc contexts/taxonomies by "tagging" of specified objects [-] ENHANCEMENTS: PanGalaxian look and feel [-] make default panel "state" -- configurable info about state, prefs, @@ -538,6 +540,31 @@ [+] many-many requires reifying the relationship as a "join object" [+] one-many (aggregate attrs) +----- +NOTES +----- + +* context-based views, modes, and applications + - views + + should depend on selectable characteristics or interfaces of objects + + views should affect the following: + * objects and tabs displayed in the main grid/canvas widget + * what is displayed in trees + * what classes are shown in 'New Object...' + * what is displayed in the cache browser + - modes + + define deeper characteristics than views + + e.g.: + * 'meta' mode: only shows metaobjects + - permits 'meta' operations + - define new classes/properties + - develop an ontology, vocab, or taxonomy + * 'admin' mode + - triggered by admin login + - add users, etc. + - change database/interfaces + + -------------------------------------------------------------------------- -# $Id: TODO,v 1.107 2006/11/09 22:04:28 waterbug Exp $ +# $Id: TODO,v 1.108 2006/11/16 20:57:54 waterbug Exp $ Index: PanGalactic/doc/PgefRoadmap.txt diff -u PanGalactic/doc/PgefRoadmap.txt:1.15 PanGalactic/doc/PgefRoadmap.txt:1.16 --- PanGalactic/doc/PgefRoadmap.txt:1.15 Thu Nov 9 02:24:14 2006 +++ PanGalactic/doc/PgefRoadmap.txt Thu Nov 16 15:57:55 2006 @@ -10,7 +10,15 @@ In Order of Priority -------------------- -[*] identify true core PanGalactic interfaces +[*] meta-modeling thread: + [-] create MOF ontologies using PanGalaxian (PmofClass, PmofProperty, etc.) + [-] use MOF ontology to create schema-driven XMI parser(s) + [-] use MOF-schema-driven XMI parser to create MEXICO model parser + [-] use MEXICO model parser to parse EXPRESS-XMI STEP AP's + [-] use resulting STEP AP models to drive Part 21 parser + [-] use MOF-schema-driven XMI parser to create UML and SysML + parsers/writers +[*] identify true (required) core PanGalactic interfaces [*] pre-compile just those [*] all others will be defined by ontologies (OWL) and other models, at runtime @@ -109,5 +117,5 @@ [+] implement build process for Mac platform ----------------------------------------------------------------- -# $Id: PgefRoadmap.txt,v 1.15 2006/11/09 07:24:14 waterbug Exp $ +# $Id: PgefRoadmap.txt,v 1.16 2006/11/16 20:57:55 waterbug Exp $ From waterbug at step.nasa.gov Thu Nov 16 16:52:18 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 16 16:52:19 2006 Subject: [pangalactic-commits] onUpdateProject is history (cruft cruft cruft!!!) Message-ID: <200611162152.kAGLqIbD031439@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/pangalaxian.py 1.150 1.151 Log message: onUpdateProject is history (cruft cruft cruft!!!) Index: PanGalactic/pangalactic/node/pangalaxian.py diff -u PanGalactic/pangalactic/node/pangalaxian.py:1.150 PanGalactic/pangalactic/node/pangalaxian.py:1.151 --- PanGalactic/pangalactic/node/pangalaxian.py:1.150 Thu Nov 9 17:04:29 2006 +++ PanGalactic/pangalactic/node/pangalaxian.py Thu Nov 16 16:52:16 2006 @@ -2,16 +2,16 @@ # -*- coding: ANSI_X3.4-1968 -*- # generated by wxGlade 0.3.5.1 on Tue Feb 1 00:19:02 2005 -# $Id: pangalaxian.py,v 1.150 2006/11/09 22:04:29 waterbug Exp $ +# $Id: pangalaxian.py,v 1.151 2006/11/16 21:52:16 waterbug Exp $ """ Main application module for PanGalaxian, the PGEF desktop client. WE ARE THE PANGALAXIANS! :) -@version: $Revision: 1.150 $ +@version: $Revision: 1.151 $ """ -__version__ = "$Revision: 1.150 $"[11:-2] +__version__ = "$Revision: 1.151 $"[11:-2] # Python import logging @@ -886,7 +886,7 @@ self.tools_getmystuff.Enable(0) self.tools_passwd.Enable(0) self.log.info("*** not logged in (local mode) ***") - self.onUpdateProject(None) + self.onSetProject(None) self.statusbar.onStateChange() self.toolbar.onStateChange() self.treebook.onStateChange() @@ -899,16 +899,20 @@ dispatcher.send(signal='state changed') self.log.info(' - signal "state changed" dispatched ...') - def onUpdateProject(self, event): + def onSetProject(self, event): """ - Update all objects and widgets for the current project - (state['project']) in response to the user's selection of 'update' - (analogous to 'svn update'). + Change view to show only objects for a specified project + (state['project']). """ projects = orb.getProjects().keys() state['projects'] = projects or ['NoProject'] + state['project'] = state.get('project', 'NoProject') + if event: + projwidget = event.GetEventObject() + state['project'] = projwidget.selected if state['project'] not in projects: state['project'] = projects[0] + # FIXME: don't update project; just switch to it objs = orb.updateProject(str(state['project'])) self.log.debug('-------------------------------------------') self.log.debug(' - orb.updateProject(%s)' % state['project']) @@ -933,15 +937,6 @@ # supposed to do!! self.refreshView() - def onSetProject(self, event): - """ - Change view to show all objects for a project in response to the user's - selection of the project. - """ - projwidget = event.GetEventObject() - state['project'] = projwidget.selected - self.onUpdateProject(event) - def refreshView(self): """ Find the objects for the current mode and contexts and refresh all From waterbug at step.nasa.gov Thu Nov 16 17:56:58 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 16 17:57:00 2006 Subject: [pangalactic-commits] PanGalactic[Property, Ontology] should be Pmof... Message-ID: <200611162256.kAGMuwC3000583@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/gui/utils/defaults.py 1.7 1.8 Log message: PanGalactic[Property, Ontology] should be Pmof... Index: PanGalactic/pangalactic/node/gui/utils/defaults.py diff -u PanGalactic/pangalactic/node/gui/utils/defaults.py:1.7 PanGalactic/pangalactic/node/gui/utils/defaults.py:1.8 --- PanGalactic/pangalactic/node/gui/utils/defaults.py:1.7 Sun Oct 29 03:06:10 2006 +++ PanGalactic/pangalactic/node/gui/utils/defaults.py Thu Nov 16 17:56:56 2006 @@ -1,4 +1,4 @@ -# $Id: defaults.py,v 1.7 2006/10/29 08:06:10 waterbug Exp $ +# $Id: defaults.py,v 1.8 2006/11/16 22:56:56 waterbug Exp $ """ Functions and settings that determine the default display characteristics (display names, sets of displayed Properties, ordering and grouping of @@ -8,7 +8,7 @@ This is automated as much as possible, based on the attributes of the registered C{PgefInterfaces} (i.e., the contents of C{orb.interfaces}). """ -__version__ = "$Revision: 1.7 $"[11:-2] +__version__ = "$Revision: 1.8 $"[11:-2] # special attributes of Versionable, not editable directly VERSION_PROPERTIES = ['base_id', @@ -526,7 +526,7 @@ 'parent', 'child', 'documentation_purpose']}}, - 'PanGalacticOntology': { + 'PmofOntology': { 'columns': ['id', 'id_ns', 'name', @@ -884,7 +884,7 @@ 'comment', 'parent', 'child']}}, - 'PanGalacticProperty': { + 'PmofProperty': { 'columns': ['id', 'id_ns', 'cm_authority', @@ -894,22 +894,18 @@ 'id_ns', 'name', 'description', - 'comment', 'domain', - 'default_display', + 'range', 'functional', 'inverse_functional', 'property_type', 'display_name', 'abbrev', - 'default_style', 'base', 'ontology', 'definition', 'default', - 'range', 'representations', - 'display_group', 'known_aliases'], 'admin': ['oid', 'security_mask', From waterbug at step.nasa.gov Thu Nov 16 19:38:13 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 16 19:38:15 2006 Subject: [pangalactic-commits] Add more EXPRESS-XMI production examples. Message-ID: <200611170038.kAH0cD3s002613@ned.gsfc.nasa.gov> Modified files: PanGalactic/sandbox/parsers/exp-xmi-examples.xmi None 1.1 PanGalactic/sandbox/parsers/entity_examples.xmi 1.3 None Log message: Add more EXPRESS-XMI production examples. From waterbug at step.nasa.gov Thu Nov 16 21:36:01 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 16 21:36:03 2006 Subject: [pangalactic-commits] Fix for missing 'updateDisplayMaps' ... Message-ID: <200611170236.kAH2a1pA003126@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/pangalaxian.py 1.151 1.152 PanGalactic/pangalactic/node/gui/utils/display_maps.py 1.12 1.13 Log message: Fix for missing 'updateDisplayMaps' ... apparently I forgot what I was doing in the middle of decoupling the orb from the gui ... sheesh!! Index: PanGalactic/pangalactic/node/pangalaxian.py diff -u PanGalactic/pangalactic/node/pangalaxian.py:1.151 PanGalactic/pangalactic/node/pangalaxian.py:1.152 --- PanGalactic/pangalactic/node/pangalaxian.py:1.151 Thu Nov 16 16:52:16 2006 +++ PanGalactic/pangalactic/node/pangalaxian.py Thu Nov 16 21:35:58 2006 @@ -2,16 +2,16 @@ # -*- coding: ANSI_X3.4-1968 -*- # generated by wxGlade 0.3.5.1 on Tue Feb 1 00:19:02 2005 -# $Id: pangalaxian.py,v 1.151 2006/11/16 21:52:16 waterbug Exp $ +# $Id: pangalaxian.py,v 1.152 2006/11/17 02:35:58 waterbug Exp $ """ Main application module for PanGalaxian, the PGEF desktop client. WE ARE THE PANGALAXIANS! :) -@version: $Revision: 1.151 $ +@version: $Revision: 1.152 $ """ -__version__ = "$Revision: 1.151 $"[11:-2] +__version__ = "$Revision: 1.152 $"[11:-2] # Python import logging @@ -513,6 +513,7 @@ Perform required actions when the application's interfaces are updated. (For now, just update the display maps.) """ + updateDisplayMaps(orb.interfaces, orb.properties) # Event handlers Index: PanGalactic/pangalactic/node/gui/utils/display_maps.py diff -u PanGalactic/pangalactic/node/gui/utils/display_maps.py:1.12 PanGalactic/pangalactic/node/gui/utils/display_maps.py:1.13 --- PanGalactic/pangalactic/node/gui/utils/display_maps.py:1.12 Sun Oct 29 15:01:40 2006 +++ PanGalactic/pangalactic/node/gui/utils/display_maps.py Thu Nov 16 21:35:59 2006 @@ -2,9 +2,9 @@ A collection of functions that compute default presentation characteristics (a.k.a. "display maps") for PanGalactic Interfaces and Properties. -@version: $Revision: 1.12 $ +@version: $Revision: 1.13 $ """ -__version__ = "$Revision: 1.12 $"[11:-2] +__version__ = "$Revision: 1.13 $"[11:-2] import copy from sets import Set @@ -143,24 +143,27 @@ pmaps = replicateAndUpdatePropertyMaps(property_names, DEFAULT_PROPERTY_MAPS) return pmaps -def updateDisplayMaps(interfaces, property_names): +def updateDisplayMaps(interfaces, properties): """ Add new default display maps to reflect any changes in registered interfaces or properties (orb.interfaces and orb.properties). - @param interfaces: a collection of interfaces - @type interfaces: an iterable that yields interfaces - - @param property_names: a list of property names or a dict of properties by name - (usually, the list of all registered property names). - @type property_names: an iterable that yields property names + @param interfaces: a mapping of interface names to interfaces (usually, the + orb's C{interfaces} attribute, a dictionary of all registered + interfaces). + @type interfaces: C{dict} + + @param properties: an iterable that yields registered property names + (usually, the orb's C{properties} attribute, a dictionary of all + registered properties). + @type properties: C{iterable} """ imaps = state['imaps'] for name, iface in interfaces.iteritems(): if name not in imaps: imaps[name] = getDefaultInterfaceMap(iface) pmaps = state['pmaps'] - for p in property_names: + for p in properties: if not pmaps['display_names'].get(p): pmaps['display_names'][p] = ' '.join(p.split('_')).title() if not pmaps['display_styles'].get(p): From waterbug at step.nasa.gov Fri Nov 17 14:16:33 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Fri Nov 17 14:16:35 2006 Subject: [pangalactic-commits] Fixes to various naming errors, etc. plus ... Message-ID: <200611171916.kAHJGXZL010226@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/pgefobject.py 1.2 1.3 PanGalactic/pangalactic/meta/pgefproperty.py 1.49 1.50 PanGalactic/pangalactic/meta/registry.py 1.151 1.152 PanGalactic/pangalactic/meta/metaobjects/nspaces.py 1.1 1.2 PanGalactic/pangalactic/meta/metaobjects/properties.py 1.3 1.4 PanGalactic/pangalactic/node/pangalaxian.py 1.152 1.153 PanGalactic/pangalactic/node/uberorb.py 1.113 1.114 PanGalactic/pangalactic/node/gui/utils/defaults.py 1.8 1.9 PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py 1.130 1.131 PanGalactic/src/owl/pgef_meta.owl 1.4 1.5 Log message: Fixes to various naming errors, etc. plus ... beginnings of metaobjects in cache. Index: PanGalactic/pangalactic/meta/pgefproperty.py diff -u PanGalactic/pangalactic/meta/pgefproperty.py:1.49 PanGalactic/pangalactic/meta/pgefproperty.py:1.50 --- PanGalactic/pangalactic/meta/pgefproperty.py:1.49 Mon Oct 9 03:07:27 2006 +++ PanGalactic/pangalactic/meta/pgefproperty.py Fri Nov 17 14:16:26 2006 @@ -1,4 +1,4 @@ -# $Id: pgefproperty.py,v 1.49 2006/10/09 07:07:27 waterbug Exp $ +# $Id: pgefproperty.py,v 1.50 2006/11/17 19:16:26 waterbug Exp $ """ PgefProperty represents an RDF or OWL Property. @@ -39,9 +39,9 @@ C{Interface}, in which the C{Interface} corresponds to the class that is the domain of the binary relationship. -@version: $Revision: 1.49 $ +@version: $Revision: 1.50 $ """ -__version__ = "$Revision: 1.49 $"[11:-2] +__version__ = "$Revision: 1.50 $"[11:-2] from datetime import datetime @@ -139,7 +139,6 @@ 'id_ns' :'http://pangalactic.us/pgef/', 'name' :'ID', 'range' :'str', - 'default_display':'True', 'description' :""" [rdf:ID] Identifier of the PgefProperty within some context or namespace. (In RDF parlance, this is a "fragment identifier".) @@ -150,7 +149,6 @@ 'id_ns' :'http://pangalactic.us/pgef/', 'name' :'Namespace', 'range' :'str', - 'default_display':'True', 'description' :""" [xml:base] The context, base URL, or namespace within which the 'id' is unique. @@ -179,7 +177,6 @@ 'id_ns' :'http://pangalactic.us/pgef/', 'name' :'Domain', 'range' :'str', - 'default_display':'True', 'description' :""" [rdfs:domain] The id of the 'relating' Class of the PgefProperty. """}, @@ -190,7 +187,6 @@ 'name' :'Range', 'range' :'str', 'default' :'str', - 'default_display':'True', 'description' :""" [rdfs:range] The name of the PGEF type used to represent range values of the PgefProperty. The interpretation of 'range' depends @@ -370,20 +366,6 @@ 'definition'. """}, - 'default_display': { - 'id' :'default_display', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Default Display', - 'range' :'bool', - 'default' :'', - 'description' :""" - [pgef:default_display] indicates whether the Property is included - in the default set of properties shown when an object from the - 'rdfs:domain' (or simply the parent application object) is - displayed in a grid. This can be overridden by an object's - _schema's display_map. - """}, - 'display_name' : { 'id' :'display_name', 'id_ns' :'http://pangalactic.us/pgef/', @@ -574,23 +556,23 @@ def extract(self): """ - Create a C{PanGalacticProperty} extract from the values of my - _schema-defined attributes. The 'id' attribute of a PgefProperty will - be mapped to the 'base_id' attribute of the PanGalacticProperty, which - is invariant over all versions of the PanGalacticProperty. The 'id' - attribute of the PanGalacticProperty is formed from the PgefProperty's - 'id' and 'iteration' attributes. + Create a C{PmofProperty} extract from the values of my _schema-defined + attributes. The 'id' attribute of a PgefProperty will be mapped to the + 'base_id' attribute of the C{PmofProperty}, which is invariant over all + versions of the C{PmofProperty}. The 'id' attribute of the + C{PmofProperty} is formed from the PgefProperty's 'id' and 'iteration' + attributes. The C{PanGalacticRegistry} uses this extract to create the - C{PanGalacticProperty} instance that corresponds to a C{PgefProperty}, - for the purpose of versioning and managing the configuration of this - entity in an ontology under development. + C{PmofProperty} instance that corresponds to a C{PgefProperty}, for the + purpose of versioning and managing the configuration of this entity in + an ontology under development. @return: a dictionary mapping the names in my _schema to their values. @rtype: dictionary, which looks like: - C{{'_schema_name' : 'PanGalacticProperty', + C{{'_schema_name' : 'PmofProperty', attrname : value, ...}} """ # TODO: specify an oid -- a URI would be best. @@ -598,6 +580,6 @@ for a in self._schema]) d['base_id'] = d['id'] d['id'] = ''.join([d['id'], ' v.', str(d['iteration'])]) - d['_schema_name'] = 'PanGalacticProperty' + d['_schema_name'] = 'PmofProperty' return d Index: PanGalactic/pangalactic/meta/metaobjects/nspaces.py diff -u PanGalactic/pangalactic/meta/metaobjects/nspaces.py:1.1 PanGalactic/pangalactic/meta/metaobjects/nspaces.py:1.2 --- PanGalactic/pangalactic/meta/metaobjects/nspaces.py:1.1 Fri Nov 3 03:19:52 2006 +++ PanGalactic/pangalactic/meta/metaobjects/nspaces.py Fri Nov 17 14:16:27 2006 @@ -110,7 +110,6 @@ 'names', 'display_style', 'sic_code4', - 'default_display', 'sic_code2', 'sic_code3', 'creator', Index: PanGalactic/pangalactic/node/pangalaxian.py diff -u PanGalactic/pangalactic/node/pangalaxian.py:1.152 PanGalactic/pangalactic/node/pangalaxian.py:1.153 --- PanGalactic/pangalactic/node/pangalaxian.py:1.152 Thu Nov 16 21:35:58 2006 +++ PanGalactic/pangalactic/node/pangalaxian.py Fri Nov 17 14:16:28 2006 @@ -2,16 +2,16 @@ # -*- coding: ANSI_X3.4-1968 -*- # generated by wxGlade 0.3.5.1 on Tue Feb 1 00:19:02 2005 -# $Id: pangalaxian.py,v 1.152 2006/11/17 02:35:58 waterbug Exp $ +# $Id: pangalaxian.py,v 1.153 2006/11/17 19:16:28 waterbug Exp $ """ Main application module for PanGalaxian, the PGEF desktop client. WE ARE THE PANGALAXIANS! :) -@version: $Revision: 1.152 $ +@version: $Revision: 1.153 $ """ -__version__ = "$Revision: 1.152 $"[11:-2] +__version__ = "$Revision: 1.153 $"[11:-2] # Python import logging @@ -344,6 +344,9 @@ orb.getAppOntologies(home=prefs['home']) # initialize the local object cache orb.initCache(home=prefs['home']) + # this should probably be user-selected -- if the user wants to see or + # mess with the MOF ... + orb.loadMetaObjectsIntoCache() # size myself based on prefs and/or state size_state = (int(state.get('window_w') or 800), int(state.get('window_h') or 600)) @@ -950,8 +953,8 @@ kw = {} kw['cm_authority'] = state.get('project') self.log.debug(' + kw = %s' % str(kw)) - objs = orb.getLocalObjects(**kw) - # self.log.debug(' - orb.getLocalObjects: objs = %s' % str(objs)) + objs = orb.searchLocalObjects(**kw) + # self.log.debug(' - orb.searchLocalObjects: objs = %s' % str(objs)) self.gridbook.objs = objs self.treebook.onSetView() Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.151 PanGalactic/pangalactic/meta/registry.py:1.152 --- PanGalactic/pangalactic/meta/registry.py:1.151 Sun Nov 5 02:31:55 2006 +++ PanGalactic/pangalactic/meta/registry.py Fri Nov 17 14:16:26 2006 @@ -1,9 +1,9 @@ -# $Id: registry.py,v 1.151 2006/11/05 07:31:55 waterbug Exp $ +# $Id: registry.py,v 1.152 2006/11/17 19:16:26 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.151 $ +@version: $Revision: 1.152 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of @@ -12,7 +12,7 @@ objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.151 $"[11:-2] +__version__ = "$Revision: 1.152 $"[11:-2] # Python import glob @@ -21,9 +21,10 @@ import re import string import sys +from copy import deepcopy +from pprint import pprint from sets import Set from StringIO import StringIO -from pprint import pprint # Twisted from twisted.python.reflect import allYourBase @@ -217,14 +218,16 @@ for n in i_names: props[n] = [] for name in p_names: + # the imported 'properties' dict contains PmofProperty extracts pext = getattr(properties, name) # force default's value to be a string pext['default'] = str(pext['default']) - # IMPORTANT! PanGalactic[Pmof]Property 'base_id' maps to - # PgefProperty 'id' (PmofProperty is explicitly versioned) - pext['id'] = pext['base_id'] property_extracts[name] = pext + # create the kw dict for a PgefProperty kw = dict(pext) + # IMPORTANT! PmofProperty 'base_id' maps to PgefProperty 'id' + # (PmofProperty is explicitly versioned) + kw['id'] = pext['base_id'] del kw['_schema_name'] prop = PgefProperty(**kw) props[pext['domain']].append(prop) Index: PanGalactic/pangalactic/node/uberorb.py diff -u PanGalactic/pangalactic/node/uberorb.py:1.113 PanGalactic/pangalactic/node/uberorb.py:1.114 --- PanGalactic/pangalactic/node/uberorb.py:1.113 Thu Nov 9 12:47:15 2006 +++ PanGalactic/pangalactic/node/uberorb.py Fri Nov 17 14:16:28 2006 @@ -1,11 +1,11 @@ -# $Id: uberorb.py,v 1.113 2006/11/09 17:47:15 waterbug Exp $ +# $Id: uberorb.py,v 1.114 2006/11/17 19:16:28 waterbug Exp $ # -*- test-case-name: pangalactic.test.test_uberorb -*- """ A PanGalaxian node's UberORB -@version: $Revision: 1.113 $ +@version: $Revision: 1.114 $ """ -__version__ = "$Revision: 1.113 $"[11:-2] +__version__ = "$Revision: 1.114 $"[11:-2] import codecs import copy @@ -122,18 +122,6 @@ else: raise ValueError, 'the orb already has a cache.' - def loadMetaObjectsIntoCache(self): - """ - Load the meta objects being currently used by this PanGalaxian node into - the cache (including Classes, Properties, Namespaces, etc.) - """ - if self.__cache: - # if prefs['home'] is not set, this will raise (as it should) - pass - # self.createDefaultNamespace() - else: - raise ValueError, 'the cache has not been initialized yet.' - def getAppOntologies(self, home=''): """ Add application ontologies from plugins/owl to the core ontology. @@ -146,6 +134,26 @@ self.log.info('dispatching signal "interfaces updated"') dispatcher.send(signal='interfaces updated') + # TODO: NEEDS WORK! + def loadMetaObjectsIntoCache(self, overwrite=True): + """ + Load the meta objects being currently used by this PanGalaxian node into + the cache (including Classes, Properties, Namespaces, etc.) + """ + if self.cache: + # self.createDefaultNamespace() + if overwrite: + mos = [self.remember(e) for e in self.extracts.values()] + else: + mos = [] + for e in self.extracts.values(): + if not self.searchLocalObjects(base_id=e['id'], + id_ns=e['id_ns']): + mos.append(self.remember(e)) + self.save(mos) + else: + raise ValueError, 'the cache has not been initialized yet.' + # property: cache def getCache(self): @@ -279,7 +287,7 @@ if state['repo']: if self.cache: self.log.info(' * getting cached obj oids ...') - oids = [o.oid for o in self.getLocalObjects(cm_authority=project)] + oids = [o.oid for o in self.searchLocalObjects(cm_authority=project)] self.log.info(' %s oids found.' % str(len(oids))) if oids: params = [('cm_authority', '=', project), @@ -314,7 +322,7 @@ # pass self.log.info(' none found.') # else: - # objs = self.getLocalObjects(cm_authority=project) + # objs = self.searchLocalObjects(cm_authority=project) else: self.log.info(' * no updates found.') return objs @@ -466,7 +474,7 @@ self.log.info(' + no server -- not logged in.') return objs - def getLocalObjects(self, **kw): + def searchLocalObjects(self, **kw): """ Get objects from the cache by parameters. @@ -477,7 +485,7 @@ @rtype: C{list} """ if getattr(self, 'cache'): - return self.cache.getLocalObjects(**kw) + return self.cache.searchLocalObjects(**kw) else: return [] @@ -734,7 +742,7 @@ # dispatcher.send(signal='updates received') # else: # self.log.info(' + in local mode -- using cached namespaces ...') -# namespaces = self.getLocalObjects( +# namespaces = self.searchLocalObjects( # _schema=self.interfaces['PmofNamespace']) # return namespaces Index: PanGalactic/pangalactic/meta/pgefobject.py diff -u PanGalactic/pangalactic/meta/pgefobject.py:1.2 PanGalactic/pangalactic/meta/pgefobject.py:1.3 --- PanGalactic/pangalactic/meta/pgefobject.py:1.2 Thu Nov 2 14:58:08 2006 +++ PanGalactic/pangalactic/meta/pgefobject.py Fri Nov 17 14:16:26 2006 @@ -1,4 +1,4 @@ -# $Id: pgefobject.py,v 1.2 2006/11/02 19:58:08 waterbug Exp $ +# $Id: pgefobject.py,v 1.3 2006/11/17 19:16:26 waterbug Exp $ """ The Mother of all PanGalactic "domain objects". @@ -32,9 +32,9 @@ Note that PgefObject does not (yet) implement all of these characteristics, but that is its ultimate goal. -@version: $Revision: 1.2 $ +@version: $Revision: 1.3 $ """ -__version__ = "$Revision: 1.2 $"[11:-2] +__version__ = "$Revision: 1.3 $"[11:-2] # Python from datetime import datetime @@ -324,17 +324,17 @@ def extract(self): """ - Extract my persistable state (i.e., the attributes named in my - '_schema' attribute) by "cooking" the values of my Properties and - storing them in a Python dictionary. Among other purposes, this - makes it easy for XMLRPC to send me over the wire (as a struct). - An extract is simply a dictionary of the PanGalacticProperty id's - in my '_schema' attribute mapped to their "cooked" values (i.e., - cast into clear-text encoding formats suitable for transmission in - a text-based protocol), along with the __name__ of my _schema. + Extract my persistable state (i.e., the attributes named in my '_schema' + attribute) by "cooking" the values of my Properties and storing them in + a Python dictionary. Among other purposes, this makes it easy for + XMLRPC to send me over the wire (as a struct). An extract is simply a + dictionary of the PgefProperty id's in my '_schema' attribute mapped to + their "cooked" values (i.e., cast into clear-text encoding formats + suitable for transmission in a text-based protocol), along with the + __name__ of my _schema. - @return: a dictionary mapping the Property names in my _schema to - their cooked values. + @return: a dictionary mapping the Property names in my _schema to their + cooked values. @rtype: dictionary, which looks like: Index: PanGalactic/pangalactic/node/gui/utils/defaults.py diff -u PanGalactic/pangalactic/node/gui/utils/defaults.py:1.8 PanGalactic/pangalactic/node/gui/utils/defaults.py:1.9 --- PanGalactic/pangalactic/node/gui/utils/defaults.py:1.8 Thu Nov 16 17:56:56 2006 +++ PanGalactic/pangalactic/node/gui/utils/defaults.py Fri Nov 17 14:16:28 2006 @@ -1,4 +1,4 @@ -# $Id: defaults.py,v 1.8 2006/11/16 22:56:56 waterbug Exp $ +# $Id: defaults.py,v 1.9 2006/11/17 19:16:28 waterbug Exp $ """ Functions and settings that determine the default display characteristics (display names, sets of displayed Properties, ordering and grouping of @@ -8,7 +8,7 @@ This is automated as much as possible, based on the attributes of the registered C{PgefInterfaces} (i.e., the contents of C{orb.interfaces}). """ -__version__ = "$Revision: 1.8 $"[11:-2] +__version__ = "$Revision: 1.9 $"[11:-2] # special attributes of Versionable, not editable directly VERSION_PROPERTIES = ['base_id', @@ -242,7 +242,6 @@ 'abbrev', 'base', 'default', - 'default_display', 'default_style', 'definition', 'display_group', Index: PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.130 PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.131 --- PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.130 Thu Nov 9 13:46:53 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py Fri Nov 17 14:16:29 2006 @@ -1,10 +1,10 @@ -# $Id: pgxnobject.py,v 1.130 2006/11/09 18:46:53 waterbug Exp $ +# $Id: pgxnobject.py,v 1.131 2006/11/17 19:16:29 waterbug Exp $ """ PanGalaxianObject (a C{PgefObject} viewer/editor) -@version: $Revision: 1.130 $ +@version: $Revision: 1.131 $ """ -__version__ = "$Revision: 1.130 $"[11:-2] +__version__ = "$Revision: 1.131 $"[11:-2] import logging from pprint import pprint @@ -766,7 +766,7 @@ if __name__ == '__main__': - import os + import os, sys from pangalactic.node.gui.utils.defaults import DEFAULT_PROPERTY_MAPS from pangalactic.node.gui.utils.display_maps import getDefaultInterfaceMaps from pangalactic.node.gui.utils.display_maps import getDefaultPropertyMaps @@ -776,8 +776,14 @@ state['pmaps'] = getDefaultPropertyMaps(list(orb.properties), DEFAULT_PROPERTY_MAPS) orb.getAppOntologies(home) - p = PgefObject(_schema=orb.interfaces['Mime'], - id='Test-1') + if not orb.cache: + orb.initCache(home) + test_if = 'Mime' + if len(sys.argv) > 1: + test_if = sys.argv[1] + p = PgefObject(_schema=orb.interfaces[test_if], + id='Test-1', + id_ns='http://pangalactic.us/test/lib/') print ' created object with schema: %s' % p._schema.__name__ app = wx.App() frame = PanGalaxianObject(parent=None, obj=p) Index: PanGalactic/src/owl/pgef_meta.owl diff -u PanGalactic/src/owl/pgef_meta.owl:1.4 PanGalactic/src/owl/pgef_meta.owl:1.5 --- PanGalactic/src/owl/pgef_meta.owl:1.4 Mon Nov 6 10:57:02 2006 +++ PanGalactic/src/owl/pgef_meta.owl Fri Nov 17 14:16:30 2006 @@ -178,13 +178,6 @@ - - - - Indicates whether to this PGEF Property is to be included in the default display configuration of widgets that present objects that have it. - - Unique name of the namespace. This may be a real URI or it may be a faux URI (such as those permitted in RDF/OWL), but it must at least have the '<scheme>://<authority><path>' structure specified in IETF RFC 2396. Index: PanGalactic/pangalactic/meta/metaobjects/properties.py diff -u PanGalactic/pangalactic/meta/metaobjects/properties.py:1.3 PanGalactic/pangalactic/meta/metaobjects/properties.py:1.4 --- PanGalactic/pangalactic/meta/metaobjects/properties.py:1.3 Wed Oct 25 17:09:49 2006 +++ PanGalactic/pangalactic/meta/metaobjects/properties.py Fri Nov 17 14:16:27 2006 @@ -4,7 +4,6 @@ 'base_id': 'user_file_name', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The user's local name for the file.", 'display_group': 'main', @@ -30,7 +29,6 @@ 'base_id': 'status_code', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The status of an Organization's record (active or inactive). (From the CAGE data structure.)", 'display_group': 'main', @@ -56,7 +54,6 @@ 'base_id': 'name1', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The first of a possible 5 segments of an Organization's name. (From the CAGE data structure.)", 'display_group': 'main', @@ -82,7 +79,6 @@ 'base_id': 'version_sequence', 'comment': '', 'default': 0, - 'default_display': False, 'definition': '', 'description': 'An integer indicating the sequence of versions (since the version attribute itself may not have a well-defined sort order).', 'display_group': 'main', @@ -108,7 +104,6 @@ 'base_id': 'abbreviation', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': '', 'display_group': 'main', @@ -134,7 +129,6 @@ 'base_id': 'country_code', 'comment': '', 'default': 0, - 'default_display': False, 'definition': '', 'description': 'An integer code: 1=U.S., 2=Foreign, 3=Canada (From the CAGE data structure.)', 'display_group': 'main', @@ -160,7 +154,6 @@ 'base_id': 'inverse_functional', 'comment': '', 'default': False, - 'default_display': False, 'definition': '', 'description': "If 'inverse_functional' is True, this is equivalent to saying that the property is a member of the Class [owl:InverseFunctionalProperty]. That is, each value in the Property's range corresponds to a unique value in its domain. That is, the Property can serve as a 'primary key' in a relational database schema.", 'display_group': 'main', @@ -186,7 +179,6 @@ 'base_id': 'property_type', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'For owl:ObjectProperty instances, "object"; for owl:DatatypeProperty instances, "datatype".', 'display_group': 'main', @@ -212,7 +204,6 @@ 'base_id': 'structural_role', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'An indicator of whether the document is intended to be (1) stand-alone, (2) the parent in an assembly of documents, or (3) a component in another document.', 'display_group': 'main', @@ -238,7 +229,6 @@ 'base_id': 'content', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The content of the Document in a text-based format (usually text/plain, but may be any format with a MIME type of "text", such as text/html, text/xml, or text/tab-separated-values).', 'display_group': 'main', @@ -264,7 +254,6 @@ 'base_id': 'org_email', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "A Person's email address at an Organization.", 'display_group': 'main', @@ -290,7 +279,6 @@ 'base_id': 'display_name', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The string to be used as a Property's name when it is to be displayed in a user interface.", 'display_group': 'main', @@ -316,7 +304,6 @@ 'base_id': 'rep_purpose', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The purpose or meaning of this Representation -- e.g. "publication", "presentation", "exchange", etc. The semantics of this Property are heavily context-dependent.', 'display_group': 'main', @@ -342,7 +329,6 @@ 'base_id': 'version', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'A user-modifiable alphanumeric string used to identify a baseline, release, or version. Similar to a CVS release tag.', 'display_group': 'main', @@ -368,7 +354,6 @@ 'base_id': 'location', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "Location == URL to get the file (from the repository if it is a 'secured' file; from elsewhere if not).", 'display_group': 'main', @@ -394,7 +379,6 @@ 'base_id': 'mime_type', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': "The MIME type/subtype of a file's content.", 'display_group': 'main', @@ -420,7 +404,6 @@ 'base_id': 'processor_version', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The version of the software application that was used to produce a DataSet.', 'display_group': 'main', @@ -446,7 +429,6 @@ 'base_id': 'state_or_country', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "An Organization's state (if in the U.S.) or country. (From the CAGE data structure.)", 'display_group': 'main', @@ -472,7 +454,6 @@ 'base_id': 'is_object_source', 'comment': '', 'default': False, - 'default_display': False, 'definition': '', 'description': 'Indicates whether this Representation is the original source from which its parent Object was instantiated in the repository (PGER) or in the current application context.', 'display_group': 'main', @@ -498,7 +479,6 @@ 'base_id': 'org_name_code', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'An abbreviation for an Organization\'s name. Maps to a Part\'s Manufacturer Name Code. Corresponds to the parent Organization identifier (Association CAGE) but is a "mnemonic" string. Therefore, it is not unique among known Organizations, since several locations of the same Organization will have the same Organization Name Code.', 'display_group': 'main', @@ -524,7 +504,6 @@ 'base_id': 'child', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The child Object in a Relationship.', 'display_group': 'main', @@ -550,7 +529,6 @@ 'base_id': 'name', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "A human-readable identifier for an object -- usually the one by which the object is known to the end-user, but it may be used for any type of identification, including aliases and local nomenclatures. Its meaning is dependent on the application context. This concept is analogous to a person's given name.", 'display_group': 'main', @@ -576,7 +554,6 @@ 'base_id': 'bytes', 'comment': '', 'default': 0, - 'default_display': False, 'definition': '', 'description': 'The size of a file in bytes.', 'display_group': 'main', @@ -602,7 +579,6 @@ 'base_id': 'pl_items', 'comment': '', 'default': [], - 'default_display': False, 'definition': '', 'description': 'The PartsListItem instances contained by a PartsList.', 'display_group': 'main', @@ -628,7 +604,6 @@ 'base_id': 'component_quantity', 'comment': '', 'default': [], - 'default_display': False, 'definition': '', 'description': 'The number of instances or measured quantity of the component object(s) used.', 'display_group': 'main', @@ -654,7 +629,6 @@ 'base_id': 'part_number_aliases', 'comment': '', 'default': [], - 'default_display': False, 'definition': '', 'description': 'Other equivalent identifiers for a Part.', 'display_group': 'main', @@ -680,7 +654,6 @@ 'base_id': 'mod_datetime', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The date and time of last modification of an object.', 'display_group': 'main', @@ -706,7 +679,6 @@ 'base_id': 'media_subtype', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The MIME Media Subtype per (or a custom subtype).', 'display_group': 'main', @@ -732,7 +704,6 @@ 'base_id': 'display_style', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The display_style governs the types of widgets that will be used to view and edit a Property's values. This can be thought of as a presentation cue within the context of the 'range' (datatype or object type). For example, the styles of 'narrative' and 'identifier' correspond in a GUI to multi-line text widget and single-line field, respectively.", 'display_group': 'main', @@ -758,7 +729,6 @@ 'base_id': 'sic_code4', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'Fourth of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.)', 'display_group': 'main', @@ -778,39 +748,12 @@ 'see_also': '', 'version': 'baseline'} -default_display = {'_schema_name': 'PmofProperty', - 'abbreviation': '', - 'base': None, - 'base_id': 'default_display', - 'comment': '', - 'default': False, - 'default_display': False, - 'definition': '', - 'description': 'Indicates whether to this PGEF Property is to be included in the default display configuration of widgets that present objects that have it.', - 'display_group': 'main', - 'display_name': 'default_display', - 'display_style': '', - 'domain': 'PmofProperty', - 'functional': True, - 'id': 'default_display v.0', - 'id_ns': 'pgef', - 'inverse_functional': False, - 'iteration': 0, - 'known_aliases': [], - 'name': 'default_display', - 'ontology': None, - 'property_type': 'datatype', - 'range': 'bool', - 'see_also': '', - 'version': 'baseline'} - sic_code2 = {'_schema_name': 'PmofProperty', 'abbreviation': '', 'base': None, 'base_id': 'sic_code2', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'Second of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.)', 'display_group': 'main', @@ -836,7 +779,6 @@ 'base_id': 'sic_code3', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'Third of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.)', 'display_group': 'main', @@ -862,7 +804,6 @@ 'base_id': 'sic_code1', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'First of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.)', 'display_group': 'main', @@ -888,7 +829,6 @@ 'base_id': 'part_vendor', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The Organization from which a PhysicalPart was procured.', 'display_group': 'main', @@ -914,7 +854,6 @@ 'base_id': 'record_create_datetime', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': "Date-time of addition of an object's record to the repository.", 'display_group': 'main', @@ -940,7 +879,6 @@ 'base_id': 'parent_organization', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': "An Organization's parent Organization. (In the CAGE data structure, this is called the 'association_cage'.)", 'display_group': 'main', @@ -966,7 +904,6 @@ 'base_id': 'is_secured', 'comment': '', 'default': False, - 'default_display': False, 'definition': '', 'description': "A flag assigned to a FileLink object which, if True, indicates that the file is stored in the repository's file vault; if False, the file is not stored in the repository but is referenced elsewhere.", 'display_group': 'main', @@ -992,7 +929,6 @@ 'base_id': 'record_owner', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': "The Identifiable entity that owns an object's record in the repository. pgef:record_owner and pgef:record_creator may be different. The default is for them to be the same. The pgef:record_owner always has the privilege of modifying the record of the object in the repository (or deleting it, if deletion is allowed for members of the object's Class).", 'display_group': 'main', @@ -1018,7 +954,6 @@ 'base_id': 'god', 'comment': '', 'default': False, - 'default_display': False, 'definition': '', 'description': 'A boolean indicating whether an Actor has the capability to assign any Role to itself in a PanGalactic application.', 'display_group': 'main', @@ -1044,7 +979,6 @@ 'base_id': 'specification', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The identifier of the specification document that applies to a Part.', 'display_group': 'main', @@ -1070,7 +1004,6 @@ 'base_id': 'role_context', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The context within which a Role is defined.', 'display_group': 'main', @@ -1096,7 +1029,6 @@ 'base_id': 'originating_system', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The system from which the data in a DataSet originated.', 'display_group': 'main', @@ -1122,7 +1054,6 @@ 'base_id': 'is_composable', 'comment': '', 'default': False, - 'default_display': False, 'definition': '', 'description': 'A flag, for which a True value indicates that a Representation is able to be used (e.g., by an editor or a parser/importer) to (re)create or edit itself and/or some other Representation.', 'display_group': 'main', @@ -1148,7 +1079,6 @@ 'base_id': 'ref_designator', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'A symbolic name that serves as an identifier for a component usage within the context of an assembly.', 'display_group': 'main', @@ -1174,7 +1104,6 @@ 'base_id': 'email', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The primary email address of the Actor.', 'display_group': 'main', @@ -1200,7 +1129,6 @@ 'base_id': 'content_mime_type', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': "The MIME type of the value of the 'content' attribute. (This does not imply that a Document has an intrinsic MIME type. In general, each representation of the Document will have a MIME type, and they may all be different.)\n", 'display_group': 'main', @@ -1226,7 +1154,6 @@ 'base_id': 'create_datetime', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': "The date and time of an object's creation.", 'display_group': 'main', @@ -1252,7 +1179,6 @@ 'base_id': 'parent', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The parent Object in a Relationship.', 'display_group': 'main', @@ -1278,7 +1204,6 @@ 'base_id': 'part_mfr', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The Organization that was primarily responsible for producing a PhysicalPart.', 'display_group': 'main', @@ -1304,7 +1229,6 @@ 'base_id': 'org', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': "An Actor's primary Organizational affiliation.", 'display_group': 'main', @@ -1330,7 +1254,6 @@ 'base_id': 'fsc_code', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The Federal Supply Classification code for a Part (this is also the first four digits of the NSN).', 'display_group': 'main', @@ -1356,7 +1279,6 @@ 'base_id': 'record_mod_datetime', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': "Date-time of last modification of an object's record in the repository.", 'display_group': 'main', @@ -1382,7 +1304,6 @@ 'base_id': 'definition', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The definition of a MetaObject.', 'display_group': 'main', @@ -1408,7 +1329,6 @@ 'base_id': 'dataset_object_ids', 'comment': '', 'default': [], - 'default_display': False, 'definition': '', 'description': 'The local identifiers assigned to the objects in a DataSet.', 'display_group': 'main', @@ -1434,7 +1354,6 @@ 'base_id': 'definition_context', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The context within which a Model is defined.\n\nFrom the STEP PDM Schema Usage Guide: "[Definition context] distinguishes the type of the associated product_definition ...". Examples given in the STEP PDM Schema Usage Guide all use name == "part definition" ... a set of values meaningful within the context of a Project or Organization should be defined for this attribute to be useful. Maps to STEP "product_definition_context.name".', 'display_group': 'main', @@ -1460,7 +1379,6 @@ 'base_id': 'cm_authority', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The Identifiable entity that has primary responsibility for configuration management of the object. Often, this will be a Project, but it sometimes may be an Organization, a Person, or some other entity.', 'display_group': 'main', @@ -1486,7 +1404,6 @@ 'base_id': 'specification_screening', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The identifier for a screening specification that applies to a Part.', 'display_group': 'main', @@ -1512,7 +1429,6 @@ 'base_id': 'life_cycle_stage', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The Life Cycle Stage within which a Model is defined.\n\npgef:life_cycle_stage maps directly to STEP \'product_definition_context.life_cycle_stage\'. The two values recommended in the STEP PDM Schema Usage Guide are: "design" and "manufacturing" ... a set of values meaningful within the context of a particular Project or Organization should be defined for this attribute to be useful.', 'display_group': 'main', @@ -1538,7 +1454,6 @@ 'base_id': 'comment', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'Information about an object that may be incidental, temporal, or contextual. The meaning is determined by the application context.', 'display_group': 'main', @@ -1564,7 +1479,6 @@ 'base_id': 'is_generable', 'comment': '', 'default': False, - 'default_display': False, 'definition': '', 'description': 'A flag which, if True, indicates that a Representation that can be generated -- e.g., from a Model.\n', 'display_group': 'main', @@ -1590,7 +1504,6 @@ 'base_id': 'file_sequence', 'comment': '', 'default': 0, - 'default_display': False, 'definition': '', 'description': 'An integer that can be used to specify the ordering of this file within an ordered set of files -- attachments, for example. NOTE: Sequence is intepreted as applying within Sequence Context (which see).', 'display_group': 'main', @@ -1616,7 +1529,6 @@ 'base_id': 'part_number_drawing', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "If a Part has a 'drawing' (a type of specification), this is its identifier.", 'display_group': 'main', @@ -1642,7 +1554,6 @@ 'base_id': 'functional', 'comment': '', 'default': False, - 'default_display': False, 'definition': '', 'description': "If 'functional' is True, this is equivalent to saying that the property is a member of the Class owl:FunctionalProperty. That is, the Property is 'single-valued'. Likewise, if 'functional' is False, the Property is 'multi-valued', and its value will be represented as a collection of the object type or datatype specified in its 'range' attribute.", 'display_group': 'main', @@ -1668,7 +1579,6 @@ 'base_id': 'part_number_nsn', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The National Stock Number for a Part.', 'display_group': 'main', @@ -1694,7 +1604,6 @@ 'base_id': 'names', 'comment': '', 'default': [], - 'default_display': False, 'definition': '', 'description': "The namespace's names.", 'display_group': 'main', @@ -1720,7 +1629,6 @@ 'base_id': 'representations', 'comment': '', 'default': [], - 'default_display': False, 'definition': '', 'description': 'A digital representation of an object (e.g., a CAD model, a spreadsheet, an HTML document). Representations include both "presentations", such as PDF or HTML for a document, and more general representations such as exchange data sets (e.g., for an engineering model: STEP, VRML, etc.).', 'display_group': 'main', @@ -1746,7 +1654,6 @@ 'base_id': 'owner', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The Identifiable entity that owns an object.', 'display_group': 'main', @@ -1772,7 +1679,6 @@ 'base_id': 'city', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "An Organization's city. (From the CAGE data structure)", 'display_group': 'main', @@ -1798,7 +1704,6 @@ 'base_id': 'part_number_mfr', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The manufacturer's identifier for a Part.", 'display_group': 'main', @@ -1824,7 +1729,6 @@ 'base_id': 'creator', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The Identifiable entity that created an object.', 'display_group': 'main', @@ -1850,7 +1754,6 @@ 'base_id': 'alt_emails', 'comment': '', 'default': [], - 'default_display': False, 'definition': '', 'description': 'Alternate email addresses of the Actor.', 'display_group': 'main', @@ -1876,7 +1779,6 @@ 'base_id': 'serial_number', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'An identifier assigned by a manufacturer to a specific PhysicalPart.', 'display_group': 'main', @@ -1902,7 +1804,6 @@ 'base_id': 'publish_datetime', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'Date (and time, if relevant) a Document was published.', 'display_group': 'main', @@ -1928,7 +1829,6 @@ 'base_id': 'authorization', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The person who authorized creation of the Data Set.', 'display_group': 'main', @@ -1954,7 +1854,6 @@ 'base_id': 'files', 'comment': '', 'default': [], - 'default_display': False, 'definition': '', 'description': 'The file-like Objects (e.g., FileLinks) that constitute a Representation.', 'display_group': 'main', @@ -1980,7 +1879,6 @@ 'base_id': 'part_number_spec', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The identifier for a Part given by its specification.', 'display_group': 'main', @@ -2006,7 +1904,6 @@ 'base_id': 'documentation_purpose', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The purpose of a Document in the context of an Object.', 'display_group': 'main', @@ -2032,7 +1929,6 @@ 'base_id': 'phone', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "An Actor's primary phone number.", 'display_group': 'main', @@ -2058,7 +1954,6 @@ 'base_id': 'name4', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The fourth of a possible 5 segments of an Organization's name. (From the CAGE data structure.)", 'display_group': 'main', @@ -2084,7 +1979,6 @@ 'base_id': 'part', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The Part of which a PhysicalPart is a realization.', 'display_group': 'main', @@ -2110,7 +2004,6 @@ 'base_id': 'name2', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The second of a possible 5 segments of an Organization's name. (From the CAGE data structure.)", 'display_group': 'main', @@ -2136,7 +2029,6 @@ 'base_id': 'name3', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The third of a possible 5 segments of an Organization's name. (From the CAGE data structure.)", 'display_group': 'main', @@ -2162,7 +2054,6 @@ 'base_id': 'media_type', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The MIME Media Type per (or a custom type).', 'display_group': 'main', @@ -2188,7 +2079,6 @@ 'base_id': 'dataset_schema_id', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The name of the schema that governs the DataSet.', 'display_group': 'main', @@ -2214,7 +2104,6 @@ 'base_id': 'file_sequence_context', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The name of the attribute within the context of which the Sequence attribute is meaningful. If the value of the Sequence Context attribute is 'role', and the value of Role is 'attachment', then Sequence is the position of this file within the set of files that have a Role of 'attachment'.", 'display_group': 'main', @@ -2240,7 +2129,6 @@ 'base_id': 'part_number_generic', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The generic identifier for a Part, which in some cases is specified by a standard (e.g., JEDEC for electronic parts).', 'display_group': 'main', @@ -2266,7 +2154,6 @@ 'base_id': 'iteration', 'comment': '', 'default': 0, - 'default_display': False, 'definition': '', 'description': 'An identifier for incremental snapshots of working copies of a specific version of a Versionable. Iterations are a zero-based sequence of integers in which the unmodified version is itself the 0th iteration.\n\nWorking copies of iterations can be used as parallel evolution threads toward the next version. Iterations are analogous to experimental branches in CVS: they are used to identify and manage experimental configurations of the Versionable that may never become a version but which need to be documented as part of the design and analysis process. Since Versionables cannot be changed once checked in, their iteration also cannot be changed once checked in to the repository, and must be regarded as "frozen." The policy for saving iterations in the repository can be set by the project or user: all iterations, all iterations since the last version, etc. In early prototyping exercises, iterations may be used exclusively for CM (on, say, the 0th version of everything).', 'display_group': 'main', @@ -2292,7 +2179,6 @@ 'base_id': 'street_address2', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The second of a possible 2 segments of an Organization's Street Address. (From the CAGE data structure.)", 'display_group': 'main', @@ -2318,7 +2204,6 @@ 'base_id': 'street_address1', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The first of a possible 2 segments of an Organization's Street Address. (From the CAGE data structure.)", 'display_group': 'main', @@ -2344,7 +2229,6 @@ 'base_id': 'pli_id', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'An identifier for a PartsListItem within the context of its PartsList.', 'display_group': 'main', @@ -2370,7 +2254,6 @@ 'base_id': 'display_group', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The name of the default pgef:Property group with which this pgef:Property will be displayed when presented in a display format that requires attributes to be grouped.', 'display_group': 'main', @@ -2396,7 +2279,6 @@ 'base_id': 'pli_component_usage', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The Acu instance referenced by a PartsListItem.', 'display_group': 'main', @@ -2422,7 +2304,6 @@ 'base_id': 'pl_status', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The state of a PartsList relative to some possibly extensible set of standard states, e.g. 'in-process', 'reviewed', etc. The set of standard states should be agreed upon by the Project(s) or Organization(s) using the PartsList.", 'display_group': 'main', @@ -2448,7 +2329,6 @@ 'base_id': 'mi_or_name', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "A Person's middle initial or name.", 'display_group': 'main', @@ -2474,7 +2354,6 @@ 'base_id': 'modifier', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': 'The Identifiable entity that last modified an object.', 'display_group': 'main', @@ -2500,7 +2379,6 @@ 'base_id': 'known_aliases', 'comment': '', 'default': [], - 'default_display': False, 'definition': '', 'description': 'Names of synonyms for this PGEF Property.', 'display_group': 'main', @@ -2526,7 +2404,6 @@ 'base_id': 'part_number_model', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The identifier for a Part's 'Model', a somewhat arbitrary identifier usually specified by the manufacturer.", 'display_group': 'main', @@ -2552,7 +2429,6 @@ 'base_id': 'security_mask', 'comment': '', 'default': 0, - 'default_display': False, 'definition': '', 'description': "An Actor's access permissions to an Object will be determined by testing whether the security_mask of the Object contains the Actor's oid or the oids of any Role assignments the Actor has.", 'display_group': 'main', @@ -2578,7 +2454,6 @@ 'base_id': 'abstract', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "A capsule summary of the Document's content.", 'display_group': 'main', @@ -2604,7 +2479,6 @@ 'base_id': 'id_ns', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The namespace within which an id is unique.', 'display_group': 'main', @@ -2630,7 +2504,6 @@ 'base_id': 'type_code', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The CAGE type code. (From the CAGE data structure.)', 'display_group': 'main', @@ -2656,7 +2529,6 @@ 'base_id': 'data_sets', 'comment': '', 'default': [], - 'default_display': False, 'definition': '', 'description': 'The DataSets contained in a DataPackage.', 'display_group': 'main', @@ -2682,7 +2554,6 @@ 'base_id': 'replacement_cage', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The CAGE code that a CAGE code replaces. (From the CAGE data structure.)', 'display_group': 'main', @@ -2708,7 +2579,6 @@ 'base_id': 'id', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'An identifier that is unique within a specified namespace.', 'display_group': 'main', @@ -2734,7 +2604,6 @@ 'base_id': 'complete', 'comment': '', 'default': False, - 'default_display': False, 'definition': '', 'description': 'A flag indicating whether the names attribute contains the complete set of names for the namespace.', 'display_group': 'main', @@ -2760,7 +2629,6 @@ 'base_id': 'pl_type', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The type of a PartsList, selected from a set of standard parts list types, such as 'as-designed' (ADPL), 'as-built' (ABPL), 'preliminary' (PRPL), etc., which should be agreed upon by the Project(s) or Organization(s) using the PartsList.", 'display_group': 'main', @@ -2786,7 +2654,6 @@ 'base_id': 'lname', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "A Person's last name (surname).", 'display_group': 'main', @@ -2812,7 +2679,6 @@ 'base_id': 'default', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The default value of the PGEF Property.', 'display_group': 'main', @@ -2838,7 +2704,6 @@ 'base_id': 'org_phone', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "A Person's telephone number at an Organization.", 'display_group': 'main', @@ -2864,7 +2729,6 @@ 'base_id': 'namespace_uri', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The URI of the namespace to which an object's name belongs.", 'display_group': 'main', @@ -2890,7 +2754,6 @@ 'base_id': 'lot_date_code', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'An alphanumeric string used by a manufacturer to identify the collection (lot) of PhysicalParts of which a specific PhysicalPart was a member.', 'display_group': 'main', @@ -2916,7 +2779,6 @@ 'base_id': 'fname', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "A Person's first name (given name).", 'display_group': 'main', @@ -2942,7 +2804,6 @@ 'base_id': 'file_role', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The purpose of a File relative to a Representation to which it is related. Possible values are: "attachment", "content", "stylesheet", "DTD", etc.', 'display_group': 'main', @@ -2968,7 +2829,6 @@ 'base_id': 'description', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'A narrative about the characteristics and identifying features of an object.', 'display_group': 'main', @@ -2994,7 +2854,6 @@ 'base_id': 'oid', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'A globally unique identifier. The canonical form for oids is a URL, but other forms are acceptable.', 'display_group': 'main', @@ -3020,7 +2879,6 @@ 'base_id': 'zip_or_postal_zone', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "An Organization's zip code (if in the U.S.) or postal zone. (From the CAGE data structure.)", 'display_group': 'main', @@ -3046,7 +2904,6 @@ 'base_id': 'base_id', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The id for a Versionable object will often be derived by combining its base_id and version. Since this is not always the case, the specifics of the relationship between an object\'s id, base_id, version, and iteration are left to the internal rules of an application. Versionable objects cannot be changed once they are checked in to the repository, so applications should treat versions that have been (or are about to be) checked in as "frozen."', 'display_group': 'main', @@ -3072,7 +2929,6 @@ 'base_id': 'part_model_purpose', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The purpose of a Model of a Part.', 'display_group': 'main', @@ -3098,7 +2954,6 @@ 'base_id': 'is_head', 'comment': '', 'default': False, - 'default_display': False, 'definition': '', 'description': 'A flag indicating whether a Versionable object is the most recent version.', 'display_group': 'main', @@ -3124,7 +2979,6 @@ 'base_id': 'uri', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "Unique name of the namespace. This may be a real URI or it may be a faux URI (such as those permitted in RDF/OWL), but it must at least have the '://' structure specified in IETF RFC 2396.", 'display_group': 'main', @@ -3150,7 +3004,6 @@ 'base_id': 'record_modifier', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': "The Identifiable entity that last modified an object's record in the repository.", 'display_group': 'main', @@ -3176,7 +3029,6 @@ 'base_id': 'record_creator', 'comment': '', 'default': None, - 'default_display': False, 'definition': '', 'description': "The Identifiable entity that first added an object's record to the repository.", 'display_group': 'main', @@ -3202,7 +3054,6 @@ 'base_id': 'specification_military', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'The identifier of the military specification that applies to a Part.', 'display_group': 'main', @@ -3228,7 +3079,6 @@ 'base_id': 'name5', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': "The fifth of a possible 5 segments of an Organization's name. (From the CAGE data structure.)", 'display_group': 'main', @@ -3254,7 +3104,6 @@ 'base_id': 'frame_of_reference', 'comment': '', 'default': '', - 'default_display': False, 'definition': '', 'description': 'An activity or context within which a Model is intended to be used.\n\npgef:frame_of_reference maps directly to STEP "product_definition.frame_of_reference.application". In STEP, f_o_r points to an application_context, which refers to the general application domain that defined the data ... the values recommended in the STEP PDM Schema Usage Guide are: "digital mock up" "assembly study" "process planning" "electrical design" "mechanical design", but a set of values meaningful within the context of a specific Project or Organization should be defined for this attribute to be useful.', 'display_group': 'main', From waterbug at step.nasa.gov Mon Nov 20 16:28:03 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Mon Nov 20 16:28:07 2006 Subject: [pangalactic-commits] Mainly improvements to namespaces ... Message-ID: <200611202128.kAKLS3ss012353@ned.gsfc.nasa.gov> Modified files: PanGalactic/TODO 1.108 1.109 PanGalactic/pangalactic/meta/kb.py 1.7 1.8 PanGalactic/pangalactic/meta/names.py 1.36 1.37 PanGalactic/pangalactic/meta/pgefproperty.py 1.50 1.51 PanGalactic/pangalactic/meta/registry.py 1.152 1.153 PanGalactic/pangalactic/meta/metaobjects/__init__.py 1.1 1.2 PanGalactic/pangalactic/meta/metaobjects/classes.py 1.3 1.4 PanGalactic/pangalactic/node/cache.py 1.26 1.27 PanGalactic/pangalactic/node/uberorb.py 1.114 1.115 PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py 1.131 1.132 PanGalactic/src/owl/pgef.owl 1.2 1.3 PanGalactic/src/owl/pgef_meta.owl 1.5 1.6 Log message: Mainly improvements to namespaces ... plus some work toward fixing the PmofProperty bug, and making the creation of metaobjects work better. Index: PanGalactic/pangalactic/meta/names.py diff -u PanGalactic/pangalactic/meta/names.py:1.36 PanGalactic/pangalactic/meta/names.py:1.37 --- PanGalactic/pangalactic/meta/names.py:1.36 Sat Nov 4 00:49:38 2006 +++ PanGalactic/pangalactic/meta/names.py Mon Nov 20 16:27:57 2006 @@ -1,12 +1,12 @@ -# $Id: names.py,v 1.36 2006/11/04 05:49:38 waterbug Exp $ +# $Id: names.py,v 1.37 2006/11/20 21:27:57 waterbug Exp $ """ Classes, functions, and services for handling identifiers, addresses, and namespaces. -@version: $Revision: 1.36 $ +@version: $Revision: 1.37 $ """ -__version__ = "$Revision: 1.36 $"[11:-2] +__version__ = "$Revision: 1.37 $"[11:-2] from sets import Set from elementtree.ElementTree import iterparse @@ -15,7 +15,10 @@ class PgefNamespace: """ A set of names with an identifier (id) and an address (uri). To add a - name n to the PgefNamespace ns: ns.names.add(n). + name n to the PgefNamespace ns: ns.names.add(n). Note that a local + namespace object (id == '') can be created, but if it is passed to + C{registerNamespace}, it will be ignored (it cannot be registered, since + there can be any number of local namespaces, one for each source dataset). @ivar id: the id of the namespace (a.k.a. "prefix") @type id: string @@ -50,7 +53,10 @@ is complete @type complete: C{bool} """ - self.uri = uri + if not id and not uri: + raise NameError, 'At least one of id and uri must be non-empty.' + self.uri = uri or ''.join(['http://pangalactic.us/uriless_namespaces/', + id]) self.id = id if names: self.names = Set(names) @@ -105,17 +111,30 @@ def registerNamespace(namespace): """ Add a C{PgefNamespace} to the registry's C{namespaces} dictionary, and - update namespaces, allspace, and allprefix. Note that local namespaces - (namespace.id == '') are automatically ignored -- they cannot be registered, - but they can be read from a source (see getNamespacesFromSource) and they - can be persisted as an attribute of a source. + update namespaces, allspace, and allprefix. + + The if clause logic says: + + * anonymous namespaces (C{namespace.id == ''}) are ignored. (When a + L{PgefNamespace} is created with an empty id, the uri will be used as + the id, or if there is no id and no uri, a C{NameError} will be + raised, so the only way to get an anonymous namespace instance is to + somehow blank its id after it is created -- probably by mistake.) + + * currently registered namespaces (which have their C{id} in + C{namespaces} and their instance in C{namespaces.values()}) are not + overwritten unless the namespace being registered is "complete" (the + assumption being that whoever is registering it is asserting that it + is the current "complete" version, even if the one currently + registered may also be tagged as "complete"). @param namespace: a namespace @type namespace: C{PgefNamespace} """ if (namespace.id and - (namespace.id not in namespaces) and - (namespace.uri not in [ns.uri for ns in namespaces.values()])): + (((namespace.id not in namespaces) + and (namespace.uri not in [ns.uri for ns in namespaces.values()])) + or namespace.complete)): namespaces[namespace.id] = namespace allspace[namespace.id] = namespace.uri allprefix[namespace.uri] = namespace.id @@ -256,11 +275,14 @@ addr = q2u(identifier) return addr -def getNamespacesFromSource(source): +def registerNamespacesFromSource(source): """ - Parse XML data and return a list of namespace tuples of the form: - - C{[(nsprefix, url), ...]} + Parse the namespace declarations out of an XML dataset and create and + register L{PgefNamespace} objects for all the non-empty prefixes. If there + is a local namespace uri defined (prefix == '') check if there was also a + non-empty prefix defined for that uri and if so, register it and return the + corresponding namespace as the local namespace; if not, create a namespace + with an empty prefix and return that (but don't register it). @param source: source (ISource) of the XML data to be parsed, which can be either a file-like object (anything with a read() method) or the path to @@ -270,12 +292,20 @@ @return: a C{dict} mapping the source's namespace prefixes to C{PgefNamespace} instances """ + localns = None nsdict = {} for event, elem in iterparse(source, events=['start-ns']): if event == 'start-ns': nsdict[elem[0]] = elem[1] - registerNamespace(PgefNamespace(elem[0], elem[1])) - return nsdict + local_uri = nsdict.pop('', None) + for prefix, uri in nsdict.items(): + ns = PgefNamespace(prefix, uri) + registerNamespace(ns) + if ns.uri == local_uri: + localns = ns + if local_uri and not localns: + localns = PgefNamespace('', local_uri) + return localns def getETName(name, nsdict): """ Index: PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py diff -u PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.131 PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.132 --- PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py:1.131 Fri Nov 17 14:16:29 2006 +++ PanGalactic/pangalactic/node/gui/widgets/pgxnobject.py Mon Nov 20 16:27:59 2006 @@ -1,10 +1,10 @@ -# $Id: pgxnobject.py,v 1.131 2006/11/17 19:16:29 waterbug Exp $ +# $Id: pgxnobject.py,v 1.132 2006/11/20 21:27:59 waterbug Exp $ """ PanGalaxianObject (a C{PgefObject} viewer/editor) -@version: $Revision: 1.131 $ +@version: $Revision: 1.132 $ """ -__version__ = "$Revision: 1.131 $"[11:-2] +__version__ = "$Revision: 1.132 $"[11:-2] import logging from pprint import pprint @@ -781,9 +781,10 @@ test_if = 'Mime' if len(sys.argv) > 1: test_if = sys.argv[1] - p = PgefObject(_schema=orb.interfaces[test_if], - id='Test-1', - id_ns='http://pangalactic.us/test/lib/') + p = orb.createMofMetaObjectFromExtract(orb.extracts['id']) + # p = PgefObject(_schema=orb.interfaces[test_if], + # id='Test-1', + # id_ns='http://pangalactic.us/test/lib/') print ' created object with schema: %s' % p._schema.__name__ app = wx.App() frame = PanGalaxianObject(parent=None, obj=p) Index: PanGalactic/pangalactic/meta/pgefproperty.py diff -u PanGalactic/pangalactic/meta/pgefproperty.py:1.50 PanGalactic/pangalactic/meta/pgefproperty.py:1.51 --- PanGalactic/pangalactic/meta/pgefproperty.py:1.50 Fri Nov 17 14:16:26 2006 +++ PanGalactic/pangalactic/meta/pgefproperty.py Mon Nov 20 16:27:57 2006 @@ -1,4 +1,4 @@ -# $Id: pgefproperty.py,v 1.50 2006/11/17 19:16:26 waterbug Exp $ +# $Id: pgefproperty.py,v 1.51 2006/11/20 21:27:57 waterbug Exp $ """ PgefProperty represents an RDF or OWL Property. @@ -39,9 +39,9 @@ C{Interface}, in which the C{Interface} corresponds to the class that is the domain of the binary relationship. -@version: $Revision: 1.50 $ +@version: $Revision: 1.51 $ """ -__version__ = "$Revision: 1.50 $"[11:-2] +__version__ = "$Revision: 1.51 $"[11:-2] from datetime import datetime @@ -163,6 +163,16 @@ [rdfs:label] Human-readable identifier of the PgefProperty. """}, + 'description' : { + 'id' :'description', + 'id_ns' :'http://pangalactic.us/pgef/', + 'name' :'Description', + 'range' :'str', + 'description' :""" + [rdfs:comment] A plain text narrative on the characteristics and + identifying features of the PgefProperty. + """}, + 'abbreviation' : { 'id' :'abbreviation', 'id_ns' :'http://pangalactic.us/pgef/', @@ -245,17 +255,6 @@ relational database schema. """}, - 'base' : { - 'id' :'base', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Base Property', - 'range' :'PgefProperty', - 'property_type' :'object', - 'description' :""" - [rdfs:subClassOf] The immediate parent of the PgefProperty (if - any). - """}, - 'default' : { 'id' :'default', 'id_ns' :'http://pangalactic.us/pgef/', @@ -318,16 +317,6 @@ verified. """}, - 'description' : { - 'id' :'description', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Description', - 'range' :'str', - 'description' :""" - [rdfs:comment] A plain text narrative on the characteristics and - identifying features of the PgefProperty. - """}, - 'comment' : { 'id' :'comment', 'id_ns' :'http://pangalactic.us/pgef/', @@ -344,14 +333,13 @@ 'id' :'definition', 'id_ns' :'http://pangalactic.us/pgef/', 'name' :'Definition', - 'range' :'Document', - 'property_type' :'object', + 'range' :'str', 'description' :""" - [rdfs:isDefinedBy] A Document that defines the PgefProperty (i.e., - the necessary and sufficient conditions for something to be an - instance of this PgefProperty). This is meant to support - references to standardized data definitions, e.g. such as might be - found in an IEC 61360 dictionary. + [rdfs:isDefinedBy] A statement of the essential characteristics of the + PgefProperty (i.e., the necessary and sufficient conditions for + something to be an instance of this PgefProperty). This may also + contain a references to a standardized data definition, e.g. such as + might be found in an IEC 61360 dictionary. """}, 'see_also' : { @@ -375,33 +363,6 @@ [pgef:display_name] the string (which may be distinct from the value of a Property's 'name' attribute) to use as the name for the Property when it is displayed in a user interface. - """}, - - 'display_group' : { - 'id' :'display_group', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Display Group', - 'range' :'str', - 'description' :""" - [pgef:display_group] the name of the default presentation group in - which this Property is rendered when an object with this Property - is presented in a display format that requires grouping of - attributes. This can be overridden by an object's _schema's - display_map. - """}, - - 'display_style' : { - 'id' :'display_style', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Default Style', - 'range' :'str', - 'description' :""" - [pgef:display_style] the display_style governs the types of widgets - that will be used to view and edit this Property's values. This - can be thought of as a presentation cue within the context of the - 'range' (datatype or object type). For example, the styles of - 'narrative' and 'identifier' correspond in a GUI to multi-line text - widget and single-line field, respectively. """} } Index: PanGalactic/pangalactic/meta/metaobjects/__init__.py diff -u PanGalactic/pangalactic/meta/metaobjects/__init__.py:1.1 PanGalactic/pangalactic/meta/metaobjects/__init__.py:1.2 --- PanGalactic/pangalactic/meta/metaobjects/__init__.py:1.1 Fri Oct 6 23:50:18 2006 +++ PanGalactic/pangalactic/meta/metaobjects/__init__.py Mon Nov 20 16:27:58 2006 @@ -1,4 +0,0 @@ -"""The PanGalactic Core Ontology""" - -__all__ = [] - Index: PanGalactic/pangalactic/meta/kb.py diff -u PanGalactic/pangalactic/meta/kb.py:1.7 PanGalactic/pangalactic/meta/kb.py:1.8 --- PanGalactic/pangalactic/meta/kb.py:1.7 Fri Nov 3 17:38:29 2006 +++ PanGalactic/pangalactic/meta/kb.py Mon Nov 20 16:27:57 2006 @@ -1,12 +1,12 @@ -# $Id: kb.py,v 1.7 2006/11/03 22:38:29 waterbug Exp $ +# $Id: kb.py,v 1.8 2006/11/20 21:27:57 waterbug Exp $ """ OWL import/export module. Reads and writes OWL graphs. Such graphs are sets of statements (known in RDF as "triples": node-arc-node or subject-predicate-object). -@version: $Revision: 1.7 $ +@version: $Revision: 1.8 $ """ -__version__ = "$Revision: 1.7 $"[11:-2] +__version__ = "$Revision: 1.8 $"[11:-2] # Python modules import base64 @@ -36,7 +36,7 @@ # PanGalactic from pangalactic.meta.names import PgefNamespace, namespaces from pangalactic.meta.names import allspace, allprefix -from pangalactic.meta.names import getNamespacesFromSource +from pangalactic.meta.names import registerNamespacesFromSource from pangalactic.meta.names import u2q, getAddr @@ -191,7 +191,7 @@ def setDataSource(self, kbpath=None, kbdata=None): """ Set this KB's kbpath or kbdata attributes, pointing it to the data to be - used in creating its core ontology. Making this a separate methods + used in creating its core ontology. Making this a separate method enables the knowledgebase to be instantiated before its core data source has been specified. """ @@ -242,23 +242,20 @@ @return: the short name (a C{str}) of the Ontology defined in source """ s = source.read() - if not nsdict: - nsdict = getNamespacesFromSource(StringIO(s)) - nsdict.update(allspace) + localns = registerNamespacesFromSource(StringIO(s)) # allprefix should already have been updated from the local namespaces, - # and will have all prefixes except '', which we don't need - # reverse-lookup for anyway. - localnsuri = nsdict.get('', None) + # and so will have all prefixes (it will use the uri of the local + # namespace as its prefix if one is not defined). root = ET.parse(StringIO(s)) onode = root.find('{http://www.w3.org/2002/07/owl#}Ontology') oref = onode.get('{http://www.w3.org/1999/02/22-rdf-syntax-ns#}about') if oref is None: raise ValueError, 'Ontology has no prefix or URI.' if oref == '': - if localnsuri: - prefix = allprefix.get(localnsuri, None) + if localns: + prefix = allprefix.get(localns.uri, None) if not prefix: - prefix = localnsuri + prefix = localns.uri else: msg = 'Ontology uses the local namespace, ' msg += 'but the local namespace is not assigned a URI.' @@ -269,7 +266,7 @@ prefix = oref return prefix - def readRdf(self, source, nsdict=None): + def readRdf(self, source): """ Read a graph from an RDF/XML source, adding all its triples to self and adding to the relevant namespace in p.meta.names.namespaces any names @@ -277,12 +274,6 @@ @param source: an RDF/XML data container object with a read() method @type source: C{Ifile} - - @param nsdict: a dictionary of the namespaces referenced in the source, - mapping namespace prefixes to URIs (this is None by default; only - passed in if the source's namespaces were already found by the - parent process). - @type nsdict: C{dict} """ # TODO: implement real logging # TODO: record "source" for names @@ -294,19 +285,18 @@ # fix any malformed uri's s = fixFunkyUris(source.read()) self.parser.parse(StringIO(s), self) - if not nsdict: - nsdict = getNamespacesFromSource(StringIO(s)) + registerNamespacesFromSource(StringIO(s)) for triple in self: # add all (local) names to p.meta.names.namespaces[prefix].names for rdfnode in triple: - for prefix, uri in nsdict.items(): - if uri and uri in rdfnode: + for prefix, uri in allspace.items(): + if uri in rdfnode: name = rdfnode[len(uri):] if name: # don't allow fragments as local names if name.startswith('#'): name = name[1:] - ns = namespaces.get(prefix) + ns = namespaces[prefix] if ns and name not in ns.names: ns.names.add(name) Index: PanGalactic/pangalactic/node/cache.py diff -u PanGalactic/pangalactic/node/cache.py:1.26 PanGalactic/pangalactic/node/cache.py:1.27 --- PanGalactic/pangalactic/node/cache.py:1.26 Thu Nov 2 14:58:09 2006 +++ PanGalactic/pangalactic/node/cache.py Mon Nov 20 16:27:58 2006 @@ -1,9 +1,9 @@ """ Local object cache manager -@version: $Revision: 1.26 $ +@version: $Revision: 1.27 $ """ -__version__ = "$Revision: 1.26 $"[11:-2] +__version__ = "$Revision: 1.27 $"[11:-2] # Python import os @@ -144,7 +144,7 @@ break return r - def getLocalObjects(self, **kw): + def searchLocalObjects(self, **kw): """ Get objects that match the specified parameters (or all objects, if no parameters are specified) from the cache. @@ -155,7 +155,7 @@ @return: a list of objects @rtype: C{list} """ - print " - ObjectCache.getLocalObjects" + print " - ObjectCache.searchLocalObjects" print " + kw =", kw if kw: objs = filter(lambda x: self._getFilter(x, **kw), Index: PanGalactic/pangalactic/meta/metaobjects/classes.py diff -u PanGalactic/pangalactic/meta/metaobjects/classes.py:1.3 PanGalactic/pangalactic/meta/metaobjects/classes.py:1.4 --- PanGalactic/pangalactic/meta/metaobjects/classes.py:1.3 Wed Oct 25 17:09:49 2006 +++ PanGalactic/pangalactic/meta/metaobjects/classes.py Mon Nov 20 16:27:58 2006 @@ -244,7 +244,7 @@ 'name': 'Activity', 'see_also': ''} -PmofClass = {'_schema_name': 'PanGalacticClass', +PmofClass = {'_schema_name': 'PmofClass', 'abbreviation': '', 'bases': ['PmofNamespace', 'PmofMetaObject'], 'comment': '', Index: PanGalactic/pangalactic/node/uberorb.py diff -u PanGalactic/pangalactic/node/uberorb.py:1.114 PanGalactic/pangalactic/node/uberorb.py:1.115 --- PanGalactic/pangalactic/node/uberorb.py:1.114 Fri Nov 17 14:16:28 2006 +++ PanGalactic/pangalactic/node/uberorb.py Mon Nov 20 16:27:58 2006 @@ -1,11 +1,11 @@ -# $Id: uberorb.py,v 1.114 2006/11/17 19:16:28 waterbug Exp $ +# $Id: uberorb.py,v 1.115 2006/11/20 21:27:58 waterbug Exp $ # -*- test-case-name: pangalactic.test.test_uberorb -*- """ A PanGalaxian node's UberORB -@version: $Revision: 1.114 $ +@version: $Revision: 1.115 $ """ -__version__ = "$Revision: 1.114 $"[11:-2] +__version__ = "$Revision: 1.115 $"[11:-2] import codecs import copy @@ -143,13 +143,14 @@ if self.cache: # self.createDefaultNamespace() if overwrite: - mos = [self.remember(e) for e in self.extracts.values()] + mos = [self.createMofMetaObjectFromExtract(e) + for e in self.extracts.values()] else: mos = [] for e in self.extracts.values(): if not self.searchLocalObjects(base_id=e['id'], id_ns=e['id_ns']): - mos.append(self.remember(e)) + mos.append(self.createMofMetaObjectFromExtract(e)) self.save(mos) else: raise ValueError, 'the cache has not been initialized yet.' @@ -287,7 +288,8 @@ if state['repo']: if self.cache: self.log.info(' * getting cached obj oids ...') - oids = [o.oid for o in self.searchLocalObjects(cm_authority=project)] + oids = [o.oid for o in + self.searchLocalObjects(cm_authority=project)] self.log.info(' %s oids found.' % str(len(oids))) if oids: params = [('cm_authority', '=', project), Index: PanGalactic/TODO diff -u PanGalactic/TODO:1.108 PanGalactic/TODO:1.109 --- PanGalactic/TODO:1.108 Thu Nov 16 15:57:54 2006 +++ PanGalactic/TODO Mon Nov 20 16:27:56 2006 @@ -9,19 +9,15 @@ -------------------------------- IMMEDIATE STUFF (this means NOW) -------------------------------- -[-] ENHANCEMENTS: Object updating - [-] Bring repo interaction semantics into line with WebDAV / Subversion: - [-] 'update' should be an explicit, requested action (menu option; button on - toolbar, etc.) -- *not* automatic - [-] versioned objects are *frozen* -- once you have one, it never changes - unless it's a working copy -- so do not check for updates of versioned - objects. (Even if they are a working version, it should either result - from a "status" request or a pushed notification that it has changed -- - see next bullet.) - [-] for working copies, request for update should be explicit, but also - could have publish/subscribe for loosely coupled collaboration on - working copies, or optional tight coupling using pb for real-time - collaboration. +[*] ENHANCEMENTS: set-valued Properties (need cookers, etc.) +[*] ENHANCEMENTS: PanGalaxianObject (late-bound viewer/editor) + [-] improve datatype support: may need a PmofMetaObject for 'Datatype', so + that users can defined custom types using PMOF. + [-] improve datatype support ('label' and 'narrative' subtypes for 'string', + datetimes, aggregates, various numeric types, measures with units, etc.) + [*] provide field display/order customization (similar to PgefObjectGrid, + but separate) -- including GUI dialogs to define new tabs, which + properties go on which tab, and the order of the tabs [-] ENHANCEMENTS: Namespace and identity handling [-] Objects should be identified by namespace-local id's in the user interface -- oid's are internal @@ -38,13 +34,47 @@ its metaobjects, with info about their versions, so that it realizes what's going on when one of them is redefined in a user owl file (or, when runtime metaobject editing and management is implemented, redefined at runtime). -[-] ENHANCEMENTS: - [-] LDAP/X.500 interface -[-] ENHANCEMENT: Fix admin capability to add a user: +[-] ENHANCEMENT: PanGalaxian: simplify admin capability to add a user [-] basically, a convenience dialog [-] search for person: choose repo or LDAP interface, etc. [-] create a Person object, if necessary [-] go to useradmin dialog to set password and projects, as appropriate +[-] ENHANCEMENTS: PanGalaxian: add some relatively simple functions + [-] Create Project (also creates a namespace for project's objects) + [-] Create namespace (may be satisfied by create project ...) + [-] Delete object + [-] Create new version (similar to clone but with replicated base_id) + [-] Import ontology (select owl file from anywhere); option to add file to + owl/plugins for automated inclusion +[-] ENHANCEMENTS: PanGalaxian: improve object updating + [-] Bring repo interaction semantics into line with WebDAV / Subversion: + [-] 'update' should be an explicit, requested action (menu option; button on + toolbar, etc.) -- *not* automatic + [-] versioned objects are *frozen* -- once you have one, it never changes + unless it's a working copy -- so do not check for updates of versioned + objects. (Even if they are a working version, it should either result + from a "status" request or a pushed notification that it has changed -- + see next bullet.) + [-] for working copies, request for update should be explicit, but also + could have publish/subscribe for loosely coupled collaboration on + working copies, or optional tight coupling using pb for real-time + collaboration. +[-] ENHANCEMENTS: Applications: improve the PGEF Engineering and CM Ontology + [-] assembly tree w/drag/drop (as it is now) for any objects that can + be assemblies + [-] Relationship objects of which the parent object is versionable cannot be + modified except by way of their parent objects (this is required for + CM), but it is probably okay to modify them independently of their + parents if their parents are not versionable (as is the case for, e.g., + OrgPerson). + [-] Acu is a special relationship: only Models that are "design views" have + Acu relationships -- Models that are "usage views" don't (such as + interface Models) [so "usage views" are always flat??] + [-] the various forms of effectivity are attributes of the PartModel + relationship (so they are controlled by the Part, which is the + parent in that Relationship) +[-] ENHANCEMENTS: + [-] LDAP/X.500 interface [-] *** BUG: Fix interaction with server at login or when changing projects: [-] PGER should sync up the client's registry when the client logs on: * PanGalaxian sends its list of PanGalacticInterfaces @@ -76,13 +106,6 @@ registry, network, state, etc.) [-] BUG: Bogus "login failed" message when clicking on "connect" icon -- login dialog comes up with correct userid/passwd, so it definitely has them -[-] ENHANCEMENTS: Relatively simple PanGalaxian functions - [-] Create Project (also creates a namespace for project's objects) - [-] Create namespace (may be satisfied by create project ...) - [-] Delete object - [-] Create new version (similar to clone but with replicated base_id) - [-] Import ontology (select owl file from anywhere); option to add file to - owl/plugins for automated inclusion [-] ENHANCEMENTS: PanGalaxian UI context filters [see NOTES, below] [-] make PanGalaxian's context choices (the three Choice widgets 'project', 'system', and 'context') configurable at run-time, able to be set to any @@ -119,13 +142,8 @@ [-] notification of changes and/or new versions/check-ins [-] *** ENHANCEMENTS: Meta Object capabilities, etc. [-] create a PmofOntology object for any ontology added to the registry - [-] Create metaobjects for display maps, which are (meta) properties of - interfaces and properties - [-] Add metaobjects to cache and repository when the registry creates them. [-] Write version and iteration info into the metaobjects' extracts when they are generated in createInterfacesFromSource - [-] Rename 'PanGalactic[Thing]' -> 'Pmof[Thing]' for Thing in [Class, - Property, Ontology, Taxonomy, Vocabulary] (but not 'PanGalacticObject') [-] Make sure the right namespaces are being assigned to application meta objects [-] Track scopes (namespaces) and "source" (file, owner, etc.) of imported @@ -144,12 +162,6 @@ metaobjects can have an 'origin_ns' attribute, or some such. That's a separate issue -- this issue is just about global name uniqueness, collisions, and "qualified names". - [-] Get the app ontology prefix(es) by finding the owl:Ontology node(s) in - the app owl file(s) and getting its/their prefix(es) -- if there is more - than one, allow the user or admin to pick one or several interactively - for import. For now, the app ontology prefix is determined from the - base name of the app's OWL file and passed in as an argument to - registry.importApplicationOntologies(). [-] The addition of owl files should be supported by a GUI dialog that allows them to be selected, does some simple validation of the contents, then adds the ontology to the PGEF runtime (building interfaces, adding @@ -269,25 +281,6 @@ d. A statement on the current state of the software e. Sources of further information and support, both in the downloaded package and on the web. -[*] PanGalaxianObject (late-bound viewer/editor) - [*] provide field display/order customization (similar to PgefObjectGrid, - but separate) -- including GUI dialogs to define new tabs, which - properties go on which tab, and the order of the tabs - [-] improve datatype support (datetimes, aggregates, various numeric - types, measures with units, etc.) - [-] assembly tree w/drag/drop (as it is now) for any objects that can - be assemblies - [-] Relationship objects of which the parent object is versionable cannot be - modified except by way of their parent objects (this is required for - CM), but it is probably okay to modify them independently of their - parents if their parents are not versionable (as is the case for, e.g., - OrgPerson). - [-] Acu is a special relationship: only Models that are "design views" have - Acu relationships -- Models that are "usage views" don't (such as - interface Models) [so "usage views" are always flat??] - [-] the various forms of effectivity are attributes of the PartModel - relationship (so they are controlled by the Part, which is the - parent in that Relationship) [-] Enhancements to PgefObjectGrid widget [-] fix handling of object-valued columns [-] right-click access to PanGalaxianObject @@ -416,6 +409,19 @@ ---- DONE ---- +[+] ENHANCEMENTS: MetaObject capabilities + [+] Metaobjects are added to cache when the orb starts up. (Still need this + to be context-dependent and tie in with application ontology + versioning.) + [+] The registry now gets the app ontology prefix(es) by finding the + owl:Ontology node(s) in the app owl file(s) and getting its/their + prefix(es) -- if there is more than one, allow the user or admin to pick + one or several interactively for import. (Previously, the app ontology + prefix was determined from the base name of the app's OWL file and + passed in as an argument to registry.importApplicationOntologies().) +[+] ENHANCEMENTS: Renamed 'PanGalactic[Thing]' -> 'Pmof[Thing]' for Thing in + [Class, Property, Ontology, Taxonomy, Vocabulary] (but not + 'PanGalacticObject') [+] *** BUG FIXED: Fix for sizing bug in PanGalaxianObject ... this is funky, but "same as it ever was ...": since switching to external editing of narrative text, the 'view mode' widgets are bigger than the 'edit @@ -566,5 +572,5 @@ -------------------------------------------------------------------------- -# $Id: TODO,v 1.108 2006/11/16 20:57:54 waterbug Exp $ +# $Id: TODO,v 1.109 2006/11/20 21:27:56 waterbug Exp $ Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.152 PanGalactic/pangalactic/meta/registry.py:1.153 --- PanGalactic/pangalactic/meta/registry.py:1.152 Fri Nov 17 14:16:26 2006 +++ PanGalactic/pangalactic/meta/registry.py Mon Nov 20 16:27:57 2006 @@ -1,9 +1,9 @@ -# $Id: registry.py,v 1.152 2006/11/17 19:16:26 waterbug Exp $ +# $Id: registry.py,v 1.153 2006/11/20 21:27:57 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.152 $ +@version: $Revision: 1.153 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of @@ -12,7 +12,7 @@ objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.152 $"[11:-2] +__version__ = "$Revision: 1.153 $"[11:-2] # Python import glob @@ -39,7 +39,7 @@ from pangalactic.meta.metaobjects import classes, nspaces, properties from pangalactic.meta.names import PgefNamespace, registerNamespace from pangalactic.meta.names import namespaces, allspace, allprefix -from pangalactic.meta.names import getNamespacesFromSource +from pangalactic.meta.names import registerNamespacesFromSource from pangalactic.meta.pgefobject import PgefObject from pangalactic.meta.pgefproperty import PgefProperty from pangalactic.meta.utils import getDefault @@ -335,21 +335,16 @@ self.owl_graph = KB() for owl_file in app_owl_filepaths: self.log.info(' + found: %s' % owl_file) + # first experimental population of self.sources (not used for + # anything yet) if not self.sources.get(owl_file): self.sources[owl_file] = {} owl_data = open(owl_file, 'r').read() - nsdict = getNamespacesFromSource(StringIO(owl_data)) - self.sources[owl_file]['namespaces'] = nsdict - for prefix, uri in nsdict.items(): - registerNamespace(PgefNamespace(prefix, uri)) - # use nsdict (instead of p.m.names.namespaces) with - # getOntologyName because the Ontology might be in a local - # namespace (prefix == ''), which nsdict would resolve but would - # not be registered in p.m.names.namespaces + registerNamespacesFromSource(StringIO(owl_data)) ontology_name = self.owl_graph.getOntologyName( - StringIO(owl_data), nsdict) + StringIO(owl_data)) app_prefixes.append(ontology_name) - self.owl_graph.readRdf(StringIO(owl_data), nsdict=nsdict) + self.owl_graph.readRdf(StringIO(owl_data)) for prefix in app_prefixes: # build app-specific interfaces self.createInterfacesFromSource(nsprefix=prefix) @@ -363,8 +358,15 @@ Create C{Interface} instances corresponding to the set of named, schema-like data structures in the C{source}. + Note that the name (e.g., namespace prefix) of the schema-like data + structure must be non-empty (even if it represents the local namespace + of the source), since it will be used to distinguish the associated + namespace from others. + @param source: an object that provides the C{ISchemaSource} interface, - and that contains a collection of schema-like data structures + and that contains a collection of schema-like data structures -- for + example, and instance of L{pangalactic.meta.kb.KB} after it has read + from an OWL/RDF data source @type source: doesn't matter, but it must provide the L{pangalactic.meta.interfaces.ISchemaSource} interface. @@ -402,7 +404,7 @@ if hasattr(self, 'owl_graph'): source = self.owl_graph else: - nsdict=self.log.info(' + no source and no owl_graph; nothing done.') + self.log.info(' + no source and no owl_graph; nothing done.') return self.log.info(' + source = %s' % str(source)) self.log.info(' + nsprefix = %s' % nsprefix) @@ -410,8 +412,8 @@ self.log.info(' + to_python = %s' % str(to_python)) cnames = source.getClassNames(nsprefix) self.log.debug(' + cnames: %s' % cnames) - # self.log.debug(' ... finding build order of <%s> cnames ...' % ( - # nsprefix)) + self.log.debug(' ... finding build order of <%s> cnames ...' % ( + nsprefix)) # First construct a dictionary mapping names to lists of base names # (to avoid calling source.getBaseNames too much). Since the purpose # here is to find the proper build order (so all dependendencies of an @@ -419,38 +421,27 @@ # within the nsprefix we are importing from, so that's the 'scope' ... cbases = dict([(n, source.getBaseNames(nsprefix, n, scope=[nsprefix])) for n in cnames]) + self.log.debug(' + cbases: %s' % cbases) build_order = [] while 1: for cname in cnames: - # self.log.debug(' - cname: %s' % cname) + self.log.debug(' - cname: %s' % cname) if (cbases[cname].issubset(Set(build_order)) and cname not in build_order): build_order.append(cname) - # self.log.debug(' ... appended.') - # else: - # self.log.debug(' base cnames: %s' % str(cbases[cname])) - # self.log.debug(' ... base order unchanged: %s' % build_order) - residue = Set(build_order) - Set(cnames) + self.log.debug(' ... appended.') + else: + self.log.debug(' base cnames: %s' % str(cbases[cname])) + self.log.debug(' ... build order unchanged: %s' % ( + build_order)) + residue = Set(cnames) - Set(build_order) if not residue: break - # else: - # self.log.debug(' - residue: %s' % str(residue)) - nsdict = {} + else: + self.log.debug(' - residue: %s' % str(residue)) ifdict = {} propdict = {} extracts = {} - # save the nsprefix namespace as a PmofNamespace extract (the - # premise here is that a data source will include the 'complete' list of - # names (of meta objects) for its defined ontology's namespace (not - # including "imported" ontologies) -- this "policy" will depend on the - # context ... at any rate, for now set complete = True. - ns = namespaces[nsprefix] - pgns = PgefObject( - _schema=self.interfaces['PmofNamespace'], - base_id=nsprefix, uri=ns.uri, - names=[str(nom) for nom in ns.names], - complete=True) - extracts[nsprefix] = pgns.extract() pnames = source.getPropertyNames(nsprefix) for pname in pnames: kw = source.getAttrsOfProperty(nsprefix, pname) @@ -463,7 +454,7 @@ extr['_schema_name'] = 'PmofProperty' extracts[pname] = extr for cname in build_order: - # self.log.debug(' - constructing interface for %s' % cname) + self.log.debug(' - constructing interface for %s' % cname) if nsprefix == 'pgef': # for 'pgef' interfaces, just include 'pgef' base classes (scope # is just 'pgef') ... @@ -475,12 +466,12 @@ # class hierarchy all the way up (scope is 'pgef' and nsprefix) base_names = source.getBaseNames(nsprefix, cname, scope=['pgef', nsprefix]) - # self.log.debug(' base_names: %s' % base_names) + self.log.debug(' base_names: %s' % base_names) # in case this is an app interface, some of its bases may need to be # looked up in self.interfaces ... interface_bases = [ifdict.get(bn, self.interfaces[bn]) for bn in base_names] - # self.log.debug(' bases ... %s' % str(interface_bases)) + self.log.debug(' bases ... %s' % str(interface_bases)) interface_props = filter(lambda p: p.domain == cname, propdict.values()) # self.log.debug(' properties:') @@ -506,14 +497,27 @@ ) self.log.debug(' interface created: %s' % str(i)) ifdict[cname] = i - # only add interfaces to the registry's list if not generating - # python ... + # only add interfaces to the registered (runtime) interfaces if not + # generating python ... if not to_python: self.interfaces[cname] = i # try to fudge sys.modules so that PgefObject instances are - # picklable + # picklable for ZODB setattr(sys.modules['pangalactic.meta.names'], cname, ifdict[cname]) + # Save the nsprefix namespace as a PmofNamespace extract. For now, set + # complete = True (the assumption being that a data source includes the + # 'complete' list of names for its graph's namespace, not including + # "imported" graphs). + # TODO: this policy should be user-configurable and/or + # context-dependent. + ns = namespaces[nsprefix] + pgns = PgefObject( + _schema=self.interfaces['PmofNamespace'], + base_id=nsprefix, uri=ns.uri, + names=[str(nom) for nom in ns.names], + complete=True) + extracts[nsprefix] = pgns.extract() # Here we write the application domain Interface and Property extracts # out to files. Even though the saved domain Interface and Property # extracts are not used for anything at the moment (since the domain @@ -538,11 +542,10 @@ 'w') pprint(extracts[p], f) f.close() - for n in nsdict: - f = open(os.path.join(to_cache, 'registry', 'Namespaces', n), - 'w') - pprint(extracts[n], f) - f.close() + f = open(os.path.join(to_cache, 'registry', 'Namespaces', nsprefix), + 'w') + pprint(extracts[nsprefix], f) + f.close() if to_python: # Write imported interfaces, properties, and namespaces to the # [classes, properties, nspaces] modules, respectively. In case the @@ -556,9 +559,9 @@ pprint(extracts[i], f) f.write('\n') f.close() - # self.log.debug(' %s of %s interfaces written to classes.py' % ( - # str(len(build_order)), - # str(len(ifdict)))) + self.log.debug(' %s of %s interfaces written to classes.py' % ( + str(len(build_order)), + str(len(ifdict)))) f = open(os.path.join(to_python, 'properties.py'), 'w') f.close() f = open(os.path.join(to_python, 'properties.py'), 'a') @@ -567,20 +570,18 @@ pprint(extracts[p], f) f.write('\n') f.close() - # self.log.debug(' %s properties written to properties.py' % ( - # str(len(propdict)))) - # save namespaces as extracts of PmofNamespace objects + self.log.debug(' %s properties written to properties.py' % ( + str(len(propdict)))) + # save the namespace for nsprefix as an extract of a PmofNamespace + # object f = open(os.path.join(to_python, 'nspaces.py'), 'w') f.close() f = open(os.path.join(to_python, 'nspaces.py'), 'a') - nswritten = 0 - for n in nsdict: - pprint(extracts[n], f) - f.write('\n') - nswritten += 1 + pprint(extracts[nsprefix], f) + f.write('\n') f.close() - # self.log.debug(' %s namespaces written to nspaces.py' % ( - # str(len(nswritten)))) + self.log.debug(' %s namespace written to nspaces.py' % ( + str(nsprefix))) # update registry [meta object] extracts from the imported ontology -- # its Classes and Properties are assumed authoritative (modulo # the ontology *version*, which needs to be addressed); the ontology @@ -592,9 +593,8 @@ for p in propdict: if p not in self.extracts: self.extracts[p] = extracts[p] - for n in nsdict: - if n not in self.extracts: - self.extracts[n] = extracts[n] + if nsprefix not in self.extracts: + self.extracts[nsprefix] = extracts[nsprefix] # even if there is an extract for the nsprefix of this ontology in # self.extracts, override that one with the extract for nsprefix based # on this data source, which supposedly owns it (the ultimate test @@ -876,21 +876,25 @@ # restored ... self.interface_base_order = self.getInterfaceBaseOrder() - # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! - def createMetaObjectFromExtract(self, e): + def createMofMetaObjectFromExtract(self, e): """ - Create a C{Pmof} meta object from an extract. The most frequent use - case is to create meta objects from the registry's 'extracts' - dictionary, which is populated when meta objects are imported or created - from external data sources. + Create a C{Pmof} meta object from an extract. + + The meta objects created by this function will typically be persisted + either in cache or in the repository or both. This function ensures + that certain relationships hold between the attributes of the meta + object. It assumes that the namespace uri and prefix (C{id_ns'}) used + in the extract are known to the registry and that its C{_schema_name} is + the name of a registered interface. @param e: a meta object extract of the special kind created by the registry @type e: C{dict} """ - ns_uri = namespaces['id_ns'].uri - e['oid'] = ns_uri + e['id'] - # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! + e['namespace_uri'] = namespaces[e['id_ns']].uri + e['oid'] = e['uri'] = e['namespace_uri'] + e['id'] + _schema = self.interfaces[e.pop('_schema_name')] + return PgefObject(_schema, **e) # PLACEHOLDER: DO NOT USE -- NOT DONE YET !! def createPmofClassExtractFromInterface(self, i): Index: PanGalactic/src/owl/pgef_meta.owl diff -u PanGalactic/src/owl/pgef_meta.owl:1.5 PanGalactic/src/owl/pgef_meta.owl:1.6 --- PanGalactic/src/owl/pgef_meta.owl:1.5 Fri Nov 17 14:16:30 2006 +++ PanGalactic/src/owl/pgef_meta.owl Mon Nov 20 16:28:00 2006 @@ -12,20 +12,22 @@ + A namespace whose names have definitions and a context or domain. - - - Able to be encoded in some digital form. + + + + Evolvable in a set of discrete, identifiable incarnations. - @@ -33,158 +35,154 @@ - + An object that is used to define the information structures of PanGalacticObjects in a domain. - - The specification of a domain of interest. The PGEF concept of an Ontology is based on the OWL definition of ontology, and consists of Classes, Properties, Datatypes, and possibly other included Ontologies. - - - - + Having a name or identifier (a.k.a., ID, OID, etc.). - - A specification of the information structure that defines a PanGalactic domain object (i.e., a pgef:PanGalacticObject). + + The specification of a domain of interest. The PGEF concept of an Ontology is based on the OWL definition of ontology, and consists of Classes, Properties, Datatypes, and possibly other included Ontologies. + + + + + A named collection of names. - Having an owner, creator, and most recent modifier that can be identified. + - A pgef:Property is similar to an rdfs:Property, an owl:DatatypeProperty or owl:ObjectProperty, or a UML class attribute. - + A PmofProperty is similar to an rdfs:Property, an owl:DatatypeProperty or owl:ObjectProperty, or a UML class attribute. - Able to have access to it made available only to a specifiable set of individuals. + + A collection of classes and a subclass relationship. A Taxonomy typically, but not necessarily, takes the form of a Directed Acyclic Graph or DAG (a tree structure). - - - - - - - - - + Names of synonyms for this PGEF Property. - + >Synonyms or alternate names. + - The namespace's names. + The names contained in a namespace. + If 'functional' is True, this is equivalent to saying that the property is a member of the Class owl:FunctionalProperty. That is, the Property is 'single-valued'. Likewise, if 'functional' is False, the Property is 'multi-valued', and its value will be represented as a collection of the object type or datatype specified in its 'range' attribute. - + >If functional is True, this is equivalent to saying that the property behaves like a member of the Class owl:FunctionalProperty. That is, the Property is single-valued. Likewise, if functional is False, the Property is multi-valued, and its value will be represented as a collection of the object type or datatype specified in its range attribute. - - The name of the default pgef:Property group with which this pgef:Property will be displayed when presented in a display format that requires attributes to be grouped. - + + + The range of a PmofProperty is the name of the type of values it can have. Note that if PmofProperty represents a relationship to an object, then its value will be interpreted as the name of the Class of the related objects. - + A flag indicating whether the names attribute contains the complete set of names for the namespace. + >A boolean value indicating whether the names Property of a namespace contains the complete set of names for the namespace. - + + + The definition of a MetaObject. - + >Characteristics that uniquely identify a concept. - - If 'inverse_functional' is True, this is equivalent to saying that the property is a member of the Class [owl:InverseFunctionalProperty]. That is, each value in the Property's range corresponds to a unique value in its domain. That is, the Property can serve as a 'primary key' in a relational database schema. + >If this inverse_functional is True, this is equivalent to saying that the property behaves like a member of the Class [owl:InverseFunctionalProperty]. That is, each value in the its range corresponds to a unique value in its domain. That is, the Property can serve as a primary key in a relational database schema. + + + + The PmofClass of which this PmofProperty represents a characteristic or relationship + + + The string to be used as a Property's name when it is to be displayed in a user interface. - + >The identifying string to be used when the PmofProperty is to be displayed in a user interface. + - - - For owl:ObjectProperty instances, "object"; for owl:DatatypeProperty instances, "datatype". - - - + >Specifies whether the range of a property refers to a Class of objects (i.e., its values are members of that Class) or the name of a datatype; (i.e., its values are instances of a datatype, e.g. string, integer, etc.). - The default value of the PGEF Property. + - + + The default value of the PmofProperty. + - - - + The display_style governs the types of widgets that will be used to view and edit a Property's values. This can be thought of as a presentation cue within the context of the 'range' (datatype or object type). For example, the styles of 'narrative' and 'identifier' correspond in a GUI to multi-line text widget and single-line field, respectively. + >A shorter version of the name (could be considered a special-purpose alias). - + + - Unique name of the namespace. This may be a real URI or it may be a faux URI (such as those permitted in RDF/OWL), but it must at least have the '<scheme>://<authority><path>' structure specified in IETF RFC 2396. - + + Unique name of the object. This may be a real URI or it may be a faux URI (such as those permitted in RDF/OWL), but it must at least have the scheme://authority/path structure specified in IETF RFC 2396. Index: PanGalactic/src/owl/pgef.owl diff -u PanGalactic/src/owl/pgef.owl:1.2 PanGalactic/src/owl/pgef.owl:1.3 --- PanGalactic/src/owl/pgef.owl:1.2 Fri Nov 3 10:19:13 2006 +++ PanGalactic/src/owl/pgef.owl Mon Nov 20 16:28:00 2006 @@ -1,1095 +1,1076 @@ - - - - - + + + PanGalacticObject is the base class of the Pan Galactic Engineering Framework ontology. PanGalacticObjects have some administrative Properties that allow them to be identified, persisted, and managed in a PanGalactic environment. + - + - An activity that has the purpose of producing and/or maintaining something, and which involves contributions from Persons and Organizations. - - - - - - - - - - - - + - A Relationship that assigns a Role (the "parent") to an Actor (the "child"). - - - + - A Relationship between a PanGalacticObject and a Document. - + A Document whose function is to serve as a wrapper for a serialized population of objects in a file-like object, governed by a single schema (a.k.a. an "ontology"). The file can be a STEP (ISO 10303) file (in a number of possible encoding options), a CAD file, or in general any data exchange or serialization file. + >A documented collection of parts and related information. Parts Lists occur in various contexts in the product life cycle, e.g.: to document component technology research, to document candidate parts for assemblies, to document Parts used in Model development, to track Parts procurement information, to document Part stocks and inventory, etc. - + - - - - - - - + + A constructed realization of the properties and/or behaviors of a concept or a real-world thing. A pgef:Model instance can be used for analysis, simulation, description, specification, or presentation of some aspect(s) of a domain object. - -pgef:Model generally maps to step:product_definition, but there may be other mappings for particular STEP Application Protocols and other types of models. - -(Note that the characteristics of any pgef:Model instance can be the subject of a pgef:Model at a higher level of abstraction. The higher-level pgef:Model instance in this context is sometimes referred to as a "meta-model" relative to the pgef:Model instance whose characteristics it models.) + >Multi-purpose Internet Mail Extension (MIME) types. - - - - + + Able to be encoded in some digital form. - + >A piece of work with an input, an output, resources, and controls, that forms one logical unit. An activity's definition may or may not be configuration managed. If its definition is under configuration management, its definition is contained in a Process (which see). An activity may be a manual activity, which does not involve computer automation, or a workflow (automated) activity. A workflow activity requires human and/or machine resources(s) to support process execution; where human resource is required an activity is allocated to a workflow participant. [Based on WfMC definition] Synonyms: step, node, task, work element, process element, operation, instruction. - + + A well-defined and identifiable connection between PanGalacticObjects. + + + - + Able to have access to it restricted to a specifiable set of individuals. - + >A model of a structured Activity. A ProcessDefinition may itself be composed of one or more ProcessDefinitions. [Based on the WfMC definition of "Business Process"] Synonyms: Business Process. - + The output of a process or activity. + >A well-defined, persistent, and identifiable collection of Person instances. - + + + + + + + + + + + + + + + + + A file-like object (FileLink) or a set of file-like objects that are used in publishing, displaying, importing, exporting, or exchanging a PanGalacticObject. The concept is general and can apply to serialization, presentation, or data exchange use-cases, among others. A Representation can be thought of as a reified relationship between a PanGalacticObject (which has the Representation as one of the items in its representations property) and one or more FileLink instances (its 'files' property). As defined in the PGEF ontology, a Representation represents a single domain object (such as a Document or Model). In serialization and data exchange use-cases it is common for a file or a collection of files to represent many objects -- in PGEF, the latter is defined to be a DataSet or DataPackage. - + - + A PhysicalObject that is purported to be a physical realization of a Part. + >Quantified Assembly Component Usage represents some number of instances or some measured quantity of a PanGalacticObject used in the assembly of another PanGalacticObject. - + + + + The mother of all specific PanGalactic Fu (aspects and behaviors). Note that PanGalactic Fu are meta-level agnostic. To PanGalactic Fu, all is Fu. + >Having a name or identifier (a.k.a., ID, OID, etc.). - + A named, structured Activity concept, which is realized and applied systematically to achieve a business objective or policy goal, normally within the context of an organisational structure defining functional roles and relationships. [Based on the WfMC definition of "Business Process"] Synonyms: Business Process. - + - - - The common ancestor of all Versionable objects. + - + - - - Having an Identifiable owner, creator, and most recent modifier. - - - - - - A concept that has some functionality that can be realized in a product or thing that is physically sensible and measurable (the PhysicalPart). - -pgef:Part maps to the combination of STEP (ISO 10303) 'product' and 'product_definition_formation'. STEP 'frame_of_reference' (-> product_context.id) is not represented within the PGEF ontology. STEP 'description' maps to description. - - - + An entity that is a collection of measurable stuff. + >The common ancestor of all Versionable objects. - + + + + + + + + + + + + Multi-purpose Internet Mail Extension (MIME) types. + >The class of file-like PanGalacticObjects. + + + A Relationship between a Role in the context of a Project and a Person. + - + - - + Having a name or identifier (a.k.a., ID, OID, etc.). + >Able to be encoded in some digital form. + + + - - - - - - - + - + - - - - A well-defined, persistent, and identifiable collection of Person instances. + >A Document whose function is to serve as a wrapper for a serialized population of objects in a file-like object, governed by a single schema (a.k.a. an "ontology"). The file can be a STEP (ISO 10303) file (in a number of possible encoding options), a CAD file, or in general any data exchange or serialization file. - - - - - + The name (type) of a Relationship that can be assigned to an Actor within a context. The context will typically be an Organization or a Project. A Role will typically have an associated set of privileges. - - - - + >Evolvable in a set of discrete, identifiable incarnations. + - + - + - + An entity that can take on Roles and create, modify, and own PanGalacticObjects + >A PartsListItem is a Document that is a component of a PartsList, and represents a single line or item on its parent PartsList. The PartsListItem references an Acu (a usage of one or more PanGalacticObject instances in the assembly of another PanGalacticObject). - + A collection of one or more DataSet instances. A DataPackage instance may include one or more file-like objects and may be governed by more than one schema (ontology). The primary purpose of the DataPackage Class is to enable the tracking and management of arbitrary collections of exchanged data. - - - + >An entity that can take on Roles and create, modify, and own PanGalacticObjects + - + - + A well-defined and identifiable connection between PanGalacticObjects. + >A PhysicalObject that is purported to be a physical realization of a Part. - - + A Relationship between a Role with an Organization context and a Person. + >The mother of all specific PanGalactic Fu (aspects and behaviors). Note that PanGalactic Fu are meta-level agnostic. To PanGalactic Fu, all is Fu. - - + + + The class of file-like PanGalacticObjects. - - - - - - - - + >A constructed realization of the properties and/or behaviors of a concept or a real-world thing. A pgef:Model instance can be used for analysis, simulation, description, specification, or presentation of some aspect(s) of a domain object. + +pgef:Model generally maps to step:product_definition, but there may be other mappings for particular STEP Application Protocols and other types of models. + +(Note that the characteristics of any pgef:Model instance can be the subject of a pgef:Model at a higher level of abstraction. The higher-level pgef:Model instance in this context is sometimes referred to as a "meta-model" relative to the pgef:Model instance whose characteristics it models.) - - - - - - + A human being. + >The relationship between a Part and a Model that represents it. + - - + The relationship between a PanGalacticObject (the component) and an assembled PanGalacticObject (the assembly) of which it is a constituent part. + >A Relationship that assigns a Role (the "parent") to an Actor (the "child"). + - + Evolvable in a set of discrete, identifiable incarnations. - - + >The output of a process or activity. + - - + + Quantified Assembly Component Usage represents some number of instances or some measured quantity of a PanGalacticObject used in the assembly of another PanGalacticObject. + >A Relationship between a PanGalacticObject and a Document. - - - - + + A piece of work with an input, an output, resources, and controls, that forms one logical unit. An activity's definition may or may not be configuration managed. If its definition is under configuration management, its definition is contained in a Process (which see). An activity may be a manual activity, which does not involve computer automation, or a workflow (automated) activity. A workflow activity requires human and/or machine resources(s) to support process execution; where human resource is required an activity is allocated to a workflow participant. [Based on WfMC definition] Synonyms: step, node, task, work element, process element, operation, instruction. + >The relationship between a PanGalacticObject (the component) and an assembled PanGalacticObject (the assembly) of which it is a constituent part. - + A documented collection of parts and related information. Parts Lists occur in various contexts in the product life cycle, e.g.: to document component technology research, to document candidate parts for assemblies, to document Parts used in Model development, to track Parts procurement information, to document Part stocks and inventory, etc. - - - + >A human being. + + + + + + + + + - + - + A PartsListItem is a Document that is a component of a PartsList, and represents a single line or item on its parent PartsList. The PartsListItem references an Acu (a usage of one or more PanGalacticObject instances in the assembly of another PanGalacticObject). - - - - A model of a structured Activity. A ProcessDefinition may itself be composed of one or more ProcessDefinitions. [Based on the WfMC definition of "Business Process"] Synonyms: Business Process. + >A collection of one or more DataSet instances. A DataPackage instance may include one or more file-like objects and may be governed by more than one schema (ontology). The primary purpose of the DataPackage Class is to enable the tracking and management of arbitrary collections of exchanged data. - - + + The relationship between a Part and a Model that represents it. + >The name (type) of a Relationship that can be assigned to an Actor within a context. The context will typically be an Organization or a Project. A Role will typically have an associated set of privileges. + + + + + + - + A file-like object (FileLink) or a set of file-like objects that are used in publishing, displaying, importing, exporting, or exchanging a PanGalacticObject. The concept is general and can apply to serialization, presentation, or data exchange use-cases, among others. A Representation can be thought of as a reified relationship between a PanGalacticObject (which has the Representation as one of the items in its representations property) and one or more FileLink instances (its 'files' property). As defined in the PGEF ontology, a Representation represents a single domain object (such as a Document or Model). In serialization and data exchange use-cases it is common for a file or a collection of files to represent many objects -- in PGEF, the latter is defined to be a DataSet or DataPackage. - - - + >An entity that is a collection of measurable stuff. + - + A Relationship between a Role in the context of a Project and a Person. + >Having an Identifiable owner, creator, and most recent modifier. - + - + PanGalacticObject is the base class of the Pan Galactic Engineering Framework ontology. PanGalacticObjects have some administrative Properties that allow them to be identified, persisted, and managed in a PanGalactic environment. - - - - + >A concept that has some functionality that can be realized in a product or thing that is physically sensible and measurable (the PhysicalPart). + +pgef:Part maps to the combination of STEP (ISO 10303) 'product' and 'product_definition_formation'. STEP 'frame_of_reference' (-> product_context.id) is not represented within the PGEF ontology. STEP 'description' maps to description. + - - + A readable thing. - + + - - + The Identifiable entity that created an object. - - - - - - - - + >Able to have access to itself restricted to a specifiable set of individuals. + + + + + The parent Object in a Relationship. - - - - + >A Relationship between a Role with an Organization context and a Person. + + + + An Organization's parent Organization. (In the CAGE data structure, this is called the 'association_cage'.) - - - + >An activity that has the purpose of producing and/or maintaining something, and which involves contributions from Persons and Organizations. + + + + + + + + The PartsListItem instances contained by a PartsList. - - - - - The Identifiable entity that first added an object's record to the repository. - - - - - - - The Organization that was primarily responsible for producing a PhysicalPart. - - - - - - - - The Identifiable entity that owns an object's record in the repository. pgef:record_owner and pgef:record_creator may be different. The default is for them to be the same. The pgef:record_owner always has the privilege of modifying the record of the object in the repository (or deleting it, if deletion is allowed for members of the object's Class). - - - A digital representation of an object (e.g., a CAD model, a spreadsheet, an HTML document). Representations include both "presentations", such as PDF or HTML for a document, and more general representations such as exchange data sets (e.g., for an engineering model: STEP, VRML, etc.). - - - - - The Part of which a PhysicalPart is a realization. - - - - - - - - - An Actor's primary Organizational affiliation. - - + The DataSets contained in a DataPackage. - - + + - - - - The MIME type/subtype of a file's content. - - - - - - + + + A flag indicating whether a Versionable object is the most recent version. + >Alternate email addresses of the Actor. - + + If a Part has a 'drawing' (a type of specification), this is its identifier. - - + >The local identifiers assigned to the objects in a DataSet. - - + + The National Stock Number for a Part. - - + >The number of instances or measured quantity of the component object(s) used. - - + + The local identifiers assigned to the objects in a DataSet. + >Other equivalent identifiers for a Part. - - + Other equivalent identifiers for a Part. - - - + >Second of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.) + + + + + + The purpose of a Model of a Part. - - - + >The CAGE type code. (From the CAGE data structure.) + + + + An Actor's access permissions to an Object will be determined by testing whether the security_mask of the Object contains the Actor's oid or the oids of any Role assignments the Actor has. + >A Person's middle initial or name. + + + + + The Organization from which a PhysicalPart was procured. + + + + + + - - - - An identifier for a PartsListItem within the context of its PartsList. - - - - - - + >An integer that can be used to specify the ordering of this file within an ordered set of files -- attachments, for example. NOTE: Sequence is intepreted as applying within Sequence Context (which see). + + + + The identifier for a Part given by its specification. - - - - - + >The Identifiable entity that last modified an object. + + + + + Information about an object that may be incidental, temporal, or contextual. The meaning is determined by the application context. - - - - - The context within which a Model is defined. - -From the STEP PDM Schema Usage Guide: "[Definition context] distinguishes the type of the associated product_definition ...". Examples given in the STEP PDM Schema Usage Guide all use name == "part definition" ... a set of values meaningful within the context of a Project or Organization should be defined for this attribute to be useful. Maps to STEP "product_definition_context.name". + >Third of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.) + + - - - + + A symbolic name that serves as an identifier for a component usage within the context of an assembly. - - - - - - - - + >The identifier for a screening specification that applies to a Part. + + + The third of a possible 5 segments of an Organization's name. (From the CAGE data structure.) - - + >A Person's last name (surname). + + + + + An integer indicating the sequence of versions (since the version attribute itself may not have a well-defined sort order). + + + + The purpose or meaning of this Representation -- e.g. "publication", "presentation", "exchange", etc. The semantics of this Property are heavily context-dependent. - - - - - - + + + + + A Person's last name (surname). - - + >The Identifiable entity that created an object. + + + + + + + A Person's first name (given name). - - - - - + >The Acu instance referenced by a PartsListItem. + + + The type of a PartsList, selected from a set of standard parts list types, such as 'as-designed' (ADPL), 'as-built' (ABPL), 'preliminary' (PRPL), etc., which should be agreed upon by the Project(s) or Organization(s) using the PartsList. - - - - - - - + >The size of a file in bytes. + + + + Fourth of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.) - - + + + + + + An Organization's zip code (if in the U.S.) or postal zone. (From the CAGE data structure.) - - - - - - + >The system from which the data in a DataSet originated. + + A boolean indicating whether an Actor has the capability to assign any Role to itself in a PanGalactic application. - - - - + >The MIME Media Type per <http://www.iana.org/assignments/media-types/> (or a custom type). + + + + + The purpose of a Document in the context of an Object. - - - + >Location == URL to get the file (from the repository if it is a 'secured' file; from elsewhere if not). - + + + Alternate email addresses of the Actor. - - - + >An Organization's zip code (if in the U.S.) or postal zone. (From the CAGE data structure.) + + + + + + The CAGE type code. (From the CAGE data structure.) - - - + >The name of the schema that governs the DataSet. - - - The identifier for a screening specification that applies to a Part. - - + + - - An activity or context within which a Model is intended to be used. - -pgef:frame_of_reference maps directly to STEP "product_definition.frame_of_reference.application". In STEP, f_o_r points to an application_context, which refers to the general application domain that defined the data ... the values recommended in the STEP PDM Schema Usage Guide are: "digital mock up" "assembly study" "process planning" "electrical design" "mechanical design", but a set of values meaningful within the context of a specific Project or Organization should be defined for this attribute to be useful. - - - - A flag, for which a True value indicates that a Representation is able to be used (e.g., by an editor or a parser/importer) to (re)create or edit itself and/or some other Representation. - - - - + >The namespace within which an id is unique. + + + + + - The Life Cycle Stage within which a Model is defined. - -pgef:life_cycle_stage maps directly to STEP 'product_definition_context.life_cycle_stage'. The two values recommended in the STEP PDM Schema Usage Guide are: "design" and "manufacturing" ... a set of values meaningful within the context of a particular Project or Organization should be defined for this attribute to be useful. - - - - + >An Actor's primary phone number. + + + The second of a possible 5 segments of an Organization's name. (From the CAGE data structure.) - + >The identifier for a Part's 'Model', a somewhat arbitrary identifier usually specified by the manufacturer. + - - - + + + + The number of instances or measured quantity of the component object(s) used. - - - - - + >The Part of which a PhysicalPart is a realization. + + + + + + The state of a PartsList relative to some possibly extensible set of standard states, e.g. 'in-process', 'reviewed', etc. The set of standard states should be agreed upon by the Project(s) or Organization(s) using the PartsList. - - - + >The MIME type/subtype of a file's content. + + + + + + The Federal Supply Classification code for a Part (this is also the first four digits of the NSN). - - - - - + >An identifier for incremental snapshots of working copies of a specific version of a Versionable. Iterations are a zero-based sequence of integers in which the unmodified version is itself the 0th iteration. + +Working copies of iterations can be used as parallel evolution threads toward the next version. Iterations are analogous to experimental branches in CVS: they are used to identify and manage experimental configurations of the Versionable that may never become a version but which need to be documented as part of the design and analysis process. Since Versionables cannot be changed once checked in, their iteration also cannot be changed once checked in to the repository, and must be regarded as "frozen." The policy for saving iterations in the repository can be set by the project or user: all iterations, all iterations since the last version, etc. In early prototyping exercises, iterations may be used exclusively for CM (on, say, the 0th version of everything). + + The user's local name for the file. - - - - - + >A Person's first name (given name). + + + + + + The content of the Document in a text-based format (usually text/plain, but may be any format with a MIME type of "text", such as text/html, text/xml, or text/tab-separated-values). - - - - - An identifier assigned by a manufacturer to a specific PhysicalPart. - - - - - + >The MIME type of the value of the 'content' attribute. (This does not imply that a Document has an intrinsic MIME type. In general, each representation of the Document will have a MIME type, and they may all be different.) + + + + + + + An identifier that is unique within a specified namespace. + >The Identifiable entity that first added an object's record to the repository. + + + - - - Date-time of addition of an object's record to the repository. - - - - - - - + >The first of a possible 5 segments of an Organization's name. (From the CAGE data structure.) + + + + + + Location == URL to get the file (from the repository if it is a 'secured' file; from elsewhere if not). - - - + >A flag, for which a True value indicates that a Representation is able to be used (e.g., by an editor or a parser/importer) to (re)create or edit itself and/or some other Representation. + + + + The date and time of last modification of an object. - - - - + >Date-time of last modification of an object's record in the repository. + + - - + + An integer code: 1=U.S., 2=Foreign, 3=Canada (From the CAGE data structure.) - - - The Identifiable entity that last modified an object. - - - - - - + A narrative about the characteristics and identifying features of an object. + >The identifier of the military specification that applies to a Part. + + - - - + The name of the attribute within the context of which the Sequence attribute is meaningful. If the value of the Sequence Context attribute is 'role', and the value of Role is 'attachment', then Sequence is the position of this file within the set of files that have a Role of 'attachment'. + >The id for a Versionable object will often be derived by combining its base_id and version. Since this is not always the case, the specifics of the relationship between an object's id, base_id, version, and iteration are left to the internal rules of an application. Versionable objects cannot be changed once they are checked in to the repository, so applications should treat versions that have been (or are about to be) checked in as "frozen." + + - - + + + A Person's middle initial or name. + >The Federal Supply Classification code for a Part (this is also the first four digits of the NSN). - - - Third of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.) + + - + The Life Cycle Stage within which a Model is defined. + +pgef:life_cycle_stage maps directly to STEP 'product_definition_context.life_cycle_stage'. The two values recommended in the STEP PDM Schema Usage Guide are: "design" and "manufacturing" ... a set of values meaningful within the context of a particular Project or Organization should be defined for this attribute to be useful. - + - + An indicator of whether the document is intended to be (1) stand-alone, (2) the parent in an assembly of documents, or (3) a component in another document. + >A symbolic name that serves as an identifier for a component usage within the context of an assembly. - + Second of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.) + >The Identifiable entity that has primary responsibility for configuration management of the object. Often, this will be a Project, but it sometimes may be an Organization, a Person, or some other entity. + + + + + + + An Actor's primary Organizational affiliation. + + + + + + The National Stock Number for a Part. - - - + + The URI of the namespace to which an object's name belongs. + >The second of a possible 2 segments of an Organization's Street Address. (From the CAGE data structure.) - - - - + An integer indicating the sequence of versions (since the version attribute itself may not have a well-defined sort order). + >The Identifiable entity that owns an object. + + + - + + + + A user-modifiable alphanumeric string used to identify a baseline, release, or version. Similar to a CVS release tag. - - - + >The Organization that was primarily responsible for producing a PhysicalPart. - + The size of a file in bytes. + >The purpose of a Document in the context of an Object. - - + + - - - + The context within which a Role is defined. + + - - The Identifiable entity that owns an object. - - - - - + + - - The identifier for a Part's 'Model', a somewhat arbitrary identifier usually specified by the manufacturer. - - - The date and time of an object's creation. - - + >The status of an Organization's record (active or inactive). (From the CAGE data structure.) - + First of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.) - - + >The user's local name for the file. + + - + - - A flag assigned to a FileLink object which, if True, indicates that the file is stored in the repository's file vault; if False, the file is not stored in the repository but is referenced elsewhere. + >An alphanumeric string used by a manufacturer to identify the collection (lot) of PhysicalParts of which a specific PhysicalPart was a member. + + - + + + - - The person who authorized creation of the Data Set. + >The Identifiable entity that last modified an object's record in the repository. - - + + A human-readable identifier for an object -- usually the one by which the object is known to the end-user, but it may be used for any type of identification, including aliases and local nomenclatures. Its meaning is dependent on the application context. This concept is analogous to a person's given name. + >Indicates whether this Representation is the original source from which its parent Object was instantiated in the repository (PGER) or in the current application context. + - - + + An Organization's city. (From the CAGE data structure) - + >An abbreviation for an Organization's name. Maps to a Part's Manufacturer Name Code. Corresponds to the parent Organization identifier (Association CAGE) but is a "mnemonic" string. Therefore, it is not unique among known Organizations, since several locations of the same Organization will have the same Organization Name Code. - + A capsule summary of the Document's content. + >The state of a PartsList relative to some possibly extensible set of standard states, e.g. 'in-process', 'reviewed', etc. The set of standard states should be agreed upon by the Project(s) or Organization(s) using the PartsList. - + - + The purpose of a File relative to a Representation to which it is related. Possible values are: "attachment", "content", "stylesheet", "DTD", etc. - + >A capsule summary of the Document's content. + - + + Date-time of last modification of an object's record in the repository. + >The content of the Document in a text-based format (usually text/plain, but may be any format with a MIME type of "text", such as text/html, text/xml, or text/tab-separated-values). - - + - + The first of a possible 5 segments of an Organization's name. (From the CAGE data structure.) - + >An identifier for a PartsListItem within the context of its PartsList. + - + + The context within which a Model is defined. + +From the STEP PDM Schema Usage Guide: "[Definition context] distinguishes the type of the associated product_definition ...". Examples given in the STEP PDM Schema Usage Guide all use name == "part definition" ... a set of values meaningful within the context of a Project or Organization should be defined for this attribute to be useful. Maps to STEP "product_definition_context.name". - The system from which the data in a DataSet originated. - + - - + + + An abbreviation for an Organization's name. Maps to a Part's Manufacturer Name Code. Corresponds to the parent Organization identifier (Association CAGE) but is a "mnemonic" string. Therefore, it is not unique among known Organizations, since several locations of the same Organization will have the same Organization Name Code. - + >A user-modifiable alphanumeric string used to identify a baseline, release, or version. Similar to a CVS release tag. - - + The version of the software application that was used to produce a DataSet. - + >Date-time of addition of an object's record to the repository. + + - - - + + + The Acu instance referenced by a PartsListItem. - - - + >The primary email address of the Actor. - The generic identifier for a Part, which in some cases is specified by a standard (e.g., JEDEC for electronic parts). - - - + An Actor's primary phone number. - + >The second of a possible 5 segments of an Organization's name. (From the CAGE data structure.) + + + + + + + A flag indicating whether a Versionable object is the most recent version. - - + + + The person who authorized creation of the Data Set. + + + + + + The Identifiable entity that last modified an object's record in the repository. - + >The date and time of an object's creation. - + The manufacturer's identifier for a Part. - + >The third of a possible 5 segments of an Organization's name. (From the CAGE data structure.) + + + + + + The fourth of a possible 5 segments of an Organization's name. (From the CAGE data structure.) + - + + An identifier that is unique within a specified namespace. + + + + The namespace within which an id is unique. - + >A boolean indicating whether an Actor has the capability to assign any Role to itself in a PanGalactic application. + + - - - + + + + The Identifiable entity that has primary responsibility for configuration management of the object. Often, this will be a Project, but it sometimes may be an Organization, a Person, or some other entity. - + >An indicator of whether the document is intended to be (1) stand-alone, (2) the parent in an assembly of documents, or (3) a component in another document. - + A Person's telephone number at an Organization. + >The CAGE code that a CAGE code replaces. (From the CAGE data structure.) - + - - - + + The primary email address of the Actor. + >An Organization's city. (From the CAGE data structure) + - + + + The fourth of a possible 5 segments of an Organization's name. (From the CAGE data structure.) + >The date and time of last modification of an object. + + + - + + Information about an object that may be incidental, temporal, or contextual. The meaning is determined by the application context. - - + + + + The MIME type of the value of the 'content' attribute. (This does not imply that a Document has an intrinsic MIME type. In general, each representation of the Document will have a MIME type, and they may all be different.) - - - + >An Actor's access permissions to an Object will be determined by testing whether the security_mask of the Object contains the Actor's oid or the oids of any Role assignments the Actor has. - + + The name of the schema that governs the DataSet. - + >A narrative about the characteristics and identifying features of an object. - + + - + The second of a possible 2 segments of an Organization's Street Address. (From the CAGE data structure.) - + >The generic identifier for a Part, which in some cases is specified by a standard (e.g., JEDEC for electronic parts). - + + - - The identifier of the military specification that applies to a Part. + >The manufacturer's identifier for a Part. + - - + - + The MIME Media Subtype per <http://www.iana.org/assignments/media-types/> (or a custom subtype). + >The identifier of the specification document that applies to a Part. + - + The Organization from which a PhysicalPart was procured. - - - + >The identifier for a Part given by its specification. + + + - - + An identifier for incremental snapshots of working copies of a specific version of a Versionable. Iterations are a zero-based sequence of integers in which the unmodified version is itself the 0th iteration. - -Working copies of iterations can be used as parallel evolution threads toward the next version. Iterations are analogous to experimental branches in CVS: they are used to identify and manage experimental configurations of the Versionable that may never become a version but which need to be documented as part of the design and analysis process. Since Versionables cannot be changed once checked in, their iteration also cannot be changed once checked in to the repository, and must be regarded as "frozen." The policy for saving iterations in the repository can be set by the project or user: all iterations, all iterations since the last version, etc. In early prototyping exercises, iterations may be used exclusively for CM (on, say, the 0th version of everything). - + >An identifier assigned by a manufacturer to a specific PhysicalPart. + + - + + + The id for a Versionable object will often be derived by combining its base_id and version. Since this is not always the case, the specifics of the relationship between an object's id, base_id, version, and iteration are left to the internal rules of an application. Versionable objects cannot be changed once they are checked in to the repository, so applications should treat versions that have been (or are about to be) checked in as "frozen." + >The first of a possible 2 segments of an Organization's Street Address. (From the CAGE data structure.) - + + + + + An activity or context within which a Model is intended to be used. + +pgef:frame_of_reference maps directly to STEP "product_definition.frame_of_reference.application". In STEP, f_o_r points to an application_context, which refers to the general application domain that defined the data ... the values recommended in the STEP PDM Schema Usage Guide are: "digital mock up" "assembly study" "process planning" "electrical design" "mechanical design", but a set of values meaningful within the context of a specific Project or Organization should be defined for this attribute to be useful. - + The MIME Media Type per <http://www.iana.org/assignments/media-types/> (or a custom type). + >The purpose of a Model of a Part. + - - + + - + + The name of the attribute within the context of which the Sequence attribute is meaningful. If the value of the Sequence Context attribute is 'role', and the value of Role is 'attachment', then Sequence is the position of this file within the set of files that have a Role of 'attachment'. + + + + The first of a possible 2 segments of an Organization's Street Address. (From the CAGE data structure.) + >A flag which, if True, indicates that a Representation that can be generated -- e.g., from a Model. + - + + The type of a PartsList, selected from a set of standard parts list types, such as 'as-designed' (ADPL), 'as-built' (ABPL), 'preliminary' (PRPL), etc., which should be agreed upon by the Project(s) or Organization(s) using the PartsList. + - + + The identifier of the specification document that applies to a Part. + >A flag assigned to a FileLink object which, if True, indicates that the file is stored in the repository's file vault; if False, the file is not stored in the repository but is referenced elsewhere. + + + - - + The status of an Organization's record (active or inactive). (From the CAGE data structure.) + >A Person's email address at an Organization. + - + + A flag which, if True, indicates that a Representation that can be generated -- e.g., from a Model. - + >A Person's telephone number at an Organization. + - - - + - + + An Organization's state (if in the U.S.) or country. (From the CAGE data structure.) + + + + + A human-readable identifier for an object -- usually the one by which the object is known to the end-user, but it may be used for any type of identification, including aliases and local nomenclatures. Its meaning is dependent on the application context. This concept is analogous to a person's given name. - + + The CAGE code that a CAGE code replaces. (From the CAGE data structure.) + >The version of the software application that was used to produce a DataSet. + - - - - - + Date (and time, if relevant) a Document was published. + >If a Part has a 'drawing' (a type of specification), this is its identifier. + + - - - + + + Indicates whether this Representation is the original source from which its parent Object was instantiated in the repository (PGER) or in the current application context. + >The purpose of a File relative to a Representation to which it is related. Possible values are: "attachment", "content", "stylesheet", "DTD", etc. - + An alphanumeric string used by a manufacturer to identify the collection (lot) of PhysicalParts of which a specific PhysicalPart was a member. + >The Identifiable entity that owns an object's record in the repository. pgef:record_owner and pgef:record_creator may be different. The default is for them to be the same. The pgef:record_owner always has the privilege of modifying the record of the object in the repository (or deleting it, if deletion is allowed for members of the object's Class). + + + + + + The MIME Media Subtype per <http://www.iana.org/assignments/media-types/> (or a custom subtype). - + - + The fifth of a possible 5 segments of an Organization's name. (From the CAGE data structure.) + >First of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.) + - - - - - The child Object in a Relationship. - - - - + - + A Person's email address at an Organization. + >The fifth of a possible 5 segments of an Organization's name. (From the CAGE data structure.) - + An integer that can be used to specify the ordering of this file within an ordered set of files -- attachments, for example. NOTE: Sequence is intepreted as applying within Sequence Context (which see). - - - + >An Organization's parent Organization. (In the CAGE data structure, this is called the 'association_cage'.) + + + - - + + + A globally unique identifier. The canonical form for oids is a URL, but other forms are acceptable. - + >Date (and time, if relevant) a Document was published. + + + + The child Object in a Relationship. + + - + + + + The file-like Objects (e.g., FileLinks) that constitute a Representation. - - + + + + + + A digital representation of an object (e.g., a CAD model, a spreadsheet, an HTML document). Representations include both "presentations", such as PDF or HTML for a document, and more general representations such as exchange data sets (e.g., for an engineering model: STEP, VRML, etc.). + + + + + + A globally unique identifier. The canonical form for oids is a URL, but other forms are acceptable. + + + + + The parent Object in a Relationship. + + - + From waterbug at step.nasa.gov Thu Nov 23 14:37:27 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 23 14:37:30 2006 Subject: [pangalactic-commits] Progress -- can create PmofProperty ... Message-ID: <200611231937.kANJbREt014503@ned.gsfc.nasa.gov> Modified files: PanGalactic/TODO 1.109 1.110 PanGalactic/pangalactic/meta/kb.py 1.8 1.9 PanGalactic/pangalactic/meta/registry.py 1.153 1.154 PanGalactic/pangalactic/meta/metaobjects/classes.py 1.4 1.5 PanGalactic/pangalactic/meta/metaobjects/nspaces.py 1.2 1.3 PanGalactic/pangalactic/meta/metaobjects/properties.py 1.4 1.5 PanGalactic/pangalactic/node/uberorb.py 1.115 1.116 PanGalactic/pangalactic/node/gui/utils/defaults.py 1.9 1.10 PanGalactic/src/owl/pgef_meta.owl 1.6 1.7 PanGalactic/src/sql/insertDocuments.sql 1.34 1.35 PanGalactic/src/sql/insertMediaTypes.sql 1.14 1.15 PanGalactic/src/sql/insertModels.sql 1.19 1.20 PanGalactic/src/sql/insertParts.sql 1.17 1.18 Log message: Progress -- can create PmofProperty ... the main problem was with p.node.gui.utils.defaults ... need a way to keep it in sync with ontologies. Still some problems -- e.g., PmofOntology did not inherit 'names' attribute from PmofNamespace .... Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.153 PanGalactic/pangalactic/meta/registry.py:1.154 --- PanGalactic/pangalactic/meta/registry.py:1.153 Mon Nov 20 16:27:57 2006 +++ PanGalactic/pangalactic/meta/registry.py Thu Nov 23 14:37:21 2006 @@ -1,9 +1,9 @@ -# $Id: registry.py,v 1.153 2006/11/20 21:27:57 waterbug Exp $ +# $Id: registry.py,v 1.154 2006/11/23 19:37:21 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.153 $ +@version: $Revision: 1.154 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of @@ -12,7 +12,7 @@ objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.153 $"[11:-2] +__version__ = "$Revision: 1.154 $"[11:-2] # Python import glob @@ -487,7 +487,7 @@ # create an extract of the Interface extr = dict(interface_attrs[TAGGED_DATA]) extr['_schema_name'] = 'PmofClass' - extr['bases'] = base_names + extr['bases'] = list(base_names) extracts[cname] = extr # construct the Interface i = InterfaceClass(cname, @@ -577,6 +577,7 @@ f = open(os.path.join(to_python, 'nspaces.py'), 'w') f.close() f = open(os.path.join(to_python, 'nspaces.py'), 'a') + f.write(''.join([nsprefix, ' = '])) pprint(extracts[nsprefix], f) f.write('\n') f.close() @@ -891,8 +892,8 @@ registry @type e: C{dict} """ - e['namespace_uri'] = namespaces[e['id_ns']].uri - e['oid'] = e['uri'] = e['namespace_uri'] + e['id'] + ns_uri = namespaces[e['id_ns']].uri + e['oid'] = e['uri'] = ns_uri + e['id'] _schema = self.interfaces[e.pop('_schema_name')] return PgefObject(_schema, **e) Index: PanGalactic/src/sql/insertParts.sql diff -u PanGalactic/src/sql/insertParts.sql:1.17 PanGalactic/src/sql/insertParts.sql:1.18 --- PanGalactic/src/sql/insertParts.sql:1.17 Fri Jan 20 16:01:11 2006 +++ PanGalactic/src/sql/insertParts.sql Thu Nov 23 14:37:24 2006 @@ -1,6 +1,6 @@ /* PGER Demo Part data insertion. */ -/* $Id: insertParts.sql,v 1.17 2006/01/20 21:01:11 waterbug Exp $ */ +/* $Id: insertParts.sql,v 1.18 2006/11/23 19:37:24 waterbug Exp $ */ BEGIN; SET CONSTRAINTS ALL DEFERRED; @@ -23,7 +23,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -49,7 +48,6 @@ 'smallberries@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Megawatt Magic Twanger', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'MMT-01', -- _base_id 0, -- _iteration '1.0', -- _version @@ -76,7 +74,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -102,7 +99,6 @@ 'smallberries@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Blooper Twanging Assembly', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'BTA-20', -- _base_id 0, -- _iteration 'A', -- _version @@ -129,7 +125,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -155,7 +150,6 @@ 'smallberries@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Hoogie Mabob', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'HM.200', -- _base_id 0, -- _iteration '1.2', -- _version @@ -182,7 +176,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -208,7 +201,6 @@ 'bigboote@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Improbability Drive', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'IDrive', -- _base_id 0, -- _iteration '3B', -- _version @@ -235,7 +227,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -261,7 +252,6 @@ 'bigboote@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Bambleweeny 57 Sub-Meson Brain', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'B57SMB', -- _base_id 0, -- _iteration '33', -- _version @@ -288,7 +278,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -314,7 +303,6 @@ 'bigboote@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Flux Capacitor', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'FX-CAP', -- _base_id 0, -- _iteration '4', -- _version @@ -341,7 +329,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -367,7 +354,6 @@ 'banzai@banzai.earth', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Heart of Gold', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'HOG', -- _base_id 0, -- _iteration '42', -- _version @@ -394,7 +380,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -420,7 +405,6 @@ 'banzai@banzai.earth', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Mr. Fusion', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'MF Series A', -- _base_id 0, -- _iteration 'A10K', -- _version @@ -447,7 +431,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -473,7 +456,6 @@ 'banzai@banzai.earth', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Oscillation Overthruster', -- _name -'http://pangalactic.us/test/lib/',-- _namespace_uri 'OO-1', -- _base_id 1, -- _iteration 'A', -- _version @@ -500,7 +482,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -526,7 +507,6 @@ 'lizardo@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Defective Oscillation Overthruster', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'OO-Def-1', -- _base_id 1, -- _iteration '666', -- _version Index: PanGalactic/src/sql/insertDocuments.sql diff -u PanGalactic/src/sql/insertDocuments.sql:1.34 PanGalactic/src/sql/insertDocuments.sql:1.35 --- PanGalactic/src/sql/insertDocuments.sql:1.34 Fri Jan 20 16:01:11 2006 +++ PanGalactic/src/sql/insertDocuments.sql Thu Nov 23 14:37:24 2006 @@ -1,6 +1,6 @@ /* PGER Demo Document insertion. */ -/* $Id: insertDocuments.sql,v 1.34 2006/01/20 21:01:11 waterbug Exp $ */ +/* $Id: insertDocuments.sql,v 1.35 2006/11/23 19:37:24 waterbug Exp $ */ BEGIN; SET CONSTRAINTS ALL DEFERRED; @@ -13,7 +13,6 @@ _id_ns, _security_mask, _name, -_namespace_uri, _description, _comment, _record_owner, @@ -47,7 +46,6 @@ 'http://pangalactic.us/test/lib/', -- id_ns 0, -- security_mask 'Test Document 01.1', -- name -'http://pangalactic.us/test/lib/', -- namespace_uri 'Document 1.1 (Test)', -- description 'Document 01 v.1 blah blah (Test)', -- comment 'smallberries@yoyodyne.planet10', -- record_owner @@ -82,7 +80,6 @@ _id_ns, _security_mask, _name, -_namespace_uri, _description, _comment, _record_owner, @@ -116,7 +113,6 @@ 'http://pangalactic.us/test/lib/', -- id_ns 0, -- security_mask 'Test Document 1.2', -- name -'http://pangalactic.us/test/lib/', -- namespace_uri 'Document 01 (Test) v.2', -- description 'Document 01 blah blah (Test)', -- comment 'smallberries@yoyodyne.planet10', -- record_owner @@ -151,7 +147,6 @@ _id_ns, _security_mask, _name, -_namespace_uri, _description, _comment, _record_owner, @@ -178,7 +173,6 @@ 'http://pangalactic.us/test/lib/', -- id_ns 0, -- security_mask 'TEST.Representation.1', -- name -'http://pangalactic.us/test/lib/', -- namespace_uri 'HTML document representation of DOC-01, v1.2 (Test)', -- description 'HTML narrative document format', -- comment 'smallberries@yoyodyne.planet10', -- record_owner @@ -206,7 +200,6 @@ _id_ns, _security_mask, _name, -_namespace_uri, _description, _comment, _record_owner, @@ -233,7 +226,6 @@ 'http://pangalactic.us/test/lib/', -- id_ns 0, -- security_mask 'TEST.Representation.2', -- name -'http://pangalactic.us/test/lib/', -- namespace_uri 'HTML Slides for DOC-01, v1.2 (Test)', -- description 'Slide presentation of document contents', -- comment 'smallberries@yoyodyne.planet10', -- record_owner @@ -261,7 +253,6 @@ _id_ns, _security_mask, _name, -_namespace_uri, _description, _comment, _record_owner, @@ -291,7 +282,6 @@ 'http://pangalactic.us/test/lib/', -- id_ns 0, -- security_mask 'TEST-Document01v1.2.html', -- name -'http://pangalactic.us/test/lib/', -- namespace_uri 'HTML file, DOC-01, v1.2 (Test)', -- description 'HTML file of DOC-01, v1.2 (Test)', -- comment 'smallberries@yoyodyne.planet10', -- record_owner @@ -322,7 +312,6 @@ _id_ns, _security_mask, _name, -_namespace_uri, _description, _comment, _record_owner, @@ -352,7 +341,6 @@ 'http://pangalactic.us/test/lib/', -- id_ns 0, -- security_mask 'TEST-Document01v1.2.css', -- name -'http://pangalactic.us/test/lib/', -- namespace_uri 'CSS file, DOC-01, v1.2 (Test)', -- description 'CSS file of DOC-01, v1.2 (Test)', -- comment 'smallberries@yoyodyne.planet10', -- record_owner @@ -383,7 +371,6 @@ _id_ns, _security_mask, _name, -_namespace_uri, _description, _comment, _record_owner, @@ -408,7 +395,6 @@ 'http://pangalactic.us/test/lib/', -- id_ns 0, -- security_mask 'Test ObjectDocument 01', -- name -'http://pangalactic.us/test/lib/', -- namespace_uri 'ObjectDocument 01 (Test)', -- description 'ObjectDocument 01 blah blah (Test)', -- comment 'smallberries@yoyodyne.planet10', -- record_owner @@ -434,7 +420,6 @@ _id_ns, _security_mask, _name, -_namespace_uri, _description, _comment, _record_owner, @@ -459,7 +444,6 @@ 'http://pangalactic.us/test/lib/', -- id_ns 0, -- security_mask 'Test ObjectDocument 01', -- name -'http://pangalactic.us/test/lib/', -- namespace_uri 'ObjectDocument 01 (Test)', -- description 'ObjectDocument 01 blah blah (Test)', -- comment 'smallberries@yoyodyne.planet10', -- record_owner @@ -485,7 +469,6 @@ _id_ns, _security_mask, _name, -_namespace_uri, _description, _comment, _record_owner, @@ -515,7 +498,6 @@ 'http://pangalactic.us/test/lib/', -- id_ns 0, -- security_mask 'TEST-Document01v1.1.html', -- name -'http://pangalactic.us/test/lib/', -- namespace_uri 'HTML file, DOC-01, v1.1 (Test)', -- description 'HTML file of DOC-01, v1.1 (Test)', -- comment 'smallberries@yoyodyne.planet10', -- record_owner @@ -546,7 +528,6 @@ _id_ns, _security_mask, _name, -_namespace_uri, _description, _comment, _record_owner, @@ -576,7 +557,6 @@ 'http://pangalactic.us/test/lib/', -- id_ns 0, -- security_mask 'TEST-Document01v1.1.css', -- name -'http://pangalactic.us/test/lib/', -- namespace_uri 'CSS file, DOC-01, v1.1 (Test)', -- description 'CSS file for DOC-01, v1.1 (Test)', -- comment 'smallberries@yoyodyne.planet10', -- record_owner Index: PanGalactic/TODO diff -u PanGalactic/TODO:1.109 PanGalactic/TODO:1.110 --- PanGalactic/TODO:1.109 Mon Nov 20 16:27:56 2006 +++ PanGalactic/TODO Thu Nov 23 14:37:20 2006 @@ -12,7 +12,7 @@ [*] ENHANCEMENTS: set-valued Properties (need cookers, etc.) [*] ENHANCEMENTS: PanGalaxianObject (late-bound viewer/editor) [-] improve datatype support: may need a PmofMetaObject for 'Datatype', so - that users can defined custom types using PMOF. + that users can define custom types using PMOF. [-] improve datatype support ('label' and 'narrative' subtypes for 'string', datetimes, aggregates, various numeric types, measures with units, etc.) [*] provide field display/order customization (similar to PgefObjectGrid, @@ -572,5 +572,5 @@ -------------------------------------------------------------------------- -# $Id: TODO,v 1.109 2006/11/20 21:27:56 waterbug Exp $ +# $Id: TODO,v 1.110 2006/11/23 19:37:20 waterbug Exp $ Index: PanGalactic/src/sql/insertMediaTypes.sql diff -u PanGalactic/src/sql/insertMediaTypes.sql:1.14 PanGalactic/src/sql/insertMediaTypes.sql:1.15 --- PanGalactic/src/sql/insertMediaTypes.sql:1.14 Fri Dec 30 15:54:04 2005 +++ PanGalactic/src/sql/insertMediaTypes.sql Thu Nov 23 14:37:24 2006 @@ -1,6 +1,6 @@ /* -$Id: insertMediaTypes.sql,v 1.14 2005/12/30 20:54:04 waterbug Exp $ +$Id: insertMediaTypes.sql,v 1.15 2006/11/23 19:37:24 waterbug Exp $ MEDIA TYPES @@ -13,8 +13,8 @@ Source: http://www.iana.org/assignments/media-types/ -Note: the source URL is used as the namespace for media-types -(in PGER, _id_ns and _namespace_uri) +Note: the source URL is used as the namespace identifier for media-types +(in PGER, _id_ns) */ @@ -6873,7 +6873,6 @@ _id = _oid, _id_ns = 'http://www.iana.org/assignments/media-types/', _name = _oid, - _namespace_uri = 'http://www.iana.org/assignments/media-types/', _creator = 'admin', _modifier = 'admin', _record_create_datetime = CURRENT_TIMESTAMP, Index: PanGalactic/pangalactic/node/gui/utils/defaults.py diff -u PanGalactic/pangalactic/node/gui/utils/defaults.py:1.9 PanGalactic/pangalactic/node/gui/utils/defaults.py:1.10 --- PanGalactic/pangalactic/node/gui/utils/defaults.py:1.9 Fri Nov 17 14:16:28 2006 +++ PanGalactic/pangalactic/node/gui/utils/defaults.py Thu Nov 23 14:37:23 2006 @@ -1,4 +1,4 @@ -# $Id: defaults.py,v 1.9 2006/11/17 19:16:28 waterbug Exp $ +# $Id: defaults.py,v 1.10 2006/11/23 19:37:23 waterbug Exp $ """ Functions and settings that determine the default display characteristics (display names, sets of displayed Properties, ordering and grouping of @@ -8,7 +8,7 @@ This is automated as much as possible, based on the attributes of the registered C{PgefInterfaces} (i.e., the contents of C{orb.interfaces}). """ -__version__ = "$Revision: 1.9 $"[11:-2] +__version__ = "$Revision: 1.10 $"[11:-2] # special attributes of Versionable, not editable directly VERSION_PROPERTIES = ['base_id', @@ -73,7 +73,6 @@ 'dataset_schema_id': 'DataSet Schema', 'is_secured': 'Secured', 'mime_type': 'MIME Type', - 'uri': 'URI', 'org_email': 'Email', 'org_phone': 'Phone', 'name1': 'Name 1', @@ -117,11 +116,9 @@ 'part_mfr': 'Mfr', 'part_vendor': 'Vendor', 'serial_number': 'SN', - 'abbrev': 'Abbreviation', - 'base': 'Base Property', + 'abbreviation': 'Abbreviation', 'default': 'Default Value', 'inverse_functional': 'InverseFunctional', - 'ontology': 'Ontology', 'component_quantity': 'Quantity', 'is_composable': 'Composable', 'is_generable': 'Generable', @@ -190,9 +187,6 @@ 'frame_of_reference', 'life_cycle_stage', 'documentation_purpose', - 'includes', - 'classes', - 'uri', 'org_email', 'org_phone', 'city', @@ -239,18 +233,15 @@ 'part_mfr', 'part_vendor', 'serial_number', - 'abbrev', - 'base', + 'abbreviation', 'default', 'default_style', 'definition', - 'display_group', 'display_name', 'domain', 'functional', 'inverse_functional', 'known_aliases', - 'ontology', 'property_type', 'range', 'component_quantity', @@ -530,8 +521,7 @@ 'id_ns', 'name', 'version', - 'cm_authority', - 'uri'], + 'cm_authority'], 'groups': {'admin': ['oid', 'security_mask', 'record_owner', @@ -549,9 +539,6 @@ 'name', 'description', 'comment', - 'classes', - 'uri', - 'includes', 'representations', 'cm_authority']}}, 'OrgPerson': { @@ -899,9 +886,7 @@ 'inverse_functional', 'property_type', 'display_name', - 'abbrev', - 'base', - 'ontology', + 'abbreviation', 'definition', 'default', 'representations', Index: PanGalactic/pangalactic/node/uberorb.py diff -u PanGalactic/pangalactic/node/uberorb.py:1.115 PanGalactic/pangalactic/node/uberorb.py:1.116 --- PanGalactic/pangalactic/node/uberorb.py:1.115 Mon Nov 20 16:27:58 2006 +++ PanGalactic/pangalactic/node/uberorb.py Thu Nov 23 14:37:22 2006 @@ -1,11 +1,11 @@ -# $Id: uberorb.py,v 1.115 2006/11/20 21:27:58 waterbug Exp $ +# $Id: uberorb.py,v 1.116 2006/11/23 19:37:22 waterbug Exp $ # -*- test-case-name: pangalactic.test.test_uberorb -*- """ A PanGalaxian node's UberORB -@version: $Revision: 1.115 $ +@version: $Revision: 1.116 $ """ -__version__ = "$Revision: 1.115 $"[11:-2] +__version__ = "$Revision: 1.116 $"[11:-2] import codecs import copy @@ -437,7 +437,7 @@ pass if self.cache: obj = self.cache.objs.get(oid) - if not obj and state['repo']: + if not obj and state.get('repo'): self.log.info(' + logged in, checking server') res = self.xmlrpc.getObjectsByOids([oid]) if res: Index: PanGalactic/pangalactic/meta/kb.py diff -u PanGalactic/pangalactic/meta/kb.py:1.8 PanGalactic/pangalactic/meta/kb.py:1.9 --- PanGalactic/pangalactic/meta/kb.py:1.8 Mon Nov 20 16:27:57 2006 +++ PanGalactic/pangalactic/meta/kb.py Thu Nov 23 14:37:21 2006 @@ -1,12 +1,12 @@ -# $Id: kb.py,v 1.8 2006/11/20 21:27:57 waterbug Exp $ +# $Id: kb.py,v 1.9 2006/11/23 19:37:21 waterbug Exp $ """ OWL import/export module. Reads and writes OWL graphs. Such graphs are sets of statements (known in RDF as "triples": node-arc-node or subject-predicate-object). -@version: $Revision: 1.8 $ +@version: $Revision: 1.9 $ """ -__version__ = "$Revision: 1.8 $"[11:-2] +__version__ = "$Revision: 1.9 $"[11:-2] # Python modules import base64 @@ -200,12 +200,11 @@ self.kbpath = kbpath self.kbdata = kbdata - def readCoreOntologyFromData(self): + def readOntologyFromData(self): """ - Read this KB's core ontology either from (1), if kbpath is defined, the - .rdf and .owl files that have been placed in self.kbpath or (2), if - kbdata is defined, the rdf and owl data contained in that list of - file-like objects. + Read an ontology either (if kbpath is defined) from the .rdf and .owl + files that have been placed in self.kbpath or (if kbdata is defined) + from the rdf and owl data contained in that list of file-like objects. """ if self.kbpath: rdfpath = os.path.join(self.kbpath, '*.rdf') Index: PanGalactic/src/sql/insertModels.sql diff -u PanGalactic/src/sql/insertModels.sql:1.19 PanGalactic/src/sql/insertModels.sql:1.20 --- PanGalactic/src/sql/insertModels.sql:1.19 Fri Jan 20 16:01:11 2006 +++ PanGalactic/src/sql/insertModels.sql Thu Nov 23 14:37:24 2006 @@ -1,6 +1,6 @@ /* PGER Demo Model data inserts. */ -/* $Id: insertModels.sql,v 1.19 2006/01/20 21:01:11 waterbug Exp $ */ +/* $Id: insertModels.sql,v 1.20 2006/11/23 19:37:24 waterbug Exp $ */ BEGIN; SET CONSTRAINTS ALL DEFERRED; @@ -25,7 +25,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -56,7 +55,6 @@ 'smallberries@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Megawatt Magic Twanger Design Model', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'MMT-01.1-CAD', -- _base_id 0, -- _iteration 'A', -- _version @@ -88,7 +86,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -119,7 +116,6 @@ 'smallberries@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Blooper Twanging Assembly, Preliminary Design', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'BTA-20.1-CAD', -- _base_id 0, -- _iteration 'A', -- _version @@ -151,7 +147,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -182,7 +177,6 @@ 'smallberries@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Hoogie Mabob v1.2', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'HM.200-CAD', -- _base_id 0, -- _iteration 'A', -- _version @@ -214,7 +208,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -245,7 +238,6 @@ 'bigboote@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Drive, Improbability, v3B', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'IDrive.1-CAD', -- _base_id 0, -- _iteration 'A', -- _version @@ -277,7 +269,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -308,7 +299,6 @@ 'bigboote@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Bambleweeny 57 Sub-Meson Brain (Mechanical Design)', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'B57SMB.1-CAD', -- _base_id 0, -- _iteration 'A', -- _version @@ -340,7 +330,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -371,7 +360,6 @@ 'bigboote@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'FX-v4 Flux Capacitor (MCAD, Preliminary)', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'FX-CAP.1-CAD', -- _base_id 0, -- _iteration 'A', -- _version @@ -403,7 +391,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -434,7 +421,6 @@ 'banzai@banzai.earth', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'HOG-42 Spacecraft (Digital Mock-Up)', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'HOG.1-CAD', -- _base_id 0, -- _iteration 'A', -- _version @@ -466,7 +452,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -497,7 +482,6 @@ 'banzai@banzai.earth', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Mr. Fusion A10K (Mechanical Design)', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'MF Series A.1-CAD', -- _base_id 0, -- _iteration 'A', -- _version @@ -529,7 +513,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -560,7 +543,6 @@ 'banzai@banzai.earth', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Oscillation Overthruster OO-1-A (MCAD)', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'OO-1.1-CAD', -- _base_id 0, -- _iteration 'A', -- _version @@ -592,7 +574,6 @@ _modifier, _mod_datetime, _name, -_namespace_uri, _base_id, _iteration, _version, @@ -623,7 +604,6 @@ 'lizardo@yoyodyne.planet10', -- _modifier '2002-09-09 01:06:51', -- _mod_datetime 'Oscillation Overthruster, Defective, v.57 (Design)', -- _name -'http://pangalactic.us/test/lib/', -- _namespace_uri 'OO-Def-1.1-CAD', -- _base_id 0, -- _iteration 'A', -- _version Index: PanGalactic/pangalactic/meta/metaobjects/nspaces.py diff -u PanGalactic/pangalactic/meta/metaobjects/nspaces.py:1.2 PanGalactic/pangalactic/meta/metaobjects/nspaces.py:1.3 --- PanGalactic/pangalactic/meta/metaobjects/nspaces.py:1.2 Fri Nov 17 14:16:27 2006 +++ PanGalactic/pangalactic/meta/metaobjects/nspaces.py Thu Nov 23 14:37:22 2006 @@ -1,540 +1,190 @@ -xml = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'xml', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': [], - 'namespace_uri': '', - 'oid': 'local.1160370648.52', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://www.w3.org/XML/1998/namespace'} - -owl = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'owl', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': ['DatatypeProperty', - 'disjointWith', - 'InverseFunctionalProperty', - 'FunctionalProperty', - 'ObjectProperty', - 'Thing', - 'Ontology', - 'Class'], - 'namespace_uri': '', - 'oid': 'local.1160370648.52', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://www.w3.org/2002/07/owl#'} - pgef = {'_schema_name': 'PmofNamespace', 'abbreviation': '', + 'base_id': 'pgef', + 'cm_authority': '', 'comment': '', 'complete': 'True', - 'create_datetime': '2006-10-09 05:10:48', + 'create_datetime': '2006-11-22 22:31:52', 'creator': '', 'definition': '', 'description': '', - 'id': 'pgef', + 'id': '', 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', + 'is_head': 'False', + 'iteration': '0', + 'mod_datetime': '2006-11-22 22:31:52', 'modifier': '', 'name': '', 'names': ['PhysicalObject', 'user_file_name', 'status_code', - 'name1', + 'child', 'version_sequence', 'abbreviation', 'Role', + 'alt_emails', 'country_code', 'Acu', + 'range', 'inverse_functional', - 'property_type', + 'Document', 'structural_role', 'content', 'org_email', 'display_name', 'rep_purpose', 'FileLink', - 'Part', + 'version', 'Mime', 'location', - 'part_model_purpose', 'mime_type', + 'PmofMetaObject', 'processor_version', + 'fname', + 'functional', 'Project', + 'PmofOntology', 'state_or_country', - 'PmofMetaObject', 'Organization', 'PanGalacticFu', 'is_object_source', 'org_name_code', 'name', 'bytes', - 'Process', + 'part_number_generic', 'component_quantity', - 'part_number_aliases', + 'PartModel', 'mod_datetime', + 'creator', 'media_subtype', 'names', - 'display_style', 'sic_code4', 'sic_code2', 'sic_code3', - 'creator', - 'PmofOntology', + 'sic_code1', + 'ProjectPerson', 'Actor', 'part_vendor', 'record_create_datetime', 'parent_organization', 'is_secured', - 'Document', + 'property_type', 'Relationship', 'record_owner', 'god', 'specification', 'role_context', - 'version', + 'Part', 'is_composable', 'ref_designator', 'email', 'content_mime_type', - 'create_datetime', + 'name1', + 'oid', 'parent', 'ObjectDocument', - 'PartModel', + 'part_number_aliases', 'PanGalacticObject', - 'PmofClass', 'part_mfr', 'org', 'fsc_code', 'record_mod_datetime', - 'id_ns', 'PhysicalPart', 'definition', 'dataset_object_ids', 'definition_context', 'cm_authority', + 'PmofClass', 'specification_screening', 'life_cycle_stage', 'comment', 'is_generable', 'file_sequence', 'part_number_drawing', - 'functional', + 'domain', 'part_number_nsn', 'DataSet', 'originating_system', + 'representations', 'owner', 'city', 'part_number_mfr', 'pl_items', 'VersionableProduct', - 'alt_emails', + 'PartsListItem', 'DataPackage', 'Versionable', 'media_type', - 'PmofNamespace', 'publish_datetime', 'authorization', 'files', - 'PartsListItem', - 'complete', + 'part_number_spec', + 'PmofTaxonomy', 'Identifiable', 'documentation_purpose', - 'ProjectPerson', 'Person', 'name4', 'part', 'name2', - 'name3', - 'child', + 'Qacu', + 'serial_number', 'Representation', 'RoleAssignment', 'dataset_schema_id', 'file_sequence_context', - 'part_number_generic', + 'Process', 'iteration', 'street_address2', 'street_address1', 'pli_id', - 'display_group', 'pli_component_usage', 'pl_status', 'mi_or_name', 'modifier', 'known_aliases', - 'serial_number', + 'PmofVocabulary', 'part_number_model', - 'PmofTaxonomy', 'security_mask', 'abstract', - 'Qacu', - 'PmofProperty', + 'id_ns', 'PartsList', 'type_code', + 'PmofNamespace', 'Securable', 'OrgPerson', 'data_sets', 'replacement_cage', 'id', - 'part_number_spec', + 'complete', 'Product', - 'pl_type', + 'part_model_purpose', 'ProcessDefinition', 'Representable', 'lname', 'default', 'org_phone', - 'namespace_uri', 'lot_date_code', - 'fname', + 'frame_of_reference', 'Manageable', 'file_role', 'description', - 'oid', + 'create_datetime', 'zip_or_postal_zone', 'base_id', 'Activity', - 'representations', + 'pl_type', 'Model', 'is_head', 'phone', - 'sic_code1', 'uri', 'record_modifier', 'record_creator', 'specification_military', 'name5', - 'frame_of_reference'], - 'namespace_uri': '', - 'oid': 'local.1160370648.52', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://pangalactic.us/pgef/'} - -daml = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'daml', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': [], - 'namespace_uri': '', - 'oid': 'local.1160370648.52', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://www.daml.org/2001/03/daml+oil#'} - -xsd = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'xsd', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': ['gDay', - 'hexBinary', - 'nonPositiveInteger', - 'float', - 'boolean', - 'long', - 'unsignedLong', - 'normalizedString', - 'NMTOKEN', - 'negativeInteger', - 'anyURI', - 'positiveInteger', - 'unsignedShort', - 'int', - 'base64Binary', - 'unsignedByte', - 'string', - 'date', - 'integer', - 'byte', - 'gMonth', - 'short', - 'language', - 'gMonthDay', - 'double', - 'decimal', - 'unsignedInt', - 'gYearMonth', - 'dateTime', - 'nonNegativeInteger', - 'gYear', - 'token', - 'time', - 'Name', - 'NCName'], - 'namespace_uri': '', - 'oid': 'local.1160370648.52', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://www.w3.org/2001/XMLSchema'} - -pgefobjects = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'pgefobjects', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': [], - 'namespace_uri': '', - 'oid': 'local.1160370648.53', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://pangalactic.us/objects/'} - -rdfs = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'rdfs', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': ['comment', 'domain', 'subClassOf', 'range', 'Class'], - 'namespace_uri': '', - 'oid': 'local.1160370648.53', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://www.w3.org/2000/01/rdf-schema#'} - -dc = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'dc', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': ['description', 'title'], - 'namespace_uri': '', - 'oid': 'local.1160370648.53', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://purl.org/dc/elements/1.1/'} - -rdf = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'rdf', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': ['Property', 'type'], - 'namespace_uri': '', - 'oid': 'local.1160370648.53', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'} - -mime = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'mime', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': ['org/assignments/media-types/> (or a custom subtype).', - '/assignments/media-types/> (or a custom type).'], - 'namespace_uri': '', - 'oid': 'local.1160370648.53', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://www.iana.org/assignments/media-types/'} - -pgeftesttmp = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'pgeftesttmp', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': [], - 'namespace_uri': '', - 'oid': 'local.1160370648.53', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://pangalactic.us/test/tmp/'} - -world = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'world', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': [], - 'namespace_uri': '', - 'oid': 'local.1160370648.54', - 'owner': '', - 'record_create_datetime': '', - 'record_creator': '', - 'record_mod_datetime': '', - 'record_modifier': '', - 'record_owner': '', - 'representations': [], - 'security_mask': '0', - 'uri': 'http://earth.milkyway.universe/'} - -pgeftest = {'_schema_name': 'PmofNamespace', - 'abbreviation': '', - 'comment': '', - 'complete': 'False', - 'create_datetime': '2006-10-09 05:10:48', - 'creator': '', - 'definition': '', - 'description': '', - 'id': 'pgeftest', - 'id_ns': '', - 'mod_datetime': '2006-10-09 05:10:48', - 'modifier': '', - 'name': '', - 'names': [], + 'PmofProperty', + 'name3'], 'namespace_uri': '', - 'oid': 'local.1160370648.54', + 'oid': 'local.1164234712.79', 'owner': '', 'record_create_datetime': '', 'record_creator': '', @@ -543,5 +193,7 @@ 'record_owner': '', 'representations': [], 'security_mask': '0', - 'uri': 'http://pangalactic.us/test/lib/'} + 'uri': 'http://pangalactic.us/pgef/', + 'version': '', + 'version_sequence': '0'} Index: PanGalactic/src/owl/pgef_meta.owl diff -u PanGalactic/src/owl/pgef_meta.owl:1.6 PanGalactic/src/owl/pgef_meta.owl:1.7 --- PanGalactic/src/owl/pgef_meta.owl:1.6 Mon Nov 20 16:28:00 2006 +++ PanGalactic/src/owl/pgef_meta.owl Thu Nov 23 14:37:24 2006 @@ -1,7 +1,6 @@ + A namespace whose names have definitions and a context or domain. - A namespace whose names have definitions and a context or domain. - Evolvable in a set of discrete, identifiable incarnations. + - + - + - + - + - + An object that is used to define the information structures of PanGalacticObjects in a domain. - Having a name or identifier (a.k.a., ID, OID, etc.). + - - - - A specification of the information structure that defines a PanGalactic domain object (i.e., a pgef:PanGalacticObject). + + + + - The specification of a domain of interest. The PGEF concept of an Ontology is based on the OWL definition of ontology, and consists of Classes, Properties, Datatypes, and possibly other included Ontologies. + The specification of a domain of interest. The PGEF concept of an Ontology is based on the OWL definition of ontology, and consists of Classes, Properties, Datatypes, and possibly other included Ontologies. + A named collection of names. - + Having an owner, creator, and most recent modifier that can be identified. - @@ -84,10 +83,10 @@ >A PmofProperty is similar to an rdfs:Property, an owl:DatatypeProperty or owl:ObjectProperty, or a UML class attribute. + Able to have access to it made available only to a specifiable set of individuals. - @@ -95,95 +94,94 @@ >A collection of classes and a subclass relationship. A Taxonomy typically, but not necessarily, takes the form of a Directed Acyclic Graph or DAG (a tree structure). - Synonyms or alternate names. + - The names contained in a namespace. + - - - If functional is True, this is equivalent to saying that the property behaves like a member of the Class owl:FunctionalProperty. That is, the Property is single-valued. Likewise, if functional is False, the Property is multi-valued, and its value will be represented as a collection of the object type or datatype specified in its range attribute. + + + - - + + The range of a PmofProperty is the name of the type of values it can have. Note that if PmofProperty represents a relationship to an object, then its value will be interpreted as the name of the Class of the related objects. - + + A boolean value indicating whether the names Property of a namespace contains the complete set of names for the namespace. - - + - Characteristics that uniquely identify a concept. + + + If this inverse_functional is True, this is equivalent to saying that the property behaves like a member of the Class [owl:InverseFunctionalProperty]. That is, each value in the its range corresponds to a unique value in its domain. That is, the Property can serve as a primary key in a relational database schema. - - - The PmofClass of which this PmofProperty represents a characteristic or relationship - + + + + The identifying string to be used when the PmofProperty is to be displayed in a user interface. - - - Specifies whether the range of a property refers to a Class of objects (i.e., its values are members of that Class) or the name of a datatype; (i.e., its values are instances of a datatype, e.g. string, integer, etc.). + Specifies whether the range of a property refers to a Class of objects (i.e., its values are members of that Class) or the name of a datatype; (i.e., its values are instances of a datatype, e.g. string, integer, etc.). - The default value of the PmofProperty. + + A shorter version of the name (could be considered a special-purpose alias). - - + - - - Unique name of the object. This may be a real URI or it may be a faux URI (such as those permitted in RDF/OWL), but it must at least have the scheme://authority/path structure specified in IETF RFC 2396. + + - + Index: PanGalactic/pangalactic/meta/metaobjects/classes.py diff -u PanGalactic/pangalactic/meta/metaobjects/classes.py:1.4 PanGalactic/pangalactic/meta/metaobjects/classes.py:1.5 --- PanGalactic/pangalactic/meta/metaobjects/classes.py:1.4 Mon Nov 20 16:27:58 2006 +++ PanGalactic/pangalactic/meta/metaobjects/classes.py Thu Nov 23 14:37:22 2006 @@ -6,19 +6,7 @@ 'description': 'The mother of all specific PanGalactic Fu (aspects and behaviors). Note that PanGalactic Fu are meta-level agnostic. To PanGalactic Fu, all is Fu.\n', 'id': 'PanGalacticFu', 'id_ns': 'pgef', - 'name': 'PanGalacticFu', - 'see_also': ''} - -Securable = {'_schema_name': 'PmofClass', - 'abbreviation': '', - 'bases': ['PanGalacticFu'], - 'comment': '', - 'definition': '', - 'description': 'Able to have access to it restricted to a specifiable set of individuals.\n', - 'id': 'Securable', - 'id_ns': 'pgef', - 'name': 'Securable', - 'see_also': ''} + 'name': 'PanGalacticFu'} Representable = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -28,8 +16,7 @@ 'description': 'Able to be encoded in some digital form.\n', 'id': 'Representable', 'id_ns': 'pgef', - 'name': 'Representable', - 'see_also': ''} + 'name': 'Representable'} Manageable = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -39,8 +26,7 @@ 'description': 'Having an owner, creator, and most recent modifier that can be identified.\n', 'id': 'Manageable', 'id_ns': 'pgef', - 'name': 'Manageable', - 'see_also': ''} + 'name': 'Manageable'} Versionable = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -50,8 +36,17 @@ 'description': 'Evolvable in a set of discrete, identifiable incarnations.\n', 'id': 'Versionable', 'id_ns': 'pgef', - 'name': 'Versionable', - 'see_also': ''} + 'name': 'Versionable'} + +Securable = {'_schema_name': 'PmofClass', + 'abbreviation': '', + 'bases': ['PanGalacticFu'], + 'comment': '', + 'definition': '', + 'description': 'Able to have access to itself restricted to a specifiable set of individuals.\n', + 'id': 'Securable', + 'id_ns': 'pgef', + 'name': 'Securable'} Identifiable = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -61,8 +56,7 @@ 'description': 'Having a name or identifier (a.k.a., ID, OID, etc.).\n', 'id': 'Identifiable', 'id_ns': 'pgef', - 'name': 'Identifiable', - 'see_also': ''} + 'name': 'Identifiable'} PanGalacticObject = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -72,8 +66,7 @@ 'description': 'PanGalacticObject is the base class of the Pan Galactic Engineering Framework ontology. PanGalacticObjects have some administrative Properties that allow them to be identified, persisted, and managed in a PanGalactic environment.', 'id': 'PanGalacticObject', 'id_ns': 'pgef', - 'name': 'PanGalacticObject', - 'see_also': ''} + 'name': 'PanGalacticObject'} Relationship = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -83,23 +76,21 @@ 'description': 'A well-defined and identifiable connection between PanGalacticObjects.', 'id': 'Relationship', 'id_ns': 'pgef', - 'name': 'Relationship', - 'see_also': ''} + 'name': 'Relationship'} PmofMetaObject = {'_schema_name': 'PmofClass', 'abbreviation': '', - 'bases': ['Securable', + 'bases': ['Identifiable', 'Versionable', - 'Identifiable', 'Manageable', - 'Representable'], + 'Representable', + 'Securable'], 'comment': '', 'definition': '', 'description': 'An object that is used to define the information structures of PanGalacticObjects in a domain.', 'id': 'PmofMetaObject', 'id_ns': 'pgef', - 'name': 'PmofMetaObject', - 'see_also': ''} + 'name': 'PmofMetaObject'} Actor = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -109,30 +100,17 @@ 'description': 'An entity that can take on Roles and create, modify, and own PanGalacticObjects', 'id': 'Actor', 'id_ns': 'pgef', - 'name': 'Actor', - 'see_also': ''} + 'name': 'Actor'} -Representation = {'_schema_name': 'PmofClass', - 'abbreviation': '', - 'bases': ['PanGalacticObject'], - 'comment': '', - 'definition': '', - 'description': "A file-like object (FileLink) or a set of file-like objects that are used in publishing, displaying, importing, exporting, or exchanging a PanGalacticObject. The concept is general and can apply to serialization, presentation, or data exchange use-cases, among others. A Representation can be thought of as a reified relationship between a PanGalacticObject (which has the Representation as one of the items in its representations property) and one or more FileLink instances (its 'files' property). As defined in the PGEF ontology, a Representation represents a single domain object (such as a Document or Model). In serialization and data exchange use-cases it is common for a file or a collection of files to represent many objects -- in PGEF, the latter is defined to be a DataSet or DataPackage.", - 'id': 'Representation', - 'id_ns': 'pgef', - 'name': 'Representation', - 'see_also': ''} - -PmofNamespace = {'_schema_name': 'PmofClass', +PmofProperty = {'_schema_name': 'PmofClass', 'abbreviation': '', 'bases': ['PmofMetaObject'], 'comment': '', 'definition': '', - 'description': '', - 'id': 'PmofNamespace', + 'description': 'A PmofProperty is similar to an rdfs:Property, an owl:DatatypeProperty or owl:ObjectProperty, or a UML class attribute.', + 'id': 'PmofProperty', 'id_ns': 'pgef', - 'name': 'PmofNamespace', - 'see_also': ''} + 'name': 'PmofProperty'} Mime = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -142,8 +120,7 @@ 'description': 'Multi-purpose Internet Mail Extension (MIME) types.', 'id': 'Mime', 'id_ns': 'pgef', - 'name': 'Mime', - 'see_also': ''} + 'name': 'Mime'} ObjectDocument = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -153,8 +130,7 @@ 'description': 'A Relationship between a PanGalacticObject and a Document.', 'id': 'ObjectDocument', 'id_ns': 'pgef', - 'name': 'ObjectDocument', - 'see_also': ''} + 'name': 'ObjectDocument'} Organization = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -164,8 +140,7 @@ 'description': 'A well-defined, persistent, and identifiable collection of Person instances.', 'id': 'Organization', 'id_ns': 'pgef', - 'name': 'Organization', - 'see_also': ''} + 'name': 'Organization'} PhysicalObject = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -175,30 +150,17 @@ 'description': 'An entity that is a collection of measurable stuff.', 'id': 'PhysicalObject', 'id_ns': 'pgef', - 'name': 'PhysicalObject', - 'see_also': ''} - -RoleAssignment = {'_schema_name': 'PmofClass', - 'abbreviation': '', - 'bases': ['Relationship'], - 'comment': '', - 'definition': '', - 'description': 'A Relationship that assigns a Role (the "parent") to an Actor (the "child").', - 'id': 'RoleAssignment', - 'id_ns': 'pgef', - 'name': 'RoleAssignment', - 'see_also': ''} + 'name': 'PhysicalObject'} -ProjectPerson = {'_schema_name': 'PmofClass', +Representation = {'_schema_name': 'PmofClass', 'abbreviation': '', - 'bases': ['RoleAssignment'], + 'bases': ['PanGalacticObject'], 'comment': '', 'definition': '', - 'description': 'A Relationship between a Role in the context of a Project and a Person.\n', - 'id': 'ProjectPerson', + 'description': "A file-like object (FileLink) or a set of file-like objects that are used in publishing, displaying, importing, exporting, or exchanging a PanGalacticObject. The concept is general and can apply to serialization, presentation, or data exchange use-cases, among others. A Representation can be thought of as a reified relationship between a PanGalacticObject (which has the Representation as one of the items in its representations property) and one or more FileLink instances (its 'files' property). As defined in the PGEF ontology, a Representation represents a single domain object (such as a Document or Model). In serialization and data exchange use-cases it is common for a file or a collection of files to represent many objects -- in PGEF, the latter is defined to be a DataSet or DataPackage.", + 'id': 'Representation', 'id_ns': 'pgef', - 'name': 'ProjectPerson', - 'see_also': ''} + 'name': 'Representation'} Role = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -208,19 +170,7 @@ 'description': 'The name (type) of a Relationship that can be assigned to an Actor within a context. The context will typically be an Organization or a Project. A Role will typically have an associated set of privileges.', 'id': 'Role', 'id_ns': 'pgef', - 'name': 'Role', - 'see_also': ''} - -PmofProperty = {'_schema_name': 'PmofClass', - 'abbreviation': '', - 'bases': ['PmofMetaObject'], - 'comment': '', - 'definition': '', - 'description': 'A pgef:Property is similar to an rdfs:Property, an owl:DatatypeProperty or owl:ObjectProperty, or a UML class attribute.', - 'id': 'PmofProperty', - 'id_ns': 'pgef', - 'name': 'PmofProperty', - 'see_also': ''} + 'name': 'Role'} Project = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -230,30 +180,27 @@ 'description': 'An activity that has the purpose of producing and/or maintaining something, and which involves contributions from Persons and Organizations.', 'id': 'Project', 'id_ns': 'pgef', - 'name': 'Project', - 'see_also': ''} + 'name': 'Project'} -Activity = {'_schema_name': 'PmofClass', +PmofNamespace = {'_schema_name': 'PmofClass', 'abbreviation': '', - 'bases': ['PanGalacticObject'], + 'bases': ['PmofMetaObject'], 'comment': '', 'definition': '', - 'description': "A piece of work with an input, an output, resources, and controls, that forms one logical unit. An activity's definition may or may not be configuration managed. If its definition is under configuration management, its definition is contained in a Process (which see). An activity may be a manual activity, which does not involve computer automation, or a workflow (automated) activity. A workflow activity requires human and/or machine resources(s) to support process execution; where human resource is required an activity is allocated to a workflow participant. [Based on WfMC definition] Synonyms: step, node, task, work element, process element, operation, instruction.", - 'id': 'Activity', + 'description': 'A named collection of names.', + 'id': 'PmofNamespace', 'id_ns': 'pgef', - 'name': 'Activity', - 'see_also': ''} + 'name': 'PmofNamespace'} -PmofClass = {'_schema_name': 'PmofClass', +Activity = {'_schema_name': 'PmofClass', 'abbreviation': '', - 'bases': ['PmofNamespace', 'PmofMetaObject'], + 'bases': ['PanGalacticObject'], 'comment': '', 'definition': '', - 'description': 'A specification of the information structure that defines a PanGalactic domain object (i.e., a pgef:PanGalacticObject).\n', - 'id': 'PmofClass', + 'description': "A piece of work with an input, an output, resources, and controls, that forms one logical unit. An activity's definition may or may not be configuration managed. If its definition is under configuration management, its definition is contained in a Process (which see). An activity may be a manual activity, which does not involve computer automation, or a workflow (automated) activity. A workflow activity requires human and/or machine resources(s) to support process execution; where human resource is required an activity is allocated to a workflow participant. [Based on WfMC definition] Synonyms: step, node, task, work element, process element, operation, instruction.", + 'id': 'Activity', 'id_ns': 'pgef', - 'name': 'PmofClass', - 'see_also': ''} + 'name': 'Activity'} Acu = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -263,8 +210,7 @@ 'description': 'The relationship between a PanGalacticObject (the component) and an assembled PanGalacticObject (the assembly) of which it is a constituent part.', 'id': 'Acu', 'id_ns': 'pgef', - 'name': 'Acu', - 'see_also': ''} + 'name': 'Acu'} Product = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -274,8 +220,7 @@ 'description': 'The output of a process or activity.', 'id': 'Product', 'id_ns': 'pgef', - 'name': 'Product', - 'see_also': ''} + 'name': 'Product'} PartModel = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -285,8 +230,7 @@ 'description': 'The relationship between a Part and a Model that represents it.', 'id': 'PartModel', 'id_ns': 'pgef', - 'name': 'PartModel', - 'see_also': ''} + 'name': 'PartModel'} FileLink = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -296,8 +240,17 @@ 'description': 'The class of file-like PanGalacticObjects.', 'id': 'FileLink', 'id_ns': 'pgef', - 'name': 'FileLink', - 'see_also': ''} + 'name': 'FileLink'} + +RoleAssignment = {'_schema_name': 'PmofClass', + 'abbreviation': '', + 'bases': ['Relationship'], + 'comment': '', + 'definition': '', + 'description': 'A Relationship that assigns a Role (the "parent") to an Actor (the "child").', + 'id': 'RoleAssignment', + 'id_ns': 'pgef', + 'name': 'RoleAssignment'} Person = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -307,8 +260,7 @@ 'description': 'A human being.', 'id': 'Person', 'id_ns': 'pgef', - 'name': 'Person', - 'see_also': ''} + 'name': 'Person'} PmofOntology = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -318,19 +270,7 @@ 'description': 'The specification of a domain of interest. The PGEF concept of an Ontology is based on the OWL definition of ontology, and consists of Classes, Properties, Datatypes, and possibly other included Ontologies.', 'id': 'PmofOntology', 'id_ns': 'pgef', - 'name': 'PmofOntology', - 'see_also': ''} - -PmofTaxonomy = {'_schema_name': 'PmofClass', - 'abbreviation': '', - 'bases': ['PmofNamespace'], - 'comment': '', - 'definition': '', - 'description': '', - 'id': 'PmofTaxonomy', - 'id_ns': 'pgef', - 'name': 'PmofTaxonomy', - 'see_also': ''} + 'name': 'PmofOntology'} PhysicalPart = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -340,19 +280,17 @@ 'description': 'A PhysicalObject that is purported to be a physical realization of a Part.', 'id': 'PhysicalPart', 'id_ns': 'pgef', - 'name': 'PhysicalPart', - 'see_also': ''} + 'name': 'PhysicalPart'} VersionableProduct = {'_schema_name': 'PmofClass', 'abbreviation': '', - 'bases': ['Versionable', 'Product'], + 'bases': ['Product', 'Versionable'], 'comment': '', 'definition': '', 'description': 'The common ancestor of all Versionable objects.', 'id': 'VersionableProduct', 'id_ns': 'pgef', - 'name': 'VersionableProduct', - 'see_also': ''} + 'name': 'VersionableProduct'} Part = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -362,8 +300,7 @@ 'description': "A concept that has some functionality that can be realized in a product or thing that is physically sensible and measurable (the PhysicalPart).\n\npgef:Part maps to the combination of STEP (ISO 10303) 'product' and 'product_definition_formation'. STEP 'frame_of_reference' (-> product_context.id) is not represented within the PGEF ontology. STEP 'description' maps to description.", 'id': 'Part', 'id_ns': 'pgef', - 'name': 'Part', - 'see_also': ''} + 'name': 'Part'} OrgPerson = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -373,8 +310,47 @@ 'description': 'A Relationship between a Role with an Organization context and a Person.\n', 'id': 'OrgPerson', 'id_ns': 'pgef', - 'name': 'OrgPerson', - 'see_also': ''} + 'name': 'OrgPerson'} + +PmofClass = {'_schema_name': 'PmofClass', + 'abbreviation': '', + 'bases': ['PmofMetaObject', 'PmofNamespace'], + 'comment': '', + 'definition': '', + 'description': 'A specification of the information structure that defines a PanGalactic domain object (i.e., a pgef:PanGalacticObject).\n', + 'id': 'PmofClass', + 'id_ns': 'pgef', + 'name': 'PmofClass'} + +PmofTaxonomy = {'_schema_name': 'PmofClass', + 'abbreviation': '', + 'bases': ['PmofNamespace'], + 'comment': '', + 'definition': '', + 'description': 'A collection of classes and a subclass relationship. A Taxonomy typically, but not necessarily, takes the form of a Directed Acyclic Graph or DAG (a tree structure).', + 'id': 'PmofTaxonomy', + 'id_ns': 'pgef', + 'name': 'PmofTaxonomy'} + +ProjectPerson = {'_schema_name': 'PmofClass', + 'abbreviation': '', + 'bases': ['RoleAssignment'], + 'comment': '', + 'definition': '', + 'description': 'A Relationship between a Role in the context of a Project and a Person.\n', + 'id': 'ProjectPerson', + 'id_ns': 'pgef', + 'name': 'ProjectPerson'} + +PmofVocabulary = {'_schema_name': 'PmofClass', + 'abbreviation': '', + 'bases': ['PmofNamespace'], + 'comment': '', + 'definition': '', + 'description': 'A namespace whose names have definitions and a context or domain.', + 'id': 'PmofVocabulary', + 'id_ns': 'pgef', + 'name': 'PmofVocabulary'} Qacu = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -384,8 +360,7 @@ 'description': 'Quantified Assembly Component Usage represents some number of instances or some measured quantity of a PanGalacticObject used in the assembly of another PanGalacticObject.', 'id': 'Qacu', 'id_ns': 'pgef', - 'name': 'Qacu', - 'see_also': ''} + 'name': 'Qacu'} Process = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -395,8 +370,7 @@ 'description': 'A named, structured Activity concept, which is realized and applied systematically to achieve a business objective or policy goal, normally within the context of an organisational structure defining functional roles and relationships. [Based on the WfMC definition of "Business Process"] Synonyms: Business Process.', 'id': 'Process', 'id_ns': 'pgef', - 'name': 'Process', - 'see_also': ''} + 'name': 'Process'} Document = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -406,8 +380,7 @@ 'description': 'A readable thing.', 'id': 'Document', 'id_ns': 'pgef', - 'name': 'Document', - 'see_also': ''} + 'name': 'Document'} PartsList = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -417,8 +390,7 @@ 'description': 'A documented collection of parts and related information. Parts Lists occur in various contexts in the product life cycle, e.g.: to document component technology research, to document candidate parts for assemblies, to document Parts used in Model development, to track Parts procurement information, to document Part stocks and inventory, etc.', 'id': 'PartsList', 'id_ns': 'pgef', - 'name': 'PartsList', - 'see_also': ''} + 'name': 'PartsList'} Model = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -428,8 +400,7 @@ 'description': 'A constructed realization of the properties and/or behaviors of a concept or a real-world thing. A pgef:Model instance can be used for analysis, simulation, description, specification, or presentation of some aspect(s) of a domain object.\n\npgef:Model generally maps to step:product_definition, but there may be other mappings for particular STEP Application Protocols and other types of models.\n\n(Note that the characteristics of any pgef:Model instance can be the subject of a pgef:Model at a higher level of abstraction. The higher-level pgef:Model instance in this context is sometimes referred to as a "meta-model" relative to the pgef:Model instance whose characteristics it models.)', 'id': 'Model', 'id_ns': 'pgef', - 'name': 'Model', - 'see_also': ''} + 'name': 'Model'} PartsListItem = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -439,30 +410,27 @@ 'description': 'A PartsListItem is a Document that is a component of a PartsList, and represents a single line or item on its parent PartsList. The PartsListItem references an Acu (a usage of one or more PanGalacticObject instances in the assembly of another PanGalacticObject).', 'id': 'PartsListItem', 'id_ns': 'pgef', - 'name': 'PartsListItem', - 'see_also': ''} + 'name': 'PartsListItem'} -DataPackage = {'_schema_name': 'PmofClass', +DataSet = {'_schema_name': 'PmofClass', 'abbreviation': '', 'bases': ['Document'], 'comment': '', 'definition': '', - 'description': 'A collection of one or more DataSet instances. A DataPackage instance may include one or more file-like objects and may be governed by more than one schema (ontology). The primary purpose of the DataPackage Class is to enable the tracking and management of arbitrary collections of exchanged data.', - 'id': 'DataPackage', + 'description': 'A Document whose function is to serve as a wrapper for a serialized population of objects in a file-like object, governed by a single schema (a.k.a. an "ontology"). The file can be a STEP (ISO 10303) file (in a number of possible encoding options), a CAD file, or in general any data exchange or serialization file.', + 'id': 'DataSet', 'id_ns': 'pgef', - 'name': 'DataPackage', - 'see_also': ''} + 'name': 'DataSet'} -DataSet = {'_schema_name': 'PmofClass', +DataPackage = {'_schema_name': 'PmofClass', 'abbreviation': '', 'bases': ['Document'], 'comment': '', 'definition': '', - 'description': 'A Document whose function is to serve as a wrapper for a serialized population of objects in a file-like object, governed by a single schema (a.k.a. an "ontology"). The file can be a STEP (ISO 10303) file (in a number of possible encoding options), a CAD file, or in general any data exchange or serialization file.', - 'id': 'DataSet', + 'description': 'A collection of one or more DataSet instances. A DataPackage instance may include one or more file-like objects and may be governed by more than one schema (ontology). The primary purpose of the DataPackage Class is to enable the tracking and management of arbitrary collections of exchanged data.', + 'id': 'DataPackage', 'id_ns': 'pgef', - 'name': 'DataSet', - 'see_also': ''} + 'name': 'DataPackage'} ProcessDefinition = {'_schema_name': 'PmofClass', 'abbreviation': '', @@ -472,6 +440,5 @@ 'description': 'A model of a structured Activity. A ProcessDefinition may itself be composed of one or more ProcessDefinitions. [Based on the WfMC definition of "Business Process"] Synonyms: Business Process.', 'id': 'ProcessDefinition', 'id_ns': 'pgef', - 'name': 'ProcessDefinition', - 'see_also': ''} + 'name': 'ProcessDefinition'} Index: PanGalactic/pangalactic/meta/metaobjects/properties.py diff -u PanGalactic/pangalactic/meta/metaobjects/properties.py:1.4 PanGalactic/pangalactic/meta/metaobjects/properties.py:1.5 --- PanGalactic/pangalactic/meta/metaobjects/properties.py:1.4 Fri Nov 17 14:16:27 2006 +++ PanGalactic/pangalactic/meta/metaobjects/properties.py Thu Nov 23 14:37:22 2006 @@ -1,14 +1,11 @@ user_file_name = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'user_file_name', 'comment': '', 'default': '', 'definition': '', 'description': "The user's local name for the file.", - 'display_group': 'main', 'display_name': 'user_file_name', - 'display_style': '', 'domain': 'FileLink', 'functional': True, 'id': 'user_file_name v.0', @@ -17,23 +14,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'user_file_name', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} status_code = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'status_code', 'comment': '', 'default': '', 'definition': '', 'description': "The status of an Organization's record (active or inactive). (From the CAGE data structure.)", - 'display_group': 'main', 'display_name': 'status_code', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'status_code v.0', @@ -42,23 +34,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'status_code', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} name1 = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'name1', 'comment': '', 'default': '', 'definition': '', 'description': "The first of a possible 5 segments of an Organization's name. (From the CAGE data structure.)", - 'display_group': 'main', 'display_name': 'name1', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'name1 v.0', @@ -67,23 +54,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'name1', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} version_sequence = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'version_sequence', 'comment': '', 'default': 0, 'definition': '', 'description': 'An integer indicating the sequence of versions (since the version attribute itself may not have a well-defined sort order).', - 'display_group': 'main', 'display_name': 'version_sequence', - 'display_style': '', 'domain': 'Versionable', 'functional': True, 'id': 'version_sequence v.0', @@ -92,23 +74,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'version_sequence', - 'ontology': None, 'property_type': 'datatype', 'range': 'int', - 'see_also': '', 'version': 'baseline'} abbreviation = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'abbreviation', 'comment': '', 'default': '', 'definition': '', - 'description': '', - 'display_group': 'main', + 'description': 'A shorter version of the name (could be considered a special-purpose alias).', 'display_name': 'abbreviation', - 'display_style': '', 'domain': 'PmofMetaObject', 'functional': True, 'id': 'abbreviation v.0', @@ -117,23 +94,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'abbreviation', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} country_code = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'country_code', 'comment': '', 'default': 0, 'definition': '', 'description': 'An integer code: 1=U.S., 2=Foreign, 3=Canada (From the CAGE data structure.)', - 'display_group': 'main', 'display_name': 'country_code', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'country_code v.0', @@ -142,23 +114,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'country_code', - 'ontology': None, 'property_type': 'datatype', 'range': 'int', - 'see_also': '', 'version': 'baseline'} inverse_functional = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'inverse_functional', 'comment': '', 'default': False, 'definition': '', - 'description': "If 'inverse_functional' is True, this is equivalent to saying that the property is a member of the Class [owl:InverseFunctionalProperty]. That is, each value in the Property's range corresponds to a unique value in its domain. That is, the Property can serve as a 'primary key' in a relational database schema.", - 'display_group': 'main', + 'description': 'If this inverse_functional is True, this is equivalent to saying that the property behaves like a member of the Class [owl:InverseFunctionalProperty]. That is, each value in the its range corresponds to a unique value in its domain. That is, the Property can serve as a primary key in a relational database schema.', 'display_name': 'inverse_functional', - 'display_style': '', 'domain': 'PmofProperty', 'functional': True, 'id': 'inverse_functional v.0', @@ -167,23 +134,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'inverse_functional', - 'ontology': None, 'property_type': 'datatype', 'range': 'bool', - 'see_also': '', 'version': 'baseline'} property_type = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'property_type', 'comment': '', 'default': '', 'definition': '', - 'description': 'For owl:ObjectProperty instances, "object"; for owl:DatatypeProperty instances, "datatype".', - 'display_group': 'main', + 'description': 'Specifies whether the range of a property refers to a Class of objects (i.e., its values are members of that Class) or the name of a datatype; (i.e., its values are instances of a datatype, e.g. string, integer, etc.).', 'display_name': 'property_type', - 'display_style': '', 'domain': 'PmofProperty', 'functional': True, 'id': 'property_type v.0', @@ -192,23 +154,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'property_type', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} structural_role = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'structural_role', 'comment': '', 'default': '', 'definition': '', 'description': 'An indicator of whether the document is intended to be (1) stand-alone, (2) the parent in an assembly of documents, or (3) a component in another document.', - 'display_group': 'main', 'display_name': 'structural_role', - 'display_style': '', 'domain': 'Document', 'functional': True, 'id': 'structural_role v.0', @@ -217,23 +174,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'structural_role', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} content = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'content', 'comment': '', 'default': '', 'definition': '', 'description': 'The content of the Document in a text-based format (usually text/plain, but may be any format with a MIME type of "text", such as text/html, text/xml, or text/tab-separated-values).', - 'display_group': 'main', 'display_name': 'content', - 'display_style': '', 'domain': 'Document', 'functional': True, 'id': 'content v.0', @@ -242,23 +194,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'content', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} org_email = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'org_email', 'comment': '', 'default': '', 'definition': '', 'description': "A Person's email address at an Organization.", - 'display_group': 'main', 'display_name': 'org_email', - 'display_style': '', 'domain': 'OrgPerson', 'functional': True, 'id': 'org_email v.0', @@ -267,23 +214,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'org_email', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} display_name = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'display_name', 'comment': '', 'default': '', 'definition': '', - 'description': "The string to be used as a Property's name when it is to be displayed in a user interface.", - 'display_group': 'main', + 'description': 'The identifying string to be used when the PmofProperty is to be displayed in a user interface.', 'display_name': 'display_name', - 'display_style': '', 'domain': 'PmofProperty', 'functional': True, 'id': 'display_name v.0', @@ -292,23 +234,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'display_name', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} rep_purpose = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'rep_purpose', 'comment': '', 'default': '', 'definition': '', 'description': 'The purpose or meaning of this Representation -- e.g. "publication", "presentation", "exchange", etc. The semantics of this Property are heavily context-dependent.', - 'display_group': 'main', 'display_name': 'rep_purpose', - 'display_style': '', 'domain': 'Representation', 'functional': True, 'id': 'rep_purpose v.0', @@ -317,23 +254,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'rep_purpose', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} version = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'version', 'comment': '', 'default': '', 'definition': '', 'description': 'A user-modifiable alphanumeric string used to identify a baseline, release, or version. Similar to a CVS release tag.', - 'display_group': 'main', 'display_name': 'version', - 'display_style': '', 'domain': 'Versionable', 'functional': True, 'id': 'version v.0', @@ -342,23 +274,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'version', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} location = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'location', 'comment': '', 'default': '', 'definition': '', 'description': "Location == URL to get the file (from the repository if it is a 'secured' file; from elsewhere if not).", - 'display_group': 'main', 'display_name': 'location', - 'display_style': '', 'domain': 'FileLink', 'functional': True, 'id': 'location v.0', @@ -367,23 +294,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'location', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} mime_type = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'mime_type', 'comment': '', 'default': None, 'definition': '', 'description': "The MIME type/subtype of a file's content.", - 'display_group': 'main', 'display_name': 'mime_type', - 'display_style': '', 'domain': 'FileLink', 'functional': True, 'id': 'mime_type v.0', @@ -392,23 +314,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'mime_type', - 'ontology': None, 'property_type': 'object', 'range': 'Mime', - 'see_also': '', 'version': 'baseline'} processor_version = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'processor_version', 'comment': '', 'default': '', 'definition': '', 'description': 'The version of the software application that was used to produce a DataSet.', - 'display_group': 'main', 'display_name': 'processor_version', - 'display_style': '', 'domain': 'DataSet', 'functional': True, 'id': 'processor_version v.0', @@ -417,23 +334,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'processor_version', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} state_or_country = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'state_or_country', 'comment': '', 'default': '', 'definition': '', 'description': "An Organization's state (if in the U.S.) or country. (From the CAGE data structure.)", - 'display_group': 'main', 'display_name': 'state_or_country', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'state_or_country v.0', @@ -442,23 +354,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'state_or_country', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} is_object_source = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'is_object_source', 'comment': '', 'default': False, 'definition': '', 'description': 'Indicates whether this Representation is the original source from which its parent Object was instantiated in the repository (PGER) or in the current application context.', - 'display_group': 'main', 'display_name': 'is_object_source', - 'display_style': '', 'domain': 'Representation', 'functional': True, 'id': 'is_object_source v.0', @@ -467,23 +374,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'is_object_source', - 'ontology': None, 'property_type': 'datatype', 'range': 'bool', - 'see_also': '', 'version': 'baseline'} org_name_code = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'org_name_code', 'comment': '', 'default': '', 'definition': '', 'description': 'An abbreviation for an Organization\'s name. Maps to a Part\'s Manufacturer Name Code. Corresponds to the parent Organization identifier (Association CAGE) but is a "mnemonic" string. Therefore, it is not unique among known Organizations, since several locations of the same Organization will have the same Organization Name Code.', - 'display_group': 'main', 'display_name': 'org_name_code', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'org_name_code v.0', @@ -492,23 +394,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'org_name_code', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} child = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'child', 'comment': '', 'default': None, 'definition': '', 'description': 'The child Object in a Relationship.', - 'display_group': 'main', 'display_name': 'child', - 'display_style': '', 'domain': 'Relationship', 'functional': True, 'id': 'child v.0', @@ -517,23 +414,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'child', - 'ontology': None, 'property_type': 'object', 'range': 'PanGalacticObject', - 'see_also': '', 'version': 'baseline'} name = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'name', 'comment': '', 'default': '', 'definition': '', 'description': "A human-readable identifier for an object -- usually the one by which the object is known to the end-user, but it may be used for any type of identification, including aliases and local nomenclatures. Its meaning is dependent on the application context. This concept is analogous to a person's given name.", - 'display_group': 'main', 'display_name': 'name', - 'display_style': '', 'domain': 'Identifiable', 'functional': True, 'id': 'name v.0', @@ -542,23 +434,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'name', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} bytes = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'bytes', 'comment': '', 'default': 0, 'definition': '', 'description': 'The size of a file in bytes.', - 'display_group': 'main', 'display_name': 'bytes', - 'display_style': '', 'domain': 'FileLink', 'functional': True, 'id': 'bytes v.0', @@ -567,23 +454,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'bytes', - 'ontology': None, 'property_type': 'datatype', 'range': 'int', - 'see_also': '', 'version': 'baseline'} pl_items = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'pl_items', 'comment': '', 'default': [], 'definition': '', 'description': 'The PartsListItem instances contained by a PartsList.', - 'display_group': 'main', 'display_name': 'pl_items', - 'display_style': '', 'domain': 'PartsList', 'functional': False, 'id': 'pl_items v.0', @@ -592,23 +474,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'pl_items', - 'ontology': None, 'property_type': 'object', 'range': 'PartsListItem', - 'see_also': '', 'version': 'baseline'} component_quantity = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'component_quantity', 'comment': '', 'default': [], 'definition': '', 'description': 'The number of instances or measured quantity of the component object(s) used.', - 'display_group': 'main', 'display_name': 'component_quantity', - 'display_style': '', 'domain': 'Qacu', 'functional': False, 'id': 'component_quantity v.0', @@ -617,23 +494,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'component_quantity', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} part_number_aliases = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'part_number_aliases', 'comment': '', 'default': [], 'definition': '', 'description': 'Other equivalent identifiers for a Part.', - 'display_group': 'main', 'display_name': 'part_number_aliases', - 'display_style': '', 'domain': 'Part', 'functional': False, 'id': 'part_number_aliases v.0', @@ -642,23 +514,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'part_number_aliases', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} mod_datetime = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'mod_datetime', 'comment': '', 'default': None, 'definition': '', 'description': 'The date and time of last modification of an object.', - 'display_group': 'main', 'display_name': 'mod_datetime', - 'display_style': '', 'domain': 'Manageable', 'functional': True, 'id': 'mod_datetime v.0', @@ -667,23 +534,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'mod_datetime', - 'ontology': None, 'property_type': 'datatype', 'range': 'datetime', - 'see_also': '', 'version': 'baseline'} media_subtype = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'media_subtype', 'comment': '', 'default': '', 'definition': '', 'description': 'The MIME Media Subtype per (or a custom subtype).', - 'display_group': 'main', 'display_name': 'media_subtype', - 'display_style': '', 'domain': 'Mime', 'functional': True, 'id': 'media_subtype v.0', @@ -692,48 +554,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'media_subtype', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', - 'version': 'baseline'} - -display_style = {'_schema_name': 'PmofProperty', - 'abbreviation': '', - 'base': None, - 'base_id': 'display_style', - 'comment': '', - 'default': '', - 'definition': '', - 'description': "The display_style governs the types of widgets that will be used to view and edit a Property's values. This can be thought of as a presentation cue within the context of the 'range' (datatype or object type). For example, the styles of 'narrative' and 'identifier' correspond in a GUI to multi-line text widget and single-line field, respectively.", - 'display_group': 'main', - 'display_name': 'display_style', - 'display_style': '', - 'domain': 'PmofProperty', - 'functional': True, - 'id': 'display_style v.0', - 'id_ns': 'pgef', - 'inverse_functional': False, - 'iteration': 0, - 'known_aliases': [], - 'name': 'display_style', - 'ontology': None, - 'property_type': 'datatype', - 'range': 'str', - 'see_also': '', 'version': 'baseline'} sic_code4 = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'sic_code4', 'comment': '', 'default': '', 'definition': '', 'description': 'Fourth of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.)', - 'display_group': 'main', 'display_name': 'sic_code4', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'sic_code4 v.0', @@ -742,23 +574,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'sic_code4', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} sic_code2 = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'sic_code2', 'comment': '', 'default': '', 'definition': '', 'description': 'Second of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.)', - 'display_group': 'main', 'display_name': 'sic_code2', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'sic_code2 v.0', @@ -767,23 +594,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'sic_code2', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} sic_code3 = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'sic_code3', 'comment': '', 'default': '', 'definition': '', 'description': 'Third of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.)', - 'display_group': 'main', 'display_name': 'sic_code3', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'sic_code3 v.0', @@ -792,23 +614,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'sic_code3', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} sic_code1 = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'sic_code1', 'comment': '', 'default': '', 'definition': '', 'description': 'First of a possible 4 Standard Industrial Classification (SIC) codes for an Organization. See: http://www.census.gov/epcd/www/sic.html (From the CAGE data structure.)', - 'display_group': 'main', 'display_name': 'sic_code1', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'sic_code1 v.0', @@ -817,23 +634,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'sic_code1', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} part_vendor = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'part_vendor', 'comment': '', 'default': None, 'definition': '', 'description': 'The Organization from which a PhysicalPart was procured.', - 'display_group': 'main', 'display_name': 'part_vendor', - 'display_style': '', 'domain': 'PhysicalPart', 'functional': True, 'id': 'part_vendor v.0', @@ -842,23 +654,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'part_vendor', - 'ontology': None, 'property_type': 'object', 'range': 'Organization', - 'see_also': '', 'version': 'baseline'} record_create_datetime = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'record_create_datetime', 'comment': '', 'default': None, 'definition': '', 'description': "Date-time of addition of an object's record to the repository.", - 'display_group': 'main', 'display_name': 'record_create_datetime', - 'display_style': '', 'domain': 'Manageable', 'functional': True, 'id': 'record_create_datetime v.0', @@ -867,23 +674,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'record_create_datetime', - 'ontology': None, 'property_type': 'datatype', 'range': 'datetime', - 'see_also': '', 'version': 'baseline'} parent_organization = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'parent_organization', 'comment': '', 'default': None, 'definition': '', 'description': "An Organization's parent Organization. (In the CAGE data structure, this is called the 'association_cage'.)", - 'display_group': 'main', 'display_name': 'parent_organization', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'parent_organization v.0', @@ -892,23 +694,38 @@ 'iteration': 0, 'known_aliases': [], 'name': 'parent_organization', - 'ontology': None, 'property_type': 'object', 'range': 'Organization', - 'see_also': '', + 'version': 'baseline'} + +domain = {'_schema_name': 'PmofProperty', + 'abbreviation': '', + 'base_id': 'domain', + 'comment': '', + 'default': None, + 'definition': '', + 'description': 'The PmofClass of which this PmofProperty represents a characteristic or relationship', + 'display_name': 'domain', + 'domain': 'PmofProperty', + 'functional': True, + 'id': 'domain v.0', + 'id_ns': 'pgef', + 'inverse_functional': False, + 'iteration': 0, + 'known_aliases': [], + 'name': 'domain', + 'property_type': 'object', + 'range': 'PmofClass', 'version': 'baseline'} is_secured = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'is_secured', 'comment': '', 'default': False, 'definition': '', 'description': "A flag assigned to a FileLink object which, if True, indicates that the file is stored in the repository's file vault; if False, the file is not stored in the repository but is referenced elsewhere.", - 'display_group': 'main', 'display_name': 'is_secured', - 'display_style': '', 'domain': 'FileLink', 'functional': True, 'id': 'is_secured v.0', @@ -917,23 +734,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'is_secured', - 'ontology': None, 'property_type': 'datatype', 'range': 'bool', - 'see_also': '', 'version': 'baseline'} record_owner = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'record_owner', 'comment': '', 'default': None, 'definition': '', 'description': "The Identifiable entity that owns an object's record in the repository. pgef:record_owner and pgef:record_creator may be different. The default is for them to be the same. The pgef:record_owner always has the privilege of modifying the record of the object in the repository (or deleting it, if deletion is allowed for members of the object's Class).", - 'display_group': 'main', 'display_name': 'record_owner', - 'display_style': '', 'domain': 'Manageable', 'functional': True, 'id': 'record_owner v.0', @@ -942,23 +754,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'record_owner', - 'ontology': None, 'property_type': 'object', 'range': 'Identifiable', - 'see_also': '', 'version': 'baseline'} god = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'god', 'comment': '', 'default': False, 'definition': '', 'description': 'A boolean indicating whether an Actor has the capability to assign any Role to itself in a PanGalactic application.', - 'display_group': 'main', 'display_name': 'god', - 'display_style': '', 'domain': 'Person', 'functional': True, 'id': 'god v.0', @@ -967,23 +774,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'god', - 'ontology': None, 'property_type': 'datatype', 'range': 'bool', - 'see_also': '', 'version': 'baseline'} specification = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'specification', 'comment': '', 'default': '', 'definition': '', 'description': 'The identifier of the specification document that applies to a Part.', - 'display_group': 'main', 'display_name': 'specification', - 'display_style': '', 'domain': 'Part', 'functional': True, 'id': 'specification v.0', @@ -992,23 +794,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'specification', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} role_context = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'role_context', 'comment': '', 'default': None, 'definition': '', 'description': 'The context within which a Role is defined.', - 'display_group': 'main', 'display_name': 'role_context', - 'display_style': '', 'domain': 'Role', 'functional': True, 'id': 'role_context v.0', @@ -1017,23 +814,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'role_context', - 'ontology': None, 'property_type': 'object', 'range': 'PanGalacticObject', - 'see_also': '', 'version': 'baseline'} originating_system = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'originating_system', 'comment': '', 'default': '', 'definition': '', 'description': 'The system from which the data in a DataSet originated.', - 'display_group': 'main', 'display_name': 'originating_system', - 'display_style': '', 'domain': 'DataSet', 'functional': True, 'id': 'originating_system v.0', @@ -1042,23 +834,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'originating_system', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} is_composable = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'is_composable', 'comment': '', 'default': False, 'definition': '', 'description': 'A flag, for which a True value indicates that a Representation is able to be used (e.g., by an editor or a parser/importer) to (re)create or edit itself and/or some other Representation.', - 'display_group': 'main', 'display_name': 'is_composable', - 'display_style': '', 'domain': 'Representation', 'functional': True, 'id': 'is_composable v.0', @@ -1067,23 +854,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'is_composable', - 'ontology': None, 'property_type': 'datatype', 'range': 'bool', - 'see_also': '', 'version': 'baseline'} ref_designator = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'ref_designator', 'comment': '', 'default': '', 'definition': '', 'description': 'A symbolic name that serves as an identifier for a component usage within the context of an assembly.', - 'display_group': 'main', 'display_name': 'ref_designator', - 'display_style': '', 'domain': 'Acu', 'functional': True, 'id': 'ref_designator v.0', @@ -1092,23 +874,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'ref_designator', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} email = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'email', 'comment': '', 'default': '', 'definition': '', 'description': 'The primary email address of the Actor.', - 'display_group': 'main', 'display_name': 'email', - 'display_style': '', 'domain': 'Actor', 'functional': True, 'id': 'email v.0', @@ -1117,23 +894,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'email', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} content_mime_type = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'content_mime_type', 'comment': '', 'default': None, 'definition': '', 'description': "The MIME type of the value of the 'content' attribute. (This does not imply that a Document has an intrinsic MIME type. In general, each representation of the Document will have a MIME type, and they may all be different.)\n", - 'display_group': 'main', 'display_name': 'content_mime_type', - 'display_style': '', 'domain': 'Document', 'functional': True, 'id': 'content_mime_type v.0', @@ -1142,23 +914,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'content_mime_type', - 'ontology': None, 'property_type': 'object', 'range': 'Mime', - 'see_also': '', 'version': 'baseline'} create_datetime = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'create_datetime', 'comment': '', 'default': None, 'definition': '', 'description': "The date and time of an object's creation.", - 'display_group': 'main', 'display_name': 'create_datetime', - 'display_style': '', 'domain': 'Manageable', 'functional': True, 'id': 'create_datetime v.0', @@ -1167,23 +934,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'create_datetime', - 'ontology': None, 'property_type': 'datatype', 'range': 'datetime', - 'see_also': '', 'version': 'baseline'} parent = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'parent', 'comment': '', 'default': None, 'definition': '', 'description': 'The parent Object in a Relationship.', - 'display_group': 'main', 'display_name': 'parent', - 'display_style': '', 'domain': 'Relationship', 'functional': True, 'id': 'parent v.0', @@ -1192,23 +954,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'parent', - 'ontology': None, 'property_type': 'object', 'range': 'PanGalacticObject', - 'see_also': '', 'version': 'baseline'} part_mfr = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'part_mfr', 'comment': '', 'default': None, 'definition': '', 'description': 'The Organization that was primarily responsible for producing a PhysicalPart.', - 'display_group': 'main', 'display_name': 'part_mfr', - 'display_style': '', 'domain': 'PhysicalPart', 'functional': True, 'id': 'part_mfr v.0', @@ -1217,23 +974,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'part_mfr', - 'ontology': None, 'property_type': 'object', 'range': 'Organization', - 'see_also': '', 'version': 'baseline'} org = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'org', 'comment': '', 'default': None, 'definition': '', 'description': "An Actor's primary Organizational affiliation.", - 'display_group': 'main', 'display_name': 'org', - 'display_style': '', 'domain': 'Actor', 'functional': True, 'id': 'org v.0', @@ -1242,23 +994,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'org', - 'ontology': None, 'property_type': 'object', 'range': 'Organization', - 'see_also': '', 'version': 'baseline'} fsc_code = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'fsc_code', 'comment': '', 'default': '', 'definition': '', 'description': 'The Federal Supply Classification code for a Part (this is also the first four digits of the NSN).', - 'display_group': 'main', 'display_name': 'fsc_code', - 'display_style': '', 'domain': 'Part', 'functional': True, 'id': 'fsc_code v.0', @@ -1267,23 +1014,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'fsc_code', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} record_mod_datetime = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'record_mod_datetime', 'comment': '', 'default': None, 'definition': '', 'description': "Date-time of last modification of an object's record in the repository.", - 'display_group': 'main', 'display_name': 'record_mod_datetime', - 'display_style': '', 'domain': 'Manageable', 'functional': True, 'id': 'record_mod_datetime v.0', @@ -1292,23 +1034,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'record_mod_datetime', - 'ontology': None, 'property_type': 'datatype', 'range': 'datetime', - 'see_also': '', 'version': 'baseline'} definition = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'definition', 'comment': '', - 'default': None, + 'default': '', 'definition': '', - 'description': 'The definition of a MetaObject.', - 'display_group': 'main', + 'description': 'Characteristics that uniquely identify a concept.', 'display_name': 'definition', - 'display_style': '', 'domain': 'PmofMetaObject', 'functional': True, 'id': 'definition v.0', @@ -1317,23 +1054,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'definition', - 'ontology': None, - 'property_type': 'object', - 'range': 'Identifiable', - 'see_also': '', + 'property_type': 'datatype', + 'range': 'str', 'version': 'baseline'} dataset_object_ids = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'dataset_object_ids', 'comment': '', 'default': [], 'definition': '', 'description': 'The local identifiers assigned to the objects in a DataSet.', - 'display_group': 'main', 'display_name': 'dataset_object_ids', - 'display_style': '', 'domain': 'DataSet', 'functional': False, 'id': 'dataset_object_ids v.0', @@ -1342,23 +1074,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'dataset_object_ids', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} definition_context = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'definition_context', 'comment': '', 'default': '', 'definition': '', 'description': 'The context within which a Model is defined.\n\nFrom the STEP PDM Schema Usage Guide: "[Definition context] distinguishes the type of the associated product_definition ...". Examples given in the STEP PDM Schema Usage Guide all use name == "part definition" ... a set of values meaningful within the context of a Project or Organization should be defined for this attribute to be useful. Maps to STEP "product_definition_context.name".', - 'display_group': 'main', 'display_name': 'definition_context', - 'display_style': '', 'domain': 'Model', 'functional': True, 'id': 'definition_context v.0', @@ -1367,23 +1094,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'definition_context', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} cm_authority = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'cm_authority', 'comment': '', 'default': None, 'definition': '', 'description': 'The Identifiable entity that has primary responsibility for configuration management of the object. Often, this will be a Project, but it sometimes may be an Organization, a Person, or some other entity.', - 'display_group': 'main', 'display_name': 'cm_authority', - 'display_style': '', 'domain': 'Versionable', 'functional': True, 'id': 'cm_authority v.0', @@ -1392,23 +1114,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'cm_authority', - 'ontology': None, 'property_type': 'object', 'range': 'Identifiable', - 'see_also': '', 'version': 'baseline'} specification_screening = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'specification_screening', 'comment': '', 'default': '', 'definition': '', 'description': 'The identifier for a screening specification that applies to a Part.', - 'display_group': 'main', 'display_name': 'specification_screening', - 'display_style': '', 'domain': 'Part', 'functional': True, 'id': 'specification_screening v.0', @@ -1417,48 +1134,38 @@ 'iteration': 0, 'known_aliases': [], 'name': 'specification_screening', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} -life_cycle_stage = {'_schema_name': 'PmofProperty', +range = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, - 'base_id': 'life_cycle_stage', + 'base_id': 'range', 'comment': '', 'default': '', 'definition': '', - 'description': 'The Life Cycle Stage within which a Model is defined.\n\npgef:life_cycle_stage maps directly to STEP \'product_definition_context.life_cycle_stage\'. The two values recommended in the STEP PDM Schema Usage Guide are: "design" and "manufacturing" ... a set of values meaningful within the context of a particular Project or Organization should be defined for this attribute to be useful.', - 'display_group': 'main', - 'display_name': 'life_cycle_stage', - 'display_style': '', - 'domain': 'Model', + 'description': 'The range of a PmofProperty is the name of the type of values it can have. Note that if PmofProperty represents a relationship to an object, then its value will be interpreted as the name of the Class of the related objects.', + 'display_name': 'range', + 'domain': 'PmofProperty', 'functional': True, - 'id': 'life_cycle_stage v.0', + 'id': 'range v.0', 'id_ns': 'pgef', 'inverse_functional': False, 'iteration': 0, 'known_aliases': [], - 'name': 'life_cycle_stage', - 'ontology': None, + 'name': 'range', 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} comment = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'comment', 'comment': '', 'default': '', 'definition': '', 'description': 'Information about an object that may be incidental, temporal, or contextual. The meaning is determined by the application context.', - 'display_group': 'main', 'display_name': 'comment', - 'display_style': '', 'domain': 'Manageable', 'functional': True, 'id': 'comment v.0', @@ -1467,23 +1174,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'comment', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} is_generable = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'is_generable', 'comment': '', 'default': False, 'definition': '', 'description': 'A flag which, if True, indicates that a Representation that can be generated -- e.g., from a Model.\n', - 'display_group': 'main', 'display_name': 'is_generable', - 'display_style': '', 'domain': 'Representation', 'functional': True, 'id': 'is_generable v.0', @@ -1492,23 +1194,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'is_generable', - 'ontology': None, 'property_type': 'datatype', 'range': 'bool', - 'see_also': '', 'version': 'baseline'} file_sequence = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'file_sequence', 'comment': '', 'default': 0, 'definition': '', 'description': 'An integer that can be used to specify the ordering of this file within an ordered set of files -- attachments, for example. NOTE: Sequence is intepreted as applying within Sequence Context (which see).', - 'display_group': 'main', 'display_name': 'file_sequence', - 'display_style': '', 'domain': 'FileLink', 'functional': True, 'id': 'file_sequence v.0', @@ -1517,23 +1214,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'file_sequence', - 'ontology': None, 'property_type': 'datatype', 'range': 'int', - 'see_also': '', 'version': 'baseline'} part_number_drawing = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'part_number_drawing', 'comment': '', 'default': '', 'definition': '', 'description': "If a Part has a 'drawing' (a type of specification), this is its identifier.", - 'display_group': 'main', 'display_name': 'part_number_drawing', - 'display_style': '', 'domain': 'Part', 'functional': True, 'id': 'part_number_drawing v.0', @@ -1542,23 +1234,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'part_number_drawing', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} functional = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'functional', 'comment': '', 'default': False, 'definition': '', - 'description': "If 'functional' is True, this is equivalent to saying that the property is a member of the Class owl:FunctionalProperty. That is, the Property is 'single-valued'. Likewise, if 'functional' is False, the Property is 'multi-valued', and its value will be represented as a collection of the object type or datatype specified in its 'range' attribute.", - 'display_group': 'main', + 'description': 'If functional is True, this is equivalent to saying that the property behaves like a member of the Class owl:FunctionalProperty. That is, the Property is single-valued. Likewise, if functional is False, the Property is multi-valued, and its value will be represented as a collection of the object type or datatype specified in its range attribute.', 'display_name': 'functional', - 'display_style': '', 'domain': 'PmofProperty', 'functional': True, 'id': 'functional v.0', @@ -1567,23 +1254,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'functional', - 'ontology': None, 'property_type': 'datatype', 'range': 'bool', - 'see_also': '', 'version': 'baseline'} part_number_nsn = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'part_number_nsn', 'comment': '', 'default': '', 'definition': '', 'description': 'The National Stock Number for a Part.', - 'display_group': 'main', 'display_name': 'part_number_nsn', - 'display_style': '', 'domain': 'Part', 'functional': True, 'id': 'part_number_nsn v.0', @@ -1592,23 +1274,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'part_number_nsn', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} names = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'names', 'comment': '', 'default': [], 'definition': '', - 'description': "The namespace's names.", - 'display_group': 'main', + 'description': 'The names contained in a namespace.', 'display_name': 'names', - 'display_style': '', 'domain': 'PmofNamespace', 'functional': False, 'id': 'names v.0', @@ -1617,23 +1294,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'names', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} representations = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'representations', 'comment': '', 'default': [], 'definition': '', 'description': 'A digital representation of an object (e.g., a CAD model, a spreadsheet, an HTML document). Representations include both "presentations", such as PDF or HTML for a document, and more general representations such as exchange data sets (e.g., for an engineering model: STEP, VRML, etc.).', - 'display_group': 'main', 'display_name': 'representations', - 'display_style': '', 'domain': 'Representable', 'functional': False, 'id': 'representations v.0', @@ -1642,23 +1314,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'representations', - 'ontology': None, 'property_type': 'object', 'range': 'Identifiable', - 'see_also': '', 'version': 'baseline'} owner = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'owner', 'comment': '', 'default': None, 'definition': '', 'description': 'The Identifiable entity that owns an object.', - 'display_group': 'main', 'display_name': 'owner', - 'display_style': '', 'domain': 'Manageable', 'functional': True, 'id': 'owner v.0', @@ -1667,23 +1334,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'owner', - 'ontology': None, 'property_type': 'object', 'range': 'Identifiable', - 'see_also': '', 'version': 'baseline'} city = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'city', 'comment': '', 'default': '', 'definition': '', 'description': "An Organization's city. (From the CAGE data structure)", - 'display_group': 'main', 'display_name': 'city', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'city v.0', @@ -1692,23 +1354,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'city', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} part_number_mfr = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'part_number_mfr', 'comment': '', 'default': '', 'definition': '', 'description': "The manufacturer's identifier for a Part.", - 'display_group': 'main', 'display_name': 'part_number_mfr', - 'display_style': '', 'domain': 'Part', 'functional': True, 'id': 'part_number_mfr v.0', @@ -1717,23 +1374,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'part_number_mfr', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} creator = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'creator', 'comment': '', 'default': None, 'definition': '', 'description': 'The Identifiable entity that created an object.', - 'display_group': 'main', 'display_name': 'creator', - 'display_style': '', 'domain': 'Manageable', 'functional': True, 'id': 'creator v.0', @@ -1742,23 +1394,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'creator', - 'ontology': None, 'property_type': 'object', 'range': 'Identifiable', - 'see_also': '', 'version': 'baseline'} alt_emails = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'alt_emails', 'comment': '', 'default': [], 'definition': '', 'description': 'Alternate email addresses of the Actor.', - 'display_group': 'main', 'display_name': 'alt_emails', - 'display_style': '', 'domain': 'Actor', 'functional': False, 'id': 'alt_emails v.0', @@ -1767,23 +1414,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'alt_emails', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} serial_number = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'serial_number', 'comment': '', 'default': '', 'definition': '', 'description': 'An identifier assigned by a manufacturer to a specific PhysicalPart.', - 'display_group': 'main', 'display_name': 'serial_number', - 'display_style': '', 'domain': 'PhysicalPart', 'functional': True, 'id': 'serial_number v.0', @@ -1792,23 +1434,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'serial_number', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} publish_datetime = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'publish_datetime', 'comment': '', 'default': None, 'definition': '', 'description': 'Date (and time, if relevant) a Document was published.', - 'display_group': 'main', 'display_name': 'publish_datetime', - 'display_style': '', 'domain': 'Document', 'functional': True, 'id': 'publish_datetime v.0', @@ -1817,23 +1454,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'publish_datetime', - 'ontology': None, 'property_type': 'datatype', 'range': 'datetime', - 'see_also': '', 'version': 'baseline'} authorization = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'authorization', 'comment': '', 'default': None, 'definition': '', 'description': 'The person who authorized creation of the Data Set.', - 'display_group': 'main', 'display_name': 'authorization', - 'display_style': '', 'domain': 'DataSet', 'functional': True, 'id': 'authorization v.0', @@ -1842,23 +1474,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'authorization', - 'ontology': None, 'property_type': 'object', 'range': 'Person', - 'see_also': '', 'version': 'baseline'} files = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'files', 'comment': '', 'default': [], 'definition': '', 'description': 'The file-like Objects (e.g., FileLinks) that constitute a Representation.', - 'display_group': 'main', 'display_name': 'files', - 'display_style': '', 'domain': 'Representation', 'functional': False, 'id': 'files v.0', @@ -1867,23 +1494,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'files', - 'ontology': None, 'property_type': 'object', 'range': 'FileLink', - 'see_also': '', 'version': 'baseline'} part_number_spec = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'part_number_spec', 'comment': '', 'default': '', 'definition': '', 'description': 'The identifier for a Part given by its specification.', - 'display_group': 'main', 'display_name': 'part_number_spec', - 'display_style': '', 'domain': 'Part', 'functional': True, 'id': 'part_number_spec v.0', @@ -1892,23 +1514,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'part_number_spec', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} documentation_purpose = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'documentation_purpose', 'comment': '', 'default': '', 'definition': '', 'description': 'The purpose of a Document in the context of an Object.', - 'display_group': 'main', 'display_name': 'documentation_purpose', - 'display_style': '', 'domain': 'ObjectDocument', 'functional': True, 'id': 'documentation_purpose v.0', @@ -1917,23 +1534,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'documentation_purpose', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} phone = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'phone', 'comment': '', 'default': '', 'definition': '', 'description': "An Actor's primary phone number.", - 'display_group': 'main', 'display_name': 'phone', - 'display_style': '', 'domain': 'Actor', 'functional': True, 'id': 'phone v.0', @@ -1942,23 +1554,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'phone', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} name4 = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'name4', 'comment': '', 'default': '', 'definition': '', 'description': "The fourth of a possible 5 segments of an Organization's name. (From the CAGE data structure.)", - 'display_group': 'main', 'display_name': 'name4', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'name4 v.0', @@ -1967,23 +1574,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'name4', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} part = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'part', 'comment': '', 'default': None, 'definition': '', 'description': 'The Part of which a PhysicalPart is a realization.', - 'display_group': 'main', 'display_name': 'part', - 'display_style': '', 'domain': 'PhysicalPart', 'functional': True, 'id': 'part v.0', @@ -1992,23 +1594,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'part', - 'ontology': None, 'property_type': 'object', 'range': 'Part', - 'see_also': '', 'version': 'baseline'} name2 = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'name2', 'comment': '', 'default': '', 'definition': '', 'description': "The second of a possible 5 segments of an Organization's name. (From the CAGE data structure.)", - 'display_group': 'main', 'display_name': 'name2', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'name2 v.0', @@ -2017,48 +1614,38 @@ 'iteration': 0, 'known_aliases': [], 'name': 'name2', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} -name3 = {'_schema_name': 'PmofProperty', +frame_of_reference = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, - 'base_id': 'name3', + 'base_id': 'frame_of_reference', 'comment': '', 'default': '', 'definition': '', - 'description': "The third of a possible 5 segments of an Organization's name. (From the CAGE data structure.)", - 'display_group': 'main', - 'display_name': 'name3', - 'display_style': '', - 'domain': 'Organization', + 'description': 'An activity or context within which a Model is intended to be used.\n\npgef:frame_of_reference maps directly to STEP "product_definition.frame_of_reference.application". In STEP, f_o_r points to an application_context, which refers to the general application domain that defined the data ... the values recommended in the STEP PDM Schema Usage Guide are: "digital mock up" "assembly study" "process planning" "electrical design" "mechanical design", but a set of values meaningful within the context of a specific Project or Organization should be defined for this attribute to be useful.', + 'display_name': 'frame_of_reference', + 'domain': 'Model', 'functional': True, - 'id': 'name3 v.0', + 'id': 'frame_of_reference v.0', 'id_ns': 'pgef', 'inverse_functional': False, 'iteration': 0, 'known_aliases': [], - 'name': 'name3', - 'ontology': None, + 'name': 'frame_of_reference', 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} media_type = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'media_type', 'comment': '', 'default': '', 'definition': '', 'description': 'The MIME Media Type per (or a custom type).', - 'display_group': 'main', 'display_name': 'media_type', - 'display_style': '', 'domain': 'Mime', 'functional': True, 'id': 'media_type v.0', @@ -2067,23 +1654,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'media_type', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} dataset_schema_id = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'dataset_schema_id', 'comment': '', 'default': '', 'definition': '', 'description': 'The name of the schema that governs the DataSet.', - 'display_group': 'main', 'display_name': 'dataset_schema_id', - 'display_style': '', 'domain': 'DataSet', 'functional': True, 'id': 'dataset_schema_id v.0', @@ -2092,23 +1674,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'dataset_schema_id', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} file_sequence_context = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'file_sequence_context', 'comment': '', 'default': '', 'definition': '', 'description': "The name of the attribute within the context of which the Sequence attribute is meaningful. If the value of the Sequence Context attribute is 'role', and the value of Role is 'attachment', then Sequence is the position of this file within the set of files that have a Role of 'attachment'.", - 'display_group': 'main', 'display_name': 'file_sequence_context', - 'display_style': '', 'domain': 'FileLink', 'functional': True, 'id': 'file_sequence_context v.0', @@ -2117,23 +1694,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'file_sequence_context', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} part_number_generic = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'part_number_generic', 'comment': '', 'default': '', 'definition': '', 'description': 'The generic identifier for a Part, which in some cases is specified by a standard (e.g., JEDEC for electronic parts).', - 'display_group': 'main', 'display_name': 'part_number_generic', - 'display_style': '', 'domain': 'Part', 'functional': True, 'id': 'part_number_generic v.0', @@ -2142,23 +1714,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'part_number_generic', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} iteration = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'iteration', 'comment': '', 'default': 0, 'definition': '', 'description': 'An identifier for incremental snapshots of working copies of a specific version of a Versionable. Iterations are a zero-based sequence of integers in which the unmodified version is itself the 0th iteration.\n\nWorking copies of iterations can be used as parallel evolution threads toward the next version. Iterations are analogous to experimental branches in CVS: they are used to identify and manage experimental configurations of the Versionable that may never become a version but which need to be documented as part of the design and analysis process. Since Versionables cannot be changed once checked in, their iteration also cannot be changed once checked in to the repository, and must be regarded as "frozen." The policy for saving iterations in the repository can be set by the project or user: all iterations, all iterations since the last version, etc. In early prototyping exercises, iterations may be used exclusively for CM (on, say, the 0th version of everything).', - 'display_group': 'main', 'display_name': 'iteration', - 'display_style': '', 'domain': 'Versionable', 'functional': True, 'id': 'iteration v.0', @@ -2167,23 +1734,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'iteration', - 'ontology': None, 'property_type': 'datatype', 'range': 'int', - 'see_also': '', 'version': 'baseline'} street_address2 = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'street_address2', 'comment': '', 'default': '', 'definition': '', 'description': "The second of a possible 2 segments of an Organization's Street Address. (From the CAGE data structure.)", - 'display_group': 'main', 'display_name': 'street_address2', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'street_address2 v.0', @@ -2192,23 +1754,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'street_address2', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} street_address1 = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'street_address1', 'comment': '', 'default': '', 'definition': '', 'description': "The first of a possible 2 segments of an Organization's Street Address. (From the CAGE data structure.)", - 'display_group': 'main', 'display_name': 'street_address1', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'street_address1 v.0', @@ -2217,23 +1774,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'street_address1', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} pli_id = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'pli_id', 'comment': '', 'default': '', 'definition': '', 'description': 'An identifier for a PartsListItem within the context of its PartsList.', - 'display_group': 'main', 'display_name': 'pli_id', - 'display_style': '', 'domain': 'PartsListItem', 'functional': True, 'id': 'pli_id v.0', @@ -2242,48 +1794,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'pli_id', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', - 'version': 'baseline'} - -display_group = {'_schema_name': 'PmofProperty', - 'abbreviation': '', - 'base': None, - 'base_id': 'display_group', - 'comment': '', - 'default': '', - 'definition': '', - 'description': 'The name of the default pgef:Property group with which this pgef:Property will be displayed when presented in a display format that requires attributes to be grouped.', - 'display_group': 'main', - 'display_name': 'display_group', - 'display_style': '', - 'domain': 'PmofProperty', - 'functional': True, - 'id': 'display_group v.0', - 'id_ns': 'pgef', - 'inverse_functional': False, - 'iteration': 0, - 'known_aliases': [], - 'name': 'display_group', - 'ontology': None, - 'property_type': 'datatype', - 'range': 'str', - 'see_also': '', 'version': 'baseline'} pli_component_usage = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'pli_component_usage', 'comment': '', 'default': None, 'definition': '', 'description': 'The Acu instance referenced by a PartsListItem.', - 'display_group': 'main', 'display_name': 'pli_component_usage', - 'display_style': '', 'domain': 'PartsListItem', 'functional': True, 'id': 'pli_component_usage v.0', @@ -2292,23 +1814,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'pli_component_usage', - 'ontology': None, 'property_type': 'object', 'range': 'Acu', - 'see_also': '', 'version': 'baseline'} pl_status = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'pl_status', 'comment': '', 'default': '', 'definition': '', 'description': "The state of a PartsList relative to some possibly extensible set of standard states, e.g. 'in-process', 'reviewed', etc. The set of standard states should be agreed upon by the Project(s) or Organization(s) using the PartsList.", - 'display_group': 'main', 'display_name': 'pl_status', - 'display_style': '', 'domain': 'PartsList', 'functional': True, 'id': 'pl_status v.0', @@ -2317,23 +1834,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'pl_status', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} mi_or_name = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'mi_or_name', 'comment': '', 'default': '', 'definition': '', 'description': "A Person's middle initial or name.", - 'display_group': 'main', 'display_name': 'mi_or_name', - 'display_style': '', 'domain': 'Person', 'functional': True, 'id': 'mi_or_name v.0', @@ -2342,23 +1854,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'mi_or_name', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} modifier = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'modifier', 'comment': '', 'default': None, 'definition': '', 'description': 'The Identifiable entity that last modified an object.', - 'display_group': 'main', 'display_name': 'modifier', - 'display_style': '', 'domain': 'Manageable', 'functional': True, 'id': 'modifier v.0', @@ -2367,24 +1874,19 @@ 'iteration': 0, 'known_aliases': [], 'name': 'modifier', - 'ontology': None, 'property_type': 'object', 'range': 'Identifiable', - 'see_also': '', 'version': 'baseline'} known_aliases = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'known_aliases', 'comment': '', 'default': [], 'definition': '', - 'description': 'Names of synonyms for this PGEF Property.', - 'display_group': 'main', + 'description': 'Synonyms or alternate names.', 'display_name': 'known_aliases', - 'display_style': '', - 'domain': 'PmofProperty', + 'domain': 'PmofMetaObject', 'functional': False, 'id': 'known_aliases v.0', 'id_ns': 'pgef', @@ -2392,23 +1894,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'known_aliases', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} part_number_model = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'part_number_model', 'comment': '', 'default': '', 'definition': '', 'description': "The identifier for a Part's 'Model', a somewhat arbitrary identifier usually specified by the manufacturer.", - 'display_group': 'main', 'display_name': 'part_number_model', - 'display_style': '', 'domain': 'Part', 'functional': True, 'id': 'part_number_model v.0', @@ -2417,23 +1914,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'part_number_model', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} security_mask = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'security_mask', 'comment': '', 'default': 0, 'definition': '', 'description': "An Actor's access permissions to an Object will be determined by testing whether the security_mask of the Object contains the Actor's oid or the oids of any Role assignments the Actor has.", - 'display_group': 'main', 'display_name': 'security_mask', - 'display_style': '', 'domain': 'Securable', 'functional': True, 'id': 'security_mask v.0', @@ -2442,23 +1934,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'security_mask', - 'ontology': None, 'property_type': 'datatype', 'range': 'int', - 'see_also': '', 'version': 'baseline'} abstract = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'abstract', 'comment': '', 'default': '', 'definition': '', 'description': "A capsule summary of the Document's content.", - 'display_group': 'main', 'display_name': 'abstract', - 'display_style': '', 'domain': 'Document', 'functional': True, 'id': 'abstract v.0', @@ -2467,23 +1954,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'abstract', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} id_ns = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'id_ns', 'comment': '', 'default': '', 'definition': '', 'description': 'The namespace within which an id is unique.', - 'display_group': 'main', 'display_name': 'id_ns', - 'display_style': '', 'domain': 'Identifiable', 'functional': True, 'id': 'id_ns v.0', @@ -2492,23 +1974,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'id_ns', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} type_code = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'type_code', 'comment': '', 'default': '', 'definition': '', 'description': 'The CAGE type code. (From the CAGE data structure.)', - 'display_group': 'main', 'display_name': 'type_code', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'type_code v.0', @@ -2517,23 +1994,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'type_code', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} data_sets = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'data_sets', 'comment': '', 'default': [], 'definition': '', 'description': 'The DataSets contained in a DataPackage.', - 'display_group': 'main', 'display_name': 'data_sets', - 'display_style': '', 'domain': 'DataPackage', 'functional': False, 'id': 'data_sets v.0', @@ -2542,23 +2014,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'data_sets', - 'ontology': None, 'property_type': 'object', 'range': 'DataSet', - 'see_also': '', 'version': 'baseline'} replacement_cage = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'replacement_cage', 'comment': '', 'default': '', 'definition': '', 'description': 'The CAGE code that a CAGE code replaces. (From the CAGE data structure.)', - 'display_group': 'main', 'display_name': 'replacement_cage', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'replacement_cage v.0', @@ -2567,23 +2034,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'replacement_cage', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} id = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'id', 'comment': '', 'default': '', 'definition': '', 'description': 'An identifier that is unique within a specified namespace.', - 'display_group': 'main', 'display_name': 'id', - 'display_style': '', 'domain': 'Identifiable', 'functional': True, 'id': 'id v.0', @@ -2592,23 +2054,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'id', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} complete = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'complete', 'comment': '', 'default': False, 'definition': '', - 'description': 'A flag indicating whether the names attribute contains the complete set of names for the namespace.', - 'display_group': 'main', + 'description': 'A boolean value indicating whether the names Property of a namespace contains the complete set of names for the namespace.', 'display_name': 'complete', - 'display_style': '', 'domain': 'PmofNamespace', 'functional': True, 'id': 'complete v.0', @@ -2617,48 +2074,58 @@ 'iteration': 0, 'known_aliases': [], 'name': 'complete', - 'ontology': None, 'property_type': 'datatype', 'range': 'bool', - 'see_also': '', 'version': 'baseline'} -pl_type = {'_schema_name': 'PmofProperty', +part_model_purpose = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, - 'base_id': 'pl_type', + 'base_id': 'part_model_purpose', 'comment': '', 'default': '', 'definition': '', - 'description': "The type of a PartsList, selected from a set of standard parts list types, such as 'as-designed' (ADPL), 'as-built' (ABPL), 'preliminary' (PRPL), etc., which should be agreed upon by the Project(s) or Organization(s) using the PartsList.", - 'display_group': 'main', - 'display_name': 'pl_type', - 'display_style': '', - 'domain': 'PartsList', + 'description': 'The purpose of a Model of a Part.', + 'display_name': 'part_model_purpose', + 'domain': 'PartModel', 'functional': True, - 'id': 'pl_type v.0', + 'id': 'part_model_purpose v.0', 'id_ns': 'pgef', 'inverse_functional': False, 'iteration': 0, 'known_aliases': [], - 'name': 'pl_type', - 'ontology': None, + 'name': 'part_model_purpose', + 'property_type': 'datatype', + 'range': 'str', + 'version': 'baseline'} + +life_cycle_stage = {'_schema_name': 'PmofProperty', + 'abbreviation': '', + 'base_id': 'life_cycle_stage', + 'comment': '', + 'default': '', + 'definition': '', + 'description': 'The Life Cycle Stage within which a Model is defined.\n\npgef:life_cycle_stage maps directly to STEP \'product_definition_context.life_cycle_stage\'. The two values recommended in the STEP PDM Schema Usage Guide are: "design" and "manufacturing" ... a set of values meaningful within the context of a particular Project or Organization should be defined for this attribute to be useful.', + 'display_name': 'life_cycle_stage', + 'domain': 'Model', + 'functional': True, + 'id': 'life_cycle_stage v.0', + 'id_ns': 'pgef', + 'inverse_functional': False, + 'iteration': 0, + 'known_aliases': [], + 'name': 'life_cycle_stage', 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} lname = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'lname', 'comment': '', 'default': '', 'definition': '', 'description': "A Person's last name (surname).", - 'display_group': 'main', 'display_name': 'lname', - 'display_style': '', 'domain': 'Person', 'functional': True, 'id': 'lname v.0', @@ -2667,23 +2134,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'lname', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} default = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'default', 'comment': '', 'default': '', 'definition': '', - 'description': 'The default value of the PGEF Property.', - 'display_group': 'main', + 'description': 'The default value of the PmofProperty.', 'display_name': 'default', - 'display_style': '', 'domain': 'PmofProperty', 'functional': True, 'id': 'default v.0', @@ -2692,23 +2154,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'default', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} org_phone = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'org_phone', 'comment': '', 'default': '', 'definition': '', 'description': "A Person's telephone number at an Organization.", - 'display_group': 'main', 'display_name': 'org_phone', - 'display_style': '', 'domain': 'OrgPerson', 'functional': True, 'id': 'org_phone v.0', @@ -2717,48 +2174,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'org_phone', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', - 'version': 'baseline'} - -namespace_uri = {'_schema_name': 'PmofProperty', - 'abbreviation': '', - 'base': None, - 'base_id': 'namespace_uri', - 'comment': '', - 'default': '', - 'definition': '', - 'description': "The URI of the namespace to which an object's name belongs.", - 'display_group': 'main', - 'display_name': 'namespace_uri', - 'display_style': '', - 'domain': 'Identifiable', - 'functional': True, - 'id': 'namespace_uri v.0', - 'id_ns': 'pgef', - 'inverse_functional': False, - 'iteration': 0, - 'known_aliases': [], - 'name': 'namespace_uri', - 'ontology': None, - 'property_type': 'datatype', - 'range': 'str', - 'see_also': '', 'version': 'baseline'} lot_date_code = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'lot_date_code', 'comment': '', 'default': '', 'definition': '', 'description': 'An alphanumeric string used by a manufacturer to identify the collection (lot) of PhysicalParts of which a specific PhysicalPart was a member.', - 'display_group': 'main', 'display_name': 'lot_date_code', - 'display_style': '', 'domain': 'PhysicalPart', 'functional': True, 'id': 'lot_date_code v.0', @@ -2767,23 +2194,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'lot_date_code', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} fname = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'fname', 'comment': '', 'default': '', 'definition': '', 'description': "A Person's first name (given name).", - 'display_group': 'main', 'display_name': 'fname', - 'display_style': '', 'domain': 'Person', 'functional': True, 'id': 'fname v.0', @@ -2792,23 +2214,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'fname', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} file_role = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'file_role', 'comment': '', 'default': '', 'definition': '', 'description': 'The purpose of a File relative to a Representation to which it is related. Possible values are: "attachment", "content", "stylesheet", "DTD", etc.', - 'display_group': 'main', 'display_name': 'file_role', - 'display_style': '', 'domain': 'FileLink', 'functional': True, 'id': 'file_role v.0', @@ -2817,23 +2234,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'file_role', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} description = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'description', 'comment': '', 'default': '', 'definition': '', 'description': 'A narrative about the characteristics and identifying features of an object.', - 'display_group': 'main', 'display_name': 'description', - 'display_style': '', 'domain': 'Identifiable', 'functional': True, 'id': 'description v.0', @@ -2842,23 +2254,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'description', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} oid = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'oid', 'comment': '', 'default': '', 'definition': '', 'description': 'A globally unique identifier. The canonical form for oids is a URL, but other forms are acceptable.', - 'display_group': 'main', 'display_name': 'oid', - 'display_style': '', 'domain': 'Identifiable', 'functional': True, 'id': 'oid v.0', @@ -2867,23 +2274,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'oid', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} zip_or_postal_zone = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'zip_or_postal_zone', 'comment': '', 'default': '', 'definition': '', 'description': "An Organization's zip code (if in the U.S.) or postal zone. (From the CAGE data structure.)", - 'display_group': 'main', 'display_name': 'zip_or_postal_zone', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'zip_or_postal_zone v.0', @@ -2892,23 +2294,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'zip_or_postal_zone', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} base_id = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'base_id', 'comment': '', 'default': '', 'definition': '', 'description': 'The id for a Versionable object will often be derived by combining its base_id and version. Since this is not always the case, the specifics of the relationship between an object\'s id, base_id, version, and iteration are left to the internal rules of an application. Versionable objects cannot be changed once they are checked in to the repository, so applications should treat versions that have been (or are about to be) checked in as "frozen."', - 'display_group': 'main', 'display_name': 'base_id', - 'display_style': '', 'domain': 'Versionable', 'functional': True, 'id': 'base_id v.0', @@ -2917,48 +2314,38 @@ 'iteration': 0, 'known_aliases': [], 'name': 'base_id', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} -part_model_purpose = {'_schema_name': 'PmofProperty', +pl_type = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, - 'base_id': 'part_model_purpose', + 'base_id': 'pl_type', 'comment': '', 'default': '', 'definition': '', - 'description': 'The purpose of a Model of a Part.', - 'display_group': 'main', - 'display_name': 'part_model_purpose', - 'display_style': '', - 'domain': 'PartModel', + 'description': "The type of a PartsList, selected from a set of standard parts list types, such as 'as-designed' (ADPL), 'as-built' (ABPL), 'preliminary' (PRPL), etc., which should be agreed upon by the Project(s) or Organization(s) using the PartsList.", + 'display_name': 'pl_type', + 'domain': 'PartsList', 'functional': True, - 'id': 'part_model_purpose v.0', + 'id': 'pl_type v.0', 'id_ns': 'pgef', 'inverse_functional': False, 'iteration': 0, 'known_aliases': [], - 'name': 'part_model_purpose', - 'ontology': None, + 'name': 'pl_type', 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} is_head = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'is_head', 'comment': '', 'default': False, 'definition': '', 'description': 'A flag indicating whether a Versionable object is the most recent version.', - 'display_group': 'main', 'display_name': 'is_head', - 'display_style': '', 'domain': 'Versionable', 'functional': True, 'id': 'is_head v.0', @@ -2967,23 +2354,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'is_head', - 'ontology': None, 'property_type': 'datatype', 'range': 'bool', - 'see_also': '', 'version': 'baseline'} uri = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'uri', 'comment': '', 'default': '', 'definition': '', - 'description': "Unique name of the namespace. This may be a real URI or it may be a faux URI (such as those permitted in RDF/OWL), but it must at least have the '://' structure specified in IETF RFC 2396.", - 'display_group': 'main', + 'description': 'Unique name of the object. This may be a real URI or it may be a faux URI (such as those permitted in RDF/OWL), but it must at least have the scheme://authority/path structure specified in IETF RFC 2396.', 'display_name': 'uri', - 'display_style': '', 'domain': 'PmofMetaObject', 'functional': True, 'id': 'uri v.0', @@ -2992,23 +2374,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'uri', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} record_modifier = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'record_modifier', 'comment': '', 'default': None, 'definition': '', 'description': "The Identifiable entity that last modified an object's record in the repository.", - 'display_group': 'main', 'display_name': 'record_modifier', - 'display_style': '', 'domain': 'Manageable', 'functional': True, 'id': 'record_modifier v.0', @@ -3017,23 +2394,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'record_modifier', - 'ontology': None, 'property_type': 'object', 'range': 'Identifiable', - 'see_also': '', 'version': 'baseline'} record_creator = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'record_creator', 'comment': '', 'default': None, 'definition': '', 'description': "The Identifiable entity that first added an object's record to the repository.", - 'display_group': 'main', 'display_name': 'record_creator', - 'display_style': '', 'domain': 'Manageable', 'functional': True, 'id': 'record_creator v.0', @@ -3042,23 +2414,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'record_creator', - 'ontology': None, 'property_type': 'object', 'range': 'Identifiable', - 'see_also': '', 'version': 'baseline'} specification_military = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'specification_military', 'comment': '', 'default': '', 'definition': '', 'description': 'The identifier of the military specification that applies to a Part.', - 'display_group': 'main', 'display_name': 'specification_military', - 'display_style': '', 'domain': 'Part', 'functional': True, 'id': 'specification_military v.0', @@ -3067,23 +2434,18 @@ 'iteration': 0, 'known_aliases': [], 'name': 'specification_military', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} name5 = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, 'base_id': 'name5', 'comment': '', 'default': '', 'definition': '', 'description': "The fifth of a possible 5 segments of an Organization's name. (From the CAGE data structure.)", - 'display_group': 'main', 'display_name': 'name5', - 'display_style': '', 'domain': 'Organization', 'functional': True, 'id': 'name5 v.0', @@ -3092,34 +2454,27 @@ 'iteration': 0, 'known_aliases': [], 'name': 'name5', - 'ontology': None, 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} -frame_of_reference = {'_schema_name': 'PmofProperty', +name3 = {'_schema_name': 'PmofProperty', 'abbreviation': '', - 'base': None, - 'base_id': 'frame_of_reference', + 'base_id': 'name3', 'comment': '', 'default': '', 'definition': '', - 'description': 'An activity or context within which a Model is intended to be used.\n\npgef:frame_of_reference maps directly to STEP "product_definition.frame_of_reference.application". In STEP, f_o_r points to an application_context, which refers to the general application domain that defined the data ... the values recommended in the STEP PDM Schema Usage Guide are: "digital mock up" "assembly study" "process planning" "electrical design" "mechanical design", but a set of values meaningful within the context of a specific Project or Organization should be defined for this attribute to be useful.', - 'display_group': 'main', - 'display_name': 'frame_of_reference', - 'display_style': '', - 'domain': 'Model', + 'description': "The third of a possible 5 segments of an Organization's name. (From the CAGE data structure.)", + 'display_name': 'name3', + 'domain': 'Organization', 'functional': True, - 'id': 'frame_of_reference v.0', + 'id': 'name3 v.0', 'id_ns': 'pgef', 'inverse_functional': False, 'iteration': 0, 'known_aliases': [], - 'name': 'frame_of_reference', - 'ontology': None, + 'name': 'name3', 'property_type': 'datatype', 'range': 'str', - 'see_also': '', 'version': 'baseline'} From waterbug at step.nasa.gov Sat Nov 25 11:45:51 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Sat Nov 25 11:45:53 2006 Subject: [pangalactic-commits] Comment out some debug logging. Message-ID: <200611251645.kAPGjpui026367@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/registry.py 1.154 1.155 Log message: Comment out some debug logging. Index: PanGalactic/pangalactic/meta/registry.py diff -u PanGalactic/pangalactic/meta/registry.py:1.154 PanGalactic/pangalactic/meta/registry.py:1.155 --- PanGalactic/pangalactic/meta/registry.py:1.154 Thu Nov 23 14:37:21 2006 +++ PanGalactic/pangalactic/meta/registry.py Sat Nov 25 11:45:49 2006 @@ -1,9 +1,9 @@ -# $Id: registry.py,v 1.154 2006/11/23 19:37:21 waterbug Exp $ +# $Id: registry.py,v 1.155 2006/11/25 16:45:49 waterbug Exp $ """ Pan Galactic Meta Object Registry -@version: $Revision: 1.154 $ +@version: $Revision: 1.155 $ The C{PanGalacticRegistry} maintains an in-memory cache of the PanGalactic ('pgef') core ontology (the C{Interface} instances that are the C{_schema}s of @@ -12,7 +12,7 @@ objects and in marshalling/unmarshalling existing objects in a PanGalactic application. """ -__version__ = "$Revision: 1.154 $"[11:-2] +__version__ = "$Revision: 1.155 $"[11:-2] # Python import glob @@ -407,13 +407,13 @@ self.log.info(' + no source and no owl_graph; nothing done.') return self.log.info(' + source = %s' % str(source)) - self.log.info(' + nsprefix = %s' % nsprefix) + self.log.info(' + nsprefix = %s' % str(nsprefix)) self.log.info(' + to_cache = %s' % to_cache) self.log.info(' + to_python = %s' % str(to_python)) cnames = source.getClassNames(nsprefix) self.log.debug(' + cnames: %s' % cnames) - self.log.debug(' ... finding build order of <%s> cnames ...' % ( - nsprefix)) + # self.log.debug(' ... finding build order of <%s> cnames ...' % ( + # nsprefix)) # First construct a dictionary mapping names to lists of base names # (to avoid calling source.getBaseNames too much). Since the purpose # here is to find the proper build order (so all dependendencies of an @@ -421,24 +421,24 @@ # within the nsprefix we are importing from, so that's the 'scope' ... cbases = dict([(n, source.getBaseNames(nsprefix, n, scope=[nsprefix])) for n in cnames]) - self.log.debug(' + cbases: %s' % cbases) + # self.log.debug(' + cbases: %s' % cbases) build_order = [] while 1: for cname in cnames: - self.log.debug(' - cname: %s' % cname) + # self.log.debug(' - cname: %s' % cname) if (cbases[cname].issubset(Set(build_order)) and cname not in build_order): build_order.append(cname) - self.log.debug(' ... appended.') - else: - self.log.debug(' base cnames: %s' % str(cbases[cname])) - self.log.debug(' ... build order unchanged: %s' % ( - build_order)) + # self.log.debug(' ... appended.') + # else: + # self.log.debug(' base cnames: %s' % str(cbases[cname])) + # self.log.debug(' ... build order unchanged: %s' % ( + # build_order)) residue = Set(cnames) - Set(build_order) if not residue: break - else: - self.log.debug(' - residue: %s' % str(residue)) + # else: + # self.log.debug(' - residue: %s' % str(residue)) ifdict = {} propdict = {} extracts = {} @@ -454,7 +454,7 @@ extr['_schema_name'] = 'PmofProperty' extracts[pname] = extr for cname in build_order: - self.log.debug(' - constructing interface for %s' % cname) + # self.log.debug(' - constructing interface for %s' % cname) if nsprefix == 'pgef': # for 'pgef' interfaces, just include 'pgef' base classes (scope # is just 'pgef') ... @@ -466,12 +466,12 @@ # class hierarchy all the way up (scope is 'pgef' and nsprefix) base_names = source.getBaseNames(nsprefix, cname, scope=['pgef', nsprefix]) - self.log.debug(' base_names: %s' % base_names) + # self.log.debug(' base_names: %s' % base_names) # in case this is an app interface, some of its bases may need to be # looked up in self.interfaces ... interface_bases = [ifdict.get(bn, self.interfaces[bn]) for bn in base_names] - self.log.debug(' bases ... %s' % str(interface_bases)) + # self.log.debug(' bases ... %s' % str(interface_bases)) interface_props = filter(lambda p: p.domain == cname, propdict.values()) # self.log.debug(' properties:') From waterbug at step.nasa.gov Sun Nov 26 23:22:36 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Sun Nov 26 23:22:37 2006 Subject: [pangalactic-commits] Replace usage of reduce(). Message-ID: <200611270422.kAR4Mauk012649@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/pgefproperty.py 1.51 1.52 Log message: Replace usage of reduce(). Index: PanGalactic/pangalactic/meta/pgefproperty.py diff -u PanGalactic/pangalactic/meta/pgefproperty.py:1.51 PanGalactic/pangalactic/meta/pgefproperty.py:1.52 --- PanGalactic/pangalactic/meta/pgefproperty.py:1.51 Mon Nov 20 16:27:57 2006 +++ PanGalactic/pangalactic/meta/pgefproperty.py Sun Nov 26 23:22:34 2006 @@ -1,4 +1,4 @@ -# $Id: pgefproperty.py,v 1.51 2006/11/20 21:27:57 waterbug Exp $ +# $Id: pgefproperty.py,v 1.52 2006/11/27 04:22:34 waterbug Exp $ """ PgefProperty represents an RDF or OWL Property. @@ -39,9 +39,9 @@ C{Interface}, in which the C{Interface} corresponds to the class that is the domain of the binary relationship. -@version: $Revision: 1.51 $ +@version: $Revision: 1.52 $ """ -__version__ = "$Revision: 1.51 $"[11:-2] +__version__ = "$Revision: 1.52 $"[11:-2] from datetime import datetime @@ -102,7 +102,7 @@ def floatNonFuncUncook(v): if not v: return [] - elif not reduce(lambda x,y: x and isNumeric(y), v): + elif sum([int(isNumeric(x)) for x in v]) < len(v): # protect the eval (next step) from nasty stuff s = 'Non-numeric value encountered; should be a float' raise ValueError, s From waterbug at step.nasa.gov Tue Nov 28 02:16:12 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Tue Nov 28 02:16:15 2006 Subject: [pangalactic-commits] Eliminate another reduce(). Message-ID: <200611280716.kAS7GCRG030037@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/gui/utils/display_maps.py 1.13 1.14 Log message: Eliminate another reduce(). Index: PanGalactic/pangalactic/node/gui/utils/display_maps.py diff -u PanGalactic/pangalactic/node/gui/utils/display_maps.py:1.13 PanGalactic/pangalactic/node/gui/utils/display_maps.py:1.14 --- PanGalactic/pangalactic/node/gui/utils/display_maps.py:1.13 Thu Nov 16 21:35:59 2006 +++ PanGalactic/pangalactic/node/gui/utils/display_maps.py Tue Nov 28 02:16:10 2006 @@ -2,9 +2,9 @@ A collection of functions that compute default presentation characteristics (a.k.a. "display maps") for PanGalactic Interfaces and Properties. -@version: $Revision: 1.13 $ +@version: $Revision: 1.14 $ """ -__version__ = "$Revision: 1.13 $"[11:-2] +__version__ = "$Revision: 1.14 $"[11:-2] import copy from sets import Set @@ -47,14 +47,13 @@ # First, see if this Interface has a default default display map: dddm = copy.deepcopy(DEFAULT_INTERFACE_MAPS.get(iface.__name__, {})) special_groups = SPECIAL_GROUPS.get(iface.__name__, {}) - special_props = [] + special_props = Set([]) if special_groups: - special_props = reduce(lambda x,y: x.extend(y), - [SPECIAL_GROUPS[iface.__name__][g] - for g in special_groups]) + for g in special_groups: + special_props.update(Set(SPECIAL_GROUPS[iface.__name__][g])) excluded = (Set(ADMIN_PROPERTIES) | Set(VERSION_PROPERTIES) | - Set(special_props)) + special_props) included = [x for x in list(iface) if x not in excluded] ordered = [x for x in DEFAULT_PROPERTY_MAPS.get('order', []) if x in included] From waterbug at step.nasa.gov Tue Nov 28 02:21:40 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Tue Nov 28 02:21:42 2006 Subject: [pangalactic-commits] Eliminate last reduce()! Message-ID: <200611280721.kAS7LeCa030073@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/utils/httpupload.py 1.13 1.14 Log message: Eliminate last reduce()! Index: PanGalactic/pangalactic/utils/httpupload.py diff -u PanGalactic/pangalactic/utils/httpupload.py:1.13 PanGalactic/pangalactic/utils/httpupload.py:1.14 --- PanGalactic/pangalactic/utils/httpupload.py:1.13 Sun Jun 5 15:53:44 2005 +++ PanGalactic/pangalactic/utils/httpupload.py Tue Nov 28 02:21:38 2006 @@ -1,5 +1,5 @@ #!/usr/bin/env python -# $Id: httpupload.py,v 1.13 2005/06/05 19:53:44 waterbug Exp $ +# $Id: httpupload.py,v 1.14 2006/11/28 07:21:38 waterbug Exp $ """ Upload from the local path either the specified file, or all files in the specified directory, as MIME multipart/form-data @@ -14,9 +14,9 @@ -h / --help Print this message and exit. -@version: $Revision: 1.13 $ +@version: $Revision: 1.14 $ """ -__version__ = "$Revision: 1.13 $"[11:-2] +__version__ = "$Revision: 1.14 $"[11:-2] import base64 import getopt @@ -161,7 +161,7 @@ msg, filename, filemime = enclose(f) outer.attach(msg) fns.append(filename) - fnheader = reduce(lambda x,y: x+', '+y, fns[1:], fns[0]) + fnheader = ', '.join(fns) # Send to the server if secure: h = HTTPSConnection(host, int(port)) From waterbug at step.nasa.gov Wed Nov 29 17:47:00 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Wed Nov 29 17:47:02 2006 Subject: [pangalactic-commits] Add pgefdatatype. Message-ID: <200611292247.kATMl0MJ029904@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/pgefdatatype.py None 1.1 PanGalactic/pangalactic/meta/pgefproperty.py 1.52 1.53 Log message: Add pgefdatatype. Index: PanGalactic/pangalactic/meta/pgefproperty.py diff -u PanGalactic/pangalactic/meta/pgefproperty.py:1.52 PanGalactic/pangalactic/meta/pgefproperty.py:1.53 --- PanGalactic/pangalactic/meta/pgefproperty.py:1.52 Sun Nov 26 23:22:34 2006 +++ PanGalactic/pangalactic/meta/pgefproperty.py Wed Nov 29 17:46:58 2006 @@ -1,4 +1,4 @@ -# $Id: pgefproperty.py,v 1.52 2006/11/27 04:22:34 waterbug Exp $ +# $Id: pgefproperty.py,v 1.53 2006/11/29 22:46:58 waterbug Exp $ """ PgefProperty represents an RDF or OWL Property. @@ -39,9 +39,9 @@ C{Interface}, in which the C{Interface} corresponds to the class that is the domain of the binary relationship. -@version: $Revision: 1.52 $ +@version: $Revision: 1.53 $ """ -__version__ = "$Revision: 1.52 $"[11:-2] +__version__ = "$Revision: 1.53 $"[11:-2] from datetime import datetime @@ -380,9 +380,6 @@ self.name = self.id.capitalize() if not getattr(self, 'display_name', None): self.display_name = self.name - # if it doesn't have a display_group, put it in 'main' - if not getattr(self, 'display_group', None): - self.display_group = 'main' ###################################################################### # Property: default From waterbug at step.nasa.gov Thu Nov 30 03:39:07 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 30 03:39:09 2006 Subject: [pangalactic-commits] Simple beginnings. Message-ID: <200611300839.kAU8d7Om002753@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/pgefdatatype.py 1.1 1.2 Log message: Simple beginnings. Index: PanGalactic/pangalactic/meta/pgefdatatype.py diff -u PanGalactic/pangalactic/meta/pgefdatatype.py:1.1 PanGalactic/pangalactic/meta/pgefdatatype.py:1.2 --- PanGalactic/pangalactic/meta/pgefdatatype.py:1.1 Wed Nov 29 17:46:58 2006 +++ PanGalactic/pangalactic/meta/pgefdatatype.py Thu Nov 30 03:39:06 2006 @@ -1,14 +1,14 @@ -# $Id: pgefdatatype.py,v 1.1 2006/11/29 22:46:58 waterbug Exp $ +# $Id: pgefdatatype.py,v 1.2 2006/11/30 08:39:06 waterbug Exp $ """ -The design intent of C{PgefDatatype} is primarily to provide an extensible set -of type classifications upon which generic-function-based serializers +The primary design intent of C{PgefDatatype} is to provide an extensible set of +type classifications upon which generic-function-based serializers (C{cook}/C{uncook}) and display widgets (C{PanGalaxianProperty}) can be dispatched. -@version: $Revision: 1.1 $ +@version: $Revision: 1.2 $ """ -__version__ = "$Revision: 1.1 $"[11:-2] +__version__ = "$Revision: 1.2 $"[11:-2] from datetime import datetime @@ -20,7 +20,7 @@ from pangalactic.utils.toolbox import isAString, isNumeric -# marshalling functions +# marshalling function: uncook def dtFuncUncook(v): if v and isAString(v) and v != 'None': @@ -87,9 +87,9 @@ } -class PgefProperty(Attribute): +class ShortString(str): """ - A PgefProperty corresponds to the concept of Property in the world of + A PgefDatatype corresponds to the concept of Datatype in the world of ontologies (e.g. as defined in the language specification for the Web Ontology Language [OWL]) or somewhat more loosely to a UML Attribute in the world of software modeling. @@ -98,7 +98,7 @@ # elements from the _schema. # TODO: add attributes used in IEC 61360 and EOTD dictionaries - implements(IPgefProperty) + implements(IDatatype) _schema = { 'id' : { @@ -107,7 +107,7 @@ 'name' :'ID', 'range' :'str', 'description' :""" - [rdf:ID] Identifier of the PgefProperty within some context or + [rdf:ID] Identifier of the PgefDatatype within some context or namespace. (In RDF parlance, this is a "fragment identifier".) """}, @@ -127,7 +127,7 @@ 'name' :'Name', 'range' :'str', 'description' :""" - [rdfs:label] Human-readable identifier of the PgefProperty. + [rdfs:label] Human-readable identifier of the PgefDatatype. """}, 'description' : { @@ -137,222 +137,28 @@ 'range' :'str', 'description' :""" [rdfs:comment] A plain text narrative on the characteristics and - identifying features of the PgefProperty. - """}, - - 'abbreviation' : { - 'id' :'abbreviation', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Abbreviation', - 'range' :'str', - 'description' :""" - [pgef:abbreviation] The standard abbreviation for the PgefProperty. - """}, - - 'domain' : { - 'id' :'domain', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Domain', - 'range' :'str', - 'description' :""" - [rdfs:domain] The id of the 'relating' Class of the PgefProperty. - """}, - - 'range' : { - 'id' :'range', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Range', - 'range' :'str', - 'default' :'str', - 'description' :""" - [rdfs:range] The name of the PGEF type used to represent range - values of the PgefProperty. The interpretation of 'range' depends - on the value of 'property_type': if property_type is 'datatype', - range will be a Python built-in type or a defined pgef_type; if - 'property_type' is 'object', range will be the __name__ of a - C{Interface}. This is the same concept as RDF Schema 'range' - except that the primitive types are Python built-in types, whereas - in RDF Schema they are XML Schema Datatypes (xsd). - """}, - - 'property_type' : { - 'id' :'property_type', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Property Type', - 'range' :'str', - 'default' :'datatype', - 'description' :""" - [pgef:property_type] Discriminator attribute between - [owl:DatatypeProperty] and [owl:ObjectProperty] Values: 'datatype' - or 'object'. Specifies whether the PgefProperty is an Object - Property (in which case its range is defined by a C{Interface}) or - a Datatype Property (in which case its range is a datatype). - [TODO: maybe this should be a boolean property, called something - like "object" ...?] - """}, - - 'functional' : { - 'id' :'functional', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Functional', - 'range' :'bool', - 'default' :'True', - 'description' :""" - [pgef:functional] If 'functional' is True, this is equivalent to - saying that the property is a member of the Class - [owl:FunctionalProperty]. That is, the PgefProperty is - 'single-valued'. Likewise, if 'functional' is False, the - PgefProperty is 'multi-valued', and its value will be represented - as a collection of the object type or datatype specified in its - 'range' attribute. - """}, - - 'inverse_functional' : { - 'id' :'inverse_functional', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'InverseFunctional', - 'range' :'bool', - 'default' :'False', - 'description' :""" - [pgef:inverse_functional] If 'inverse_functional' is True, this is - equivalent to saying that the property is a member of the Class - [owl:InverseFunctionalProperty]. That is, each value in the - PgefProperty's range corresponds to a unique value in its domain. - That is, the PgefProperty can serve as a 'primary key' in a - relational database schema. - """}, - - 'default' : { - 'id' :'default', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Default Value', - 'range' :'str', - 'description' :""" - [pgef:default] The default value for the PgefProperty. - """}, - - 'version' : { - 'id' :'version', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Version', - 'range' :'str', - 'default' :'baseline', - 'description' :""" - [pgef:version] A user-modifiable string used to identify a - baseline, release, or version of the PgefProperty. - """}, - - 'iteration' : { - 'id' :'iteration', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Iteration', - 'range' :'int', - 'description' :""" - [pgef:iteration] An application-assigned sequential integer - identifying the precedence order of revisions of the - PgefProperty. - """}, - - 'ontology' : { - 'id' :'iteration', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Iteration', - 'range' :'Ontology', - 'property_type' :'object', - 'description' :""" - [rdfs:isDefinedBy] The L{pangalactic.meta.ontology.Ontology} that - owns this PgefProperty. Note that in RDFS, isDefinedBy is a - relationship between the Property and a Resource that contains its - definition. - """}, - - # TODO: this is a multi-valued datatype property, so will be - # mapped in Chronosynclastic to an ARRAY of strings, when that is - # implemented. - 'known_aliases' : { - 'id' :'known_aliases', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Known Aliases', - 'range' :'str', - 'functional' :'', - 'description' :""" - [owl:equivalentProperty] Synonymous OntoProperties. This is - represented as list containing 2-tuples C{(PgefProperty.id, - Ontology.id)}, in which C{Ontology.id} should be unique within the - application context so that an OWL C{equivalentProperty} - relationship between the PgefProperty and its aliases can be - verified. - """}, - - 'comment' : { - 'id' :'comment', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Comment', - 'range' :'str', - 'description' :""" - [pgef:comment] Provides information about the PgefProperty that - may be incidental, temporal, or contextual, and is usually in - addition to the information in 'description'. The meaning of - 'comment' is determined by the application context. - """}, - - 'definition' : { - 'id' :'definition', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Definition', - 'range' :'str', - 'description' :""" - [rdfs:isDefinedBy] A statement of the essential characteristics of the - PgefProperty (i.e., the necessary and sufficient conditions for - something to be an instance of this PgefProperty). This may also - contain a references to a standardized data definition, e.g. such as - might be found in an IEC 61360 dictionary. - """}, - - 'see_also' : { - 'id' :'see_also', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'See Also', - 'range' :'Document', - 'property_type' :'object', - 'description' :""" - [rdfs:seeAlso] Provides information about the Property that is - usually in addition to the information in 'description' and - 'definition'. - """}, - - 'display_name' : { - 'id' :'display_name', - 'id_ns' :'http://pangalactic.us/pgef/', - 'name' :'Display Name', - 'range' :'str', - 'description' :""" - [pgef:display_name] the string (which may be distinct from the - value of a Property's 'name' attribute) to use as the name - for the Property when it is displayed in a user interface. + identifying features of the PgefDatatype. """} } def __init__(self, __doc__='', **kw): """ - Initialize a PgefProperty instance. + Initialize a PgefDatatype instance. """ if not kw.get('id'): - raise ValueError, 'PgefProperty must have an id' + raise ValueError, 'PgefDatatype must have an id' Attribute.__init__(self, __name__=kw['id'], __doc__=__doc__) for a in self._schema: setattr(self, a, kw.get(a, getDefault(self._schema[a]))) if not getattr(self, 'name', None): self.name = self.id.capitalize() - if not getattr(self, 'display_name', None): - self.display_name = self.name ###################################################################### - # Property: default + # Datatype: default # # 'default' is really the 'default value' for an instance of - # PgefProperty, so this naming can be thought of as similar to the SQL + # PgefDatatype, so this naming can be thought of as similar to the SQL # 'DEFAULT' keyword, which has the same semantic. ###################################################################### @@ -368,8 +174,8 @@ def cook(self, value): """ - Encode a C{PgefProperty} attribute as a plain text string (if it is a - Functional Property -- i.e., if it is single-valued) or a list (if not + Encode a C{PgefDatatype} attribute as a plain text string (if it is a + Functional Datatype -- i.e., if it is single-valued) or a list (if not Functional -- i.e., if multi-valued), typically for transmission in a text-based protocol, such as XML-RPC or SOAP. @@ -441,12 +247,12 @@ def uncook(self, value): """ Convert a value from a cooked type to (if functional) the type - specified by the C{PgefProperty} or to (if not functional) a list - of the type specified by the C{PgefProperty}. + specified by the C{PgefDatatype} or to (if not functional) a list + of the type specified by the C{PgefDatatype}. @type value: string or list @param value: value to be converted to the range type of - C{PgefProperty} + C{PgefDatatype} @rtype: the appropriate type @return: an instance or a list of instances of the range type From waterbug at step.nasa.gov Thu Nov 30 03:40:04 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 30 03:40:05 2006 Subject: [pangalactic-commits] A little TDD, perhaps? Message-ID: <200611300840.kAU8e473002794@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/test/test_datatype.py None 1.1 Log message: A little TDD, perhaps? From waterbug at step.nasa.gov Thu Nov 30 11:10:09 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 30 11:10:11 2006 Subject: [pangalactic-commits] 'core' module is no more. Message-ID: <200611301610.kAUGA9Lx010036@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/node/setup.py 1.51 1.52 Log message: 'core' module is no more. Index: PanGalactic/pangalactic/node/setup.py diff -u PanGalactic/pangalactic/node/setup.py:1.51 PanGalactic/pangalactic/node/setup.py:1.52 --- PanGalactic/pangalactic/node/setup.py:1.51 Thu Oct 19 03:41:50 2006 +++ PanGalactic/pangalactic/node/setup.py Thu Nov 30 11:10:06 2006 @@ -9,9 +9,9 @@ NOTE: any relative paths assume that cwd == ~/PanGalacticNode -@version: $Revision: 1.51 $ +@version: $Revision: 1.52 $ """ -__version__ = '$Revision: 1.51 $'[11:-2] +__version__ = '$Revision: 1.52 $'[11:-2] from ez_setup import use_setuptools use_setuptools() @@ -128,7 +128,6 @@ package_dir={'' : '../..'}, packages=[ 'pangalactic', - 'pangalactic.core', 'pangalactic.meta', 'pangalactic.meta.metaobjects', 'pangalactic.node', From waterbug at step.nasa.gov Thu Nov 30 12:21:14 2006 From: waterbug at step.nasa.gov (waterbug CVS) Date: Thu Nov 30 12:21:17 2006 Subject: [pangalactic-commits] Corrections to elementtree imports. Message-ID: <200611301721.kAUHLEgu012162@ned.gsfc.nasa.gov> Modified files: PanGalactic/pangalactic/meta/kb.py 1.9 1.10 PanGalactic/pangalactic/utils/io/express_xmi.py 1.2 1.3 Log message: Corrections to elementtree imports. Index: PanGalactic/pangalactic/utils/io/express_xmi.py diff -u PanGalactic/pangalactic/utils/io/express_xmi.py:1.2 PanGalactic/pangalactic/utils/io/express_xmi.py:1.3 --- PanGalactic/pangalactic/utils/io/express_xmi.py:1.2 Tue Nov 14 16:57:15 2006 +++ PanGalactic/pangalactic/utils/io/express_xmi.py Thu Nov 30 12:21:12 2006 @@ -1,13 +1,13 @@ -# $Id: express_xmi.py,v 1.2 2006/11/14 21:57:15 waterbug Exp $ +# $Id: express_xmi.py,v 1.3 2006/11/30 17:21:12 waterbug Exp $ """ A generic (no dependencies on the rest of PanGalactic) reader for EXPRESS (ISO 10303-11) models formulated as instance data based on the MEXICO EXPRESS v2 XMI metamodel. This module reads an EXPRESS-XMI data file into a set of nested Python dictionaries. -@version: $Revision: 1.2 $ +@version: $Revision: 1.3 $ """ -__version__ = "$Revision: 1.2 $"[11:-2] +__version__ = "$Revision: 1.3 $"[11:-2] # Python import re, sys @@ -17,11 +17,11 @@ try: import cElementTree as ET except: - import ElementTree as ET + import elementtree.ElementTree as ET try: from cElementTree import Element, SubElement, ElementTree except: - from ElementTree import Element, SubElement, ElementTree + from elementtree.ElementTree import Element, SubElement, ElementTree # PanGalactic from pangalactic.meta.names import getNamespacesFromSource Index: PanGalactic/pangalactic/meta/kb.py diff -u PanGalactic/pangalactic/meta/kb.py:1.9 PanGalactic/pangalactic/meta/kb.py:1.10 --- PanGalactic/pangalactic/meta/kb.py:1.9 Thu Nov 23 14:37:21 2006 +++ PanGalactic/pangalactic/meta/kb.py Thu Nov 30 12:21:11 2006 @@ -1,12 +1,12 @@ -# $Id: kb.py,v 1.9 2006/11/23 19:37:21 waterbug Exp $ +# $Id: kb.py,v 1.10 2006/11/30 17:21:11 waterbug Exp $ """ OWL import/export module. Reads and writes OWL graphs. Such graphs are sets of statements (known in RDF as "triples": node-arc-node or subject-predicate-object). -@version: $Revision: 1.9 $ +@version: $Revision: 1.10 $ """ -__version__ = "$Revision: 1.9 $"[11:-2] +__version__ = "$Revision: 1.10 $"[11:-2] # Python modules import base64 @@ -25,7 +25,7 @@ try: import cElementTree as ET except: - import ElementTree as ET + import elementtree.ElementTree as ET # RDFLib from rdflib import ConjunctiveGraph