validate_xml_xsi 0.2.1 → 0.2.4
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 +8 -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: 4252059ac1bc3c6ae4aa11ca57703dea71d54a107483129d76955f371a6b56b7
|
4
|
+
data.tar.gz: a1c8bf3d962e546e85d8a39a156d562144df7b12a6c38724e74d264287ac304c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbc3ee5c3c8d136b280b8bf7414934c4b8d1e18b2f6ae37a92ff5314bd1ce9028528c69876c64b52ebe8a3d54ed579255c7de327118e5ebaf6b73ccea4b02af1
|
7
|
+
data.tar.gz: d1524cf149f1439ecab4215100de7718465b5a7147796382ecaf42fd08a63030a584bfe6c39d0f46cf298c07f1128b885f75c78dfe3c0d4566a1a0f47ae4a97c
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## v0.2.3
|
2
|
+
|
3
|
+
* Rename XML_XSI::Schema::parse_schema to just XML_XSI::Schema::parse
|
4
|
+
|
5
|
+
## v0.2.2
|
6
|
+
|
7
|
+
* Break out parsing of the schema from validation so we can reference the schema if we need to.
|
8
|
+
|
1
9
|
## v0.2.1
|
2
10
|
|
3
11
|
* Update namespace to XML_XSI in bin/validate_xml_xsi utility
|
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(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(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.4
|
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
|