[Nml-wg] id/idRef

Freek Dijkstra Freek.Dijkstra at sara.nl
Fri Jul 20 08:24:10 EDT 2012


Hi Aaron and Roman,

Thanks for your input on id/idRef.

>> On 18-07-2012 16:11, Aaron Brown wrote:
>>
>>> I think the difference is in saying "i've created a new element right
>>> here with id X" vs. "i'm referencing an element with id X that is
>>> defined elsewhere". I think this is where it dovetails with inheritence.
>>> It's basically letting people know "i'm defining 0 or more attributes
>>> about this element, but you need to go elsewhere to find the rest of the
>>> attributes".
[...]
> Instead of saying "i'm authoritative" or "i'm not authoritative". How
> about making inheritance a first-order relationship? e.g.
> 
> <nml:BidirectionalLink id="urn:ogf:network:example.net:2012:mylink">
>  <nml:Link><nml:Relation type="inherits">urn:ogf:network:example.net:2012:mylink-a-to-b</Relation></nml:Link>
>  <nml:Link><nml:Relation type="inherits">urn:ogf:network:example.net:2012:mylink-b-to-a</Relation></nml:Link>
> </nml:BidirectionalLink>
> <nml:Link id="urn:ogf:network:example.net:2012:mylink-a-to-b">
>  <nml:name>A to B</nml:name>
> </nml:Link>
> <nml:Link id="urn:ogf:network:example.net:2012:mylink-b-to-a">
>  <nml:name>B to A</nml:name>
> </nml:Link>
> 
> The idRef thing could get used as a shortcut if we wanted to simplify it
> in the XML-case.

This seems a useful definition and concept, although I propose two
changes to it.

1. I prefer Roman's name "reference" over my "non-authoritative" or
Aaron's "inherits". At least, I think that word is the best match with
Aaron's explanation above.

2. One of RDFs limitations rose its ugly head with the above syntax,
since it's not possible to add an attribute (like "inherits" here) to a
relation in RDF. But since the "inherits" really applies to the Link,
not to the relation, this can be remedied by the following syntax:

<nml:Link id="urn:ogf:network:example.net:2012:mylink-a-to-b">
  <nml:property name="isReference">true</nml:name>
</nml:Link>

which is equivalent to:

<nml:Link idRef="urn:ogf:network:example.net:2012:mylink-a-to-b" />


If this seems OK to both of you, I'll make a formal proposal.

Note that the "isReference" in this proposal is only use to signal that
a the object is defined _in another document_. So for references within
a document, "id" should be used. E.g.:

<nml:BidirectionalLink id="urn:ogf:network:example.net:2012:mylink">
  <nml:Link id="urn:ogf:network:example.net:2012:mylink-a-to-b" />
  <nml:Link id="urn:ogf:network:example.net:2012:mylink-b-to-a" />
</nml:BidirectionalLink>
<nml:Link id="urn:ogf:network:example.net:2012:mylink-a-to-b">
  <nml:name>A to B</nml:name>
</nml:Link>
<nml:Link id="urn:ogf:network:example.net:2012:mylink-b-to-a">
  <nml:name>B to A</nml:name>
</nml:Link>


Regards,
Freek

(PS: Maybe the isReference in nml:property should be a full URI, just as
in a nml:Relation)



More information about the nml-wg mailing list