You are viewing a plain text version of this content. The canonical link for it is here.
Posted to xindice-dev@xml.apache.org by Ke...@bredex.com on 2002/01/22 18:27:59 UTC
CrossPost: Identified Bug: XPathQueryService returns invalid id [was Re: Problem
removing ]
Kimbro, I found the problem.....
The Resources in the ResourceSet obtained from the XPathQueryService have
an id that is null...therefore, trying to remove the resource as obtained
from the ResourceSet fails. This is the same code as before, with the
enhancement of the System.out.println in the testQuery() to show the
resource.getId().
Here is the output:
Running test: testQuery
1. [null]
--------------------------
<?xml version="1.0"?>
<highKey uniqueIdentifier="foo.com" value="1011719774551" xmlns:src="
http://www.dbxml.org/Query" src:col="/db/root/ocs" src:key
="6701000a459e2954000000eb8f326dfa" />
-Kevin Ross
============================================
<snip>
============================================
/**
* Search the database.
*/
public void testQuery() throws XMLDBException {
String xpathQuery = "/highKey[@uniqueIdentifier = 'foo.com']";
ResourceSet resourceSet = getResourceSet(xpathQuery);
ResourceIterator resourceSetIterator = resourceSet.getIterator();
int i = 0;
while (resourceSetIterator.hasMoreResources()) {
Resource resource = resourceSetIterator.nextResource();
System.out.println((++i) + ". [" + resource.getId() + "]
\n--------------------------\n" + (String) resource.getContent() + "\n\n");
}
}
public ResourceSet getResourceSet(Collection collection, String
xpathQuery) throws XMLDBException {
XPathQueryService xpathQueryService = (XPathQueryService)
collection.getService("XPathQueryService", "1.0");
return xpathQueryService.query(xpathQuery);
}
============================================
<snip>
============================================
Kimbro Staken
<kstaken@dbxml To: xindice-users@xml.apache.org
group.com> cc:
Subject: Re: Problem removing
01/21/2002
02:36 PM
Please respond
to
xindice-users
It looks right, what's the problem you're seeing?
On Monday, January 21, 2002, at 12:22 PM, KevinRoss@bredex.com wrote:
>
> Hello all,
>
> I am attempting to create a simplified test case to recreate the problems
> I
> am having with OutOfMemoryException, but I am having problem with
> collection.remove(Resource) in my test case testRemoveAll().
>
> Any ideas?
>
>
> Kevin Ross
>
>
>
Kimbro Staken
XML Database Software, Consulting and Writing
http://www.xmldatabases.org/
Re: CrossPost: Identified Bug: XPathQueryService returns invalid id [was Re: Problem removing ]
Posted by Kimbro Staken <ks...@dbxmlgroup.com>.
Ahh, right, sorry. Don't use getId(), use getDocumentId(). The result of a
query is not actually the document, it is the document element of the
document. The document element doesn't have an id.
You're right this is an issue because the Resource returned from the query
can't be directly deleted. This was recently brought up the XML:DB API
list too. I'm thinking resources need to be a little smarter then they are
currently. The problem is that resources returned from a query always
represent a node some place in a document, while those retrieved from a
collection represent the document it self. This makes the resources
retrieved from the query second class citizens because you can't directly
delete them or modify them.
It seems that a resource should be smarter, such that it always knows how
to modify or delete it self. For instance if you run a query that returns
nodes deep in a document and delete all the results then those nodes
should be removed from the document but the document it self still exists.
The same with modifications. So regardless of where you get a resource,
and what it represents you can always perform any resource operations on
it and have it be consistent.
Does this make sense? What are the reasons not to do this?
On the XML:DB list it was proposed that queries shouldn't return resources
at all. I'm not sure that is necessary, but we do need to better detail
the behavior of query results.
On Tuesday, January 22, 2002, at 10:27 AM, Kevin.Ross@bredex.com wrote:
>
>
> Kimbro, I found the problem.....
>
> The Resources in the ResourceSet obtained from the XPathQueryService have
> an id that is null...therefore, trying to remove the resource as obtained
> from the ResourceSet fails. This is the same code as before, with the
> enhancement of the System.out.println in the testQuery() to show the
> resource.getId().
>
> Here is the output:
>
> Running test: testQuery
> 1. [null]
> --------------------------
> <?xml version="1.0"?>
> <highKey uniqueIdentifier="foo.com" value="1011719774551" xmlns:src="
> http://www.dbxml.org/Query" src:col="/db/root/ocs" src:key
> ="6701000a459e2954000000eb8f326dfa" />
>
>
> -Kevin Ross
>
>
>
> ============================================
> <snip>
> ============================================
>
> /**
> * Search the database.
> */
> public void testQuery() throws XMLDBException {
>
> String xpathQuery = "/highKey[@uniqueIdentifier = 'foo.com']";
> ResourceSet resourceSet = getResourceSet(xpathQuery);
> ResourceIterator resourceSetIterator = resourceSet.getIterator();
>
> int i = 0;
> while (resourceSetIterator.hasMoreResources()) {
> Resource resource = resourceSetIterator.nextResource();
> System.out.println((++i) + ". [" + resource.getId() + "]
> \n--------------------------\n" + (String) resource.getContent() + "\n\n"
> );
> }
> }
>
> public ResourceSet getResourceSet(Collection collection, String
> xpathQuery) throws XMLDBException {
>
> XPathQueryService xpathQueryService = (XPathQueryService)
> collection.getService("XPathQueryService", "1.0");
> return xpathQueryService.query(xpathQuery);
> }
>
> ============================================
> <snip>
> ============================================
>
>
>
>
>
> Kimbro Staken
> <kstaken@dbxml To: xindice-
> users@xml.apache.org
> group.com> cc:
> Subject: Re: Problem
> removing
> 01/21/2002
> 02:36 PM
> Please respond
> to
> xindice-users
>
>
>
>
>
>
> It looks right, what's the problem you're seeing?
>
> On Monday, January 21, 2002, at 12:22 PM, KevinRoss@bredex.com wrote:
>
>>
>> Hello all,
>>
>> I am attempting to create a simplified test case to recreate the problems
>
>> I
>> am having with OutOfMemoryException, but I am having problem with
>> collection.remove(Resource) in my test case testRemoveAll().
>>
>> Any ideas?
>>
>>
>> Kevin Ross
>>
>>
>>
Kimbro Staken
XML Database Software, Consulting and Writing
http://www.xmldatabases.org/
>
>
>
>
>
>
>