validate_xml_xsi 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/validate_xml_xsi.rb +16 -5
- data/validate_xml_xsi.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 761ad7abcb22af7828d754ff0b1ec2bfdd67e48e8edb82a1d306c05c3b9b3391
|
4
|
+
data.tar.gz: ad4000467221dbb6937c1ea9103d8b109666fe17b15f1480937ea7915b37797f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df5c7aa8152d8353a26285efc3d183e9a9f7813bbad785596a53ab52cf5903360b5ed76b56fe87762a08aa870a721bbad5fc82495a2b51b53d9f3d2f6d2a0b0a
|
7
|
+
data.tar.gz: f3e9dbb10e87fc26bef8ae1011ac27aa39148df13fa10055754f728539cb2eccdf830d065e8305e1b37be9bc137587370cb7d667f7d9cef7d574692bb7832679
|
data/CHANGELOG.md
CHANGED
data/lib/validate_xml_xsi.rb
CHANGED
@@ -12,6 +12,7 @@ class XML_XSI
|
|
12
12
|
end
|
13
13
|
|
14
14
|
class Schema
|
15
|
+
class DocumentError < StandardError; end
|
15
16
|
class ValidationError < StandardError
|
16
17
|
Params = [:type, :file, :line, :column, :message, :err]
|
17
18
|
attr_reader *Params, :description
|
@@ -22,9 +23,10 @@ class XML_XSI
|
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
25
|
-
def self.
|
26
|
-
|
27
|
-
|
26
|
+
def self.parse_schema(xml_doc)
|
27
|
+
unless xml_doc.is_a?(Nokogiri::XML::Document)
|
28
|
+
raise DocumentError.new("not a Nokogiri::XML::Document (class: #{xml_doc.class.name})!"
|
29
|
+
end
|
28
30
|
## Build an all-in-one XSD document that imports all of the separate schema locations
|
29
31
|
xsd_doc = "<?xml version=\"1.0\"?>\n"
|
30
32
|
xsd_doc << "<xsd:schema targetNamespace=\"http://www.w3.orig/XML/1998/namespace\"\n" \
|
@@ -37,7 +39,7 @@ class XML_XSI
|
|
37
39
|
elem['xsi:schemaLocation'].scan(/(\S+)\s+(\S+)/).each do |ns_set|
|
38
40
|
if ns_loc = schemata_by_ns[ns_set.first]
|
39
41
|
unless ns_loc.eql?(ns_set.last)
|
40
|
-
|
42
|
+
raise DocumentError.new("MISMATCHING XMLNS XSI: #{ns_set.first} -> #{ns_loc} VS #{ns_set.last}")
|
41
43
|
end
|
42
44
|
else
|
43
45
|
schemata_by_ns[ns_set.first] = ns_set.last
|
@@ -48,7 +50,16 @@ class XML_XSI
|
|
48
50
|
xsd_doc << " <xsd:import namespace=\"#{ns_href}\" schemaLocation=\"#{ns_file}\"/>\n"
|
49
51
|
end
|
50
52
|
xsd_doc << "</xsd:schema>\n"
|
51
|
-
|
53
|
+
Nokogiri::XML::Schema.new(xsd_doc)
|
54
|
+
end
|
55
|
+
|
56
|
+
def self.validate(xml_doc, xsd = nil)
|
57
|
+
xml_doc = XML_XSI::parse(xml_doc) unless xml_doc.is_a?(Nokogiri::XML::Document)
|
58
|
+
errors = []
|
59
|
+
unless xsd.nil? || xsd.is_a?(Nokogiri::XML::Schema)
|
60
|
+
raise DocumentError.new("Invalid XSD - not a Nokogiri::XML::Schema (class: #{xsd.class.name})!")
|
61
|
+
end
|
62
|
+
xsd = self.parse_schema(xml_doc) if xsd.nil?
|
52
63
|
xsd.errors.each do |err|
|
53
64
|
err_msg = (/ERROR: /.match(err.message)) ? $' : err.message
|
54
65
|
errors << ValidationError.new(:XSD, err.file, err.line, err.column, err_msg, err)
|
data/validate_xml_xsi.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: validate_xml_xsi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Hansen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-03-
|
11
|
+
date: 2022-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|