lutaml-xsd 0.1.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/Gemfile +6 -0
- data/LICENSE.md +33 -0
- data/README.adoc +141 -0
- data/lib/lutaml/xsd/all.rb +24 -0
- data/lib/lutaml/xsd/annotation.rb +20 -0
- data/lib/lutaml/xsd/any.rb +26 -0
- data/lib/lutaml/xsd/any_attribute.rb +22 -0
- data/lib/lutaml/xsd/appinfo.rb +18 -0
- data/lib/lutaml/xsd/attribute.rb +34 -0
- data/lib/lutaml/xsd/attribute_group.rb +28 -0
- data/lib/lutaml/xsd/choice.rb +35 -0
- data/lib/lutaml/xsd/complex_content.rb +26 -0
- data/lib/lutaml/xsd/complex_type.rb +44 -0
- data/lib/lutaml/xsd/documentation.rb +20 -0
- data/lib/lutaml/xsd/element.rb +54 -0
- data/lib/lutaml/xsd/enumeration.rb +18 -0
- data/lib/lutaml/xsd/extension_complex_content.rb +34 -0
- data/lib/lutaml/xsd/extension_simple_content.rb +26 -0
- data/lib/lutaml/xsd/field.rb +18 -0
- data/lib/lutaml/xsd/fraction_digits.rb +22 -0
- data/lib/lutaml/xsd/glob.rb +63 -0
- data/lib/lutaml/xsd/group.rb +35 -0
- data/lib/lutaml/xsd/import.rb +26 -0
- data/lib/lutaml/xsd/include.rb +24 -0
- data/lib/lutaml/xsd/key.rb +25 -0
- data/lib/lutaml/xsd/keyref.rb +26 -0
- data/lib/lutaml/xsd/length.rb +20 -0
- data/lib/lutaml/xsd/list.rb +21 -0
- data/lib/lutaml/xsd/max_exclusive.rb +18 -0
- data/lib/lutaml/xsd/max_inclusive.rb +16 -0
- data/lib/lutaml/xsd/max_length.rb +18 -0
- data/lib/lutaml/xsd/min_exclusive.rb +18 -0
- data/lib/lutaml/xsd/min_inclusive.rb +16 -0
- data/lib/lutaml/xsd/min_length.rb +18 -0
- data/lib/lutaml/xsd/notation.rb +24 -0
- data/lib/lutaml/xsd/pattern.rb +18 -0
- data/lib/lutaml/xsd/redefine.rb +28 -0
- data/lib/lutaml/xsd/restriction_complex_content.rb +34 -0
- data/lib/lutaml/xsd/restriction_simple_content.rb +52 -0
- data/lib/lutaml/xsd/restriction_simple_type.rb +46 -0
- data/lib/lutaml/xsd/schema.rb +176 -0
- data/lib/lutaml/xsd/selector.rb +20 -0
- data/lib/lutaml/xsd/sequence.rb +34 -0
- data/lib/lutaml/xsd/simple_content.rb +24 -0
- data/lib/lutaml/xsd/simple_type.rb +28 -0
- data/lib/lutaml/xsd/total_digits.rb +22 -0
- data/lib/lutaml/xsd/union.rb +22 -0
- data/lib/lutaml/xsd/unique.rb +24 -0
- data/lib/lutaml/xsd/version.rb +1 -1
- data/lib/lutaml/xsd/white_space.rb +20 -0
- data/lib/lutaml/xsd/xsd.rb +16 -0
- data/lib/lutaml/xsd.rb +9 -7
- data/lutaml-xsd.gemspec +3 -0
- metadata +84 -9
- data/LICENSE.txt +0 -21
- data/README.md +0 -43
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4296cdc53ac951e9dabd94e87350ea4d82e7691fcd879e5ea38d9ac619c620e
|
4
|
+
data.tar.gz: a9e1191c508dabc0bc942e86b210f06d4c27815ab10cf5fbdc322bbde0b59f68
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d69274700a75e1756c82103c095a0bf3b5b56fb0c9d9c35da98112afcbca422e37cfed00d46579f0969fec4392ae04b993f57e58f1aaea35e513d6ae39577ff
|
7
|
+
data.tar.gz: 7ffa3d40825726c740a29cac23685e32aff7f4295603634361524305b7579bbf4b02194582b78f12da42c6923657c682b7182d863b08bbd9267ce3190bef6149
|
data/.rubocop.yml
CHANGED
data/Gemfile
CHANGED
data/LICENSE.md
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
Licenses & Copyright
|
2
|
+
====================
|
3
|
+
|
4
|
+
This license file adheres to the formatting guidelines of
|
5
|
+
[readable-licenses](https://github.com/nevir/readable-licenses).
|
6
|
+
|
7
|
+
|
8
|
+
Ribose's BSD 2-Clause License
|
9
|
+
-----------------------------
|
10
|
+
|
11
|
+
Copyright (c) 2024, [Ribose Inc](https://www.ribose.com).
|
12
|
+
All rights reserved.
|
13
|
+
|
14
|
+
Redistribution and use in source and binary forms, with or without modification,
|
15
|
+
are permitted provided that the following conditions are met:
|
16
|
+
|
17
|
+
1. Redistributions of source code must retain the above copyright notice,
|
18
|
+
this list of conditions and the following disclaimer.
|
19
|
+
|
20
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
21
|
+
this list of conditions and the following disclaimer in the documentation
|
22
|
+
and/or other materials provided with the distribution.
|
23
|
+
|
24
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
25
|
+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
26
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
27
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
|
28
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
29
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
30
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
31
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
32
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
33
|
+
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
data/README.adoc
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
= Lutaml::Xsd
|
2
|
+
|
3
|
+
== Overview
|
4
|
+
|
5
|
+
**Lutaml::Xsd** is a *Ruby* gem designed to parse and build *XML Schema Definition (XSD)* objects. It provides a robust framework for handling *XSD* *elements*, *attributes*, and *complex types*, allowing users to manipulate and generate *XSD* objects programmatically.
|
6
|
+
|
7
|
+
== Installation
|
8
|
+
|
9
|
+
To install *Lutaml::Xsd*, add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
[source,ruby]
|
12
|
+
----
|
13
|
+
gem 'lutaml-xsd'
|
14
|
+
----
|
15
|
+
|
16
|
+
And then execute:
|
17
|
+
|
18
|
+
[source,bash]
|
19
|
+
----
|
20
|
+
bundle install
|
21
|
+
----
|
22
|
+
|
23
|
+
Or install it by running:
|
24
|
+
|
25
|
+
[source,bash]
|
26
|
+
----
|
27
|
+
gem install lutaml-xsd
|
28
|
+
----
|
29
|
+
|
30
|
+
== Usage
|
31
|
+
|
32
|
+
=== Parsing XSD Files
|
33
|
+
|
34
|
+
To parse an *XSD* file, you can use the `Lutaml::Xsd.parse` method. This method takes the content of an *XSD* file as a string and optional parameters such as the location of the *XSD* file for resolving relative paths.
|
35
|
+
|
36
|
+
[source,ruby]
|
37
|
+
----
|
38
|
+
require 'lutaml/xsd'
|
39
|
+
|
40
|
+
xsd_content = File.read('path/to/your/schema.xsd')
|
41
|
+
parsed_schema = Lutaml::Xsd.parse(xsd_content, location: 'path/to/your/')
|
42
|
+
----
|
43
|
+
|
44
|
+
=== Working with Parsed Data
|
45
|
+
|
46
|
+
Once parsed, the data is represented as instances of various classes such as `Lutaml::Xsd::Schema`, `Lutaml::Xsd::Element`, and others. These objects reflect the structure of the *XSD* and can be manipulated or inspected in *Ruby*.
|
47
|
+
|
48
|
+
[source,ruby]
|
49
|
+
----
|
50
|
+
schema = <<~SCHEMA
|
51
|
+
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
|
52
|
+
<xsd:element name="root">
|
53
|
+
...
|
54
|
+
</xsd:element>
|
55
|
+
<xsd:element name="root1">
|
56
|
+
...
|
57
|
+
</xsd:element>
|
58
|
+
</xsd:schema>
|
59
|
+
SCHEMA
|
60
|
+
|
61
|
+
parsed_schema = Lutaml::Xsd.parse(schema, location: 'http://example.com/')
|
62
|
+
|
63
|
+
# Accessing elements of the schema
|
64
|
+
elements = parsed_schema.element
|
65
|
+
elements.each do |element|
|
66
|
+
puts "Element Name: #{element.name}"
|
67
|
+
end
|
68
|
+
# the output will be:
|
69
|
+
> Element Name: root
|
70
|
+
> Element Name: root1
|
71
|
+
----
|
72
|
+
|
73
|
+
=== Serialization
|
74
|
+
|
75
|
+
The gem supports serializing the schema back to *XML*. Each class like `Lutaml::Xsd::Schema` has a method `to_xml` that generates the *XML* representation of the object.
|
76
|
+
|
77
|
+
[source,ruby]
|
78
|
+
----
|
79
|
+
xml_output = parsed_schema.to_xml
|
80
|
+
puts xml_output
|
81
|
+
----
|
82
|
+
|
83
|
+
== Key Components
|
84
|
+
|
85
|
+
=== Schema Representation
|
86
|
+
|
87
|
+
The *Lutaml::Xsd::Schema* class represents an *XSD* schema. It includes attributes for various schema properties like target namespace, element form default, and others.
|
88
|
+
|
89
|
+
- **Attributes and Elements**: The schema object contains collections of elements, complex types, simple types, etc., which are all accessible via attributes on the `Schema` object.
|
90
|
+
|
91
|
+
=== Include and Import Handling
|
92
|
+
|
93
|
+
The path provided in `location` via `Lutaml::Xsd.parse(schema, location: 'path/to/your/directory/')` is used for resolving relative paths provided in *include* and *import* element's *schemaLocation* attribute.
|
94
|
+
|
95
|
+
Make sure to provide the directory *path*/*URL* in `location` parameter, as it will be used as base path for resolving relative paths.
|
96
|
+
|
97
|
+
For example, if *URL* is provided:
|
98
|
+
|
99
|
+
[source,ruby]
|
100
|
+
----
|
101
|
+
Lutaml::Xsd.parse(xsd_content, location: 'http://example.com/directory/')
|
102
|
+
----
|
103
|
+
|
104
|
+
If local path is provided:
|
105
|
+
|
106
|
+
[source,ruby]
|
107
|
+
----
|
108
|
+
Lutaml::Xsd.parse(xsd_content, location: 'path/to/your/directory/')
|
109
|
+
----
|
110
|
+
|
111
|
+
[source, xml]
|
112
|
+
----
|
113
|
+
<xs:include schemaLocation="<location>/directory2/metaschema.xsd"/>
|
114
|
+
<!-- AND/OR -->
|
115
|
+
<xs:import schemaLocation="<location>/metaschema.xsd"/>
|
116
|
+
----
|
117
|
+
|
118
|
+
All schemas specified in the *include* and/or *import* elements will be fetched from their *schemaLocation*, parsed and added to their parent *Lutaml::Xsd::Schema* object.
|
119
|
+
|
120
|
+
== Development
|
121
|
+
|
122
|
+
- **Dependencies**: The gem depends on other gems like `zeitwerk` for autoloading and `lutaml-model` for model serialization. See the `Gemfile` and `lutaml-xsd.gemspec` for details on dependencies.
|
123
|
+
|
124
|
+
- **Testing**: Tests are written using RSpec. Test files and fixtures are located in the `spec` directory.
|
125
|
+
|
126
|
+
== About LutaML
|
127
|
+
|
128
|
+
The name "LutaML" is pronounced as "Looh-tah-mel".
|
129
|
+
|
130
|
+
The name "LutaML" comes from the Latin word for clay, "Lutum", and "ML"
|
131
|
+
for "Markup Language". Just as clay can be molded and modeled into beautiful and
|
132
|
+
practical end products, the Lutaml::Model gem is used for data modeling,
|
133
|
+
allowing you to shape and structure your data into useful forms.
|
134
|
+
|
135
|
+
|
136
|
+
== License and Copyright
|
137
|
+
|
138
|
+
This project is licensed under the BSD 2-clause License.
|
139
|
+
See the link:LICENSE.md[] file for details.
|
140
|
+
|
141
|
+
Copyright Ribose.
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class All < Model::Serializable
|
6
|
+
attribute :id, :string
|
7
|
+
attribute :max_occurs, :string
|
8
|
+
attribute :min_occurs, :string
|
9
|
+
attribute :annotation, Annotation
|
10
|
+
attribute :element, Element, collection: true
|
11
|
+
|
12
|
+
xml do
|
13
|
+
root "all", mixed: true
|
14
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
15
|
+
|
16
|
+
map_attribute :id, to: :id
|
17
|
+
map_attribute :max_occurs, to: :max_occurs
|
18
|
+
map_attribute :min_occurs, to: :min_occurs
|
19
|
+
map_element :annotation, to: :annotation
|
20
|
+
map_element :element, to: :element
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class Annotation < Model::Serializable
|
6
|
+
attribute :id, :string
|
7
|
+
attribute :documentation, Documentation, collection: true
|
8
|
+
attribute :appinfo, Appinfo, collection: true
|
9
|
+
|
10
|
+
xml do
|
11
|
+
root "annotation", mixed: true
|
12
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
13
|
+
|
14
|
+
map_attribute :id, to: :id
|
15
|
+
map_element :documentation, to: :documentation
|
16
|
+
map_element :appinfo, to: :appinfo
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class Any < Model::Serializable
|
6
|
+
attribute :id, :string
|
7
|
+
attribute :min_occurs, :string
|
8
|
+
attribute :max_occurs, :string
|
9
|
+
attribute :namespace, :string
|
10
|
+
attribute :process_contents, :string
|
11
|
+
attribute :annotation, Annotation
|
12
|
+
|
13
|
+
xml do
|
14
|
+
root "any", mixed: true
|
15
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
16
|
+
|
17
|
+
map_attribute :id, to: :id
|
18
|
+
map_attribute :namespace, to: :namespace
|
19
|
+
map_attribute :minOccurs, to: :min_occurs
|
20
|
+
map_attribute :maxOccurs, to: :max_occurs
|
21
|
+
map_attribute :processContents, to: :process_contents
|
22
|
+
map_element :annotation, to: :annotation
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class AnyAttribute < Model::Serializable
|
6
|
+
attribute :id, :string
|
7
|
+
attribute :namespace, :string
|
8
|
+
attribute :process_contents, :string
|
9
|
+
attribute :annotation, Annotation
|
10
|
+
|
11
|
+
xml do
|
12
|
+
root "anyAttribute", 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 :processContents, to: :process_contents
|
18
|
+
map_element :annotation, to: :annotation
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class Appinfo < Model::Serializable
|
6
|
+
attribute :source, :string
|
7
|
+
attribute :text, :string
|
8
|
+
|
9
|
+
xml do
|
10
|
+
root "appinfo", mixed: true
|
11
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
12
|
+
|
13
|
+
map_content to: :text
|
14
|
+
map_attribute :source, to: :source
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class Attribute < Model::Serializable
|
6
|
+
attribute :id, :string
|
7
|
+
attribute :use, :string, values: %w[required prohibited optional], default: -> { "optional" }
|
8
|
+
attribute :ref, :string
|
9
|
+
attribute :name, :string
|
10
|
+
attribute :type, :string
|
11
|
+
attribute :form, :string
|
12
|
+
attribute :fixed, :string
|
13
|
+
attribute :default, :string
|
14
|
+
attribute :annotation, Annotation
|
15
|
+
attribute :simple_type, SimpleType
|
16
|
+
|
17
|
+
xml do
|
18
|
+
root "attribute", mixed: true
|
19
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
20
|
+
|
21
|
+
map_attribute :id, to: :id
|
22
|
+
map_attribute :use, to: :use
|
23
|
+
map_attribute :ref, to: :ref
|
24
|
+
map_attribute :name, to: :name
|
25
|
+
map_attribute :type, to: :type
|
26
|
+
map_attribute :form, to: :form
|
27
|
+
map_attribute :fixed, to: :fixed
|
28
|
+
map_attribute :default, to: :default
|
29
|
+
map_element :annotation, to: :annotation
|
30
|
+
map_element :simpleType, to: :simple_type
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class AttributeGroup < Model::Serializable
|
6
|
+
attribute :id, :string
|
7
|
+
attribute :name, :string
|
8
|
+
attribute :ref, :string
|
9
|
+
attribute :annotation, Annotation
|
10
|
+
attribute :any_attribute, AnyAttribute
|
11
|
+
attribute :attribute, Attribute, collection: true
|
12
|
+
attribute :attribute_group, AttributeGroup, collection: true
|
13
|
+
|
14
|
+
xml do
|
15
|
+
root "attributeGroup", mixed: true
|
16
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
17
|
+
|
18
|
+
map_attribute :id, to: :id
|
19
|
+
map_attribute :ref, to: :ref
|
20
|
+
map_attribute :name, to: :name
|
21
|
+
map_element :attribute, to: :attribute
|
22
|
+
map_element :annotation, to: :annotation
|
23
|
+
map_element :anyAttribute, to: :any_attribute
|
24
|
+
map_element :attributeGroup, to: :attribute_group
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
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 Group < Model::Serializable; end
|
7
|
+
|
8
|
+
class Choice < Model::Serializable
|
9
|
+
attribute :id, :string
|
10
|
+
attribute :min_occurs, :string
|
11
|
+
attribute :max_occurs, :string
|
12
|
+
attribute :annotation, Annotation
|
13
|
+
attribute :any, Any, collection: true
|
14
|
+
attribute :group, Group, collection: true
|
15
|
+
attribute :choice, Choice, collection: true
|
16
|
+
attribute :element, Element, collection: true
|
17
|
+
attribute :sequence, Sequence, collection: true
|
18
|
+
|
19
|
+
xml do
|
20
|
+
root "choice", mixed: true
|
21
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
22
|
+
|
23
|
+
map_attribute :id, to: :id
|
24
|
+
map_attribute :minOccurs, to: :min_occurs
|
25
|
+
map_attribute :maxOccurs, to: :max_occurs
|
26
|
+
map_element :annotation, to: :annotation
|
27
|
+
map_element :sequence, to: :sequence
|
28
|
+
map_element :element, to: :element
|
29
|
+
map_element :choice, to: :choice
|
30
|
+
map_element :group, to: :group
|
31
|
+
map_element :any, to: :any
|
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 ExtensionComplexContent < Model::Serializable; end
|
6
|
+
|
7
|
+
class ComplexContent < Model::Serializable
|
8
|
+
attribute :id, :string
|
9
|
+
attribute :mixed, :boolean
|
10
|
+
attribute :extension, ExtensionComplexContent
|
11
|
+
attribute :annotation, Annotation
|
12
|
+
attribute :restriction, RestrictionComplexContent
|
13
|
+
|
14
|
+
xml do
|
15
|
+
root "complexContent", mixed: true
|
16
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
17
|
+
|
18
|
+
map_attribute :id, to: :id
|
19
|
+
map_attribute :mixed, to: :mixed
|
20
|
+
map_element :extension, to: :extension
|
21
|
+
map_element :annotation, to: :annotation
|
22
|
+
map_element :restriction, to: :restriction
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class ComplexType < Model::Serializable
|
6
|
+
attribute :id, :string
|
7
|
+
attribute :name, :string
|
8
|
+
attribute :final, :string
|
9
|
+
attribute :block, :string
|
10
|
+
attribute :mixed, :boolean, default: -> { false }
|
11
|
+
attribute :abstract, :boolean, default: -> { false }
|
12
|
+
attribute :all, All
|
13
|
+
attribute :group, Group
|
14
|
+
attribute :choice, Choice
|
15
|
+
attribute :sequence, Sequence
|
16
|
+
attribute :annotation, Annotation
|
17
|
+
attribute :simple_content, SimpleContent
|
18
|
+
attribute :complex_content, ComplexContent
|
19
|
+
attribute :attribute, Attribute, collection: true
|
20
|
+
attribute :attribute_group, AttributeGroup, collection: true
|
21
|
+
|
22
|
+
xml do
|
23
|
+
root "complexType", mixed: true
|
24
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
25
|
+
|
26
|
+
map_attribute :id, to: :id
|
27
|
+
map_attribute :name, to: :name
|
28
|
+
map_attribute :final, to: :final
|
29
|
+
map_attribute :block, to: :block
|
30
|
+
map_attribute :mixed, to: :mixed
|
31
|
+
map_attribute :abstract, to: :abstract
|
32
|
+
map_element :all, to: :all
|
33
|
+
map_element :group, to: :group
|
34
|
+
map_element :choice, to: :choice
|
35
|
+
map_element :sequence, to: :sequence
|
36
|
+
map_element :attribute, to: :attribute
|
37
|
+
map_element :annotation, to: :annotation
|
38
|
+
map_element :attributeGroup, to: :attribute_group
|
39
|
+
map_element :simpleContent, to: :simple_content
|
40
|
+
map_element :complexContent, to: :complex_content
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class Documentation < Model::Serializable
|
6
|
+
attribute :lang, :string
|
7
|
+
attribute :source, :string
|
8
|
+
attribute :content, :string
|
9
|
+
|
10
|
+
xml do
|
11
|
+
root "documentation"
|
12
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
13
|
+
|
14
|
+
map_all to: :content
|
15
|
+
map_attribute :lang, to: :lang
|
16
|
+
map_attribute :source, to: :source
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class Element < Model::Serializable
|
6
|
+
attribute :id, :string
|
7
|
+
attribute :ref, :string
|
8
|
+
attribute :name, :string
|
9
|
+
attribute :type, :string
|
10
|
+
attribute :form, :string
|
11
|
+
attribute :block, :string
|
12
|
+
attribute :final, :string
|
13
|
+
attribute :fixed, :string
|
14
|
+
attribute :default, :string
|
15
|
+
attribute :nillable, :string
|
16
|
+
attribute :abstract, :boolean, default: -> { false }
|
17
|
+
attribute :min_occurs, :string
|
18
|
+
attribute :max_occurs, :string
|
19
|
+
attribute :substitution_group, :string
|
20
|
+
attribute :annotation, Annotation
|
21
|
+
attribute :simple_type, SimpleType
|
22
|
+
attribute :complex_type, ComplexType
|
23
|
+
attribute :key, Key, collection: true
|
24
|
+
attribute :keyref, Keyref, collection: true
|
25
|
+
attribute :unique, Unique, collection: true
|
26
|
+
|
27
|
+
xml do
|
28
|
+
root "element", mixed: true
|
29
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
30
|
+
|
31
|
+
map_attribute :id, to: :id
|
32
|
+
map_attribute :ref, to: :ref
|
33
|
+
map_attribute :name, to: :name
|
34
|
+
map_attribute :type, to: :type
|
35
|
+
map_attribute :form, to: :form
|
36
|
+
map_attribute :block, to: :block
|
37
|
+
map_attribute :final, to: :final
|
38
|
+
map_attribute :fixed, to: :fixed
|
39
|
+
map_attribute :default, to: :default
|
40
|
+
map_attribute :nillable, to: :nillable
|
41
|
+
map_attribute :abstract, to: :abstract
|
42
|
+
map_attribute :minOccurs, to: :min_occurs
|
43
|
+
map_attribute :maxOccurs, to: :max_occurs
|
44
|
+
map_attribute :substitutionGroup, to: :substitution_group
|
45
|
+
map_element :complexType, to: :complex_type
|
46
|
+
map_element :simpleType, to: :simple_type
|
47
|
+
map_element :annotation, to: :annotation
|
48
|
+
map_element :keyref, to: :keyref
|
49
|
+
map_element :unique, to: :unique
|
50
|
+
map_element :key, to: :key
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class Enumeration < Model::Serializable
|
6
|
+
attribute :value, :string
|
7
|
+
attribute :annotation, Annotation
|
8
|
+
|
9
|
+
xml do
|
10
|
+
root "enumeration", 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,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class ExtensionComplexContent < 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 "extension", 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 :any_attribute, to: :any_attribute
|
30
|
+
map_element :attributeGroup, to: :attribute_group
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class ExtensionSimpleContent < Model::Serializable
|
6
|
+
attribute :id, :string
|
7
|
+
attribute :base, :string
|
8
|
+
attribute :annotation, Annotation
|
9
|
+
attribute :any_attribute, AnyAttribute
|
10
|
+
attribute :attribute, Attribute, collection: true
|
11
|
+
attribute :attribute_group, AttributeGroup, collection: true
|
12
|
+
|
13
|
+
xml do
|
14
|
+
root "extension", mixed: true
|
15
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
16
|
+
|
17
|
+
map_attribute :id, to: :id
|
18
|
+
map_attribute :base, to: :base
|
19
|
+
map_element :attribute, to: :attribute
|
20
|
+
map_element :annotation, to: :annotation
|
21
|
+
map_element :any_attribute, to: :any_attribute
|
22
|
+
map_element :attributeGroup, to: :attribute_group
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Lutaml
|
4
|
+
module Xsd
|
5
|
+
class Field < Model::Serializable
|
6
|
+
attribute :id, :string
|
7
|
+
attribute :xpath, :string
|
8
|
+
|
9
|
+
xml do
|
10
|
+
root "field", mixed: true
|
11
|
+
namespace "http://www.w3.org/2001/XMLSchema", "xsd"
|
12
|
+
|
13
|
+
map_attribute :id, to: :id
|
14
|
+
map_attribute :xpath, to: :xpath
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|