Design Discussion

The choice of URI as the identifier was made very early in the design process, and has never really been questioned. It is based on the following characteristics of URIs:

We see no real need for support for the FTP protocol, as this is mostly intended for large file transfer, which is not our case. Perhaps it could be interesting to use for saving components.

The urn:path: protocol is used in order to be able to specify the location of an object without having to specify the method of access, i.e., data format and physical location. Such a protocol is absolutely necessary as seen in the discussion in the section called Functional requirements.

The table resolver mechanism must be replaced, as the idea of everyone having a complete table of paths is absurd. The idea is to replace the table mechanism with, e.g., an LDAP resolver, or even the DNS extension used in the Path URN specification [pathurnspec]. Such a resolver would, for a path, return a base URI and the data format to use, just as the table does today. This resolving represents a considerable overhead if it has to be done for each component downloaded (cf. DNS when browsing the web), which is why only paths are queried, not individual identifiers. This allows us, namely, to cache the resolved paths.

In short, we believe that we are on the right track using Path URNs, even though there are decisions left to take. There has gone a lot of thinking into the design, and we are satisfied with the resulting system.

In fact, we did not originally use Path URNs, but a home brewn protocol. After having experimented with this protocol and enhanced it to fulfill our needs, we recognized that we had mostly redesigned the Path URN protocol. So we decided to switch to this possible future standard.

Note that relative URIs in concept maps and neurons are supported.