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#"
 >
 
-<Ontology rdf:about="">
+<Ontology rdf:about="http://www.w3.org/2002/07/owl#">
   <imports rdf:resource="http://www.w3.org/2000/01/rdf-schema"/>
   <rdfs:isDefinedBy rdf:resource="http://www.w3.org/TR/2004/REC-owl-semantics-20040210/" />
   <rdfs:isDefinedBy rdf:resource="http://www.w3.org/TR/2004/REC-owl-test-20040210/" />

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/">
-  <owl:Ontology rdf:about="">
+  <owl:Ontology rdf:about="http://www.gsfc.nasa.gov/ontologies/space_mission/">
     <owl:imports rdf:resource="http://pangalactic.us/pgef/"/>
   </owl:Ontology>
   <rdfs:Class rdf:about="http://pangalactic.us/pgef/Part"/>

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/">
-  <owl:Ontology rdf:about="http://www.gsfc.nasa.gov/ontologies/space_mission/">
+  <owl:Ontology rdf:about="">
     <owl:imports rdf:resource="http://pangalactic.us/pgef/"/>
   </owl:Ontology>
   <rdfs:Class rdf:about="http://pangalactic.us/pgef/Part"/>
   <owl:Class rdf:about="http://www.gsfc.nasa.gov/ontologies/space_mission/Instrument">
     <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Part"/>
-    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
   </owl:Class>
   <owl:Class rdf:about="http://www.gsfc.nasa.gov/ontologies/space_mission/Spacecraft">
-    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
     <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Part"/>
   </owl:Class>
   <owl:ObjectProperty rdf:about="http://www.gsfc.nasa.gov/ontologies/space_mission/payload_instruments">
@@ -30,4 +29,3 @@
   </owl:FunctionalProperty>
 </rdf:RDF>
 
-<!-- Created with Protege (with OWL Plugin 2.2, Build 324)  http://protege.stanford.edu -->

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 <stephen dot c dot waterbury at nasa dot gov>
 :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 @@
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/default_display">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Indicates whether to this PGEF Property is to be included in the default display configuration of widgets that present objects that have it.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-  </owl:FunctionalProperty>
   <owl:InverseFunctionalProperty rdf:about="http://pangalactic.us/pgef/uri">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >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 '&lt;scheme>://&lt;authority>&lt;path>' structure specified in IETF RFC 2396.</rdfs:comment>

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 <http://www.iana.org/assignments/media-types/> (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 <http://www.iana.org/assignments/media-types/> (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 '<scheme>://<authority><path>' 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 @@
     <rdfs:subClassOf>
       <owl:Class rdf:about="http://pangalactic.us/pgef/PmofNamespace"/>
     </rdfs:subClassOf>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >A namespace whose names have definitions and a context or domain.</rdfs:comment>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/Representable">
-    <rdfs:subClassOf>
-      <owl:Class rdf:about="http://pangalactic.us/pgef/PanGalacticFu"/>
-    </rdfs:subClassOf>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >Able to be encoded in some digital form.
 </rdfs:comment>
+    <rdfs:subClassOf>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/PanGalacticFu"/>
+    </rdfs:subClassOf>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/Versionable">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >Evolvable in a set of discrete, identifiable incarnations.
 </rdfs:comment>
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofMetaObject">
     <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Representable"/>
@@ -33,158 +35,154 @@
       <owl:Class rdf:about="http://pangalactic.us/pgef/Identifiable"/>
     </rdfs:subClassOf>
     <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Versionable"/>
-    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
     <rdfs:subClassOf>
       <owl:Class rdf:about="http://pangalactic.us/pgef/Manageable"/>
     </rdfs:subClassOf>
     <rdfs:subClassOf>
       <owl:Class rdf:about="http://pangalactic.us/pgef/Securable"/>
     </rdfs:subClassOf>
+    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >An object that is used to define the information structures of PanGalacticObjects in a domain.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="http://pangalactic.us/pgef/PmofOntology">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdfs:subClassOf>
-      <owl:Class rdf:about="http://pangalactic.us/pgef/PmofNamespace"/>
-    </rdfs:subClassOf>
-  </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/Identifiable">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >Having a name or identifier (a.k.a., ID, OID, etc.).
 </rdfs:comment>
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofClass">
     <rdfs:subClassOf>
       <owl:Class rdf:about="http://pangalactic.us/pgef/PmofNamespace"/>
     </rdfs:subClassOf>
     <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
-    <rdfs:subClassOf rdf:resource="http://www.w3.org/2000/01/rdf-schema#Class"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >A specification of the information structure that defines a PanGalactic domain object (i.e., a pgef:PanGalacticObject).
 </rdfs:comment>
   </owl:Class>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/PmofOntology">
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.</rdfs:comment>
+    <rdfs:subClassOf>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/PmofNamespace"/>
+    </rdfs:subClassOf>
+  </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofNamespace">
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >A named collection of names.</rdfs:comment>
     <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/Manageable">
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >Having an owner, creator, and most recent modifier that can be identified.
 </rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofProperty">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A pgef:Property is similar to an rdfs:Property, an owl:DatatypeProperty or owl:ObjectProperty, or a UML class attribute.</rdfs:comment>
     <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
-    <rdfs:subClassOf rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#Property"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >A PmofProperty is similar to an rdfs:Property, an owl:DatatypeProperty or owl:ObjectProperty, or a UML class attribute.</rdfs:comment>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/Securable">
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >Able to have access to it made available only to a specifiable set of individuals.
 </rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofTaxonomy">
     <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PmofNamespace"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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).</rdfs:comment>
   </owl:Class>
-  <owl:ObjectProperty rdf:ID="semantic_type"/>
-  <owl:ObjectProperty rdf:ID="cui"/>
-  <owl:ObjectProperty rdf:ID="name"/>
-  <owl:ObjectProperty rdf:ID="related_slot"/>
-  <owl:ObjectProperty rdf:ID="broader"/>
-  <owl:ObjectProperty rdf:ID="narrower"/>
-  <owl:ObjectProperty rdf:ID="synonym"/>
-  <owl:ObjectProperty rdf:ID="documentation"/>
   <owl:DatatypeProperty rdf:about="http://pangalactic.us/pgef/known_aliases">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Names of synonyms for this PGEF Property.</rdfs:comment>
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
+    >Synonyms or alternate names.</rdfs:comment>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:DatatypeProperty>
   <owl:DatatypeProperty rdf:about="http://pangalactic.us/pgef/names">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The namespace's names.</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >The names contained in a namespace.</rdfs:comment>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofNamespace"/>
   </owl:DatatypeProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/functional">
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    >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.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/display_group">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/range">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.</rdfs:comment>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/complete">
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A flag indicating whether the names attribute contains the complete set of names for the namespace.</rdfs:comment>
+    >A boolean value indicating whether the names Property of a namespace contains the complete set of names for the namespace.</rdfs:comment>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofNamespace"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/definition">
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The definition of a MetaObject.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    >Characteristics that uniquely identify a concept.</rdfs:comment>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
-    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/inverse_functional">
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
+    >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.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
   </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/domain">
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/PmofClass"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >The PmofClass of which this PmofProperty represents a characteristic or relationship</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+  </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/display_name">
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The string to be used as a Property's name when it is to be displayed in a user interface.</rdfs:comment>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    >The identifying string to be used when the PmofProperty is to be displayed in a user interface.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/property_type">
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >For owl:ObjectProperty instances, "object"; for owl:DatatypeProperty instances, "datatype".</rdfs:comment>
-  </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/default">
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    >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.).</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The default value of the PGEF Property.</rdfs:comment>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/abbreviation">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/default">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >The default value of the PmofProperty.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/display_style">
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/abbreviation">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
+    >A shorter version of the name (could be considered a special-purpose alias).</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
   </owl:FunctionalProperty>
   <owl:InverseFunctionalProperty rdf:about="http://pangalactic.us/pgef/uri">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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 '&lt;scheme>://&lt;authority>&lt;path>' structure specified in IETF RFC 2396.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.</rdfs:comment>
   </owl:InverseFunctionalProperty>
 </rdf:RDF>
 

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 @@
 <?xml version="1.0"?>
 <rdf:RDF
