/xquery/functx.xqm

http://transcriptstudio4isha.googlecode.com/ · Unknown · 72 lines · 64 code · 8 blank · 0 comment · 0 complexity · 2a03b5c8e0782a34b1adad47f182342c MD5 · raw file

  1. xquery version "1.0";
  2. module namespace functx = "http://www.functx.com";
  3. declare function functx:add-attributes
  4. ( $elements as element()* ,
  5. $attrNames as xs:QName* ,
  6. $attrValues as xs:anyAtomicType* ) as element()? {
  7. for $element in $elements
  8. return element { node-name($element)}
  9. { for $attrName at $seq in $attrNames
  10. return if ($element/@*[node-name(.) = $attrName])
  11. then ()
  12. else attribute {$attrName}
  13. {$attrValues[$seq]},
  14. $element/@*,
  15. $element/node() }
  16. };
  17. declare function functx:remove-attributes($elements as element()*, $attrNames as xs:QName*) as element() {
  18. for $element in $elements
  19. return element
  20. {node-name($element)}
  21. {
  22. $element/@*[not(node-name(.) = $attrNames)],
  23. $element/node()
  24. }
  25. };
  26. declare function functx:add-or-update-attributes($elements as element()*, $attrNames as xs:QName*, $attrValues as xs:anyAtomicType*) as element()? {
  27. for $element in $elements
  28. return element
  29. {node-name($element)}
  30. {
  31. for $attrName at $seq in $attrNames
  32. return attribute {$attrName}
  33. {$attrValues[$seq]},
  34. $element/@*[not(node-name(.) = $attrNames)],
  35. $element/node()
  36. }
  37. };
  38. declare function functx:remove-elements($elements as element()*, $names as xs:string*) as element()*
  39. {
  40. for $element in $elements
  41. return element
  42. {node-name($element)}
  43. {
  44. $element/@*,
  45. $element/*[not(local-name(.) = $names)]
  46. }
  47. };
  48. declare function functx:contains-word($string as xs:string?, $word as xs:string) as xs:boolean
  49. {
  50. let $upString := upper-case($string)
  51. let $upWord := upper-case($word)
  52. return
  53. matches($upString, concat("^(.*\W)?", $upWord, "(\W.*)?$"))
  54. };
  55. declare function functx:distinct-nodes( $nodes as node()* ) as node()*
  56. {
  57. for $seq in (1 to count($nodes))
  58. return
  59. $nodes[$seq][not(functx:is-node-in-sequence(.,$nodes[position() < $seq]))]
  60. };
  61. declare function functx:is-node-in-sequence( $node as node()? ,$seq as node()* ) as xs:boolean
  62. {
  63. some $nodeInSeq in $seq satisfies $nodeInSeq is $node
  64. };