Closed cjmyers closed 3 years ago
My preference is for option 3. This is the cleanest, and it makes it simply to update the namespace of objects, when for example, they are copied into a repository like SynBioHub.
The problem that I have with option 1 is that special cases make validation and other library functions more complicated and more error prone. The problem that I have with option 2 is that it requires fetching the Namespace object to learn the prefix of an object, once again making validation and other library functions more complicated. The downside of option 3 is that we would no longer be able to add attributes like descriptions to Namespace objects, but I suspect that this was not likely to be a commonly used feature and does not outweigh, in my opinion the problems it raises.
I've been holding off on implementing the draft Namespace change in pySBOL3 because it feels overly complicated. I like option 3 because it feels lightweight and makes validation easier.
Happy with 1 or 3 - don't like 2 much as it would introduce another unnecessary URI.
I was the one who proposed option 2, and am definitely anti option 1 (I don't think anybody likes option 1).
I think I can be OK with option 3 as well. My reluctance comes from the fact that I fear we might find ourselves needing an object to hang other properties on at some point.
Do you think we need an SEP for this? We can do it, but I expect that we will not get much of a voter turnout, and I think all that have an issue with this have replied to this thread or participated in the discussion this morning.
We need to have a vote on SEP 049 anyway, so if this can move quickly they can be bundled together.
Ok, I've created SEP 050.
This has been merged in except for the validation rules, which are still pending in #424
URIs in SBOL3 are expected to be of the form: \<namespace>/\<local>/\<displayId> with \<namespace> and \<displayId> being required. This is problematic for Namespace objects that are specified to have the URI, which is currently not allowed. There are three possible solutions to this problem:
1) Add a special case to allow Namespace objects to not have a \<displayId>.
2) Add a new attribute \<prefix> to Namespace objects, which is the \<namespace>, and then have the Namespace objects have URIs that meet the required form, which would be \<prefix>/\<local>/\<displayId>.
3) Remove the Namespace object, and use the \<hasNamespace> property simply be the \<namespace> part of the URI.