+    xmlns="http://pangalactic.us/pgef/"
     xmlns:pgef="http://pangalactic.us/pgef/"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     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://pangalactic.us/pgef/"
   xml:base="http://pangalactic.us/pgef/">
-  <owl:Ontology rdf:about="http://pangalactic.us/pgef/"/>
-  <owl:Class rdf:about="Project">
-    <owl:disjointWith>
-      <owl:Class rdf:about="Organization"/>
-    </owl:disjointWith>
+  <owl:Ontology rdf:about=""/>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/PanGalacticObject">
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.</rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
     <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticObject"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Securable"/>
     </rdfs:subClassOf>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An activity that has the purpose of producing and/or maintaining something, and which involves contributions from Persons and Organizations.</rdfs:comment>
-    <owl:disjointWith>
-      <owl:Class rdf:about="Person"/>
-    </owl:disjointWith>
-    <owl:disjointWith>
-      <owl:Class rdf:about="FileLink"/>
-    </owl:disjointWith>
-    <owl:disjointWith>
-      <owl:Class rdf:about="Role"/>
-    </owl:disjointWith>
-  </owl:Class>
-  <owl:Class rdf:about="RoleAssignment">
     <rdfs:subClassOf>
-      <owl:Class rdf:about="Relationship"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Identifiable"/>
     </rdfs:subClassOf>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A Relationship that assigns a Role (the "parent") to an Actor (the "child").</rdfs:comment>
-  </owl:Class>
-  <owl:Class rdf:about="ObjectDocument">
     <rdfs:subClassOf>
-      <owl:Class rdf:about="Relationship"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Manageable"/>
     </rdfs:subClassOf>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A Relationship between a PanGalacticObject and a Document.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="DataSet">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/PartsList">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
+    >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.</rdfs:comment>
     <rdfs:subClassOf>
-      <owl:Class rdf:about="Document"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Document"/>
     </rdfs:subClassOf>
   </owl:Class>
-  <owl:Class rdf:about="Model">
-    <rdfs:subClassOf>
-      <owl:Class rdf:about="VersionableProduct"/>
-    </rdfs:subClassOf>
-    <rdfs:subClassOf>
-      <owl:Class rdf:about="Representable"/>
-    </rdfs:subClassOf>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Mime">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.)</rdfs:comment>
+    >Multi-purpose Internet Mail Extension (MIME) types.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="Representable">
-    <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticFu"/>
-    </rdfs:subClassOf>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Activity">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Able to be encoded in some digital form.
-</rdfs:comment>
+    >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.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="Securable">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Relationship">
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >A well-defined and identifiable connection between PanGalacticObjects.</rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
+  </owl:Class>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/ProcessDefinition">
     <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticFu"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Model"/>
     </rdfs:subClassOf>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Able to have access to it restricted to a specifiable set of individuals.
-</rdfs:comment>
+    >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.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="Product">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Organization">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The output of a process or activity.</rdfs:comment>
+    >A well-defined, persistent, and identifiable collection of Person instances.</rdfs:comment>
     <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticObject"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Actor"/>
     </rdfs:subClassOf>
+    <owl:disjointWith>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Person"/>
+    </owl:disjointWith>
+    <owl:disjointWith>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Project"/>
+    </owl:disjointWith>
+    <owl:disjointWith>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Role"/>
+    </owl:disjointWith>
+    <owl:disjointWith>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/FileLink"/>
+    </owl:disjointWith>
+  </owl:Class>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Representation">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="PhysicalPart">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Qacu">
     <rdfs:subClassOf>
-      <owl:Class rdf:about="PhysicalObject"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Acu"/>
     </rdfs:subClassOf>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A PhysicalObject that is purported to be a physical realization of a Part.</rdfs:comment>
+    >Quantified Assembly Component Usage represents some number of instances or some measured quantity of a PanGalacticObject used in the assembly of another PanGalacticObject.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="PanGalacticFu">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Identifiable">
+    <rdfs:subClassOf>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/PanGalacticFu"/>
+    </rdfs:subClassOf>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.).
 </rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="Process">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Process">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >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.</rdfs:comment>
     <rdfs:subClassOf>
-      <owl:Class rdf:about="VersionableProduct"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/VersionableProduct"/>
     </rdfs:subClassOf>
   </owl:Class>
-  <owl:Class rdf:about="VersionableProduct">
-    <rdfs:subClassOf rdf:resource="Product"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The common ancestor of all Versionable objects.</rdfs:comment>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/VersionableProduct">
     <rdfs:subClassOf>
-      <owl:Class rdf:about="Versionable"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Versionable"/>
     </rdfs:subClassOf>
-  </owl:Class>
-  <owl:Class rdf:about="Manageable">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Having an Identifiable owner, creator, and most recent modifier.
-</rdfs:comment>
-    <rdfs:subClassOf rdf:resource="PanGalacticFu"/>
-  </owl:Class>
-  <owl:Class rdf:about="Part">
-    <rdfs:subClassOf rdf:resource="VersionableProduct"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-  </owl:Class>
-  <owl:Class rdf:about="PhysicalObject">
     <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticObject"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Product"/>
     </rdfs:subClassOf>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An entity that is a collection of measurable stuff.</rdfs:comment>
+    >The common ancestor of all Versionable objects.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="Mime">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/FileLink">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
+    <owl:disjointWith>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Project"/>
+    </owl:disjointWith>
+    <owl:disjointWith>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Person"/>
+    </owl:disjointWith>
+    <owl:disjointWith rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <owl:disjointWith>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Role"/>
+    </owl:disjointWith>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Multi-purpose Internet Mail Extension (MIME) types.</rdfs:comment>
+    >The class of file-like PanGalacticObjects.</rdfs:comment>
+  </owl:Class>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/ProjectPerson">
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >A Relationship between a Role in the context of a Project and a Person.
+</rdfs:comment>
     <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticObject"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/RoleAssignment"/>
     </rdfs:subClassOf>
   </owl:Class>
