saxon 0.2.2-java → 0.4.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/saxon.gemspec +10 -18
- metadata +17 -166
- data/.gitignore +0 -13
- data/.rspec +0 -3
- data/.ruby-version +0 -1
- data/.travis.yml +0 -20
- data/CODE_OF_CONDUCT.md +0 -74
- data/Gemfile +0 -6
- data/README.md +0 -43
- data/Rakefile +0 -12
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/lib/net/sf/saxon/Saxon-HE/9.9.1-2/Saxon-HE-9.9.1-2.jar +0 -0
- data/lib/saxon.rb +0 -6
- data/lib/saxon/axis_iterator.rb +0 -32
- data/lib/saxon/configuration.rb +0 -116
- data/lib/saxon/document_builder.rb +0 -28
- data/lib/saxon/item_type.rb +0 -200
- data/lib/saxon/jaxp.rb +0 -8
- data/lib/saxon/loader.rb +0 -103
- data/lib/saxon/occurrence_indicator.rb +0 -33
- data/lib/saxon/parse_options.rb +0 -127
- data/lib/saxon/processor.rb +0 -102
- data/lib/saxon/qname.rb +0 -145
- data/lib/saxon/s9api.rb +0 -16
- data/lib/saxon/serializer.rb +0 -143
- data/lib/saxon/source.rb +0 -187
- data/lib/saxon/version.rb +0 -3
- data/lib/saxon/xdm_atomic_value.rb +0 -48
- data/lib/saxon/xdm_node.rb +0 -65
- data/lib/saxon/xdm_value.rb +0 -129
- data/lib/saxon/xpath.rb +0 -8
- data/lib/saxon/xpath/compiler.rb +0 -69
- data/lib/saxon/xpath/executable.rb +0 -59
- data/lib/saxon/xpath/static_context.rb +0 -161
- data/lib/saxon/xpath/variable_declaration.rb +0 -68
- data/lib/saxon/xslt.rb +0 -8
- data/lib/saxon/xslt/compiler.rb +0 -70
- data/lib/saxon/xslt/evaluation_context.rb +0 -174
- data/lib/saxon/xslt/executable.rb +0 -156
- data/lib/saxon_jars.rb +0 -10
data/lib/saxon/source.rb
DELETED
@@ -1,187 +0,0 @@
|
|
1
|
-
require 'java'
|
2
|
-
require 'saxon/jaxp'
|
3
|
-
require 'uri'
|
4
|
-
require 'pathname'
|
5
|
-
|
6
|
-
module Saxon
|
7
|
-
# Provides a wrapper around the JAXP StreamSource class Saxon uses to bring
|
8
|
-
# the XML bytestream in. Provides some extra methods to make handling closing
|
9
|
-
# the source and its inputstream after consumption more idiomatic
|
10
|
-
class Source
|
11
|
-
module Helpers
|
12
|
-
# Given a File, or IO object which will return either #path or
|
13
|
-
# #base_uri, return the #base_uri, if present, or the #path, if present, or
|
14
|
-
# nil
|
15
|
-
# @param [File, IO] io A File or IO
|
16
|
-
# object representing the input XML file or data, or a String containing
|
17
|
-
# the XML
|
18
|
-
# @return [String, nil] the path or URI from the IO (or nil if there is none)
|
19
|
-
def self.base_uri(io)
|
20
|
-
if io.respond_to?(:base_uri)
|
21
|
-
return io.base_uri.to_s
|
22
|
-
end
|
23
|
-
io.path if io.respond_to?(:path)
|
24
|
-
end
|
25
|
-
|
26
|
-
# Given a File or IO return a Java InputStream
|
27
|
-
# @param [File, IO, org.jruby.util.IOInputStream, java.io.InputStream]
|
28
|
-
# io input to be converted to an input stream
|
29
|
-
# @return [java.io.InputStream] the wrapped input
|
30
|
-
def self.inputstream(io)
|
31
|
-
case io
|
32
|
-
when org.jruby.util.IOInputStream, java.io.InputStream
|
33
|
-
io
|
34
|
-
else
|
35
|
-
io.to_inputstream if io.respond_to?(:read)
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
# Given a path return a Java File object
|
40
|
-
# @param [String, Pathname] path the path to the file
|
41
|
-
# @return [java.io.File] the Java File object
|
42
|
-
def self.file(path)
|
43
|
-
java.io.File.new(path.to_s)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
PathChecker = ->(path) {
|
48
|
-
File.file?(path)
|
49
|
-
}
|
50
|
-
URIChecker = ->(uri) {
|
51
|
-
begin
|
52
|
-
URI.parse(uri)
|
53
|
-
true
|
54
|
-
rescue URI::InvalidURIError
|
55
|
-
false
|
56
|
-
end
|
57
|
-
}
|
58
|
-
|
59
|
-
# Generate a Saxon::Source given an IO-like
|
60
|
-
#
|
61
|
-
# @param [IO, File] io The IO-like containing XML to be parsed
|
62
|
-
# @param [Hash] opts
|
63
|
-
# @option opts [String] :base_uri The Base URI for the Source - an
|
64
|
-
# absolute URI or relative path that will be used to resolve relative
|
65
|
-
# URLs in the XML. Setting this will override any path or URI derived
|
66
|
-
# from the IO-like.
|
67
|
-
# @return [Saxon::Source] the Saxon::Source wrapping the input
|
68
|
-
def self.from_io(io, opts = {})
|
69
|
-
base_uri = opts.fetch(:base_uri) { Helpers.base_uri(io) }
|
70
|
-
inputstream = Helpers.inputstream(io)
|
71
|
-
stream_source = Saxon::JAXP::StreamSource.new(inputstream, base_uri)
|
72
|
-
new(stream_source, inputstream)
|
73
|
-
end
|
74
|
-
|
75
|
-
# Generate a Saxon::Source given a path to a file
|
76
|
-
#
|
77
|
-
# @param [String, Pathname] path The path to the XML file to be parsed
|
78
|
-
# @param [Hash] opts
|
79
|
-
# @option opts [String] :base_uri The Base URI for the Source - an
|
80
|
-
# absolute URI or relative path that will be used to resolve relative
|
81
|
-
# URLs in the XML. Setting this will override the file path.
|
82
|
-
# @return [Saxon::Source] the Saxon::Source wrapping the input
|
83
|
-
def self.from_path(path, opts = {})
|
84
|
-
stream_source = Saxon::JAXP::StreamSource.new(Helpers.file(path))
|
85
|
-
stream_source.setSystemId(opts[:base_uri]) if opts[:base_uri]
|
86
|
-
new(stream_source)
|
87
|
-
end
|
88
|
-
|
89
|
-
# Generate a Saxon::Source given a URI
|
90
|
-
#
|
91
|
-
# @param [String, URI] uri The URI to the XML file to be parsed
|
92
|
-
# @param [Hash] opts
|
93
|
-
# @option opts [String] :base_uri The Base URI for the Source - an
|
94
|
-
# absolute URI or relative path that will be used to resolve relative
|
95
|
-
# URLs in the XML. Setting this will override the given URI.
|
96
|
-
# @return [Saxon::Source] the Saxon::Source wrapping the input
|
97
|
-
def self.from_uri(uri, opts = {})
|
98
|
-
stream_source = Saxon::JAXP::StreamSource.new(uri.to_s)
|
99
|
-
stream_source.setSystemId(opts[:base_uri]) if opts[:base_uri]
|
100
|
-
new(stream_source)
|
101
|
-
end
|
102
|
-
|
103
|
-
# Generate a Saxon::Source given a string containing XML
|
104
|
-
#
|
105
|
-
# @param [String] string The string containing XML to be parsed
|
106
|
-
# @param [Hash] opts
|
107
|
-
# @option opts [String] :base_uri The Base URI for the Source - an
|
108
|
-
# absolute URI or relative path that will be used to resolve relative
|
109
|
-
# URLs in the XML. This will be nil unless set.
|
110
|
-
# @return [Saxon::Source] the Saxon::Source wrapping the input
|
111
|
-
def self.from_string(string, opts = {})
|
112
|
-
reader = java.io.StringReader.new(string)
|
113
|
-
stream_source = Saxon::JAXP::StreamSource.new(reader)
|
114
|
-
stream_source.setSystemId(opts[:base_uri]) if opts[:base_uri]
|
115
|
-
new(stream_source, reader)
|
116
|
-
end
|
117
|
-
|
118
|
-
def self.create(io_path_uri_or_string, opts = {})
|
119
|
-
case io_path_uri_or_string
|
120
|
-
when IO, File, java.io.InputStream, StringIO
|
121
|
-
from_io(io_path_uri_or_string, opts)
|
122
|
-
when Pathname, PathChecker
|
123
|
-
from_path(io_path_uri_or_string, opts)
|
124
|
-
when URIChecker
|
125
|
-
from_uri(io_path_uri_or_string, opts)
|
126
|
-
else
|
127
|
-
from_string(io_path_uri_or_string, opts)
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
attr_reader :stream_source, :inputstream
|
132
|
-
private :stream_source, :inputstream
|
133
|
-
|
134
|
-
# @api private
|
135
|
-
# @param [java.xml.transform.stream.StreamSource] stream_source The Java JAXP StreamSource
|
136
|
-
# @param [java.io.InputStream, java.io.StringReader] inputstream The Java InputStream or StringReader
|
137
|
-
def initialize(stream_source, inputstream = nil)
|
138
|
-
@stream_source = stream_source
|
139
|
-
@inputstream = inputstream
|
140
|
-
@closed = false
|
141
|
-
end
|
142
|
-
|
143
|
-
# @return [String] The base URI of the Source
|
144
|
-
def base_uri
|
145
|
-
stream_source.getSystemId
|
146
|
-
end
|
147
|
-
|
148
|
-
# @param [String, URI] uri The URI to use as the Source's Base URI
|
149
|
-
# @return [String] The new base URI of the Source
|
150
|
-
def base_uri=(uri)
|
151
|
-
stream_source.setSystemId(uri.to_s)
|
152
|
-
base_uri
|
153
|
-
end
|
154
|
-
|
155
|
-
# Close the Source and its associated InputStream or Reader, allowing those
|
156
|
-
# resources to be freed.
|
157
|
-
# @return [TrueClass] Returns true
|
158
|
-
def close
|
159
|
-
inputstream.close
|
160
|
-
@closed = true
|
161
|
-
end
|
162
|
-
|
163
|
-
# @return [Boolean] Returns true if the source is closed, false otherwise
|
164
|
-
def closed?
|
165
|
-
@closed
|
166
|
-
end
|
167
|
-
|
168
|
-
# Yields itself and then closes itself. To be used by DocumentBuilders or
|
169
|
-
# other consumers, making it easy to ensure the source is closed after it
|
170
|
-
# has been consumed.
|
171
|
-
#
|
172
|
-
# @raise [Saxon::SourceClosedError] if the Source has already been closed
|
173
|
-
# @yield [source] Yields self to the block
|
174
|
-
def consume(&block)
|
175
|
-
raise SourceClosedError if closed?
|
176
|
-
block.call(self)
|
177
|
-
close
|
178
|
-
end
|
179
|
-
|
180
|
-
# @return [java.xml.transform.stream.StreamSource] The underlying JAXP StreamSource
|
181
|
-
def to_java
|
182
|
-
@stream_source
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
class SourceClosedError < Exception; end
|
187
|
-
end
|
data/lib/saxon/version.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
require_relative 'qname'
|
2
|
-
|
3
|
-
module Saxon
|
4
|
-
# An XPath Data Model Node object, representing an XML document, or an element or one of the other node chunks in the XDM.
|
5
|
-
class XdmAtomicValue
|
6
|
-
# convert a single Ruby value into an XdmAtomicValue
|
7
|
-
#
|
8
|
-
# @param value the value to convert
|
9
|
-
# @return [Saxon::XdmAtomicValue]
|
10
|
-
def self.create(value)
|
11
|
-
new(Saxon::S9API::XdmAtomicValue.new(value))
|
12
|
-
end
|
13
|
-
|
14
|
-
attr_reader :s9_xdm_atomic_value
|
15
|
-
private :s9_xdm_atomic_value
|
16
|
-
|
17
|
-
# @api private
|
18
|
-
def initialize(s9_xdm_atomic_value)
|
19
|
-
@s9_xdm_atomic_value = s9_xdm_atomic_value
|
20
|
-
end
|
21
|
-
|
22
|
-
# Return a {QName} representing the type of the value
|
23
|
-
#
|
24
|
-
# @return [Saxon::QName] the {QName} of the value's type
|
25
|
-
def type_name
|
26
|
-
@type_name ||= Saxon::QName.new(s9_xdm_atomic_value.getTypeName)
|
27
|
-
end
|
28
|
-
|
29
|
-
# @return [Saxon::S9API::XdmAtomicValue] The underlying Saxon Java XDM atomic value object.
|
30
|
-
def to_java
|
31
|
-
s9_xdm_atomic_value
|
32
|
-
end
|
33
|
-
|
34
|
-
# compares two {XdmAtomicValue}s using the underlying Saxon and XDM comparision rules
|
35
|
-
# @param other [Saxon::XdmAtomicValue]
|
36
|
-
# @return [Boolean]
|
37
|
-
def ==(other)
|
38
|
-
return false unless other.is_a?(XdmAtomicValue)
|
39
|
-
s9_xdm_atomic_value.equals(other.to_java)
|
40
|
-
end
|
41
|
-
|
42
|
-
alias_method :eql?, :==
|
43
|
-
|
44
|
-
def hash
|
45
|
-
@hash ||= s9_xdm_atomic_value.hashCode
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
data/lib/saxon/xdm_node.rb
DELETED
@@ -1,65 +0,0 @@
|
|
1
|
-
require_relative 'axis_iterator'
|
2
|
-
|
3
|
-
module Saxon
|
4
|
-
# An XPath Data Model Node object, representing an XML document, or an element or one of the other node chunks in the XDM.
|
5
|
-
class XdmNode
|
6
|
-
include Enumerable
|
7
|
-
|
8
|
-
attr_reader :s9_xdm_node
|
9
|
-
private :s9_xdm_node
|
10
|
-
|
11
|
-
# @api private
|
12
|
-
def initialize(s9_xdm_node)
|
13
|
-
@s9_xdm_node = s9_xdm_node
|
14
|
-
end
|
15
|
-
|
16
|
-
# @return [Saxon::S9API::XdmNode] The underlying Saxon Java XDM node object.
|
17
|
-
def to_java
|
18
|
-
@s9_xdm_node
|
19
|
-
end
|
20
|
-
|
21
|
-
def node_name
|
22
|
-
return @node_name if instance_variable_defined?(:@node_name)
|
23
|
-
node_name = s9_xdm_node.getNodeName
|
24
|
-
@node_name = node_name.nil? ? nil : Saxon::QName.new(node_name)
|
25
|
-
end
|
26
|
-
|
27
|
-
def node_kind
|
28
|
-
@node_kind ||= case s9_xdm_node.nodeKind
|
29
|
-
when Saxon::S9API::XdmNodeKind::ELEMENT
|
30
|
-
:element
|
31
|
-
when Saxon::S9API::XdmNodeKind::TEXT
|
32
|
-
:text
|
33
|
-
when Saxon::S9API::XdmNodeKind::ATTRIBUTE
|
34
|
-
:attribute
|
35
|
-
when Saxon::S9API::XdmNodeKind::NAMESPACE
|
36
|
-
:namespace
|
37
|
-
when Saxon::S9API::XdmNodeKind::COMMENT
|
38
|
-
:comment
|
39
|
-
when Saxon::S9API::XdmNodeKind::PROCESSING_INSTRUCTION
|
40
|
-
:processing_instruction
|
41
|
-
when Saxon::S9API::XdmNodeKind::DOCUMENT
|
42
|
-
:document
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def ==(other)
|
47
|
-
return false unless other.is_a?(XdmNode)
|
48
|
-
s9_xdm_node.equals(other.to_java)
|
49
|
-
end
|
50
|
-
|
51
|
-
alias_method :eql?, :==
|
52
|
-
|
53
|
-
def hash
|
54
|
-
@hash ||= s9_xdm_node.hashCode
|
55
|
-
end
|
56
|
-
|
57
|
-
def each(&block)
|
58
|
-
axis_iterator(:child).each(&block)
|
59
|
-
end
|
60
|
-
|
61
|
-
def axis_iterator(axis)
|
62
|
-
AxisIterator.new(self, axis)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
data/lib/saxon/xdm_value.rb
DELETED
@@ -1,129 +0,0 @@
|
|
1
|
-
require_relative 'xdm_node'
|
2
|
-
require_relative 'xdm_atomic_value'
|
3
|
-
|
4
|
-
module Saxon
|
5
|
-
# An XPath Data Model Value object, representing a Sequence.
|
6
|
-
class XdmValue
|
7
|
-
include Enumerable
|
8
|
-
|
9
|
-
def self.wrap_s9_xdm_value(s9_xdm_value)
|
10
|
-
return new(s9_xdm_value) if s9_xdm_value.instance_of?(Saxon::S9API::XdmValue)
|
11
|
-
case s9_xdm_value
|
12
|
-
when Saxon::S9API::XdmEmptySequence
|
13
|
-
new([])
|
14
|
-
else
|
15
|
-
wrap_s9_xdm_item(s9_xdm_value)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
def self.wrap_s9_xdm_item(s9_xdm_item)
|
20
|
-
if s9_xdm_item.isAtomicValue
|
21
|
-
XdmAtomicValue.new(s9_xdm_item)
|
22
|
-
else
|
23
|
-
case s9_xdm_item
|
24
|
-
when Saxon::S9API::XdmNode
|
25
|
-
XdmNode.new(s9_xdm_item)
|
26
|
-
else
|
27
|
-
XdmUnhandledItem.new(s9_xdm_item)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
# Create a new XdmValue sequence containing the items passed in as a Ruby enumerable.
|
33
|
-
#
|
34
|
-
# @param items [Enumerable] A list of XDM Item members
|
35
|
-
# @return [Saxon::XdmValue] The XDM value
|
36
|
-
def self.create(items)
|
37
|
-
new(Saxon::S9API::XdmValue.makeSequence(items.map(&:to_java)))
|
38
|
-
end
|
39
|
-
|
40
|
-
attr_reader :s9_xdm_value
|
41
|
-
private :s9_xdm_value
|
42
|
-
|
43
|
-
# @api private
|
44
|
-
def initialize(s9_xdm_value)
|
45
|
-
@s9_xdm_value = s9_xdm_value
|
46
|
-
end
|
47
|
-
|
48
|
-
# @return [Fixnum] The size of the sequence
|
49
|
-
def size
|
50
|
-
s9_xdm_value.size
|
51
|
-
end
|
52
|
-
|
53
|
-
# Calls the given block once for each Item in the sequence, passing that
|
54
|
-
# item as a parameter. Returns the value itself.
|
55
|
-
#
|
56
|
-
# If no block is given, an Enumerator is returned.
|
57
|
-
#
|
58
|
-
# @overload
|
59
|
-
# @yield [item] The current XDM Item
|
60
|
-
# @yieldparam item [Saxon::XdmAtomicValue, Saxon::XdmNode] the item.
|
61
|
-
def each(&block)
|
62
|
-
to_enum.each(&block)
|
63
|
-
end
|
64
|
-
|
65
|
-
# @return [Saxon::S9API::XdmValue] The underlying Saxon Java XDM valuee object.
|
66
|
-
def to_java
|
67
|
-
@s9_xdm_value
|
68
|
-
end
|
69
|
-
|
70
|
-
# Compare this XdmValue with another. Currently this requires iterating
|
71
|
-
# across the sequence, and the other sequence and comparing each member
|
72
|
-
# with the corresponding member in the other sequence.
|
73
|
-
#
|
74
|
-
# @param other [Saxon::XdmValue] The XdmValue to be compare against
|
75
|
-
# @return [Boolean] whether the two XdmValues are equal
|
76
|
-
def ==(other)
|
77
|
-
return false unless other.is_a?(XdmValue)
|
78
|
-
return false unless other.size == size
|
79
|
-
not_okay = to_enum.zip(other.to_enum).find { |mine, theirs|
|
80
|
-
mine != theirs
|
81
|
-
}
|
82
|
-
not_okay.nil? || !not_okay
|
83
|
-
end
|
84
|
-
|
85
|
-
alias_method :eql?, :==
|
86
|
-
|
87
|
-
# The hash code for the XdmValue
|
88
|
-
# @return [Fixnum] The hash code
|
89
|
-
def hash
|
90
|
-
@hash ||= to_a.hash
|
91
|
-
end
|
92
|
-
|
93
|
-
# Returns a lazy Enumerator over the sequence
|
94
|
-
# @return [Enumerator::Lazy] the enumerator
|
95
|
-
def to_enum
|
96
|
-
s9_xdm_value.each.lazy.map { |s9_xdm_item|
|
97
|
-
wrap_s9_xdm_item(s9_xdm_item)
|
98
|
-
}.each
|
99
|
-
end
|
100
|
-
|
101
|
-
alias_method :enum_for, :to_enum
|
102
|
-
|
103
|
-
private
|
104
|
-
|
105
|
-
def wrap_s9_xdm_item(s9_xdm_item)
|
106
|
-
if s9_xdm_item.isAtomicValue
|
107
|
-
XdmAtomicValue.new(s9_xdm_item)
|
108
|
-
else
|
109
|
-
case s9_xdm_item
|
110
|
-
when Saxon::S9API::XdmNode
|
111
|
-
XdmNode.new(s9_xdm_item)
|
112
|
-
else
|
113
|
-
XdmUnhandledItem.new(s9_xdm_item)
|
114
|
-
end
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
|
119
|
-
# Placeholder class for Saxon Items that we haven't gotten to yet
|
120
|
-
class XdmUnhandledItem
|
121
|
-
def initialize(s9_xdm_item)
|
122
|
-
@s9_xdm_item = s9_xdm_item
|
123
|
-
end
|
124
|
-
|
125
|
-
def to_java
|
126
|
-
@s9_xdm_item
|
127
|
-
end
|
128
|
-
end
|
129
|
-
end
|
data/lib/saxon/xpath.rb
DELETED
data/lib/saxon/xpath/compiler.rb
DELETED
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'forwardable'
|
2
|
-
require_relative './static_context'
|
3
|
-
require_relative './executable'
|
4
|
-
|
5
|
-
module Saxon
|
6
|
-
module XPath
|
7
|
-
# Compiles XPath expressions so they can be executed
|
8
|
-
class Compiler
|
9
|
-
# Create a new <tt>XPath::Compiler</tt> using the supplied Processor.
|
10
|
-
# Passing a block gives access to a DSL for setting up the compiler's
|
11
|
-
# static context.
|
12
|
-
#
|
13
|
-
# @param processor [Saxon::Processor] the {Saxon::Processor} to use
|
14
|
-
# @yield An XPath compiler DSL block
|
15
|
-
# @return [Saxon::XPath::Compiler] the new compiler instance
|
16
|
-
def self.create(processor, &block)
|
17
|
-
static_context = XPath::StaticContext.define(block)
|
18
|
-
new(processor.to_java, static_context)
|
19
|
-
end
|
20
|
-
|
21
|
-
extend Forwardable
|
22
|
-
|
23
|
-
attr_reader :static_context
|
24
|
-
private :static_context
|
25
|
-
|
26
|
-
# @api private
|
27
|
-
# @param s9_processor [net.sf.saxon.s9api.Processor] the Saxon
|
28
|
-
# <tt>Processor</tt> to wrap
|
29
|
-
# @param static_context [Saxon::XPath::StaticContext] the static context
|
30
|
-
# XPaths compiled using this compiler will have
|
31
|
-
def initialize(s9_processor, static_context)
|
32
|
-
@s9_processor, @static_context = s9_processor, static_context
|
33
|
-
end
|
34
|
-
|
35
|
-
def_delegators :static_context, :default_collation, :declared_namespaces, :declared_variables
|
36
|
-
# @!attribute [r] default_collation
|
37
|
-
# @return [String] the URI of the default declared collation
|
38
|
-
# @!attribute [r] declared_namespaces
|
39
|
-
# @return [Hash<String => String>] declared namespaces as prefix => URI hash
|
40
|
-
# @!attribute [r] declared_variables
|
41
|
-
# @return [Hash<Saxon::QName => Saxon::XPath::VariableDeclaration>] declared variables as QName => Declaration hash
|
42
|
-
|
43
|
-
# @param expression [String] the XPath expression to compile
|
44
|
-
# @return [Saxon::XPath::Executable] the executable query
|
45
|
-
def compile(expression)
|
46
|
-
Saxon::XPath::Executable.new(new_compiler.compile(expression), static_context)
|
47
|
-
end
|
48
|
-
|
49
|
-
def create(&block)
|
50
|
-
new_static_context = static_context.define(block)
|
51
|
-
self.class.new(@s9_processor, new_static_context)
|
52
|
-
end
|
53
|
-
|
54
|
-
private
|
55
|
-
|
56
|
-
def new_compiler
|
57
|
-
compiler = @s9_processor.newXPathCompiler
|
58
|
-
declared_namespaces.each do |prefix, uri|
|
59
|
-
compiler.declareNamespace(prefix, uri)
|
60
|
-
end
|
61
|
-
declared_variables.each do |_, decl|
|
62
|
-
compiler.declareVariable(*decl.compiler_args)
|
63
|
-
end
|
64
|
-
compiler.declareDefaultCollation(default_collation) unless default_collation.nil?
|
65
|
-
compiler
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|