I am using search:search. I need to make an additional query satisfying this condition.
I can not make use of xpath here. On Wed, Mar 28, 2012 at 1:53 AM, VISH RAJPUT <[email protected]>wrote: > Hi Sudheer, > > You can use xpath expression with predicate like > > *//entrylist/entry[identity/id/text()='*' and > not(permissionList/permission='read')]* > > to test the below highlighted. > > Regards, > Vishnu > > > On Wed, Mar 28, 2012 at 12:19 AM, Sudheer Yalaverthi < > [email protected]> wrote: > >> Hi Damon, >> >> I have made the xml simple. >> <entrylist> >> >> <entry type="deny"> >> <identity> >> <id>*</id> >> </identity> >> <permissionList> >> <permission>read</permission> >> <permission>write</permission> >> </permissionList> >> </entry> >> <entry type="deny"> >> <identity> >> <id>123</id> >> >> </identity> >> <permissionList> >> <permission>write</permission> >> </permissionList> >> </entry> >> </entrylist> >> >> There will be 'n' number of xmls like the above in the DB. I need to >> retrieve the xml under two conditions. >> 1. id = 123 and entry should have read permission in the permission list >> 2. id = * and entry should not have the read permission in it >> >> I am able to form a query for the first condition. But i could not make >> the second condition. >> >> >> Thanks, >> Sudheer >> >> >> >> >> >> >> >> >> On Sun, Mar 25, 2012 at 9:09 AM, Damon Feldman < >> [email protected]> wrote: >> >>> Sudheer,**** >>> >>> ** ** >>> >>> Can you post a self-contained, minimal example that runs in >>> queryConsole? By this I mean a document insert or two and a query that >>> shows the problem. Ideally, you would simplify the query and document to >>> the simplest example that shows the behavior you are seeing, perhaps a >>> single permission and two notes will work.**** >>> >>> ** ** >>> >>> This allows people to paste it into queryConsole and immediately see >>> your problem, then try solutions.**** >>> >>> ** ** >>> >>> Yours,**** >>> >>> Damon**** >>> >>> ** ** >>> >>> *From:* [email protected] [mailto: >>> [email protected]] *On Behalf Of *Sudheer >>> Yalaverthi >>> *Sent:* Friday, March 23, 2012 4:23 PM >>> *To:* MarkLogic Developer Discussion >>> *Subject:* Re: [MarkLogic Dev General] Problem in making use of >>> cts:not-query()**** >>> >>> ** ** >>> >>> John, >>> >>> i have tried this. But still this is not helping me. >>> I am putting my exact xml , scenario. >>> >>> Xml in DB : >>> >>> <notelist> >>> <note> >>> <text>this is my first note</text> >>> <accessControl> >>> <explicitAccessControlList> >>> <entry type="deny"> >>> <identity> >>> <id>*</id> >>> </identity> >>> <permissionList> >>> <permission>read</permission> >>> <permission>write</permission> >>> <permission>delete</permission> >>> <permission>write-acl</permission> >>> </permissionList> >>> </entry> >>> <entry type="allow"> >>> <identity> >>> <id>1111</id> >>> </identity> >>> <permissionList> >>> <permission>read</permission> >>> <permission>write</permission> >>> <permission>delete</permission> >>> <permission>write-acl</permission> >>> </permissionList> >>> </entry> >>> </explicitAccessControlList> >>> </accessControl> >>> </note> >>> <note> >>> <note> >>> <text>this is my second note</text> >>> <accessControl> >>> <explicitAccessControlList> >>> <entry type="deny"> >>> <identity> >>> <id>*</id> >>> </identity> >>> <permissionList> >>> <permission>write</permission> >>> <permission>delete</permission> >>> </permissionList> >>> </entry> >>> <entry type="allow"> >>> <identity> >>> <id>1111</id> >>> </identity> >>> <permissionList> >>> <permission>read</permission> >>> <permission>write</permission> >>> <permission>delete</permission> >>> </permissionList> >>> </entry> >>> </explicitAccessControlList> >>> </accessControl> >>> </note> >>> </notelist> >>> >>> >>> There will be so many xmls like this in the DB. My requirement is i have >>> to retrieve this xml if i have a note element which has my qstring in the >>> text, and has an entry(type=allow with my id, read permission) or an >>> entry(type= deny, id = *, should not have read permission in that). >>> >>> Below is the query i am trying. >>> >>> cts:element-query( >>> xs:QName("note"), >>> cts:and-query(( >>> cts:element-word-query( xs:QName("text"), >>> $qstring, "case-insensitive"), >>> cts:element-query( >>> xs:QName("accessControl"), >>> cts:element-query( >>> >>> xs:QName("explicitAccessControlList"), >>> >>> cts:or-query(( >>> cts:element-query( >>> xs:QName("entry"), >>> >>> cts:and-query(( >>> cts:element-query( >>> >>> xs:QName("identity"), >>> >>> cts:element-value-query(xs:QName("id"),$user-id) >>> ), >>> >>> cts:element-attribute-value-query(xs:QName("entry"), xs:QName("type"), >>> "allow") , >>> >>> cts:element-value-query(xs:QName("permission"),"read" >>> ) >>> )) >>> ) >>> >>> , >>> cts:element-query( >>> >>> xs:QName("entry"), >>> cts:and-query(( >>> cts:element-query( >>> >>> xs:QName("identity"), >>> >>> cts:element-value-query(xs:QName("id"),"*") >>> >>> ), >>> >>> cts:element-attribute-value-query(xs:QName("entry"), xs:QName("type"), >>> "deny") >>> >>> , >>> >>> cts:element-range-query(xs:QName("permission"), "!=", "read", "collation= >>> http://marklogic.com/collation/" >>> ) >>> )) >>> >>> ) >>> )) >>> ) >>> ) >>> )) >>> ) >>> >>> >>> I am still not able to get the expected results. :( >>> >>> >>> >>> Thanks, >>> Sudheer **** >>> >>> On Fri, Mar 23, 2012 at 12:48 PM, John Zhong <[email protected]> >>> wrote:**** >>> >>> You can change your >>> cts:not-query(cts:element-value-query(xs:QName("subject"), "C")) to >>> cts:element-range-query(xs:QName("subject"), "!=","C"), which needs the >>> "Element Range Indexes" on subject element. >>> >>> So,**** >>> >>> >>> >>> cts:element-query( >>> xs:QName("user"), >>> cts:and-query(( >>> cts:element-value-query(xs:QName("id"), "222"), >>> cts:element-attribute-value-query(xs:QName("user"), >>> xs:QName("branch"), "CSE"),**** >>> >>> cts:element-range-query(xs:QName("subject"), "!=","C") >>> )) >>> ) >>> >>> It worked for me on ML 4.2 version. >>> >>> The cts:not-query does not work, in my opinion, it is because: >>> >>> In your sample XML: >>> >>> /userdetails//subject = "C" >>> > true >>> >>> not(/userdetails//subject = "C") >>> > false >>> >>> So, I think the cts:not-query works similarly... >>> >>> BTW, I tried the solution mentioned by Geert, to define the user as >>> fragment root, but it did not work. >>> >>> John**** >>> >>> On Fri, Mar 23, 2012 at 4:48 AM, Sudheer Yalaverthi < >>> [email protected]> wrote:**** >>> >>> Hi Team, >>> >>> My sample XML would be like this. >>> >>> <userdetails> >>> <user branch="CSE"> >>> <id>111</id> >>> <subjectList> >>> <subject>C</subject> >>> <subject>C++</subject> >>> <subject>Oracle</subject> >>> </subjectList> >>> </user> >>> <user branch="CSE"> >>> <id>222</id> >>> <subjectList> >>> <subject>C++</subject> >>> <subject>Oracle</subject> >>> </subjectList> >>> </user> >>> <user branch="IT"> >>> <id>333</id> >>> <subjectList> >>> <subject>C</subject> >>> <subject>C++</subject> >>> <subject>Oracle</subject> >>> </subjectList> >>> </user> >>> </userdetails> >>> >>> >>> I have a requirement where i should pick this Xml from the DB if there >>> is a user entry with branch as"CSE" and id =222 and it should not have "C" >>> as subject. >>> >>> If i write a additional query something like below for search:search() >>> cts:element-query( >>> xs:QName("user"), >>> cts:and-query(( >>> cts:element-value-query(xs:QName("id"), "222"), >>> cts:element-attribute-value-query(xs:QName("user"), >>> xs:QName("branch"), "CSE"), >>> cts:not-query(cts:element-value-query(xs:QName("subject"), "C")) >>> )) >>> ) >>> >>> This is not turning me up the results. The only one scenario this query >>> is gonna return back the result is if none of the users in the DB has the >>> subject as "C". but this is not i am expecting. I know there is one user >>> element which satisfies all the conditions and other user elements which >>> fail these connditions. I want to retrieve the Xml even if one of the user >>> element passes all these conditions irrespective of other elements pass or >>> fail. Please suggest me. >>> I am using search:search and i can not avoid this as i have some other >>> requirements to sorting the result Xmls. >>> >>> >>> Thanks, >>> Sudheer >>> >>> **** >>> >>> _______________________________________________ >>> General mailing list >>> [email protected] >>> http://developer.marklogic.com/mailman/listinfo/general**** >>> >>> >>> >>> _______________________________________________ >>> General mailing list >>> [email protected] >>> http://developer.marklogic.com/mailman/listinfo/general**** >>> >>> ** ** >>> >>> _______________________________________________ >>> General mailing list >>> [email protected] >>> http://developer.marklogic.com/mailman/listinfo/general >>> >>> >> >> _______________________________________________ >> General mailing list >> [email protected] >> http://developer.marklogic.com/mailman/listinfo/general >> >> > > _______________________________________________ > General mailing list > [email protected] > http://developer.marklogic.com/mailman/listinfo/general > >
_______________________________________________ General mailing list [email protected] http://developer.marklogic.com/mailman/listinfo/general