-  <owl:Class rdf:about="Identifiable">
-    <rdfs:subClassOf rdf:resource="PanGalacticFu"/>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Representable">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Having a name or identifier (a.k.a., ID, OID, etc.).
+    >Able to be encoded in some digital form.
 </rdfs:comment>
+    <rdfs:subClassOf>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/PanGalacticFu"/>
+    </rdfs:subClassOf>
   </owl:Class>
-  <owl:Class rdf:about="Organization">
-    <owl:disjointWith>
-      <owl:Class rdf:about="FileLink"/>
-    </owl:disjointWith>
-    <owl:disjointWith>
-      <owl:Class rdf:about="Role"/>
-    </owl:disjointWith>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/DataSet">
     <rdfs:subClassOf>
-      <owl:Class rdf:about="Actor"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Document"/>
     </rdfs:subClassOf>
-    <owl:disjointWith rdf:resource="Project"/>
-    <owl:disjointWith>
-      <owl:Class rdf:about="Person"/>
-    </owl:disjointWith>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A well-defined, persistent, and identifiable collection of Person instances.</rdfs:comment>
+    >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.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="Role">
-    <owl:disjointWith rdf:resource="Project"/>
-    <owl:disjointWith>
-      <owl:Class rdf:about="Person"/>
-    </owl:disjointWith>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Versionable">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <owl:disjointWith rdf:resource="Organization"/>
-    <owl:disjointWith>
-      <owl:Class rdf:about="FileLink"/>
-    </owl:disjointWith>
+    >Evolvable in a set of discrete, identifiable incarnations.
+</rdfs:comment>
     <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticObject"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/PanGalacticFu"/>
     </rdfs:subClassOf>
   </owl:Class>
-  <owl:Class rdf:about="Actor">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/PartsListItem">
     <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticObject"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Document"/>
     </rdfs:subClassOf>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An entity that can take on Roles and create, modify, and own PanGalacticObjects</rdfs:comment>
+    >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).</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="DataPackage">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Actor">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdfs:subClassOf>
-      <owl:Class rdf:about="Document"/>
-    </rdfs:subClassOf>
+    >An entity that can take on Roles and create, modify, and own PanGalacticObjects</rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
   </owl:Class>
-  <owl:Class rdf:about="Relationship">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/PhysicalPart">
     <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticObject"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/PhysicalObject"/>
     </rdfs:subClassOf>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A well-defined and identifiable connection between PanGalacticObjects.</rdfs:comment>
+    >A PhysicalObject that is purported to be a physical realization of a Part.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="OrgPerson">
-    <rdfs:subClassOf rdf:resource="RoleAssignment"/>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/PanGalacticFu">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.
 </rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="FileLink">
-    <owl:disjointWith rdf:resource="Role"/>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Model">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Representable"/>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/VersionableProduct"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The class of file-like PanGalacticObjects.</rdfs:comment>
-    <owl:disjointWith rdf:resource="Organization"/>
-    <owl:disjointWith>
-      <owl:Class rdf:about="Person"/>
-    </owl:disjointWith>
-    <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticObject"/>
-    </rdfs:subClassOf>
-    <owl:disjointWith rdf:resource="Project"/>
+    >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.)</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="Person">
-    <rdfs:subClassOf rdf:resource="Actor"/>
-    <owl:disjointWith rdf:resource="Project"/>
-    <owl:disjointWith rdf:resource="FileLink"/>
-    <owl:disjointWith rdf:resource="Role"/>
-    <owl:disjointWith rdf:resource="Organization"/>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/PartModel">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A human being.</rdfs:comment>
+    >The relationship between a Part and a Model that represents it.</rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Relationship"/>
   </owl:Class>
-  <owl:Class rdf:about="Acu">
-    <rdfs:subClassOf rdf:resource="Relationship"/>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/RoleAssignment">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The relationship between a PanGalacticObject (the component) and an assembled PanGalacticObject (the assembly) of which it is a constituent part.</rdfs:comment>
+    >A Relationship that assigns a Role (the "parent") to an Actor (the "child").</rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Relationship"/>
   </owl:Class>
-  <owl:Class rdf:about="Versionable">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Product">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Evolvable in a set of discrete, identifiable incarnations.
-</rdfs:comment>
-    <rdfs:subClassOf rdf:resource="PanGalacticFu"/>
+    >The output of a process or activity.</rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
   </owl:Class>
-  <owl:Class rdf:about="Qacu">
-    <rdfs:subClassOf rdf:resource="Acu"/>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/ObjectDocument">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Relationship"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Quantified Assembly Component Usage represents some number of instances or some measured quantity of a PanGalacticObject used in the assembly of another PanGalacticObject.</rdfs:comment>
+    >A Relationship between a PanGalacticObject and a Document.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="Activity">
-    <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticObject"/>
-    </rdfs:subClassOf>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Acu">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Relationship"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
+    >The relationship between a PanGalacticObject (the component) and an assembled PanGalacticObject (the assembly) of which it is a constituent part.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="PartsList">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Person">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdfs:subClassOf>
-      <owl:Class rdf:about="Document"/>
-    </rdfs:subClassOf>
+    >A human being.</rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Actor"/>
+    <owl:disjointWith rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <owl:disjointWith>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Role"/>
+    </owl:disjointWith>
+    <owl:disjointWith rdf:resource="http://pangalactic.us/pgef/FileLink"/>
+    <owl:disjointWith>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Project"/>
+    </owl:disjointWith>
   </owl:Class>
-  <owl:Class rdf:about="PartsListItem">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/DataPackage">
     <rdfs:subClassOf>
-      <owl:Class rdf:about="Document"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Document"/>
     </rdfs:subClassOf>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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).</rdfs:comment>
-  </owl:Class>
-  <owl:Class rdf:about="ProcessDefinition">
-    <rdfs:subClassOf rdf:resource="Model"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
+    >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.</rdfs:comment>
   </owl:Class>
-  <owl:Class rdf:about="PartModel">
-    <rdfs:subClassOf rdf:resource="Relationship"/>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Role">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The relationship between a Part and a Model that represents it.</rdfs:comment>
+    >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.</rdfs:comment>
+    <owl:disjointWith rdf:resource="http://pangalactic.us/pgef/FileLink"/>
+    <owl:disjointWith rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <owl:disjointWith rdf:resource="http://pangalactic.us/pgef/Person"/>
+    <owl:disjointWith>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Project"/>
+    </owl:disjointWith>
   </owl:Class>
-  <owl:Class rdf:about="Representation">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/PhysicalObject">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdfs:subClassOf>
-      <owl:Class rdf:about="PanGalacticObject"/>
-    </rdfs:subClassOf>
+    >An entity that is a collection of measurable stuff.</rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
   </owl:Class>
-  <owl:Class rdf:about="ProjectPerson">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Manageable">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A Relationship between a Role in the context of a Project and a Person.
+    >Having an Identifiable owner, creator, and most recent modifier.
 </rdfs:comment>
-    <rdfs:subClassOf rdf:resource="RoleAssignment"/>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
   </owl:Class>
