Class: ActiveDocument::MarkLogicQueryBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/ActiveDocument/mark_logic_query_builder.rb

Overview

todo create new unit tests for this class - the old ones were no good

Instance Method Summary collapse

Instance Method Details

#co_occurrence(element1, element1_namespace, element2, element2_namespace, query) ⇒ Object



114
115
116
117
118
119
120
121
122
123
124
125
# File 'lib/ActiveDocument/mark_logic_query_builder.rb', line 114

def co_occurrence(element1, element1_namespace, element2, element2_namespace, query)
  <<-GENERATED
declare namespace one = "#{element1_namespace}";
declare namespace two = "#{element2_namespace}";
import module namespace search = "http://marklogic.com/appservices/search"at "/MarkLogic/appservices/search/search.xqy";
let $pairs := cts:element-value-co-occurrences(xs:QName('one:#{element1}'), xs:QName('two:#{element2}'), ('frequency-order', 'fragment-frequency','ordered'), cts:query(search:parse('#{query}')))
return
for $pair in $pairs
return
  ($pair/cts:value[1]/text(),"|",$pair/cts:value[2]/text(),"|",cts:frequency($pair),"*")
  GENERATED
end

#delete(uri) ⇒ Object



23
24
25
# File 'lib/ActiveDocument/mark_logic_query_builder.rb', line 23

def delete(uri)
  "xdmp:document-delete('#{uri}')"
end

#find_by_attribute(element, attribute, value, root, element_namespace, attribute_namespace, root_namespace) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/ActiveDocument/mark_logic_query_builder.rb', line 78

def find_by_attribute(element, attribute, value, root, element_namespace, attribute_namespace, root_namespace)
  # todo should the searchable expression portion be refactored?
  xquery = <<-GENERATED
    import module namespace search = "http://marklogic.com/appservices/search"at "/MarkLogic/appservices/search/search.xqy";
    search:search("word:#{value}",
    <options xmlns="http://marklogic.com/appservices/search">
  GENERATED
  unless root.nil?
    xquery << "<searchable-expression"
    xquery << "  xmlns:a=\"#{root_namespace}\"" unless root_namespace.nil?
    xquery << '>/'
    xquery << "a:" unless root_namespace.nil?
    xquery << "#{root}</searchable-expression>"
  end
  xquery << <<-CONSTRAINT
    <constraint name="word">
    <word>
      <attribute ns="#{attribute_namespace unless attribute_namespace.nil?}" name="#{attribute}"/>
      <element ns="#{element_namespace unless element_namespace.nil?}" name="#{element}"/>
    </word>
    </constraint></options>)
  CONSTRAINT
end

#find_by_element(element, value, root, element_namespace, root_namespace) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'lib/ActiveDocument/mark_logic_query_builder.rb', line 56

def find_by_element(element, value, root, element_namespace, root_namespace)
  xquery = <<-GENERATED
    import module namespace search = "http://marklogic.com/appservices/search"at "/MarkLogic/appservices/search/search.xqy";
    search:search("word:#{value}",
    <options xmlns="http://marklogic.com/appservices/search">
  GENERATED
  unless root.nil?
    xquery << "<searchable-expression"
    xquery << "  xmlns:a=\"#{root_namespace}\"" unless root_namespace.nil?
    xquery << '>/'
    xquery << "a:" unless root_namespace.nil?
    xquery << "#{root}</searchable-expression>"
  end
  xquery << <<-CONSTRAINT
    <constraint name="word">
    <word>
    <element ns="#{element_namespace unless element_namespace.nil?}" name="#{element}"/>
    </word>
    </constraint></options>)
  CONSTRAINT
end

#find_by_word(word, root, namespace) ⇒ Object

This method does a full text search



39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/ActiveDocument/mark_logic_query_builder.rb', line 39

def find_by_word(word, root, namespace)
  xquery = <<-GENERATED
    import module namespace search = "http://marklogic.com/appservices/search"at "/MarkLogic/appservices/search/search.xqy";
    search:search("#{word}",
    <options xmlns="http://marklogic.com/appservices/search">
    GENERATED
  unless root.nil?
    xquery << "<searchable-expression"

    xquery << "  xmlns:a=\"#{namespace}\"" unless namespace.nil? or namespace.empty?
    xquery << '>/'
    xquery << "a:" unless namespace.nil? or namespace.empty?
    xquery << "#{root}</searchable-expression>"
  end
  xquery << "</options>)"
end

#load(uri) ⇒ Object



19
20
21
# File 'lib/ActiveDocument/mark_logic_query_builder.rb', line 19

def load(uri)
  "fn:doc('#{uri}')"
end

#save(document, uri) ⇒ Object



27
28
29
30
31
32
33
34
35
36
# File 'lib/ActiveDocument/mark_logic_query_builder.rb', line 27

def save(document, uri)
  xquery = <<-GENERATED
        xdmp:document-insert(
     "#{uri}",
	 #{document.to_s},
     xdmp:default-permissions(),
     xdmp:default-collections())
GENERATED

end

#search(search_text, start, page_length, options) ⇒ Object



102
103
104
105
106
107
108
109
110
111
112
# File 'lib/ActiveDocument/mark_logic_query_builder.rb', line 102

def search(search_text, start, page_length, options)
  if options.nil?
    option = '()'
  else
    option = options.to_s
  end
  <<-GENERATED
  import module namespace search = "http://marklogic.com/appservices/search"at "/MarkLogic/appservices/search/search.xqy";
  search:search('#{search_text}',#{option},#{start}, #{page_length})
  GENERATED
end