[Dev] Parcel namespaces and the schema API

Lisa Dusseault lisa at osafoundation.org
Tue May 10 18:04:08 PDT 2005


Third-party parcels shouldn't be in a namespace beginning with 
"http://osafoundation.org/".  There are few rules and conventions about 
what goes into namespaces but that's one of them -- only the 
organization responsible for the domain in the URI (if there is a 
domain part) should create a new namespace with that domain or new 
elements in such a namespace, or that organization must coordinate the 
creation of namespaces or elements in those namespaces.  Since 
namespaces exist to disambiguate XML names (QNames) and avoid 
collisions, making people re-use a namespace we've already defined 
weakens that at least conceptually.

Do Python package paths have uniqueness requirements?  E.g. is it 
impossible to find a package called /mypackage in more than one 
location?

Lisa

On May 10, 2005, at 5:26 PM, Phillip J. Eby wrote:

> While working today on integrating the fledgling Python Schema API 
> with the parcel loading system, I discovered that there are three 
> parcels that do not conform to the current convention for specifying 
> parcel namespaces:
>
>     FAIL: core http://osafoundation.org/parcels/core
>       OK: osaf.contentmodel
>       OK: osaf.contentmodel.mail
>       OK: osaf.contentmodel.calendar
>       OK: osaf.contentmodel.contacts
>       OK: osaf.contentmodel.tasks
>       OK: osaf.framework.sharing
>       OK: osaf.framework.blocks
>       OK: osaf.framework.wakeup
>     FAIL: examples.zaobao.schema 
> http://osafoundation.org/examples/zaobao/schema
>       OK: osaf.framework.blocks.detail
>       OK: osaf.views.main
>       OK: osaf.framework.blocks.calendar
>       OK: osaf.framework.attributeEditors
>       OK: osaf.framework.webserver
>       OK: osaf.framework.webserver.servlets.blog
>       OK: osaf.framework.webserver.servlets.photos
>       OK: osaf.views.repositoryviewer
>       OK: osaf.views.demo
>       OK: osaf.examples.zaobao.blocks
>       OK: osaf.current
>     FAIL: osaf.framework.webserver.servers 
> http://osafoundation.org/parcels/osaf/framework/webserver/servers
>       OK: osaf.mail
>
> Of these, the problem with 'core' and 
> 'osaf/framework/webserver/servers' is simply that they lack an 
> __init__.py, making them not parcels.  The problem with ZaoBao is that 
> it creates a custom namespace, for no apparent reason.  I'm guessing 
> that it's probably either some sort of legacy code issue, or else it 
> was intended as an example for other parcel developers not to use a 
> namespace URI under NS_ROOT ("http://osafoundation.org/parcels").
>
> As a practical matter, however, using a custom namespace URI doesn't 
> provide a parcel developer with any real benefit, versus simply 
> following the existing convention.  This is because parcels' top-level 
> directory name is already required to be unique -- both because the 
> repository paths are based on directory names, and because Python 
> package namespaces don't overlap the way Java namespace packages do.  
> I can't create a parcel whose top-level directory name is 'osaf', no 
> matter what XML namespace I use!  So, it would seem that eliminating 
> the extra step of defining a parcel namespace would help to further 
> reduce parcel development overhead.
>
> Therefore, I propose to formalize the existing state of affairs by 
> making a parcel's namespace equal to 
> "http://osafoundation.org/parcels/path/to/parcel", such that changing 
> 'path/to/parcel' to 'path.to.parcel' will allow you to import the 
> Python package or module that corresponds to the parcel.  This means 
> two minor changes to the existing setup:
>
>   * The '<namespace>' tag in parcel.xml would be deprecated and phased 
> out
>
>   * Parcel directories would be required to contain an __init__.py, or 
> else a module of the correct name must exist in the parent parcel 
> (e.g. the presence of 'blocks.py' in 'examples/zaobao' means that no 
> 'examples/zaobao/blocks/__init__.py' is needed.)
>
> Per discussion with Morgen, I am going to go ahead and begin phasing 
> in the uncontroversial parts of this proposal.  First, I'm adding 
> empty '__init__.py' files where needed, and making ZaoBao's namespaces 
> conform to the convention used by all other parcels.  Second, I'll add 
> default namespace support to application.Parcel so that the remaining 
> two uses of '<namespace>' can also be removed.  None of these changes 
> should affect existing code or parcels in any way, but will enable 
> integration of the Schema API with the parcel loader.
>
> At that point, if '<namespace>' can be given an adequate deprecation 
> period for third parties to update any parcels currently using it, it 
> should be possible to eliminate one of the parcel loader's three 
> passes over parcel.xml files, which should result in some degree of 
> performance improvement for parcel loading.  Currently, the 
> '__scanParcels()' pass is only needed because of the need to process 
> '<namespace>'; Morgen and I believe that the processing of 
> '<namespaceMap>' can then be moved to the '__loadParcel()' pass, 
> thereby eliminating one full round of XML parsing for each parcel.xml 
> file.
>
> Removing <namespace> is of course the potentially controversial bit, 
> so if you know of any reasons why it should remain, or have any input 
> as to what the deprecation period before its removal should be, please 
> respond.  Thanks!
>
> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
>
> Open Source Applications Foundation "Dev" mailing list
> http://lists.osafoundation.org/mailman/listinfo/dev



More information about the Dev mailing list