-  <owl:Class rdf:about="PanGalacticObject">
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Part">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdfs:subClassOf rdf:resource="Manageable"/>
-    <rdfs:subClassOf rdf:resource="Identifiable"/>
-    <rdfs:subClassOf rdf:resource="Securable"/>
-    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
+    >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.</rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/VersionableProduct"/>
   </owl:Class>
-  <owl:Class rdf:about="Document">
-    <rdfs:subClassOf rdf:resource="Representable"/>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Document">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >A readable thing.</rdfs:comment>
-    <rdfs:subClassOf rdf:resource="VersionableProduct"/>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/VersionableProduct"/>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Representable"/>
   </owl:Class>
-  <owl:ObjectProperty rdf:about="creator">
-    <rdfs:range rdf:resource="Identifiable"/>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Securable">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The Identifiable entity that created an object.</rdfs:comment>
-    <rdfs:domain rdf:resource="Manageable"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:ObjectProperty>
-  <owl:ObjectProperty rdf:about="parent">
-    <rdfs:domain rdf:resource="Relationship"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#InverseFunctionalProperty"/>
-    <rdfs:range rdf:resource="PanGalacticObject"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+    >Able to have access to itself restricted to a specifiable set of individuals.
+</rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
+  </owl:Class>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/OrgPerson">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/RoleAssignment"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The parent Object in a Relationship.</rdfs:comment>
-  </owl:ObjectProperty>
-  <owl:ObjectProperty rdf:about="parent_organization">
-    <rdfs:domain rdf:resource="Organization"/>
-    <rdfs:range rdf:resource="Organization"/>
+    >A Relationship between a Role with an Organization context and a Person.
+</rdfs:comment>
+  </owl:Class>
+  <owl:Class rdf:about="http://pangalactic.us/pgef/Project">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An Organization's parent Organization.  (In the CAGE data structure, this is called the 'association_cage'.)</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:ObjectProperty>
-  <owl:ObjectProperty rdf:about="pl_items">
+    >An activity that has the purpose of producing and/or maintaining something, and which involves contributions from Persons and Organizations.</rdfs:comment>
+    <owl:disjointWith rdf:resource="http://pangalactic.us/pgef/Role"/>
+    <owl:disjointWith rdf:resource="http://pangalactic.us/pgef/FileLink"/>
+    <owl:disjointWith rdf:resource="http://pangalactic.us/pgef/Person"/>
+    <owl:disjointWith rdf:resource="http://pangalactic.us/pgef/Organization"/>
+  </owl:Class>
+  <owl:ObjectProperty rdf:about="http://pangalactic.us/pgef/pl_items">
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/PartsListItem"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PartsList"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >The PartsListItem instances contained by a PartsList.</rdfs:comment>
-    <rdfs:range rdf:resource="PartsListItem"/>
-    <rdfs:domain rdf:resource="PartsList"/>
-  </owl:ObjectProperty>
-  <owl:ObjectProperty rdf:about="record_creator">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The Identifiable entity that first added an object's record to the repository.</rdfs:comment>
-    <rdfs:domain rdf:resource="Manageable"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:range rdf:resource="Identifiable"/>
-  </owl:ObjectProperty>
-  <owl:ObjectProperty rdf:about="part_mfr">
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The Organization that was primarily responsible for producing a PhysicalPart.</rdfs:comment>
-    <rdfs:domain rdf:resource="PhysicalPart"/>
-    <rdfs:range rdf:resource="Organization"/>
-  </owl:ObjectProperty>
-  <owl:ObjectProperty rdf:about="record_owner">
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:range rdf:resource="Identifiable"/>
-    <rdfs:domain rdf:resource="Manageable"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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).</rdfs:comment>
-  </owl:ObjectProperty>
-  <owl:ObjectProperty rdf:about="representations">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.).</rdfs:comment>
-    <rdfs:range rdf:resource="Identifiable"/>
-    <rdfs:domain rdf:resource="Representable"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#InverseFunctionalProperty"/>
   </owl:ObjectProperty>
-  <owl:ObjectProperty rdf:about="part">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The Part of which a PhysicalPart is a realization.</rdfs:comment>
-    <rdfs:range rdf:resource="Part"/>
-    <rdfs:domain rdf:resource="PhysicalPart"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:ObjectProperty>
-  <owl:ObjectProperty rdf:about="org">
-    <rdfs:range rdf:resource="Organization"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:domain rdf:resource="Actor"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An Actor's primary Organizational affiliation.</rdfs:comment>
-  </owl:ObjectProperty>
-  <owl:ObjectProperty rdf:about="data_sets">
+  <owl:ObjectProperty rdf:about="http://pangalactic.us/pgef/data_sets">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >The DataSets contained in a DataPackage.</rdfs:comment>
-    <rdfs:domain rdf:resource="DataPackage"/>
-    <rdfs:range rdf:resource="DataSet"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/DataPackage"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/DataSet"/>
   </owl:ObjectProperty>
-  <owl:ObjectProperty rdf:about="mime_type">
-    <rdfs:range rdf:resource="Mime"/>
-    <rdfs:domain rdf:resource="FileLink"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The MIME type/subtype of a file's content.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:ObjectProperty>
-  <owl:DatatypeProperty rdf:about="is_head">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:domain rdf:resource="Versionable"/>
+  <owl:DatatypeProperty rdf:about="http://pangalactic.us/pgef/alt_emails">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Actor"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A flag indicating whether a Versionable object is the most recent version.</rdfs:comment>
+    >Alternate email addresses of the Actor.</rdfs:comment>
   </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="part_number_drawing">
+  <owl:DatatypeProperty rdf:about="http://pangalactic.us/pgef/dataset_object_ids">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/DataSet"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >If a Part has a 'drawing' (a type of specification), this is its identifier.</rdfs:comment>
-    <rdfs:domain rdf:resource="Part"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+    >The local identifiers assigned to the objects in a DataSet.</rdfs:comment>
   </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="part_number_nsn">
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+  <owl:DatatypeProperty rdf:about="http://pangalactic.us/pgef/component_quantity">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Qacu"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The National Stock Number for a Part.</rdfs:comment>
-    <rdfs:domain rdf:resource="Part"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    >The number of instances or measured quantity of the component object(s) used.</rdfs:comment>
   </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="dataset_object_ids">
-    <rdfs:domain rdf:resource="DataSet"/>
+  <owl:DatatypeProperty rdf:about="http://pangalactic.us/pgef/part_number_aliases">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Part"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The local identifiers assigned to the objects in a DataSet.</rdfs:comment>
+    >Other equivalent identifiers for a Part.</rdfs:comment>
   </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="part_number_aliases">
