Andy Bierman <[email protected]> wrote:
> On Wed, Oct 10, 2018 at 11:39 PM, Martin Bjorklund <[email protected]> wrote:
> 
> > Andy Bierman <[email protected]> wrote:
> > > On Wed, Oct 10, 2018 at 6:59 PM, Reshad Rahman (rrahman) <
> > [email protected]>
> > > wrote:
> > >
> > > > On 2018-10-10, 9:59 AM, "netmod on behalf of Martin Bjorklund" <
> > > > [email protected] on behalf of [email protected]> wrote:
> > > >
> > > >     Ladislav Lhotka <[email protected]> wrote:
> > > >     > Martin Bjorklund <[email protected]> writes:
> > > >     >
> > > >     > > Hi,
> > > >     > >
> > > >     > > While reviewing restconf-notif, I saw this example:
> > > >     > >
> > > >     > >    {
> > > >     > >       "ietf-subscribed-notifications:input": {
> > > >     > >          "stream": "NETCONF",
> > > >     > >          "stream-xpath-filter": "/ds:foo/",
> > > >     > >          "dscp": "10"
> > > >     > >       }
> > > >     > >    }
> > > >     > >
> > > >     > > Note the "stream-xpath-filter".  It has a prefix in the XPath
> > > > string.
> > > >     > > How are prefixes declared when JSON is used?
> > > >     > >
> > > >     > > The leaf "stream-xpath-filter" says:
> > > >     > >
> > > >     > >               o  The set of namespace declarations are those in
> > > > scope on
> > > >     > >                  the 'stream-xpath-filter' leaf element.
> > > >     > >
> > > >     > > (I think I provided that text...)
> > > >     > >
> > > >     > > This assumes that the encoding is XML, or at leas that the
> > encoding
> > > >     > > can somehow transfer namespace declarations.
> > > >     >
> > > >     > It can't. There are two options:
> > > >     >
> > > >     > 1. have different representations of this value in XML and JSON,
> > > >     >    analogically to instance indentifiers (sec. 6.11 in RFC 7951).
> > > >     >
> > > >     > 2. use a module name rather than a prefix in XML, too.
> > > >     >
> > > >     > I would suggest #2.
> > > > <RR> But that means making non-backwards compatible change to the XML
> > > > representation?
> > > >
> > >
> > > Not really. It means NETMOD WG would be creating its own special variant
> > of
> > > XPath.
> >
> > Not at all.  What I propose is perfectly fine, legal XPath 1.0.
> >
> > XPath 1.0 says that an XPath expression is evaluated in a context.
> > One item in the context is a set of mappings from <prefix> to <uri>,
> > where <prefix> is used to lookup prefixes used in the XPath
> > expression, e.g. in "/foo:interfaces" "foo" is the prefix.
> >
> > It is perfectly fine to say that the prefix mapping set is this:
> >
> >    "ietf-interfaces" -> "urn:ietf:params:xml:ns:yang:ietf-interfaces"
> >    "ietf-ip"         -> "urn:ietf:params:xml:ns:yang:ietf-ip"
> >
> > and use that to evaluate the expression
> >
> >   /ietf-interfaces:interfaces/ietf-interfaces:interface/ietf-ip/ipv4
> >
> >
> >
> 
> The XPath expression is normally parsed within an XML instance document.
> There are "xmlns" attributes present that map the prefix to a namespace URI.
> These mappings will not be present in the JSON at all.
> 
> A custom XPath implementation is required to magically identify the prefix
> as a module name and magically find the namespace URI for the module
> name.

I disagree.  You need an XPath implementation + custom code to set up
the environment.

There is no standard XPath implementation that can just take an XML
instance document + YANG module and figure out what to do.  Custom
code is needed to connect things together.  This proposal doesn't
change this.


/martin


> A normal XPath implementation will not find any namespace mapping for the
> prefixes.
> 
> An XPath expression has no concept of the "current module" inherited from
> the parent
> like the JSON encoding. This is problematic for predicates
> 
>    /ietf-interfaces:interfaces/interface[name='eth0']
> 
> XPath says the missing prefixes for 'interface' and 'name' are simply
> missing (no namespace).
> The JSON encoding says "ietf-interfaces" is used for 'interfaces'. and
> 'interface'.
> There is no specification for the 'name' node inside a predicate.
> 
> So you must mean the full module name will be used at every node:
> 
>  
> /ietf-interfaces:interfaces/ietf-interfaces:interface[ietf-interfaces:name='eth0']
> 
> 
> 
> >
> > /martin
> >
> >
> Andy
> 
> 
> >
> > >
> > >
> > > >     Hmm, so you mean change the leaf "stream-xpath-filter" to say:
> > > >
> > > >              o  The set of namespace declarations has one member for
> > each
> > > >                 YANG module supported by the server.  This member maps
> > > >                 from the YANG module name to the YANG module namespace.
> > > >
> > > >                 This means that in the XPath expression, the module
> > name
> > > >                 serves as the prefix.
> > > >
> > > >     .... and then also give an example of this.
> > > >
> > > >     This is probably what we need to do in all places where
> > yang:xpath1.0
> > > >     is used, going forward.  Maybe even define a new type
> > > >     yang:xpath1.0-2 (name?) with the set of namespace declarations
> > > >     built-in.
> > > >
> > >
> > >
> > > We should avoid making off-the-shelf implementations of standards like
> > > XPath unusable.
> > > At the very least this should be only available if the server supports it
> > > (with a capability URI)
> > >
> > >
> > >
> > > > <RR> So we need an update to RFC7951?
> > > >
> > > > Regards,
> > > > Reshad.
> > > >
> > > >
> > >
> > > Andy
> > >
> > >
> > > >
> > > >     /martin
> > > >
> > > >
> > > >
> > > >
> > > >
> > > >     >
> > > >     > Lada
> > > >     >
> > > >     > >
> > > >     > > How is this supposed to work with JSON?
> > > >     > >
> > > >     > >
> > > >     > > /martin
> > > >     > >
> > > >     > > _______________________________________________
> > > >     > > netmod mailing list
> > > >     > > [email protected]
> > > >     > > https://www.ietf.org/mailman/listinfo/netmod
> > > >     >
> > > >     > --
> > > >     > Ladislav Lhotka
> > > >     > Head, CZ.NIC Labs
> > > >     > PGP Key ID: 0xB8F92B08A9F76C67
> > > >     >
> > > >
> > > >     _______________________________________________
> > > >     netmod mailing list
> > > >     [email protected]
> > > >     https://www.ietf.org/mailman/listinfo/netmod
> > > >
> > > >
> > > > _______________________________________________
> > > > netmod mailing list
> > > > [email protected]
> > > > https://www.ietf.org/mailman/listinfo/netmod
> > > >
> >

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

Reply via email to