lutaml-xsd 0.1.0 → 1.0.1

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.
Files changed (58) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +3 -0
  3. data/Gemfile +6 -0
  4. data/LICENSE.md +33 -0
  5. data/README.adoc +141 -0
  6. data/lib/lutaml/xsd/all.rb +24 -0
  7. data/lib/lutaml/xsd/annotation.rb +20 -0
  8. data/lib/lutaml/xsd/any.rb +26 -0
  9. data/lib/lutaml/xsd/any_attribute.rb +22 -0
  10. data/lib/lutaml/xsd/appinfo.rb +18 -0
  11. data/lib/lutaml/xsd/attribute.rb +34 -0
  12. data/lib/lutaml/xsd/attribute_group.rb +28 -0
  13. data/lib/lutaml/xsd/choice.rb +35 -0
  14. data/lib/lutaml/xsd/complex_content.rb +26 -0
  15. data/lib/lutaml/xsd/complex_type.rb +44 -0
  16. data/lib/lutaml/xsd/documentation.rb +20 -0
  17. data/lib/lutaml/xsd/element.rb +54 -0
  18. data/lib/lutaml/xsd/enumeration.rb +18 -0
  19. data/lib/lutaml/xsd/extension_complex_content.rb +34 -0
  20. data/lib/lutaml/xsd/extension_simple_content.rb +26 -0
  21. data/lib/lutaml/xsd/field.rb +18 -0
  22. data/lib/lutaml/xsd/fraction_digits.rb +22 -0
  23. data/lib/lutaml/xsd/glob.rb +63 -0
  24. data/lib/lutaml/xsd/group.rb +35 -0
  25. data/lib/lutaml/xsd/import.rb +26 -0
  26. data/lib/lutaml/xsd/include.rb +24 -0
  27. data/lib/lutaml/xsd/key.rb +25 -0
  28. data/lib/lutaml/xsd/keyref.rb +26 -0
  29. data/lib/lutaml/xsd/length.rb +20 -0
  30. data/lib/lutaml/xsd/list.rb +21 -0
  31. data/lib/lutaml/xsd/max_exclusive.rb +18 -0
  32. data/lib/lutaml/xsd/max_inclusive.rb +16 -0
  33. data/lib/lutaml/xsd/max_length.rb +18 -0
  34. data/lib/lutaml/xsd/min_exclusive.rb +18 -0
  35. data/lib/lutaml/xsd/min_inclusive.rb +16 -0
  36. data/lib/lutaml/xsd/min_length.rb +18 -0
  37. data/lib/lutaml/xsd/notation.rb +24 -0
  38. data/lib/lutaml/xsd/pattern.rb +18 -0
  39. data/lib/lutaml/xsd/redefine.rb +28 -0
  40. data/lib/lutaml/xsd/restriction_complex_content.rb +34 -0
  41. data/lib/lutaml/xsd/restriction_simple_content.rb +52 -0
  42. data/lib/lutaml/xsd/restriction_simple_type.rb +46 -0
  43. data/lib/lutaml/xsd/schema.rb +180 -0
  44. data/lib/lutaml/xsd/selector.rb +20 -0
  45. data/lib/lutaml/xsd/sequence.rb +34 -0
  46. data/lib/lutaml/xsd/simple_content.rb +24 -0
  47. data/lib/lutaml/xsd/simple_type.rb +28 -0
  48. data/lib/lutaml/xsd/total_digits.rb +22 -0
  49. data/lib/lutaml/xsd/union.rb +22 -0
  50. data/lib/lutaml/xsd/unique.rb +24 -0
  51. data/lib/lutaml/xsd/version.rb +1 -1
  52. data/lib/lutaml/xsd/white_space.rb +20 -0
  53. data/lib/lutaml/xsd/xsd.rb +16 -0
  54. data/lib/lutaml/xsd.rb +9 -7
  55. data/lutaml-xsd.gemspec +3 -0
  56. metadata +81 -6
  57. data/LICENSE.txt +0 -21
  58. data/README.md +0 -43
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class FractionDigits < Model::Serializable
6
+ attribute :id, :string
7
+ attribute :value, :string
8
+ attribute :fixed, :string
9
+ attribute :annotation, Annotation
10
+
11
+ xml do
12
+ root "fractionDigits", mixed: true
13
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
14
+
15
+ map_attribute :id, to: :id
16
+ map_attribute :value, to: :value
17
+ map_attribute :fixed, to: :fixed
18
+ map_element :annotation, to: :annotation
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,63 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "net/http"
4
+
5
+ module Lutaml
6
+ module Xsd
7
+ module Glob
8
+ extend self
9
+
10
+ def path_or_url(location)
11
+ return nullify_location if location.nil?
12
+
13
+ @location = location
14
+ @url = location if location.start_with?(%r{http\w?:/{2}[^.]+})
15
+ @path = File.expand_path(location) unless @url
16
+ rescue Errno::ENOENT
17
+ raise Error, "Invalid location: #{location}"
18
+ end
19
+
20
+ def location
21
+ @location
22
+ end
23
+
24
+ def path?
25
+ !@path.nil?
26
+ end
27
+
28
+ def url?
29
+ !@url.nil?
30
+ end
31
+
32
+ def location?
33
+ url? || path?
34
+ end
35
+
36
+ def http_get(url)
37
+ Net::HTTP.get(URI.parse(url))
38
+ end
39
+
40
+ def include_schema(schema_location)
41
+ return unless location? && schema_location
42
+
43
+ schema_path = schema_location_path(schema_location)
44
+ url? ? http_get(schema_path) : File.read(schema_path)
45
+ end
46
+
47
+ private
48
+
49
+ def schema_location_path(schema_location)
50
+ separator = "/" unless schema_location&.start_with?("/") || location&.end_with?("/")
51
+
52
+ location_params = [location, schema_location].compact
53
+ url? ? location_params.join(separator) : File.join(location_params)
54
+ end
55
+
56
+ def nullify_location
57
+ @location = nil
58
+ @path = nil
59
+ @url = nil
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class Sequence < Model::Serializable; end
6
+ class Choice < Model::Serializable; end
7
+
8
+ class Group < Model::Serializable
9
+ attribute :id, :string
10
+ attribute :ref, :string
11
+ attribute :name, :string
12
+ attribute :min_occurs, :string
13
+ attribute :max_occurs, :string
14
+ attribute :all, All
15
+ attribute :choice, Choice
16
+ attribute :sequence, Sequence
17
+ attribute :annotation, Annotation
18
+
19
+ xml do
20
+ root "group", mixed: true
21
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
22
+
23
+ map_attribute :id, to: :id
24
+ map_attribute :ref, to: :ref
25
+ map_attribute :name, to: :name
26
+ map_attribute :minOccurs, to: :min_occurs
27
+ map_attribute :maxOccurs, to: :max_occurs
28
+ map_element :annotation, to: :annotation
29
+ map_element :sequence, to: :sequence
30
+ map_element :choice, to: :choice
31
+ map_element :all, to: :all
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class Import < Model::Serializable
6
+ attribute :id, :string
7
+ attribute :namespace, :string
8
+ attribute :schema_path, :string
9
+ attribute :annotation, Annotation
10
+
11
+ xml do
12
+ root "import", mixed: true
13
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
14
+
15
+ map_attribute :id, to: :id
16
+ map_attribute :namespace, to: :namespace
17
+ map_attribute :schemaLocation, to: :schema_path
18
+ map_element :annotation, to: :annotation
19
+ end
20
+
21
+ def fetch_schema
22
+ Glob.include_schema(schema_path) if schema_path && Glob.location?
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class Include < Model::Serializable
6
+ attribute :id, :string
7
+ attribute :schema_path, :string
8
+ attribute :annotation, Annotation
9
+
10
+ xml do
11
+ root "include", mixed: true
12
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
13
+
14
+ map_attribute :id, to: :id
15
+ map_attribute :schemaLocation, to: :schema_path
16
+ map_element :annotation, to: :annotation
17
+ end
18
+
19
+ def fetch_schema
20
+ Glob.include_schema(schema_path)
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class Key < Model::Serializable
6
+ attribute :id, :string
7
+ attribute :name, :string
8
+ attribute :selector, Selector
9
+ attribute :annotation, Annotation
10
+ attribute :field, Field, collection: true
11
+ # Field should be one or more
12
+
13
+ xml do
14
+ root "key", mixed: true
15
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
16
+
17
+ map_attribute :id, to: :id
18
+ map_attribute :name, to: :name
19
+ map_element :annotation, to: :annotation
20
+ map_element :selector, to: :selector
21
+ map_element :field, to: :field
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class Keyref < Model::Serializable
6
+ attribute :id, :string
7
+ attribute :name, :string
8
+ attribute :refer, :string
9
+ attribute :selector, Selector
10
+ attribute :annotation, Annotation
11
+ attribute :field, Field, collection: true
12
+ # Field should be one or more
13
+
14
+ xml do
15
+ root "keyref", mixed: true
16
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
17
+
18
+ map_attribute :id, to: :id
19
+ map_attribute :name, to: :name
20
+ map_element :field, to: :field
21
+ map_element :selector, to: :selector
22
+ map_element :annotation, to: :annotation
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class Length < Model::Serializable
6
+ attribute :fixed, :boolean
7
+ attribute :value, :integer
8
+ attribute :annotation, Annotation
9
+
10
+ xml do
11
+ root "length", mixed: true
12
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
13
+
14
+ map_attribute :fixed, to: :fixed
15
+ map_attribute :value, to: :value
16
+ map_element :annotation, to: :annotation
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class List < Model::Serializable
6
+ attribute :id, :string
7
+ attribute :item_type, :string
8
+ attribute :annotation, Annotation
9
+ attribute :simple_type, SimpleType
10
+
11
+ xml do
12
+ root "list", mixed: true
13
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
14
+
15
+ map_attribute :id, to: :id
16
+ map_attribute :itemType, to: :item_type
17
+ map_element :annotation, to: :annotation
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class MaxExclusive < Model::Serializable
6
+ attribute :fixed, :string
7
+ attribute :value, :integer
8
+
9
+ xml do
10
+ root "maxExclusive", mixed: true
11
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
12
+
13
+ map_attribute :value, to: :value
14
+ map_attribute :fixed, to: :fixed
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class MaxInclusive < Model::Serializable
6
+ attribute :value, :string
7
+
8
+ xml do
9
+ root "maxInclusive", mixed: true
10
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
11
+
12
+ map_attribute :value, to: :value
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class MaxLength < Model::Serializable
6
+ attribute :fixed, :string
7
+ attribute :value, :integer
8
+
9
+ xml do
10
+ root "maxLength", mixed: true
11
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
12
+
13
+ map_attribute :value, to: :value
14
+ map_attribute :fixed, to: :fixed
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class MinExclusive < Model::Serializable
6
+ attribute :fixed, :string
7
+ attribute :value, :integer
8
+
9
+ xml do
10
+ root "minExclusive", mixed: true
11
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
12
+
13
+ map_attribute :value, to: :value
14
+ map_attribute :fixed, to: :fixed
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class MinInclusive < Model::Serializable
6
+ attribute :value, :string
7
+
8
+ xml do
9
+ root "minInclusive", mixed: true
10
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
11
+
12
+ map_attribute :value, to: :value
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class MinLength < Model::Serializable
6
+ attribute :fixed, :string
7
+ attribute :value, :integer
8
+
9
+ xml do
10
+ root "minLength", mixed: true
11
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
12
+
13
+ map_attribute :value, to: :value
14
+ map_attribute :fixed, to: :fixed
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class Notation < Model::Serializable
6
+ attribute :id, :string
7
+ attribute :name, :string
8
+ attribute :public, :string
9
+ attribute :system, :string
10
+ attribute :annotation, Annotation
11
+
12
+ xml do
13
+ root "notation", mixed: true
14
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
15
+
16
+ map_attribute :id, to: :id
17
+ map_attribute :name, to: :name
18
+ map_attribute :public, to: :public
19
+ map_attribute :system, to: :system
20
+ map_element :annotation, to: :annotation
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class Pattern < Model::Serializable
6
+ attribute :value, :string
7
+ attribute :annotation, Annotation
8
+
9
+ xml do
10
+ root "pattern", mixed: true
11
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
12
+
13
+ map_attribute :value, to: :value
14
+ map_element :annotation, to: :annotation
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class Redefine < Model::Serializable
6
+ attribute :id, :string
7
+ attribute :schema_path, :string
8
+ attribute :group, Group
9
+ attribute :annotation, Annotation
10
+ attribute :simple_type, SimpleType
11
+ attribute :complex_type, ComplexType
12
+ attribute :attribute_group, AttributeGroup
13
+
14
+ xml do
15
+ root "redefine", mixed: true
16
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
17
+
18
+ map_attribute :id, to: :id
19
+ map_attribute :schema_location, to: :schema_path
20
+ map_element :group, to: :group
21
+ map_element :annotation, to: :annotation
22
+ map_element :simpleType, to: :simpleType
23
+ map_element :complexType, to: :complexType
24
+ map_element :attributeGroup, to: :attributeGroup
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class RestrictionComplexContent < Model::Serializable
6
+ attribute :id, :string
7
+ attribute :base, :string
8
+ attribute :all, All
9
+ attribute :group, Group
10
+ attribute :choice, Choice
11
+ attribute :sequence, Sequence
12
+ attribute :annotation, Annotation
13
+ attribute :any_attribute, AnyAttribute
14
+ attribute :attribute, Attribute, collection: true
15
+ attribute :attribute_group, AttributeGroup, collection: true
16
+
17
+ xml do
18
+ root "restriction", mixed: true
19
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
20
+
21
+ map_attribute :id, to: :id
22
+ map_attribute :base, to: :base
23
+ map_element :all, to: :all
24
+ map_element :group, to: :group
25
+ map_element :choice, to: :choice
26
+ map_element :sequence, to: :sequence
27
+ map_element :attribute, to: :attribute
28
+ map_element :annotation, to: :annotation
29
+ map_element :anyAttribute, to: :any_attribute
30
+ map_element :attributeGroup, to: :attribute_group
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class RestrictionSimpleContent < Model::Serializable
6
+ attribute :id, :string
7
+ attribute :base, :string
8
+ attribute :annotation, Annotation
9
+ attribute :simple_type, SimpleType
10
+ attribute :any_attribute, AnyAttribute
11
+ attribute :length, Length, collection: true
12
+ attribute :pattern, Pattern, collection: true
13
+ attribute :attribute, Attribute, collection: true
14
+ attribute :max_length, MaxLength, collection: true
15
+ attribute :min_length, MinLength, collection: true
16
+ attribute :white_space, WhiteSpace, collection: true
17
+ attribute :enumeration, Enumeration, collection: true
18
+ attribute :total_digits, TotalDigits, collection: true
19
+ attribute :min_exclusive, MinExclusive, collection: true
20
+ attribute :min_inclusive, MinInclusive, collection: true
21
+ attribute :max_exclusive, MaxExclusive, collection: true
22
+ attribute :max_inclusive, MaxInclusive, collection: true
23
+ attribute :attribute_group, AttributeGroup, collection: true
24
+ attribute :fraction_digits, FractionDigits, collection: true
25
+
26
+ xml do
27
+ root "restriction", mixed: true
28
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
29
+
30
+ map_attribute :id, to: :id
31
+ map_attribute :base, to: :base
32
+ map_element :fractionDigits, to: :fraction_digits
33
+ map_element :attributeGroup, to: :attribute_group
34
+ map_element :minInclusive, to: :min_inclusive
35
+ map_element :maxInclusive, to: :max_inclusive
36
+ map_element :anyAttribute, to: :any_attribute
37
+ map_element :minExclusive, to: :min_exclusive
38
+ map_element :maxExclusive, to: :max_exclusive
39
+ map_element :totalDigits, to: :total_digits
40
+ map_element :enumeration, to: :enumeration
41
+ map_element :simpleType, to: :simple_type
42
+ map_element :whiteSpace, to: :white_space
43
+ map_element :annotation, to: :annotation
44
+ map_element :maxLength, to: :max_length
45
+ map_element :minLength, to: :min_length
46
+ map_element :attribute, to: :attribute
47
+ map_element :pattern, to: :pattern
48
+ map_element :length, to: :length
49
+ end
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,46 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Lutaml
4
+ module Xsd
5
+ class RestrictionSimpleType < Model::Serializable
6
+ attribute :id, :string
7
+ attribute :base, :string
8
+ attribute :annotation, Annotation
9
+ attribute :simple_type, SimpleType
10
+ attribute :length, Length, collection: true
11
+ attribute :pattern, Pattern, collection: true
12
+ attribute :min_length, MinLength, collection: true
13
+ attribute :max_length, MaxLength, collection: true
14
+ attribute :white_space, WhiteSpace, collection: true
15
+ attribute :enumeration, Enumeration, collection: true
16
+ attribute :total_digits, TotalDigits, collection: true
17
+ attribute :max_exclusive, MaxExclusive, collection: true
18
+ attribute :min_exclusive, MinExclusive, collection: true
19
+ attribute :max_inclusive, MaxInclusive, collection: true
20
+ attribute :min_inclusive, MinInclusive, collection: true
21
+ attribute :fraction_digits, FractionDigits, collection: true
22
+
23
+ xml do
24
+ root "restriction", mixed: true
25
+ namespace "http://www.w3.org/2001/XMLSchema", "xsd"
26
+
27
+ map_attribute :id, to: :id
28
+ map_attribute :base, to: :base
29
+ map_element :length, to: :length
30
+ map_element :pattern, to: :pattern
31
+ map_element :minLength, to: :min_length
32
+ map_element :maxLength, to: :max_length
33
+ map_element :annotation, to: :annotation
34
+ map_element :whiteSpace, to: :white_space
35
+ map_element :simple_type, to: :simple_type
36
+ map_element :enumeration, to: :enumeration
37
+ map_element :totalDigits, to: :total_digits
38
+ map_element :maxExclusive, to: :max_exclusive
39
+ map_element :minExclusive, to: :min_exclusive
40
+ map_element :maxInclusive, to: :max_inclusive
41
+ map_element :minInclusive, to: :min_inclusive
42
+ map_element :fractionDigits, to: :fraction_digits
43
+ end
44
+ end
45
+ end
46
+ end