Re: [JXPath] Registering namespace prefixes - never mind

"Dmitri Plotnikov" <[email protected]>
Newsgroups gmane.comp.jakarta.commons.user,gmane.text.xml.commons.devel
Message-ID <009201c3dfc8$939d7910$0500a8c0@plotnix2500>
I understand now.  Let me read a little more before I reintroduce this
feature.
In XPath 2 there is this notion of in-scope-namespaces.  Are these two
related?

- Dmitri

----- Original Message ----- 
From: "Sudhir Rao" <[email protected]>
To: "Dmitri Plotnikov" <[email protected]>
Cc: <[email protected]>; "Jakarta Commons Developers List"
<[email protected]>; "Jakarta Commons Users List"
<[email protected]>
Sent: Tuesday, January 20, 2004 5:45 PM
Subject: Re: [JXPath] Registering namespace prefixes - never mind


> Dmitri,
>
>        I was looking at it mainly for xml documents. I am not sure how
> this maps out to Java objects (and as I mentioned earlier as I don't
> have a very good idea in that respect). Here is what I feel the issue is
> with xml documents (Chap pointed this out briefly earlier).
>     I have a fairly simple xml document,
>         ===================================
>         |<?xml version="1.0"?>
>     <bk:book xmlns:bk='urn:loc.gov:books'
>          xmlns:isbn='urn:ISBN:0-395-36341-6'>
>         <bk:title>Cheaper by the Dozen</bk:title>
>         <isbn:number>1568491379</isbn:number>
>     </bk:book>
>     |===================================
>
> |    To access say the isbn number I would use the following xpath in my
> code.
>           /bk:book/isbn:number
>     Note that I need to specify the prefixes in my xpath or it won't work.
>
>     Now if I had instead the following document which is identical for
> all practical purposes with the earlier xml except that the prefixes are
> different, it is my opinion that my code still ought to work.
> |        ===================================
>         |<?xml version="1.0"?>
>     <!-- both namespace prefixes are available throughout -->
>     <ck:book xmlns:ck='urn:loc.gov:books'
>          xmlns:idn='urn:ISBN:0-395-36341-6'>
>         <ck:title>Cheaper by the Dozen</ck:title>
>         <idn:number>1568491379</idn:number>
>     </ck:book>
>     |===================================
>
> |    But it doesn't. And that is because the prefixes I am specifying in
> my xpaths are not the same as what is used in the document. I need the
> xpaths being used to stay consistent and I ought to be able to specify
> the namespace mappings. So that when I say "I want to access the xpath
> /||bk:book/isbn:number", I can specify exactly what I mean by bk and
> isbn in this xpath.
>
>     There might be a easier, cleaner way using jxpath, but I am not
> aware of it at this point. If you could specify alternatives that would
> be great. For my purposes I think Xalan might be a better fit for now.
>
> Regards
> Sudhir
> ||
>
> |
> Dmitri Plotnikov wrote:
>
> >Chap, Sudhir,
> >
> >After some profound discussions on the [email protected] mailing
list,
> >I decided to roll back this new feature.  I need to better understand the
> >use case before I introduce this new API.
> >
> >Is the functionality you are referring to intended for use with Java
> >objects?  What is the meaning of a namespace URI in the context of Java
> >objects?  Please, give me as much information about this use case as
> >possible.
> >
> >- Dmiri
> >
> >----- Original Message ----- 
> >From: "Dmitri Plotnikov" <[email protected]>
> >To: <[email protected]>; "Jakarta Commons Users List"
> ><[email protected]>; ""Sudhir Rao"" <[email protected]>
> >Cc: "Jakarta Commons Developers List" <[email protected]>
> >Sent: Saturday, January 17, 2004 8:52 PM
> >Subject: Re: [JXPath] Registering namespace prefixes
> >
> >
> >
> >
> >>Chap,
> >>
> >>I added registration of external namespaces to JXPath. My solution is a
> >>little different from the one proposed by Sudhir.  The main difference
in
> >>the API is that instead of calling registerNamespace directly on
> >>JXPathContext, you call it indirectly like this:
> >>
> >>   JXPathContext context = JXPathContext.newContext(document);
> >>   NamespaceManager nsm = context.getNamespaceManager();
> >>   nsm.registerNamespace ("prefix", "http://www.example.com/ns/sample");
> >>
> >>Take a look at the NamespaceManager interface - you can supply your own
> >>implementation, which could perform very flexible customizations of
> >>namespace lookup.
> >>
> >>Please note that external namespaces are supported with DOM but not
JDOM,
> >>because JDOM B9 at this point requires that all namespaces be explicitly
> >>declared in the XML file itself.
> >>
> >>Chap, Sudhir, if you guys get a chance to try out the new APIs to see if
> >>they address your needs, I will highly appreciate it.
> >>
> >>Thanks,
> >>
> >>- Dmitri
> >>
> >>
> >>----- Original Message ----- 
> >>From: "Sudhir Rao" <[email protected]>
> >>To: <[email protected]>
> >>Cc: <[email protected]>
> >>Sent: Saturday, December 06, 2003 6:41 PM
> >>Subject: Re: [JXPath] Registering namespace prefixes
> >>
> >>
> >>
> >>
> >>>I made some local modifications for this. I am not sure if adding  that
> >>>registerNamespace is the right way to do it, as I am not very familiar
> >>>with the codebase. The changes I did locally were to
> >>>a) Modify org.apache.commons.jxpath.ri.QName.java to include the
> >>>namespace prefix (similar to the one in Apache Axis). Had to tweak it a
> >>>bit to consider the prefix as the namespaceURI however to keep it
> >>>compatible with existing code.
> >>>b) Maintain a HashMap of prefixes to namespace URIs in the TreeCompiler
> >>>class.
> >>>c) Modify the TreeCompiler.qName(..) to populate the namespace URI in
> >>>the QName instance returned.
> >>>d) Add the registerNamespace method to JXPathContextReferenceImpl and
> >>>JXPathContext which in turn call a registerNamespace in Compiler class.
> >>>
> >>>I can send across my changes if someone would like to look into it.
> >>>
> >>>-Sudhir
> >>>
> >>>
> >>>
> >>>>From: Prasad A. Chodavarapu <[email protected]>
> >>>>Subject: [JXPath] Registering namespace prefixes
> >>>>Date: Wed, 3 Dec 2003 12:32:23 -0500
> >>>>Content-Type: text/plain;
> >>>>charset="iso-8859-1"
> >>>>
> >>>>
> >>>>
> >>>>Hi All:
> >>>>
> >>>>Is there a way of registering a namespace prefix upfront in a
> >>>>JXPathContext so that I can then use that prefix in xpath expressions?
> >>>>Here's what I'm looking for, in pseudo-code.
> >>>>
> >>>>JXPathContext domContext = JXPathContext.newContext(document);
> >>>>domContext.registerNamespace
> >>>> (http://www.example.com/ns/sample, "prefix");
> >>>>domContext.getValue("prefix:a/prefix:b");
> >>>>
> >>>>Thanks
> >>>>chap
> >>>>
> >>>>
> >>---------------------------------------------------------------------
> >>To unsubscribe, e-mail: [email protected]
> >>For additional commands, e-mail: [email protected]
> >>
> >>
> >>
> >>
> >>
> >
> >
> >
> >
> >
>
>
>
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.