> On 25 Aug 2015, at 14:48, Martin Bjorklund <[email protected]> wrote:
> 
> Ladislav Lhotka <[email protected]> wrote:
>> 
>>> On 25 Aug 2015, at 14:01, Martin Bjorklund <[email protected]> wrote:
>>> 
>>> Hi,
>>> 
>>> I think this could work (thanks Robert; maybe this is what you
>>> meant!):
>>> 
>>> container zones {
>>>   list zone {
>>>     ...
>>>     list rrset {
>>>       ...
>>>       leaf type {
>>>         type identityref { ... }
>>>       }
>>>       list rdata {
>>>         key id;
>>>         ...
>>>         choice type-specific-params {
>>>           mandatory true;
>>>           // to be augmented with type-specific nodes
>>>         }
>>>       }
>>>     }
>>>   }
>>> }
>>> 
>>> And then in another module:
>>> 
>>> augment "/dnsz:zones/dnsz:zone/dnsz:rrset/dnsz:rdata"
>>>       + "/type-specific-parameters" {
>>>   when "derived-from-or-self(../dnsz:type,'iana-dns-parameters',"
>>>      + "'TLSA')";
>>> 
>>>   leaf certificate-usage {
>>>     mandatory true;
>>>     ...
>>>   }
>>> }
>>> 
>>> The empty mandatory choice formally tells the client that additional
>>> cases are expected.
>>> 
>>> (If the empty choice looks fishy, it is probably often possible to
>>> define at least one case inline...)
>>> 
>>> This pattern is nice to the client, since there is no way an
>>> additional augmenting module can break a working client.
>> 
>> Yes, I just tried very similar test modules with pyang, and DSDL seems
>> to validate instance data as expected: at least one case has to be
>> present, so no valid instance exists for the “abstract” module alone.
>> 
>> I think it is a better approach to subclassing than augment+when.
> 
> It is augemnt-choice+when.

when isn’t strictly necessary here because different cases cannot appear 
together. The schema is much cleaner, which is also immediately visible on the 
tree output.

> 
> I agree it solves the "subclassing" use case, but it has its
> limitations.  For example, you cannot have two separate modules
> augment with the same type.  But then, in such a case you can
> still to the old augment-p-container+when.

I am not sure I understand exactly what you mean but perhaps the second 
augmenting module could then augment the case node in the first augment. 

Lada

> 
> 
> /martin

--
Ladislav Lhotka, CZ.NIC Labs
PGP Key ID: E74E8C0C




_______________________________________________
netmod mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/netmod

Reply via email to