axlsx 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (179) hide show
  1. data/Rakefile +13 -0
  2. data/lib/axlsx.rb +38 -0
  3. data/lib/axlsx/content_type/content_type.rb +23 -0
  4. data/lib/axlsx/content_type/default.rb +32 -0
  5. data/lib/axlsx/content_type/override.rb +30 -0
  6. data/lib/axlsx/doc_props/app.rb +148 -0
  7. data/lib/axlsx/doc_props/core.rb +34 -0
  8. data/lib/axlsx/drawing/axis.rb +78 -0
  9. data/lib/axlsx/drawing/bar_3D_chart.rb +138 -0
  10. data/lib/axlsx/drawing/bar_series.rb +91 -0
  11. data/lib/axlsx/drawing/cat_axis.rb +58 -0
  12. data/lib/axlsx/drawing/chart.rb +120 -0
  13. data/lib/axlsx/drawing/drawing.rb +121 -0
  14. data/lib/axlsx/drawing/graphic_frame.rb +55 -0
  15. data/lib/axlsx/drawing/marker.rb +57 -0
  16. data/lib/axlsx/drawing/pie_3D_chart.rb +59 -0
  17. data/lib/axlsx/drawing/pie_series.rb +88 -0
  18. data/lib/axlsx/drawing/scaling.rb +53 -0
  19. data/lib/axlsx/drawing/series.rb +70 -0
  20. data/lib/axlsx/drawing/title.rb +69 -0
  21. data/lib/axlsx/drawing/two_cell_anchor.rb +88 -0
  22. data/lib/axlsx/drawing/val_axis.rb +34 -0
  23. data/lib/axlsx/drawing/view_3D.rb +72 -0
  24. data/lib/axlsx/package.rb +181 -0
  25. data/lib/axlsx/rels/relationship.rb +43 -0
  26. data/lib/axlsx/rels/relationships.rb +25 -0
  27. data/lib/axlsx/stylesheet/border.rb +52 -0
  28. data/lib/axlsx/stylesheet/border_pr.rb +65 -0
  29. data/lib/axlsx/stylesheet/cell_alignment.rb +96 -0
  30. data/lib/axlsx/stylesheet/cell_protection.rb +33 -0
  31. data/lib/axlsx/stylesheet/cell_style.rb +60 -0
  32. data/lib/axlsx/stylesheet/color.rb +57 -0
  33. data/lib/axlsx/stylesheet/fill.rb +31 -0
  34. data/lib/axlsx/stylesheet/font.rb +128 -0
  35. data/lib/axlsx/stylesheet/gradient_fill.rb +70 -0
  36. data/lib/axlsx/stylesheet/gradient_stop.rb +31 -0
  37. data/lib/axlsx/stylesheet/num_fmt.rb +61 -0
  38. data/lib/axlsx/stylesheet/pattern_fill.rb +64 -0
  39. data/lib/axlsx/stylesheet/styles.rb +296 -0
  40. data/lib/axlsx/stylesheet/table_style.rb +44 -0
  41. data/lib/axlsx/stylesheet/table_style_element.rb +66 -0
  42. data/lib/axlsx/stylesheet/table_styles.rb +39 -0
  43. data/lib/axlsx/stylesheet/xf.rb +117 -0
  44. data/lib/axlsx/util/constants.rb +189 -0
  45. data/lib/axlsx/util/simple_typed_list.rb +150 -0
  46. data/lib/axlsx/util/validators.rb +132 -0
  47. data/lib/axlsx/workbook/workbook.rb +130 -0
  48. data/lib/axlsx/workbook/worksheet/cell.rb +184 -0
  49. data/lib/axlsx/workbook/worksheet/row.rb +92 -0
  50. data/lib/axlsx/workbook/worksheet/worksheet.rb +194 -0
  51. data/lib/schema/dc.xsd +118 -0
  52. data/lib/schema/dcmitype.xsd +50 -0
  53. data/lib/schema/dcterms.xsd +331 -0
  54. data/lib/schema/dml-chart.xsd +1499 -0
  55. data/lib/schema/dml-chartDrawing.xsd +146 -0
  56. data/lib/schema/dml-compatibility.xsd +14 -0
  57. data/lib/schema/dml-diagram.xsd +1091 -0
  58. data/lib/schema/dml-lockedCanvas.xsd +11 -0
  59. data/lib/schema/dml-main.xsd +3048 -0
  60. data/lib/schema/dml-picture.xsd +23 -0
  61. data/lib/schema/dml-spreadsheetDrawing.xsd +185 -0
  62. data/lib/schema/dml-wordprocessingDrawing.xsd +185 -0
  63. data/lib/schema/opc-contentTypes.xsd +42 -0
  64. data/lib/schema/opc-coreProperties.xsd +50 -0
  65. data/lib/schema/opc-digSig.xsd +49 -0
  66. data/lib/schema/opc-relationships.xsd +33 -0
  67. data/lib/schema/pml.xsd +1676 -0
  68. data/lib/schema/shared-additionalCharacteristics.xsd +28 -0
  69. data/lib/schema/shared-bibliography.xsd +144 -0
  70. data/lib/schema/shared-commonSimpleTypes.xsd +166 -0
  71. data/lib/schema/shared-customXmlDataProperties.xsd +25 -0
  72. data/lib/schema/shared-customXmlSchemaProperties.xsd +18 -0
  73. data/lib/schema/shared-documentPropertiesCustom.xsd +59 -0
  74. data/lib/schema/shared-documentPropertiesExtended.xsd +56 -0
  75. data/lib/schema/shared-documentPropertiesVariantTypes.xsd +195 -0
  76. data/lib/schema/shared-math.xsd +582 -0
  77. data/lib/schema/shared-relationshipReference.xsd +25 -0
  78. data/lib/schema/sml.xsd +4430 -0
  79. data/lib/schema/vml-main.xsd +569 -0
  80. data/lib/schema/vml-officeDrawing.xsd +509 -0
  81. data/lib/schema/vml-presentationDrawing.xsd +12 -0
  82. data/lib/schema/vml-spreadsheetDrawing.xsd +108 -0
  83. data/lib/schema/vml-wordprocessingDrawing.xsd +96 -0
  84. data/lib/schema/wml.xsd +3644 -0
  85. data/lib/schema/xml.xsd +117 -0
  86. data/test/content_type/tc_content_type.rb +81 -0
  87. data/test/content_type/tc_content_type.rb~ +81 -0
  88. data/test/content_type/tc_default.rb +40 -0
  89. data/test/content_type/tc_default.rb~ +40 -0
  90. data/test/content_type/tc_override.rb +40 -0
  91. data/test/content_type/tc_override.rb~ +40 -0
  92. data/test/doc_props/tc_app.rb +19 -0
  93. data/test/doc_props/tc_app.rb~ +19 -0
  94. data/test/doc_props/tc_core.rb +34 -0
  95. data/test/drawing/tc_axis.rb +39 -0
  96. data/test/drawing/tc_axis.rb~ +0 -0
  97. data/test/drawing/tc_bar_3D_chart.rb +66 -0
  98. data/test/drawing/tc_bar_3D_chart.rb~ +4 -0
  99. data/test/drawing/tc_bar_series.rb +34 -0
  100. data/test/drawing/tc_bar_series.rb~ +31 -0
  101. data/test/drawing/tc_cat_axis.rb +32 -0
  102. data/test/drawing/tc_cat_axis.rb~ +39 -0
  103. data/test/drawing/tc_chart.rb +59 -0
  104. data/test/drawing/tc_chart.rb~ +58 -0
  105. data/test/drawing/tc_drawing.rb +71 -0
  106. data/test/drawing/tc_graphic_frame.rb +26 -0
  107. data/test/drawing/tc_graphic_frame.rb~ +21 -0
  108. data/test/drawing/tc_marker.rb +45 -0
  109. data/test/drawing/tc_marker.rb~ +26 -0
  110. data/test/drawing/tc_pie_3D_chart.rb +33 -0
  111. data/test/drawing/tc_pie_3D_chart.rb~ +58 -0
  112. data/test/drawing/tc_pie_series.rb +35 -0
  113. data/test/drawing/tc_pie_series.rb~ +26 -0
  114. data/test/drawing/tc_scaling.rb +37 -0
  115. data/test/drawing/tc_scaling.rb~ +45 -0
  116. data/test/drawing/tc_series.rb +24 -0
  117. data/test/drawing/tc_series.rb~ +31 -0
  118. data/test/drawing/tc_title.rb +34 -0
  119. data/test/drawing/tc_title.rb~ +37 -0
  120. data/test/drawing/tc_two_cell_anchor.rb +37 -0
  121. data/test/drawing/tc_two_cell_anchor.rb~ +35 -0
  122. data/test/drawing/tc_val_axis.rb +20 -0
  123. data/test/drawing/tc_val_axis.rb~ +32 -0
  124. data/test/drawing/tc_view_3D.rb +46 -0
  125. data/test/drawing/tc_view_3D.rb~ +37 -0
  126. data/test/rels/tc_relationship.rb +16 -0
  127. data/test/rels/tc_relationship.rb~ +39 -0
  128. data/test/rels/tc_relationships.rb +32 -0
  129. data/test/rels/tc_relationships.rb~ +37 -0
  130. data/test/stylesheet/tc_border.rb +38 -0
  131. data/test/stylesheet/tc_border.rb~ +31 -0
  132. data/test/stylesheet/tc_border_pr.rb +33 -0
  133. data/test/stylesheet/tc_border_pr.rb~ +31 -0
  134. data/test/stylesheet/tc_cell_alignment.rb +77 -0
  135. data/test/stylesheet/tc_cell_alignment.rb~ +38 -0
  136. data/test/stylesheet/tc_cell_protection.rb +30 -0
  137. data/test/stylesheet/tc_cell_protection.rb~ +77 -0
  138. data/test/stylesheet/tc_cell_style.rb +58 -0
  139. data/test/stylesheet/tc_cell_style.rb~ +30 -0
  140. data/test/stylesheet/tc_color.rb +38 -0
  141. data/test/stylesheet/tc_color.rb~ +38 -0
  142. data/test/stylesheet/tc_fill.rb +19 -0
  143. data/test/stylesheet/tc_fill.rb~ +19 -0
  144. data/test/stylesheet/tc_font.rb +114 -0
  145. data/test/stylesheet/tc_font.rb~ +19 -0
  146. data/test/stylesheet/tc_gradient_fill.rb +65 -0
  147. data/test/stylesheet/tc_gradient_fill.rb~ +114 -0
  148. data/test/stylesheet/tc_gradient_stop.rb +32 -0
  149. data/test/stylesheet/tc_gradient_stop.rb~ +65 -0
  150. data/test/stylesheet/tc_num_fmt.rb +31 -0
  151. data/test/stylesheet/tc_num_fmt.rb~ +32 -0
  152. data/test/stylesheet/tc_pattern_fill.rb +38 -0
  153. data/test/stylesheet/tc_pattern_fill.rb~ +31 -0
  154. data/test/stylesheet/tc_styles.rb +64 -0
  155. data/test/stylesheet/tc_table_style.rb +37 -0
  156. data/test/stylesheet/tc_table_style.rb~ +38 -0
  157. data/test/stylesheet/tc_table_style_element.rb +37 -0
  158. data/test/stylesheet/tc_table_style_element.rb~ +37 -0
  159. data/test/stylesheet/tc_table_styles.rb +30 -0
  160. data/test/stylesheet/tc_table_styles.rb~ +37 -0
  161. data/test/stylesheet/tc_xf.rb +121 -0
  162. data/test/stylesheet/tc_xf.rb~ +30 -0
  163. data/test/tc_app.rb~ +19 -0
  164. data/test/tc_border_pr.rb~ +21 -0
  165. data/test/tc_package.rb +70 -0
  166. data/test/tc_package.rb~ +64 -0
  167. data/test/tc_pie_3D_chart.rb~ +66 -0
  168. data/test/tc_relationships.rb~ +37 -0
  169. data/test/tc_series.rb~ +31 -0
  170. data/test/tc_styles.rb~ +64 -0
  171. data/test/tc_validators.rb~ +77 -0
  172. data/test/tc_worksheet.rb~ +85 -0
  173. data/test/util/tc_simple_typed_list.rb +66 -0
  174. data/test/util/tc_validators.rb +76 -0
  175. data/test/workbook/tc_workbook.rb +53 -0
  176. data/test/workbook/worksheet/tc_cell.rb +78 -0
  177. data/test/workbook/worksheet/tc_row.rb +30 -0
  178. data/test/workbook/worksheet/tc_worksheet.rb +85 -0
  179. metadata +378 -0
