[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: namespaces in subtree filtering



Phil Shafer <phil@juniper.net> wrote:
> Martin Bjorklund writes:
> >Andy noted at the meeting that subtree filtering can't be used to
> >retreive elements from mulitple namespaces.
> >
> >The text from rfc4741, section 6.2.1 says:
> >
> >   If namespaces are used, then the filter output will only include
> >   elements from the specified namespace.  A namespace is considered to
> >   match (for filter purposes) if the content of the 'xmlns' attributes
> >   are the same in the filter and the underlying data model.
> >
> >This is somewhat difficult to interpret.  What exactly does "the
> >'xmlns' attributes" mean?  Note the plural.
> 
> I interpret this as an element by element rule, meaning that
> the filter will only match elements which match the name and
> namespace of element in the filter.  This rule is applied
> recusively, so that if your data looks like:
> 
>   <a:a>
>     <b:b>
>       <c:c>4</c:c>
>     </b:b>
>   </a:a>
> 
> and you use the filter:
> 
>   <a:a>
>     <b:b/>
>   </b:b>
> 
> your output would include <c:c>. 

There's an example in 6.2.1 which says:

   <filter type="subtree">
     <top xmlns="http://example.com/schema/1.2/config"/>
   </filter>

   In this example, the <top> element is a selection node, and only this
   node and any child nodes (from the underlying data model) in the
   'http://example.com/schema/1.2/config' namespace will be included in
   the filter output.

Which is not compatible with what you say above.


> >Suppose we have this in the database:
> >
> >   <if:interfaces xmlns:if="http://example.com/interface";>
> >     <if:interface>
> >       <if:ifIndex>1</if:ifIndex>
> >       <if:ifType>ds0</if:ifType>
> >       <ds0:circuitIdentifier xmlns:ds0="http://example.com/ds0";>foo</ds0:circuitIdentif
> >ier>
> >     </if:interface>
> >   </if:interfaces>
> > 
> >Accordning to the example in 6.2.1, the following filter:
> >
> >   <get>
> >     <filter>
> >       <if:interfaces xmlns:if="http://example.com/interface"/>
> >     </filter>
> >   </get>
> >
> >would return
> >
> >   <if:interfaces xmlns:if="http://example.com/interface";>
> >     <if:interface>
> >       <if:ifIndex>1</if:ifIndex>
> >       <if:ifType>ds0</if:ifType>
> >     </if:interface>
> >   </if:interfaces>
> 
> I would rather see all of <if:interface> emitted. 

So would I.  My question is how the specs should be interpreted.  And
a follow-up question is if the specs should be changed in the future.

> >What about this filter:
> >
> >   <get>
> >     <filter>
> >       <if:interfaces xmlns:if="http://example.com/interface";
> >                      xmlns:ds0="http://example.com/ds0"/>
> >     </filter>
> >   </get>
> >
> >Here we have two xmlns attributes.  Would we get the ds0 elements in
> >this case?
> 
> Remember that the use of xmlns is only an encoding issue.  The XML
> information model defines the element as belonging to a namespace,
> and the prefix (and the xmlns attribute that defines the prefix
> mapping) is an encoding issue, not a semantic one.

Yes I know.  That's what I tried to say in my email.

> This means that an unused prefix is meaningless, so trying to
> use 'xmlns:ds0' like this won't work.



/martin

--
to unsubscribe send a message to netconf-request@ops.ietf.org with
the word 'unsubscribe' in a single line as the message text body.
archive: <http://ops.ietf.org/lists/netconf/>