Reputation: 1942
so far I have an XML document called resume that, among other things, contains skill elements in the following manner:
<skills>
<skill what = "C" level="0"></skill>
<skill what = "Java" level="1"></skill>
<skill what = "SQL" level="2"></skill>
<skill what = "Lisp" level="3"></skill>
</skills>
The objective of my query I want to run is the following: I want to find pairs of resumes that possess exactly the same number of skills, and that match in both "what" and "level", and output results such as this:
resume1, resume2 resume1, resume3
This is the query I have written:
for $r1 in $resumes/resumes/resume, $r2 in $resumes/resumes/resume
where $r1/@rID != $r2/@rID and count($r1/skills/skill) = count($r2/skills/skill)
return ($r1,$r2)
I need help in actually comapring both $r1 and $r2's @what and @level. I have tried with
data($r1/@what) = data($r1/skills/skill/@what) along with data($r1/skills/skill/@level) = data($r2/@level)
but i can't seem to get the desired output. Is there a way to make this comparison? Thanks very much.
Note: I am using XML 1.0
Upvotes: 1
Views: 488
Reputation: 38682
By reformulating your problem to find skills, that only one of them has, the problem gets rather easy to solve.
let $skills1 := <skills>
<skill what = "C" level="0"></skill>
<skill what = "Java" level="1"></skill>
<skill what = "SQL" level="2"></skill>
<skill what = "Lisp" level="3"></skill>
<skill what = "XQuery" level="4"></skill>
</skills>
let $skills2 := <skills>
<skill what = "C" level="0"></skill>
<skill what = "Java" level="1"></skill>
<skill what = "SQL" level="2"></skill>
<skill what = "Lisp" level="3"></skill>
</skills>
return
for $skill in ($skills1, $skills2)/skill
where not(
$skills1/skill[deep-equal(., $skill)] and
$skills2/skill[deep-equal(., $skill)]
)
return $skill
This will return the skill that is only in skill set 1 (XQuery with level 4). If you wrap the whole flwor-expression in the return
clause in an empty(...)
call, you will get true
for matching skill sets, or false
if they have (any) uncommon members.
Upvotes: 2