@@ -0,0 +1,92 @@
1
+ module Axlsx
2
+ # A Row is a single row in a worksheet.
3
+ # @note The recommended way to manage rows and cells is to use Worksheet#add_row
4
+ # @see Worksheet#add_row
5
+ class Row
6
+
7
+ # The worksheet this row belongs to
8
+ # @return [Worksheet]
9
+ attr_reader :worksheet
10
+
11
+ # The cells this row holds
12
+ # @return [SimpleTypedList]
13
+ attr_reader :cells
14
+
15
+ # The index of this row in the worksheet
16
+ # @return [Integer]
17
+ attr_reader :index
18
+
19
+ # Creates a new row. New Cell objects are created based on the values, types and style options.
20
+ # A new cell is created for each item in the values array. style and types options are applied as follows:
21
+ # If the types option is defined and is a symbol it is applied to all the cells created.
22
+ # If the types option is an array, cell types are applied by index for each cell
23
+ # If the types option is not set, the cell will automatically determine its type.
24
+ # If the style option is defined and is an Integer, it is applied to all cells created.
25
+ # If the style option is an array, style is applied by index for each cell.
26
+ # If the style option is not defined, the default style (0) is applied to each cell.
27
+ # @param [Worksheet] worksheet
28
+ # @option options [Array] values
29
+ # @option options [Array, Symbol] types
30
+ # @option options [Array, Integer] style
31
+ # @see Row#array_to_cells
32
+ # @see Cell
33
+ def initialize(worksheet, options={})
34
+ self.worksheet = worksheet
35
+ @cells = SimpleTypedList.new Cell
36
+ @worksheet.rows << self
37
+ array_to_cells(options)
38
+ end
39
+
40
+ def index
41
+ worksheet.rows.index(self)
42
+ end
43
+
44
+ # Serializes the row
45
+ # @param [Nokogiri::XML::Builder] xml The document builder instance this objects xml will be added to.
46
+ # @return [String]
47
+ def to_xml(xml)
48
+ xml.row(:r => index+1) { @cells.each { |cell| cell.to_xml(xml) } }
49
+ end
50
+
51
+ # Adds a singel sell to the row based on the data provided and updates the worksheet's autofit data.
52
+ # @return [Cell]
53
+ def add_cell(value="", options={})
54
+ c = Cell.new(self, value, options)
55
+ update_auto_fit_data
56
+ c
57
+ end
58
+
59
+
60
+ private
61
+
62
+ # assigns the owning worksheet for this row
63
+ def worksheet=(v) DataTypeValidator.validate "Row.worksheet", Worksheet, v; @worksheet=v; end
64
+
65
+ # Tell the worksheet to update autofit data for the columns based on this row's cells.
66
+ # @return [SimpleTypedList]
67
+ def update_auto_fit_data
68
+ worksheet.send(:update_auto_fit_data, self.cells)
69
+ end
70
+
71
+ # Converts values, types, and style options into cells and associates them with this row.
72
+ # A new cell is created for each item in the values array.
73
+ # If value option is defined and is a symbol it is applied to all the cells created.
74
+ # If the value option is an array, cell types are applied by index for each cell
75
+ # If the style option is defined and is an Integer, it is applied to all cells created.
76
+ # If the style option is an array, style is applied by index for each cell.
77
+ # @option options [Array] values
78
+ # @option options [Array, Symbol] types
79
+ # @option options [Array, Integer] style
80
+ def array_to_cells(options={})
81
+ values = options[:values] || []
82
+ DataTypeValidator.validate 'Row.array_to_cells', Array, values
83
+ types, style = options[:types], options[:style]
84
+ values.each_with_index do |value, index|
85
+ cell_style = style.is_a?(Array) ? style[index] : style
86
+ cell_type = types.is_a?(Array)? types[index] : types
87
+ Cell.new(self, value, :style=>cell_style, :type=>cell_type)
88
+ end
89
+ end
90
+ end
91
+
92
+ end
@@ -0,0 +1,194 @@
1
+ # -*- coding: utf-8 -*-
2
+ module Axlsx
3
+
4
+ # The Worksheet class represents a worksheet in the workbook.
5
+ class Worksheet
6
+
7
+ # The name of the worksheet
8
+ # If not specified, it is Sheet#{index} where index is this worksheets index in the workbook's worksheet collection.
9
+ # @return [String]
10
+ attr_accessor :name
11
+
12
+ # The workbook that owns this worksheet
13
+ # @return [Workbook]
14
+ attr_reader :workbook
15
+
16
+ # The worksheet relationships. This is managed automatically by the worksheet
17
+ # @return [Relationships]
18
+ attr_reader :relationships
19
+
20
+ # The rows in this worksheet
21
+ # @note The recommended way to manage rows is Worksheet#add_row
22
+ # @return [SimpleTypedList]
23
+ # @see Worksheet#add_row
24
+ attr_reader :rows
25
+
26
+ # The drawing associated with this worksheet.
27
+ # @note the recommended way to work with drawings and charts is Worksheet#add_chart
28
+ # @return [Drawing]
29
+ # @see Worksheet#add_chart
30
+ attr_reader :drawing
31
+
32
+ # An array of content based calculated column widths.
33
+ # @note a single auto fit data item is a hash with :longest => [String] and :sz=> [Integer] members.
34
+ # @return [Array] of Hash
35
+ attr_reader :auto_fit_data
36
+
37
+ # The part name of this worksheet
38
+ # @return [String]
39
+ attr_reader :pn
40
+
41
+ # The relationship part name of this worksheet
42
+ # @return [String]
43
+ attr_reader :rels_pn
44
+
45
+ # The relationship Id of thiw worksheet
46
+ # @return [String]
47
+ attr_reader :rId
48
+
49
+ # The index of this worksheet in the owning Workbook's worksheets list.
50
+ # @return [Index]
51
+ attr_reader :index
52
+
53
+ # TODO Merge Cells
54
+ # attr_reader :merge_cells
55
+
56
+ # Creates a new worksheet.
57
+ # @note the recommended way to manage worksheets is Workbook#add_worksheet
58
+ # @see Workbook#add_worksheet
59
+ # @option options [String] name The name of this sheet.
60
+ def initialize(wb, options={})
61
+ @rows = SimpleTypedList.new Row
62
+ self.workbook = wb
63
+ @workbook.worksheets << self
64
+ @auto_fit_data = []
65
+ self.name = options[:name] || "Sheet" + (index+1).to_s
66
+ @magick_draw = Magick::Draw.new
67
+ end
68
+
69
+
70
+ def name=(v) DataTypeValidator.validate "Worksheet.name", String, v; @name=v end
71
+
72
+ def pn
73
+ "#{WORKSHEET_PN % (index+1)}"
74
+ end
75
+
76
+ def rels_pn
77
+ "#{WORKSHEET_RELS_PN % (index+1)}"
78
+ end
79
+
80
+ def rId
81
+ "rId#{index+1}"
82
+ end
83
+
84
+ def index
85
+ @workbook.worksheets.index(self)
86
+ end
87
+
88
+ def drawing
89
+ @drawing || @drawing = Axlsx::Drawing.new(self)
90
+ end
91
+
92
+ # Adds a row to the worksheet and updates auto fit data
93
+ # @return [Row]
94
+ # @option options [Array] values
95
+ # @option options [Array, Symbol] types
96
+ # @option options [Array, Integer] style
97
+ def add_row(options={})
98
+ Row.new(self, options)
99
+ update_auto_fit_data @rows.last.cells
100
+ yield @rows.last if block_given?
101
+ @rows.last
102
+ end
103
+
104
+ # Adds a chart to this worksheets drawing.
105
+ # @param [Class] chart_type
106
+ # @option options [Array] start_at
107
+ # @option options [Array] end_at
108
+ # @option options [Cell, String] title
109
+ def add_chart(chart_type, options={})
110
+ chart = drawing.add_chart(chart_type, options)
111
+ yield chart if block_given?
112
+ chart
113
+ end
114
+
115
+ # Serializes the worksheet document
116
+ # @return [String]
117
+ def to_xml
118
+ builder = Nokogiri::XML::Builder.new(:encoding => ENCODING) do |xml|
119
+ xml.worksheet(:xmlns => XML_NS, :'xmlns:r' => XML_NS_R) {
120
+ if @auto_fit_data.size > 0
121
+ xml.cols {
122
+ @auto_fit_data.each_with_index do |col, index|
123
+ min_max = index+1
124
+ xml.col(:min=>min_max, :max=>min_max, :width => auto_width(col), :customWidth=>"true")
125
+ end
126
+ }
127
+ end
128
+ xml.sheetData {
129
+ @rows.each do |row|
130
+ row.to_xml(xml)
131
+ end
132
+ }
133
+ xml.drawing :"r:id"=>"rId1" if @drawing
134
+ }
135
+ end
136
+ builder.to_xml(:indent=>0, :save_with=>0)
137
+ end
138
+
139
+ # The worksheet's relationships.
140
+ def relationships
141
+ r = Relationships.new
142
+ r << Relationship.new(DRAWING_R, "../#{@drawing.pn}") if @drawing
143
+ r
144
+ end
145
+
146
+ private
147
+
148
+ # assigns the owner workbook for this worksheet
149
+ def workbook=(v) DataTypeValidator.validate "Worksheet.workbook", Workbook, v; @workbook = v; end
150
+
151
+ # Updates auto fit data.
152
+ # Autofit data attempts to determine the cell in a column that has the greatest width by comparing the length of the text multiplied by the size of the font.
153
+ # @return [Array] of Cell objects
154
+ # @param [Array] cells an array of cells
155
+ def update_auto_fit_data(cells)
156
+ styles = self.workbook.styles
157
+ cellXfs, fonts = styles.cellXfs, styles.fonts
158
+ sz = fonts[0].sz
159
+
160
+ cells.each_with_index do |item, index|
161
+ col = @auto_fit_data[index] || {:longest=>"", :sz=>sz}
162
+ cell_xf = cellXfs[item.style]
163
+ font = fonts[cell_xf.fontId || 0]
164
+ sz = font.sz || sz
165
+
166
+ if (col[:longest].scan(/./mu).size * col[:sz]) < (item.value.to_s.scan(/./mu).size * sz)
167
+ col[:sz] = sz
168
+ col[:longest] = item.value.to_s
169
+ end
170
+ @auto_fit_data[index] = col
171
+ end
172
+ cells
173
+ end
174
+
175
+ # Determines the proper width for a column based on content.
176
+ # @note
177
+ # From ECMA docs
178
+ # Column width measured as the number of characters of the maximum digit width of the numbers 0 .. 9 as
179
+ # rendered in the normal style's font. There are 4 pixels of margin padding (two on each side), plus 1 pixel padding for the gridlines.
180
+ # width = Truncate([{Number of Characters} * {Maximum Digit Width} + {5 pixel padding}]/{Maximum Digit Width}*256)/256
181
+ # @return [Float]
182
+ # @param [Hash] A hash of auto_fit_data
183
+ def auto_width(col)
184
+ mdw = 6.0 # maximum digit with is always 6.0 in testable fonts so instead of beating RMagick every time, I am hardcoding it here.
185
+ mdw_count = 0
186
+ best_guess = 1.5 #direct testing shows the results of the documented formula to be a bit too small. This is a best guess scaling
187
+ font_scale = col[:sz].to_f / (self.workbook.styles.fonts[0].sz.to_f || 11.0)
188
+ col[:longest].scan(/./mu).each do |i|
189
+ mdw_count +=1 if @magick_draw.get_type_metrics(i).width >= mdw
190
+ end
191
+ ((mdw_count * mdw + 5) / mdw * 256) / 256.0 * best_guess * font_scale
192
+ end
193
+ end
194
+ end
@@ -0,0 +1,118 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
3
+ xmlns="http://purl.org/dc/elements/1.1/"
4
+ targetNamespace="http://purl.org/dc/elements/1.1/"
5
+ elementFormDefault="qualified"
6
+ attributeFormDefault="unqualified">
7
+
8
+ <xs:annotation>
9
+ <xs:documentation xml:lang="en">
10
+ DCMES 1.1 XML Schema
11
+ XML Schema for http://purl.org/dc/elements/1.1/ namespace
12
+
13
+ Created 2003-04-02
14
+
15
+ Created by
16
+
17
+ Tim Cole (t-cole3@uiuc.edu)
18
+ Tom Habing (thabing@uiuc.edu)
19
+ Jane Hunter (jane@dstc.edu.au)
20
+ Pete Johnston (p.johnston@ukoln.ac.uk),
21
+ Carl Lagoze (lagoze@cs.cornell.edu)
22
+
23
+ This schema declares XML elements for the 15 DC elements from the
24
+ http://purl.org/dc/elements/1.1/ namespace.
25
+
26
+ It defines a complexType SimpleLiteral which permits mixed content
27
+ and makes the xml:lang attribute available. It disallows child elements by
28
+ use of minOcccurs/maxOccurs.
29
+
30
+ However, this complexType does permit the derivation of other complexTypes
31
+ which would permit child elements.
32
+
33
+ All elements are declared as substitutable for the abstract element any,
34
+ which means that the default type for all elements is dc:SimpleLiteral.
35
+
36
+ </xs:documentation>
37
+
38
+ </xs:annotation>
39
+
40
+
41
+ <xs:import namespace="http://www.w3.org/XML/1998/namespace"
42
+ schemaLocation="xml.xsd">
43
+ </xs:import>
44
+
45
+ <xs:complexType name="SimpleLiteral">
46
+ <xs:annotation>
47
+ <xs:documentation xml:lang="en">
48
+ This is the default type for all of the DC elements.
49
+ It permits text content only with optional
50
+ xml:lang attribute.
51
+ Text is allowed because mixed="true", but sub-elements
52
+ are disallowed because minOccurs="0" and maxOccurs="0"
53
+ are on the xs:any tag.
54
+
55
+ This complexType allows for restriction or extension permitting
56
+ child elements.
57
+ </xs:documentation>
58
+ </xs:annotation>
59
+
60
+ <xs:complexContent mixed="true">
61
+ <xs:restriction base="xs:anyType">
62
+ <xs:sequence>
63
+ <xs:any processContents="lax" minOccurs="0" maxOccurs="0"/>
64
+ </xs:sequence>
65
+ <xs:attribute ref="xml:lang" use="optional"/>
66
+ </xs:restriction>
67
+ </xs:complexContent>
68
+ </xs:complexType>
69
+
70
+ <xs:element name="any" type="SimpleLiteral" abstract="true"/>
71
+
72
+ <xs:element name="title" substitutionGroup="any"/>
73
+ <xs:element name="creator" substitutionGroup="any"/>
74
+ <xs:element name="subject" substitutionGroup="any"/>
75
+ <xs:element name="description" substitutionGroup="any"/>
76
+ <xs:element name="publisher" substitutionGroup="any"/>
77
+ <xs:element name="contributor" substitutionGroup="any"/>
78
+ <xs:element name="date" substitutionGroup="any"/>
79
+ <xs:element name="type" substitutionGroup="any"/>
80
+ <xs:element name="format" substitutionGroup="any"/>
81
+ <xs:element name="identifier" substitutionGroup="any"/>
82
+ <xs:element name="source" substitutionGroup="any"/>
83
+ <xs:element name="language" substitutionGroup="any"/>
84
+ <xs:element name="relation" substitutionGroup="any"/>
85
+ <xs:element name="coverage" substitutionGroup="any"/>
86
+ <xs:element name="rights" substitutionGroup="any"/>
87
+
88
+ <xs:group name="elementsGroup">
89
+ <xs:annotation>
90
+ <xs:documentation xml:lang="en">
91
+ This group is included as a convenience for schema authors
92
+ who need to refer to all the elements in the
93
+ http://purl.org/dc/elements/1.1/ namespace.
94
+ </xs:documentation>
95
+ </xs:annotation>
96
+
97
+ <xs:sequence>
98
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
99
+ <xs:element ref="any"/>
100
+ </xs:choice>
101
+ </xs:sequence>
102
+ </xs:group>
103
+
104
+ <xs:complexType name="elementContainer">
105
+ <xs:annotation>
106
+ <xs:documentation xml:lang="en">
107
+ This complexType is included as a convenience for schema authors who need to define a root
108
+ or container element for all of the DC elements.
109
+ </xs:documentation>
110
+ </xs:annotation>
111
+
112
+ <xs:choice>
113
+ <xs:group ref="elementsGroup"/>
114
+ </xs:choice>
115
+ </xs:complexType>
116
+
117
+
118
+ </xs:schema>
@@ -0,0 +1,50 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
3
+ xmlns="http://purl.org/dc/dcmitype/"
4
+ targetNamespace="http://purl.org/dc/dcmitype/"
5
+ elementFormDefault="qualified"
6
+ attributeFormDefault="unqualified">
7
+
8
+ <xs:annotation>
9
+ <xs:documentation xml:lang="en">
10
+ DCMI Type Vocabulary XML Schema
11
+ XML Schema for http://purl.org/dc/dcmitype/ namespace
12
+
13
+ Created 2003-04-02
14
+
15
+ Created by
16
+
17
+ Tim Cole (t-cole3@uiuc.edu)
18
+ Tom Habing (thabing@uiuc.edu)
19
+ Jane Hunter (jane@dstc.edu.au)
20
+ Pete Johnston (p.johnston@ukoln.ac.uk),
21
+ Carl Lagoze (lagoze@cs.cornell.edu)
22
+
23
+ This schema defines a simpleType which enumerates
24
+ the allowable values for the DCMI Type Vocabulary.
25
+ </xs:documentation>
26
+
27
+
28
+ </xs:annotation>
29
+
30
+
31
+ <xs:simpleType name="DCMIType">
32
+ <xs:union>
33
+ <xs:simpleType>
34
+ <xs:restriction base="xs:Name">
35
+ <xs:enumeration value="Collection"/>
36
+ <xs:enumeration value="Dataset"/>
37
+ <xs:enumeration value="Event"/>
38
+ <xs:enumeration value="Image"/>
39
+ <xs:enumeration value="InteractiveResource"/>
40
+ <xs:enumeration value="Service"/>
41
+ <xs:enumeration value="Software"/>
42
+ <xs:enumeration value="Sound"/>
43
+ <xs:enumeration value="Text"/>
44
+ <xs:enumeration value="PhysicalObject"/>
45
+ </xs:restriction>
46
+ </xs:simpleType>
47
+ </xs:union>
48
+ </xs:simpleType>
49
+
50
+ </xs:schema>