Hi,
I am reading the chapter C.2 of the tango manual (Tango object naming) and I see that the full name object names are “almost” URIs but not quite.
This is an inconvenience for Taurus, which uses RFC3986-compliant URIs which are slightly different from the tango names
According to the tango manual, the tango naming schema is:
[protocol://][host:port/]device_name[/attribute][->property][#dbase=xx]
The most problematic part (which is a common misunderstanding of URIs) is assuming that “://” is the separator between the protocol and the rest of the URI.
According to RFC3986, the separator should be “:”, and the “//” is a prefix that must be there if and only if the “authority” (i.e., [host:port]) is present in the name.
In practice this means that
tango://freak:2345/id11/rv/1
is a valid URI, while
tango://id11/rv/1
is not a valid URI (it should be tango:id11/rv/1)
Also, it means that
gizmo:20000/sr/d-ct/1
is not a valid URI because the host:port, when present, must be preceded by ‘//’ even when the protocol is omitted,. Therefore, the valid URI would be:
//gizmo:20000/sr/d-ct/1
(note that, otherwise, if one wants to support arbitrary protocol names such as in taurus, gizmo:20000/sr/d-ct/1 would be ambiguous because “gizmo” could be a protocol)
Another problematic part (although not critical for taurus) is the use of “->” for the properties, since “>” is a reserved character in URIs.
In summary, IMHO Tango should consider changing to (or at least simultaneously supporting) the following naming scheme:
[protocol:][//host:port/]device_name[/attribute][->property][#dbase=xx]
(or, if you want to be more strict, replace the “->” property separator by something else, for example “:”)
[protocol:][//host:port/]device_name[/attribute][:property][#dbase=xx]
In terms of implementation, RFC3986 Appendix B provides a useful regexp to match proper URIs. Also, in Taurus4, we implemented regexp-based Tango URI validators which handle things such as device names given as device alias, etc.
What do you think?
Any chance of this being addressed for tango10?
Cheers,
Carlos