-    <rdfs:domain rdf:resource="Part"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/sic_code2">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Other equivalent identifiers for a Part.</rdfs:comment>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="part_model_purpose">
-    <rdfs:domain rdf:resource="PartModel"/>
+    >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.)</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/type_code">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The purpose of a Model of a Part.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="security_mask">
+    >The CAGE type code.  (From the CAGE data structure.)</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/mi_or_name">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Person"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
+    >A Person's middle initial or name.</rdfs:comment>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/part_vendor">
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >The Organization from which a PhysicalPart was procured.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PhysicalPart"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/file_sequence">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/FileLink"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
-    <rdfs:domain rdf:resource="Securable"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="pli_id">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An identifier for a PartsListItem within the context of its PartsList.</rdfs:comment>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:domain rdf:resource="PartsListItem"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="part_number_spec">
-    <rdfs:domain rdf:resource="Part"/>
+    >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).</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/modifier">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Manageable"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The identifier for a Part given by its specification.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="comment">
-    <rdfs:domain rdf:resource="Manageable"/>
+    >The Identifiable entity that last modified an object.</rdfs:comment>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/sic_code3">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Information about an object that may be incidental, temporal, or contextual.  The meaning is determined by the application context.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="definition_context">
-    <rdfs:domain rdf:resource="Model"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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".</rdfs:comment>
+    >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.)</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/specification_screening">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="ref_designator">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Part"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A symbolic name that serves as an identifier for a component usage within the context of an assembly.</rdfs:comment>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:domain rdf:resource="Acu"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="name3">
-    <rdfs:domain rdf:resource="Organization"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    >The identifier for a screening specification that applies to a Part.</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/lname">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Person"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The third of a possible 5 segments of an Organization's name.  (From the CAGE data structure.)</rdfs:comment>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="rep_purpose">
+    >A Person's last name (surname).</rdfs:comment>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/version_sequence">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Versionable"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >An integer indicating the sequence of versions (since the version attribute itself may not have a well-defined sort order).</rdfs:comment>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/rep_purpose">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >The purpose or meaning of this Representation -- e.g.  "publication", "presentation", "exchange", etc.  The semantics of this Property are heavily context-dependent.</rdfs:comment>
-    <rdfs:domain rdf:resource="Representation"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="lname">
-    <rdfs:domain rdf:resource="Person"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Representation"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/creator">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Manageable"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A Person's last name (surname).</rdfs:comment>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="fname">
+    >The Identifiable entity that created an object.</rdfs:comment>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/pli_component_usage">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PartsListItem"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Acu"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A Person's first name (given name).</rdfs:comment>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Person"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="pl_type">
+    >The Acu instance referenced by a PartsListItem.</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/bytes">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdfs:domain rdf:resource="PartsList"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="sic_code4">
-    <rdfs:domain rdf:resource="Organization"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+    >The size of a file in bytes.</rdfs:comment>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/FileLink"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/sic_code4">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >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.)</rdfs:comment>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="zip_or_postal_zone">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/originating_system">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/DataSet"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An Organization's zip code (if in the U.S.) or postal zone.  (From the CAGE data structure.)</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:domain rdf:resource="Organization"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="god">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
-    <rdfs:domain rdf:resource="Person"/>
+    >The system from which the data in a DataSet originated.</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/media_type">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A boolean indicating whether an Actor has the capability to assign any Role to itself in a PanGalactic application.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="documentation_purpose">
-    <rdfs:domain rdf:resource="ObjectDocument"/>
+    >The MIME Media Type per &lt;http://www.iana.org/assignments/media-types/> (or a custom type).</rdfs:comment>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Mime"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/location">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The purpose of a Document in the context of an Object.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="alt_emails">
+    >Location == URL to get the file (from the repository if it is a 'secured' file; from elsewhere if not).</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Actor"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/FileLink"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/zip_or_postal_zone">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Alternate email addresses of the Actor.</rdfs:comment>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="type_code">
-    <rdfs:domain rdf:resource="Organization"/>
+    >An Organization's zip code (if in the U.S.) or postal zone.  (From the CAGE data structure.)</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/dataset_schema_id">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/DataSet"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The CAGE type code.  (From the CAGE data structure.)</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="specification_screening">
+    >The name of the schema that governs the DataSet.</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Part"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The identifier for a screening specification that applies to a Part.</rdfs:comment>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="frame_of_reference">
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/id_ns">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdfs:domain rdf:resource="Model"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="is_composable">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:domain rdf:resource="Representation"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="life_cycle_stage">
+    >The namespace within which an id is unique.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/phone">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Model"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="name2">
-    <rdfs:domain rdf:resource="Organization"/>
+    >An Actor's primary phone number.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Actor"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/part_number_model">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The second of a possible 5 segments of an Organization's name.  (From the CAGE data structure.)</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+    >The identifier for a Part's 'Model', a somewhat arbitrary identifier usually specified by the manufacturer.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Part"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="component_quantity">
-    <rdfs:domain rdf:resource="Qacu"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/part">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The number of instances or measured quantity of the component object(s) used.</rdfs:comment>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="pl_status">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="PartsList"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+    >The Part of which a PhysicalPart is a realization.</rdfs:comment>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Part"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PhysicalPart"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/mime_type">
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Mime"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/FileLink"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="fsc_code">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    >The MIME type/subtype of a file's content.</rdfs:comment>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/iteration">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Versionable"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The Federal Supply Classification code for a Part (this is also the first four digits of the NSN).</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:domain rdf:resource="Part"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="user_file_name">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    >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).</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/fname">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The user's local name for the file.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:domain rdf:resource="FileLink"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="content">
-    <rdfs:domain rdf:resource="Document"/>
+    >A Person's first name (given name).</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Person"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/content_mime_type">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Document"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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).</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="serial_number">
-    <rdfs:domain rdf:resource="PhysicalPart"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An identifier assigned by a manufacturer to a specific PhysicalPart.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="id">
-    <rdfs:domain rdf:resource="Identifiable"/>
+    >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.)
+</rdfs:comment>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Mime"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/record_creator">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Manageable"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An identifier that is unique within a specified namespace.</rdfs:comment>
+    >The Identifiable entity that first added an object's record to the repository.</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/name1">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="record_create_datetime">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Date-time of addition of an object's record to the repository.</rdfs:comment>
-    <rdfs:domain rdf:resource="Manageable"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="location">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+    >The first of a possible 5 segments of an Organization's name.  (From the CAGE data structure.)</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/is_composable">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Representation"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Location == URL to get the file (from the repository if it is a 'secured' file; from elsewhere if not).</rdfs:comment>
-    <rdfs:domain rdf:resource="FileLink"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="mod_datetime">
+    >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.</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/record_mod_datetime">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Manageable"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The date and time of last modification of an object.</rdfs:comment>
-    <rdfs:domain rdf:resource="Manageable"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-  </owl:DatatypeProperty>
-  <owl:DatatypeProperty rdf:about="country_code">
+    >Date-time of last modification of an object's record in the repository.</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/country_code">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
-    <rdfs:domain rdf:resource="Organization"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >An integer code:  1=U.S., 2=Foreign, 3=Canada (From the CAGE data structure.)</rdfs:comment>
-  </owl:DatatypeProperty>
-  <owl:FunctionalProperty rdf:about="modifier">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The Identifiable entity that last modified an object.</rdfs:comment>
-    <rdfs:domain rdf:resource="Manageable"/>
-    <rdfs:range rdf:resource="Identifiable"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="description">
-    <rdfs:domain rdf:resource="Identifiable"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/specification_military">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A narrative about the characteristics and identifying features of an object.</rdfs:comment>
+    >The identifier of the military specification that applies to a Part.</rdfs:comment>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Part"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="file_sequence_context">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="FileLink"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/base_id">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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'.</rdfs:comment>
+    >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."</rdfs:comment>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Versionable"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="mi_or_name">
-    <rdfs:domain rdf:resource="Person"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/fsc_code">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Part"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A Person's middle initial or name.</rdfs:comment>
+    >The Federal Supply Classification code for a Part (this is also the first four digits of the NSN).</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="sic_code3">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.)</rdfs:comment>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/life_cycle_stage">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Model"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Organization"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="structural_role">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/ref_designator">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Document"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Acu"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
+    >A symbolic name that serves as an identifier for a component usage within the context of an assembly.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="sic_code2">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/cm_authority">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.)</rdfs:comment>
+    >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.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Versionable"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/org">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >An Actor's primary Organizational affiliation.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Actor"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Organization"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/part_number_nsn">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Part"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >The National Stock Number for a Part.</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Organization"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="namespace_uri">
-    <rdfs:domain rdf:resource="Identifiable"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/street_address2">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The URI of the namespace to which an object's name belongs.</rdfs:comment>
+    >The second of a possible 2 segments of an Organization's Street Address.  (From the CAGE data structure.)</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="version_sequence">
-    <rdfs:domain rdf:resource="Versionable"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/owner">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An integer indicating the sequence of versions (since the version attribute itself may not have a well-defined sort order).</rdfs:comment>
+    >The Identifiable entity that owns an object.</rdfs:comment>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Manageable"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="version">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/part_mfr">
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PhysicalPart"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A user-modifiable alphanumeric string used to identify a baseline, release, or version.  Similar to a CVS release tag.</rdfs:comment>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Versionable"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    >The Organization that was primarily responsible for producing a PhysicalPart.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="bytes">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/documentation_purpose">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The size of a file in bytes.</rdfs:comment>
+    >The purpose of a Document in the context of an Object.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
-    <rdfs:domain rdf:resource="FileLink"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/ObjectDocument"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="role_context">
-    <rdfs:domain rdf:resource="Role"/>
-    <rdfs:range rdf:resource="PanGalacticObject"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/role_context">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >The context within which a Role is defined.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Role"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="owner">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The Identifiable entity that owns an object.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
-    <rdfs:domain rdf:resource="Manageable"/>
-    <rdfs:range rdf:resource="Identifiable"/>
-  </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="part_number_model">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/status_code">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Part"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The identifier for a Part's 'Model', a somewhat arbitrary identifier usually specified by the manufacturer.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-  </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="create_datetime">
-    <rdfs:domain rdf:resource="Manageable"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The date and time of an object's creation.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
+    >The status of an Organization's record (active or inactive).  (From the CAGE data structure.)</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="sic_code1">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/user_file_name">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.)</rdfs:comment>
-    <rdfs:domain rdf:resource="Organization"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    >The user's local name for the file.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/FileLink"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="is_secured">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/lot_date_code">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="FileLink"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
+    >An alphanumeric string used by a manufacturer to identify the collection (lot) of PhysicalParts of which a specific PhysicalPart was a member.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PhysicalPart"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="authorization">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/record_modifier">
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Manageable"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
-    <rdfs:domain rdf:resource="DataSet"/>
-    <rdfs:range rdf:resource="Person"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The person who authorized creation of the Data Set.</rdfs:comment>
+    >The Identifiable entity that last modified an object's record in the repository.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="name">
-    <rdfs:domain rdf:resource="Identifiable"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/is_object_source">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Representation"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
+    >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.</rdfs:comment>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="city">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/org_name_code">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An Organization's city.  (From the CAGE data structure)</rdfs:comment>
-    <rdfs:domain rdf:resource="Organization"/>
+    >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.</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="abstract">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/pl_status">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A capsule summary of the Document's content.</rdfs:comment>
+    >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.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="Document"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PartsList"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="file_role">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/abstract">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The purpose of a File relative to a Representation to which it is related.  Possible values are: "attachment", "content", "stylesheet", "DTD", etc.</rdfs:comment>
-    <rdfs:domain rdf:resource="FileLink"/>
+    >A capsule summary of the Document's content.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Document"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="record_mod_datetime">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/content">
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Date-time of last modification of an object's record in the repository.</rdfs:comment>
+    >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).</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="Manageable"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Document"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="name1">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/pli_id">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The first of a possible 5 segments of an Organization's name.  (From the CAGE data structure.)</rdfs:comment>
-    <rdfs:domain rdf:resource="Organization"/>
+    >An identifier for a PartsListItem within the context of its PartsList.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PartsListItem"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="originating_system">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/definition_context">
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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".</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The system from which the data in a DataSet originated.</rdfs:comment>
-    <rdfs:domain rdf:resource="DataSet"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Model"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="org_name_code">
-    <rdfs:domain rdf:resource="Organization"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/version">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Versionable"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    >A user-modifiable alphanumeric string used to identify a baseline, release, or version.  Similar to a CVS release tag.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="processor_version">
-    <rdfs:domain rdf:resource="DataSet"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/record_create_datetime">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The version of the software application that was used to produce a DataSet.</rdfs:comment>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    >Date-time of addition of an object's record to the repository.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Manageable"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="pli_component_usage">
-    <rdfs:domain rdf:resource="PartsListItem"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/email">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Actor"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The Acu instance referenced by a PartsListItem.</rdfs:comment>
-    <rdfs:range rdf:resource="Acu"/>
-  </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="part_number_generic">
+    >The primary email address of the Actor.</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The generic identifier for a Part, which in some cases is specified by a standard (e.g., JEDEC for electronic parts).</rdfs:comment>
-    <rdfs:domain rdf:resource="Part"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="phone">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/name2">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An Actor's primary phone number.</rdfs:comment>
-    <rdfs:domain rdf:resource="Actor"/>
+    >The second of a possible 5 segments of an Organization's name.  (From the CAGE data structure.)</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/is_head">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Versionable"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >A flag indicating whether a Versionable object is the most recent version.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="record_modifier">
-    <rdfs:domain rdf:resource="Manageable"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/authorization">
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Person"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >The person who authorized creation of the Data Set.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/DataSet"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/create_datetime">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Manageable"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The Identifiable entity that last modified an object's record in the repository.</rdfs:comment>
-    <rdfs:range rdf:resource="Identifiable"/>
+    >The date and time of an object's creation.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="part_number_mfr">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/name3">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The manufacturer's identifier for a Part.</rdfs:comment>
-    <rdfs:domain rdf:resource="Part"/>
+    >The third of a possible 5 segments of an Organization's name.  (From the CAGE data structure.)</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/name4">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >The fourth of a possible 5 segments of an Organization's name.  (From the CAGE data structure.)</rdfs:comment>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="id_ns">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/id">
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >An identifier that is unique within a specified namespace.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/god">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The namespace within which an id is unique.</rdfs:comment>
-    <rdfs:domain rdf:resource="Identifiable"/>
+    >A boolean indicating whether an Actor has the capability to assign any Role to itself in a PanGalactic application.</rdfs:comment>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Person"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="cm_authority">
-    <rdfs:domain rdf:resource="Versionable"/>
-    <rdfs:range rdf:resource="Identifiable"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/structural_role">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Document"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    >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.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="org_phone">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/replacement_cage">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A Person's telephone number at an Organization.</rdfs:comment>
+    >The CAGE code that a CAGE code replaces.  (From the CAGE data structure.)</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="OrgPerson"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="email">
-    <rdfs:domain rdf:resource="Actor"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/city">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The primary email address of the Actor.</rdfs:comment>
+    >An Organization's city.  (From the CAGE data structure)</rdfs:comment>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="name4">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/mod_datetime">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The fourth of a possible 5 segments of an Organization's name.  (From the CAGE data structure.)</rdfs:comment>
+    >The date and time of last modification of an object.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Manageable"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/comment">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="Organization"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Manageable"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >Information about an object that may be incidental, temporal, or contextual.  The meaning is determined by the application context.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="content_mime_type">
-    <rdfs:range rdf:resource="Mime"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/security_mask">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Securable"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.)
-</rdfs:comment>
-    <rdfs:domain rdf:resource="Document"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    >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.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="dataset_schema_id">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/description">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The name of the schema that governs the DataSet.</rdfs:comment>
-    <rdfs:domain rdf:resource="DataSet"/>
+    >A narrative about the characteristics and identifying features of an object.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="street_address2">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/part_number_generic">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Organization"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Part"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The second of a possible 2 segments of an Organization's Street Address.  (From the CAGE data structure.)</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    >The generic identifier for a Part, which in some cases is specified by a standard (e.g., JEDEC for electronic parts).</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="specification_military">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/part_number_mfr">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Part"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="Part"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The identifier of the military specification that applies to a Part.</rdfs:comment>
+    >The manufacturer's identifier for a Part.</rdfs:comment>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="media_subtype">
-    <rdfs:domain rdf:resource="Mime"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/specification">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Part"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The MIME Media Subtype per &lt;http://www.iana.org/assignments/media-types/> (or a custom subtype).</rdfs:comment>
+    >The identifier of the specification document that applies to a Part.</rdfs:comment>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="part_vendor">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/part_number_spec">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The Organization from which a PhysicalPart was procured.</rdfs:comment>
-    <rdfs:domain rdf:resource="PhysicalPart"/>
-    <rdfs:range rdf:resource="Organization"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    >The identifier for a Part given by its specification.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Part"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="iteration">
-    <rdfs:domain rdf:resource="Versionable"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/serial_number">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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).</rdfs:comment>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
+    >An identifier assigned by a manufacturer to a specific PhysicalPart.</rdfs:comment>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PhysicalPart"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="base_id">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/street_address1">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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."</rdfs:comment>
+    >The first of a possible 2 segments of an Organization's Street Address.  (From the CAGE data structure.)</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Versionable"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/frame_of_reference">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Model"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="media_type">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/part_model_purpose">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The MIME Media Type per &lt;http://www.iana.org/assignments/media-types/> (or a custom type).</rdfs:comment>
+    >The purpose of a Model of a Part.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PartModel"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Mime"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="street_address1">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/file_sequence_context">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Organization"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/FileLink"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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'.</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/is_generable">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Representation"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The first of a possible 2 segments of an Organization's Street Address.  (From the CAGE data structure.)</rdfs:comment>
+    >A flag which, if True, indicates that a Representation that can be generated -- e.g., from a Model.
+</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="specification">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/pl_type">
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PartsList"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="Part"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/is_secured">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The identifier of the specification document that applies to a Part.</rdfs:comment>
+    >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.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/FileLink"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="status_code">
-    <rdfs:domain rdf:resource="Organization"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/org_email">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The status of an Organization's record (active or inactive).  (From the CAGE data structure.)</rdfs:comment>
+    >A Person's email address at an Organization.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/OrgPerson"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="is_generable">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/org_phone">
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A flag which, if True, indicates that a Representation that can be generated -- e.g., from a Model.
-</rdfs:comment>
+    >A Person's telephone number at an Organization.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/OrgPerson"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="Representation"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="state_or_country">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/state_or_country">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Organization"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >An Organization's state (if in the U.S.) or country.  (From the CAGE data structure.)</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/name">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="replacement_cage">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/processor_version">
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The CAGE code that a CAGE code replaces.  (From the CAGE data structure.)</rdfs:comment>
+    >The version of the software application that was used to produce a DataSet.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/DataSet"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdfs:domain rdf:resource="Organization"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="publish_datetime">
-    <rdfs:domain rdf:resource="Document"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/part_number_drawing">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >Date (and time, if relevant) a Document was published.</rdfs:comment>
+    >If a Part has a 'drawing' (a type of specification), this is its identifier.</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Part"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="is_object_source">
-    <rdfs:domain rdf:resource="Representation"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/file_role">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/FileLink"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
+    >The purpose of a File relative to a Representation to which it is related.  Possible values are: "attachment", "content", "stylesheet", "DTD", etc.</rdfs:comment>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="lot_date_code">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/record_owner">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >An alphanumeric string used by a manufacturer to identify the collection (lot) of PhysicalParts of which a specific PhysicalPart was a member.</rdfs:comment>
+    >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).</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Manageable"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
+  </owl:FunctionalProperty>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/media_subtype">
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >The MIME Media Subtype per &lt;http://www.iana.org/assignments/media-types/> (or a custom subtype).</rdfs:comment>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="PhysicalPart"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Mime"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="name5">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/sic_code1">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The fifth of a possible 5 segments of an Organization's name.  (From the CAGE data structure.)</rdfs:comment>
+    >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.)</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="Organization"/>
-  </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="child">
-    <rdfs:range rdf:resource="PanGalacticObject"/>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >The child Object in a Relationship.</rdfs:comment>
-    <rdfs:domain rdf:resource="Relationship"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#InverseFunctionalProperty"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="org_email">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/name5">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="OrgPerson"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A Person's email address at an Organization.</rdfs:comment>
+    >The fifth of a possible 5 segments of an Organization's name.  (From the CAGE data structure.)</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
-  <owl:FunctionalProperty rdf:about="file_sequence">
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/parent_organization">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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).</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#int"/>
-    <rdfs:domain rdf:resource="FileLink"/>
+    >An Organization's parent Organization.  (In the CAGE data structure, this is called the 'association_cage'.)</rdfs:comment>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Organization"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
   </owl:FunctionalProperty>
