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]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