-  <owl:InverseFunctionalProperty rdf:about="oid">
-    <rdfs:domain rdf:resource="Identifiable"/>
+  <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/publish_datetime">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Document"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#dateTime"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A globally unique identifier.  The canonical form for oids is a URL, but other forms are acceptable.</rdfs:comment>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    >Date (and time, if relevant) a Document was published.</rdfs:comment>
+  </owl:FunctionalProperty>
+  <owl:InverseFunctionalProperty rdf:about="http://pangalactic.us/pgef/child">
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >The child Object in a Relationship.</rdfs:comment>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Relationship"/>
   </owl:InverseFunctionalProperty>
-  <owl:InverseFunctionalProperty rdf:about="files">
+  <owl:InverseFunctionalProperty rdf:about="http://pangalactic.us/pgef/files">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Representation"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/FileLink"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >The file-like Objects (e.g., FileLinks) that constitute a Representation.</rdfs:comment>
-    <rdfs:range rdf:resource="FileLink"/>
-    <rdfs:domain rdf:resource="Representation"/>
+  </owl:InverseFunctionalProperty>
+  <owl:InverseFunctionalProperty rdf:about="http://pangalactic.us/pgef/representations">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Representable"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.).</rdfs:comment>
+  </owl:InverseFunctionalProperty>
+  <owl:InverseFunctionalProperty rdf:about="http://pangalactic.us/pgef/oid">
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >A globally unique identifier.  The canonical form for oids is a URL, but other forms are acceptable.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Identifiable"/>
+  </owl:InverseFunctionalProperty>
+  <owl:InverseFunctionalProperty rdf:about="http://pangalactic.us/pgef/parent">
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/Relationship"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >The parent Object in a Relationship.</rdfs:comment>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/PanGalacticObject"/>
   </owl:InverseFunctionalProperty>
 </rdf:RDF>
 
-<!-- Created with Protege (with OWL Plugin 2.2, Build 326)  http://protege.stanford.edu -->
+<!-- Created with Protege (with OWL Plugin 2.2, Build 341)  http://protege.stanford.edu -->

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 @@
 <?xml version="1.0"?>
 <rdf:RDF
     xmlns="http://pangalactic.us/pgef/"
-    xmlns:pgef="http://pangalactic.us/pgef/"
     xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
     xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
     xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
@@ -9,11 +8,11 @@
   xml:base="http://pangalactic.us/pgef/">
   <owl:Ontology rdf:about=""/>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofVocabulary">
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >A namespace whose names have definitions and a context or domain.</rdfs:comment>
     <rdfs:subClassOf>
       <owl:Class rdf:about="http://pangalactic.us/pgef/PmofNamespace"/>
     </rdfs:subClassOf>
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >A namespace whose names have definitions and a context or domain.</rdfs:comment>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/Representable">
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
@@ -24,59 +23,59 @@
     </rdfs:subClassOf>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/Versionable">
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >Evolvable in a set of discrete, identifiable incarnations.
 </rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofMetaObject">
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Representable"/>
+    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
     <rdfs:subClassOf>
-      <owl:Class rdf:about="http://pangalactic.us/pgef/Identifiable"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Securable"/>
     </rdfs:subClassOf>
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Versionable"/>
     <rdfs:subClassOf>
       <owl:Class rdf:about="http://pangalactic.us/pgef/Manageable"/>
     </rdfs:subClassOf>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Versionable"/>
     <rdfs:subClassOf>
-      <owl:Class rdf:about="http://pangalactic.us/pgef/Securable"/>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/Identifiable"/>
     </rdfs:subClassOf>
-    <rdfs:subClassOf rdf:resource="http://www.w3.org/2002/07/owl#Thing"/>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/Representable"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >An object that is used to define the information structures of PanGalacticObjects in a domain.</rdfs:comment>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/Identifiable">
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >Having a name or identifier (a.k.a., ID, OID, etc.).
 </rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofClass">
-    <rdfs:subClassOf>
-      <owl:Class rdf:about="http://pangalactic.us/pgef/PmofNamespace"/>
-    </rdfs:subClassOf>
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >A specification of the information structure that defines a PanGalactic domain object (i.e., a pgef:PanGalacticObject).
 </rdfs:comment>
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
+    <rdfs:subClassOf>
+      <owl:Class rdf:about="http://pangalactic.us/pgef/PmofNamespace"/>
+    </rdfs:subClassOf>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofOntology">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.</rdfs:comment>
     <rdfs:subClassOf>
       <owl:Class rdf:about="http://pangalactic.us/pgef/PmofNamespace"/>
     </rdfs:subClassOf>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.</rdfs:comment>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofNamespace">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >A named collection of names.</rdfs:comment>
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/Manageable">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >Having an owner, creator, and most recent modifier that can be identified.
 </rdfs:comment>
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofProperty">
     <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
@@ -84,10 +83,10 @@
     >A PmofProperty is similar to an rdfs:Property, an owl:DatatypeProperty or owl:ObjectProperty, or a UML class attribute.</rdfs:comment>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/Securable">
+    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >Able to have access to it made available only to a specifiable set of individuals.
 </rdfs:comment>
-    <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PanGalacticFu"/>
   </owl:Class>
   <owl:Class rdf:about="http://pangalactic.us/pgef/PmofTaxonomy">
     <rdfs:subClassOf rdf:resource="http://pangalactic.us/pgef/PmofNamespace"/>
@@ -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).</rdfs:comment>
   </owl:Class>
   <owl:DatatypeProperty rdf:about="http://pangalactic.us/pgef/known_aliases">
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >Synonyms or alternate names.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:DatatypeProperty>
   <owl:DatatypeProperty rdf:about="http://pangalactic.us/pgef/names">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >The names contained in a namespace.</rdfs:comment>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofNamespace"/>
   </owl:DatatypeProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/functional">
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >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.</rdfs:comment>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/range">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >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.</rdfs:comment>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/complete">
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofNamespace"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >A boolean value indicating whether the names Property of a namespace contains the complete set of names for the namespace.</rdfs:comment>
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofNamespace"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/definition">
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >Characteristics that uniquely identify a concept.</rdfs:comment>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/inverse_functional">
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >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.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#boolean"/>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/domain">
-    <rdfs:range rdf:resource="http://pangalactic.us/pgef/PmofClass"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >The PmofClass of which this PmofProperty represents a characteristic or relationship</rdfs:comment>
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
+    <rdfs:range rdf:resource="http://pangalactic.us/pgef/PmofClass"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#ObjectProperty"/>
+    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/display_name">
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >The identifying string to be used when the PmofProperty is to be displayed in a user interface.</rdfs:comment>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/property_type">
-    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
-    >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.).</rdfs:comment>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
     <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
+    <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
+    >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.).</rdfs:comment>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/default">
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >The default value of the PmofProperty.</rdfs:comment>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofProperty"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
   </owl:FunctionalProperty>
   <owl:FunctionalProperty rdf:about="http://pangalactic.us/pgef/abbreviation">
+    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >A shorter version of the name (could be considered a special-purpose alias).</rdfs:comment>
-    <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
     <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:FunctionalProperty>
   <owl:InverseFunctionalProperty rdf:about="http://pangalactic.us/pgef/uri">
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
-    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
-    <rdfs:domain rdf:resource="http://pangalactic.us/pgef/PmofMetaObject"/>
     <rdfs:range rdf:resource="http://www.w3.org/2001/XMLSchema#string"/>
     <rdfs:comment rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
     >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.</rdfs:comment>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/>
+    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/>
   </owl:InverseFunctionalProperty>
 </rdf:RDF>
 
-<!-- Created with Protege (with OWL Plugin 2.2, Build 341)  http://protege.stanford.edu -->
+<!-- Created with Protege (with OWL Plugin 2.2, Build 346)  http://protege.stanford.edu -->

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 <http://www.iana.org/assignments/media-types/> (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 <http://www.iana.org/assignments/media-types/> (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 '<scheme>://<authority><path>' 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