elibri_onix 0.2.3 → 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.
@@ -2,26 +2,24 @@
2
2
  module Elibri
3
3
  module ONIX
4
4
  module Release_3_0
5
-
5
+ #Klasa reprezentująca produkt
6
+ #Niektóre pola mogą pozostać bez wartości - zależy to od formy produktu
6
7
  class Product
7
8
 
8
- #class representing one Product from eLibri.
9
- #important thing - record reference is unique eLibri identifier
10
-
11
-
9
+ #:nodoc:
12
10
  ATTRIBUTES =
13
11
  [
14
12
  :elibri_dialect, :height, :width, :thickness, :weight, :ean, :isbn13, :number_of_pages, :duration,
15
13
  :file_size, :publisher_name, :publisher_id, :imprint_name, :current_state, :reading_age_from, :reading_age_to,
16
14
  :table_of_contents, :description, :reviews, :excerpts, :series, :title, :subtitle, :collection_title,
17
15
  :collection_part, :full_title, :original_title, :trade_title, :parsed_publishing_date, :record_reference,
18
- :deletion_text, :cover_type, :cover_price, :vat, :pkwiu, :product_composition, :product_form, :imprint,
16
+ :deletion_text, :cover_type, :cover_price, :vat, :pkwiu, :product_composition,
19
17
  :publisher, :product_form, :no_contributor, :edition_statement, :number_of_illustrations, :publishing_status,
20
18
  :publishing_date, :premiere, :front_cover, :series_names, :city_of_publication,
21
19
  :elibri_product_category1_id, :elibri_product_category2_id, :preview_exists, :short_description, :sale_restricted_to_poland
22
20
  ]
23
21
 
24
-
22
+ #:nodoc:
25
23
  RELATIONS =
26
24
  [
27
25
  :contributors, #IMPORTANT
@@ -34,24 +32,166 @@ module Elibri
34
32
  :cover_designers, :inked_or_colored_bys, :editors, :revisors, :translators, :editor_in_chiefs, :read_bys
35
33
  ]
36
34
 
37
- attr_accessor :elibri_dialect, :height, :width, :thickness, :weight, :ean, :isbn13, :number_of_pages, :duration,
38
- :file_size, :publisher_name, :publisher_id, :imprint_name, :current_state, :reading_age_from, :reading_age_to,
39
- :table_of_contents, :description, :reviews, :excerpts, :series, :title, :subtitle, :collection_title,
40
- :collection_part, :full_title, :original_title, :trade_title, :short_description,
41
- :elibri_product_category1_id, :elibri_product_category2_id, :preview_exists, :unlimited_licence,
42
- :licence_limited_to_before_type_cast, :licence_limited_to, :digital_formats, :technical_protection
35
+ #:doc:
36
+ #wysokość w milimetrach
37
+ attr_reader :height
38
+
39
+ #szerokość w milimetrach
40
+ attr_reader :width
41
+
42
+ #gruboś w milimetrach
43
+ attr_reader :thickness
44
+
45
+ #waga w gramach
46
+ attr_reader :weight
47
+
48
+ #ean, jeśli jest inny, niż isbn13
49
+ attr_reader :ean
50
+
51
+ #isbn13 - bez kresek
52
+ attr_reader :isbn13
53
+
54
+ #ilość stron w książce drukowanej
55
+ attr_reader :number_of_pages
56
+
57
+ #czas trwania nagrania w audiobooku, w minutach
58
+ attr_reader :duration
59
+
60
+ #nazwa wydawnictwa
61
+ attr_reader :publisher_name
62
+
63
+ #ID wydawnictwa w systemie elibri
64
+ attr_reader :publisher_id
65
+
66
+ #Imprint, jeśli wydawnictwo używa imprintów. Jeżeli wydawnictwo podało imprint, to ta wartość powinna zostać wyświetlona
67
+ #użytkownikowi w sklepie jako nazwa wydawnictwa.
68
+ attr_reader :imprint_name
69
+
70
+ #Status produktu - jedna z wartości: announced, :preorder, :published, :out_of_print
71
+ attr_reader :current_state
72
+
73
+ #Wiek czytelnika - od
74
+ attr_reader :reading_age_from
75
+
76
+ #Wiek czytelnika - do
77
+ attr_reader :reading_age_to
78
+
79
+ #Spis treści - jeśli wydawca takowy umieścił
80
+ attr_reader :table_of_contents
81
+
82
+ #Opis produktu
83
+ attr_reader :description
84
+
85
+ #lista serii, w postaci [nazwa serii, numer w serii]
86
+ attr_reader :series
87
+
88
+ #tytuł ksiażki
89
+ attr_reader :title
90
+
91
+ #podtytuł
92
+ attr_reader :subtitle
93
+
94
+ #nazwa cyklu (częste przy komiksach, gdy seria jest częścią tytułu, np. Thorgal)
95
+ attr_reader :collection_title
96
+
97
+ #numer w cyklu
98
+ attr_reader :collection_part
99
+
100
+ #pełen tytuł
101
+ attr_reader :full_title
102
+
103
+ #tytuł oryginału
104
+ attr_reader :original_title
105
+
106
+ #krótki opis, jeśli wydawca takowy zamieści
107
+ attr_reader :short_description
108
+
109
+ #id kategorii elibri (1)
110
+ attr_reader :elibri_product_category1_id
111
+
112
+ #id kategorii elibri (2)
113
+ attr_reader :elibri_product_category2_id
114
+
115
+ #data końca licencji, jeśli licencja nie jest bezterminowa, w formacie YYYYMMDD
116
+ attr_reader :licence_limited_to_before_type_cast
117
+
118
+ #data końca licencji, jeśli licencja nie jest bezterminowa, instancja Date
119
+ attr_reader :licence_limited_to
120
+
121
+ #lista formatów, w jakich jest dostępny ebook (PDF, MOBI, EPUB)
122
+ attr_reader :digital_formats
123
+
124
+ #sposób zabezpieczania pliki (DRM, WATERMARK) - pliki dostępne w API transakcyjnym zawsze będą chronione watermarkiem
125
+ attr_reader :technical_protection
43
126
 
44
- #from xml_accessor
45
- attr_accessor :record_reference, :notification_type, :deletion_text
46
-
47
- # Load attributes specific for dialect 3.0.1
48
- attr_accessor :cover_type_from_3_0_1, :cover_price_from_3_0_1, :vat_from_3_0_1, :pkwiu_from_3_0_1, :preview_exists_from_3_0_1,
49
- :product_composition, :product_form, :measures, :title_details, :collections, :contributors, :no_contributor,
50
- :languages, :extents, :subjects, :audience_ranges, :edition_statement, :number_of_illustrations, :text_contents,
51
- :supporting_resources, :imprint, :publisher, :publishing_status, :publishing_date, :sales_restrictions,
52
- :identifiers, :related_products, :supply_details, :to_xml, :city_of_publication, :sale_restricted_to_poland
127
+ #record reference - wewnętrzny identyfikator rekordu, niezmienny i unikatowy
128
+ attr_reader :record_reference
129
+
130
+ #typ okładki, np. 'miękka ze skrzydełkami'
131
+ attr_reader :cover_type
132
+
133
+ #sugerowana cena detaliczna brutto produktu
134
+ attr_reader :cover_price
135
+
136
+ #stawka VAT
137
+ attr_reader :vat
138
+
139
+ #PKWiU
140
+ attr_reader :pkwiu
53
141
 
142
+ #kod ONIX typu produktu, np. 'BA' - lista dostępna pod adresem
143
+ #https://github.com/elibri/elibri_onix_dict/blob/master/lib/elibri_onix_dict/onix_3_0/serialized/ProductFormCode.yml
144
+ attr_reader :product_form
54
145
 
146
+ #lista autorów, tłumaczy i innych, którzy mieli wkład w książkę, lista instancji Contributor
147
+ attr_reader :contributors
148
+
149
+ #lista języków, lista intancji Language
150
+ attr_reader :languages
151
+
152
+ #informacja o numerze wydania
153
+ attr_reader :edition_statement
154
+
155
+ #liczba ilustracji
156
+ attr_reader :number_of_illustrations
157
+
158
+ #reprezentacja xml dla produktu
159
+ attr_reader :to_xml
160
+
161
+ #miasto, w którym została wydana ksiażka
162
+ attr_reader :city_of_publication
163
+
164
+ #:nodoc:
165
+ attr_reader :text_contents
166
+ attr_reader :file_size
167
+ attr_reader :elibri_dialect
168
+ attr_reader :reviews
169
+ attr_reader :excerpts
170
+ attr_reader :trade_title
171
+ attr_reader :notification_type
172
+ attr_reader :deletion_text
173
+ attr_reader :product_composition
174
+ attr_reader :measures
175
+ attr_reader :imprint
176
+ attr_reader :publisher
177
+ attr_reader :publishing_status
178
+ attr_reader :title_details
179
+ attr_reader :collections
180
+ attr_reader :extents
181
+ attr_reader :subjects
182
+ attr_reader :audience_ranges
183
+ attr_reader :supply_details
184
+ attr_reader :identifiers
185
+ attr_reader :no_contributor
186
+ attr_reader :supporting_resources
187
+ attr_reader :sales_restrictions
188
+ attr_reader :publishing_date
189
+ attr_reader :related_products
190
+
191
+ #:nodoc:
192
+ attr_accessor :sale_restricted_to_poland, :unlimited_licence, :no_contributor, :preview_exists
193
+
194
+ #:doc:
55
195
  def initialize(data)
56
196
  @to_xml = data.to_s
57
197
  #initialize variables that need to be array
@@ -76,11 +216,11 @@ module Elibri
76
216
  @record_reference = data.at_xpath('xmlns:RecordReference').try(:text)
77
217
  @notification_type = data.at_xpath('xmlns:NotificationType').try(:text)
78
218
  @deletion_text = data.at_xpath('xmlns:DeletionText').try(:text)
79
- @cover_type_from_3_0_1 = data.at_xpath('elibri:CoverType').try(:text)
80
- @cover_price_from_3_0_1 = BigDecimal.new(data.at_xpath('elibri:CoverPrice').try(:text)) if data.at_xpath('elibri:CoverPrice')
81
- @vat_from_3_0_1 = data.at_xpath('elibri:Vat').try(:text).try(:to_i)
82
- @pkwiu_from_3_0_1 = data.at_xpath('elibri:PKWiU').try(:text)
83
- @preview_exists_from_3_0_1 = data.at_xpath('elibri:preview_exists').try(:text)
219
+ @cover_type = data.at_xpath('elibri:CoverType').try(:text)
220
+ @cover_price = BigDecimal.new(data.at_xpath('elibri:CoverPrice').try(:text)) if data.at_xpath('elibri:CoverPrice')
221
+ @vat = data.at_xpath('elibri:Vat').try(:text).try(:to_i)
222
+ @pkwiu = data.at_xpath('elibri:PKWiU').try(:text)
223
+ @preview_exists = (data.at_xpath('elibri:preview_exists').try(:text) == "true")
84
224
  @identifiers = data.xpath('xmlns:ProductIdentifier').map { |ident_data| ProductIdentifier.new(ident_data) }
85
225
  begin
86
226
  @related_products = data.at_xpath('xmlns:RelatedMaterial').xpath('xmlns:RelatedProduct').map { |related_data| RelatedProduct.new(related_data) }
@@ -116,7 +256,7 @@ module Elibri
116
256
  @title_details = data.xpath('xmlns:TitleDetail').map { |title_data| TitleDetail.new(title_data) }
117
257
  @collections = data.xpath('xmlns:Collection').map { |collection_data| Collection.new(collection_data) }
118
258
  @contributors = data.xpath('xmlns:Contributor').map { |contributor_data| Contributor.new(contributor_data) }
119
- @no_contributor = data.at_xpath('xmlns:NoContributor').try(:text)
259
+ @no_contributor = !!data.at_xpath('xmlns:NoContributor')
120
260
  @languages = data.xpath('xmlns:Language').map { |language_data| Language.new(language_data) }
121
261
  @extents = data.xpath('xmlns:Extent').map { |extent_data| Extent.new(extent_data) }
122
262
  @subjects = data.xpath('xmlns:Subject').map { |subject_data| Subject.new(subject_data) }
@@ -159,32 +299,35 @@ module Elibri
159
299
 
160
300
  end
161
301
 
162
- # Attributes in namespace elibri:* are specific for dialect >= 3.0.1.
163
- # If dialect is less than 3.0.1, returns nil.
164
- %w{cover_type cover_price vat pkwiu}.each do |method_name|
165
- module_eval(<<-EVAL_END, __FILE__, __LINE__ + 1)
166
- def #{method_name} # def vat
167
- if @elibri_dialect.to_s >= '3.0.1' # if @elibri_dialect.to_s >= '3.0.1'
168
- #{method_name}_from_3_0_1 # vat_from_3_0_1
169
- else # else
170
- nil # nil
171
- end # end
172
- end # end
173
- EVAL_END
174
- end
175
-
176
302
  def sales_restrictions?
177
303
  @sales_restrictions.size > 0
178
304
  end
179
305
 
306
+ #flaga, czy sprzedaż książki jest ograniczona do Polski
307
+ def sale_restricted_to_poland?
308
+ @sale_restricted_to_poland
309
+ end
310
+
311
+ #flaga informująca, czy licencja jest bezterminowa
312
+ def unlimited_licence?
313
+ @unlimited_licence
314
+ end
315
+
316
+ #flaga - true, jeśli produkt nie ma żadnego autora
180
317
  def no_contributor?
181
- @no_contributor == ""
318
+ @no_contributor
182
319
  end
183
320
 
321
+ #flaga, czy książka to praca zbiorowa?
184
322
  def unnamed_persons?
185
323
  @contributors.size == 1 && contributors[0].unnamed_persons.present?
186
324
  end
187
325
 
326
+ #flaga, czy istnieje podgląd produktu
327
+ def preview_exists?
328
+ @preview_exists
329
+ end
330
+
188
331
  def authors
189
332
  unnamed_persons? ? ["praca zbiorowa"] : @contributors.find_all { |c| c.role_name == "author" }.map(&:person_name)
190
333
  end
@@ -202,27 +345,36 @@ module Elibri
202
345
  end
203
346
  end
204
347
 
348
+ #czy istnieje podgląd?
205
349
  def preview_exists?
206
350
  @preview_exists
207
351
  end
208
352
 
353
+ #okładka ksiązki, instance SupportingResource
209
354
  def front_cover
210
355
  @supporting_resources.find { |resource| resource.content_type_name == "front_cover" }
211
356
  end
212
357
 
358
+ #lista nazwa serii, do których należy produkt
213
359
  def series_names
214
360
  @series.map { |series| series[0] }
215
361
  end
216
362
 
363
+ #data premiery, jako instancja Date (tylko wtedy, gdy dokładna data jest znana)
217
364
  def premiere
218
365
  Date.new(*parsed_publishing_date) if parsed_publishing_date.size == 3
219
366
  end
367
+
368
+ def related_products_record_references
369
+ related_products.map(&:record_reference)
370
+ end
220
371
 
372
+ #:nodoc:
221
373
  def proprietary_identifiers
222
374
  @identifiers.find_all { |i| i.identifier_type == "proprietary" }.inject({}) { |res, ident| res[ident.type_name] = ident.value; res }
223
375
  end
224
376
 
225
- #I don't want to see roxml_references in output - it's faar to big output
377
+ #:nodoc:
226
378
  def pretty_print_instance_variables
227
379
  (instance_variables - ["@roxml_references", "@measures", "@identifiers", "@notification_type", "@publishing_status",
228
380
  "@elibri_dialect", "@product_composition", "@extents", "@publisher", "@imprint",
@@ -231,7 +383,7 @@ module Elibri
231
383
  }.sort
232
384
  end
233
385
 
234
-
386
+ #:nodoc:
235
387
  def pretty_print(pp)
236
388
  pp.object_address_group(self) {
237
389
  pp.seplist(self.pretty_print_instance_variables, lambda { pp.text ',' }) {|v|
@@ -246,7 +398,9 @@ module Elibri
246
398
  }
247
399
  }
248
400
  end
249
-
401
+
402
+ #data premiery w postaci listy [rok, miesiąc, dzień], [rok, miesiąc], [rok], lub pustej listy - jeśli data premiery nie jest znana
403
+ #(data premiery może nie być znana w przypadku backlisty)
250
404
  def parsed_publishing_date
251
405
  if sales_restrictions?
252
406
  date = sales_restrictions[0].end_date
@@ -259,7 +413,7 @@ module Elibri
259
413
  end
260
414
 
261
415
 
262
- private
416
+ private
263
417
 
264
418
  def find_title(code)
265
419
  @title_details.find {|title_detail| title_detail.type == code}
@@ -279,8 +433,8 @@ private
279
433
  @publisher_id = @publisher.eid if publisher
280
434
  @imprint_name = @imprint.name if imprint
281
435
  @isbn13 = @identifiers.find { |identifier| identifier.identifier_type == "isbn13" }.try(:value)
282
- @reading_age_from = @audience_ranges.find {|ar| (ar.qualifier == "18") && (ar.precision == "03")}.try(:value)
283
- @reading_age_to = @audience_ranges.find {|ar| (ar.qualifier == "18") && (ar.precision == "04")}.try(:value)
436
+ @reading_age_from = @audience_ranges.find {|ar| (ar.qualifier == "18") && (ar.precision == "03")}.try(:value).try(:to_i)
437
+ @reading_age_to = @audience_ranges.find {|ar| (ar.qualifier == "18") && (ar.precision == "04")}.try(:value).try(:to_i)
284
438
  @table_of_contents = @text_contents.find { |t| t.type_name == "table_of_contents" }
285
439
  @description = @text_contents.find { |t| t.type_name == "main_description" }
286
440
  @short_description = @text_contents.find { |t| t.type_name == "short_description" }
@@ -300,7 +454,6 @@ private
300
454
 
301
455
  @elibri_product_category1_id = subjects[0].code if subjects[0]
302
456
  @elibri_product_category2_id = subjects[1].code if subjects[1]
303
- @preview_exists = (preview_exists_from_3_0_1 == "true")
304
457
 
305
458
  compute_state!
306
459
  end
@@ -3,21 +3,29 @@ module Elibri
3
3
  module ONIX
4
4
  module Release_3_0
5
5
 
6
+ #product identifier, for example isbn
6
7
  class ProductIdentifier
7
8
 
8
- #from ONIX documentation:
9
- #A repeatable group of data elements which together define an identifier of a product in accordance with a specified scheme.
10
- #As well as standard identifiers, the composite allows proprietary identifiers (SKUs) assigned by wholesalers or
11
- #vendors to be sent as part of the ONIX record.
12
-
13
9
  include HashId
14
10
 
15
- attr_accessor :type, :type_name, :value, :to_xml
11
+ #onix code of type (see elibri_onix_dict, Elibri::ONIX::Dict::Release_3_0::ProductIDType)
12
+ attr_accessor :type
13
+
14
+ #if type is prioprietery (01) - then the name of type
15
+ attr_accessor :type_name
16
+
17
+ #identifier value
18
+ attr_accessor :value
19
+
20
+ #xml representation of identifier
21
+ attr_accessor :to_xml
16
22
 
23
+ #:nodoc:
17
24
  ATTRIBUTES = [
18
25
  :type, :type_name, :value, :identifier_type
19
26
  ]
20
27
 
28
+ #:nodoc:
21
29
  RELATIONS = [
22
30
  :inspect_include_fields
23
31
  ]
@@ -29,10 +37,12 @@ module Elibri
29
37
  @value = data.at_xpath('xmlns:IDValue').try(:text)
30
38
  end
31
39
 
40
+ #returs the string name of value type
32
41
  def identifier_type
33
42
  Elibri::ONIX::Dict::Release_3_0::ProductIDType.find_by_onix_code(@type).const_name.downcase
34
43
  end
35
44
 
45
+ #:nodoc:
36
46
  def inspect_include_fields
37
47
  [:identifier_type]
38
48
  end
@@ -1,7 +1,5 @@
1
1
 
2
2
 
3
-
4
-
5
3
  module Elibri
6
4
  module ONIX
7
5
  module Release_3_0
@@ -12,16 +10,20 @@ module Elibri
12
10
  #An optional and repeatable group of data elements which together describe a product which has a specified relationship
13
11
  #to the product described in the ONIX record.
14
12
  include HashId
15
-
13
+
14
+ #:nodoc:
16
15
  ATTRIBUTES = [
17
16
  :relation_code, :proprietary_identifiers, :record_reference
18
17
  ]
19
18
 
19
+ #:nodoc:
20
20
  RELATIONS = [
21
21
  :identifiers
22
22
  ]
23
23
 
24
- attr_accessor :relation_code, :identifiers, :to_xml
24
+ attr_reader :relation_code
25
+ attr_reader :identifiers
26
+ attr_reader :to_xml
25
27
 
26
28
  def initialize(data)
27
29
  @to_xml = data.to_s
@@ -2,19 +2,28 @@
2
2
  module Elibri
3
3
  module ONIX
4
4
  module Release_3_0
5
-
5
+
6
+ #Sender of the message
6
7
  class Sender
7
8
 
8
- #from ONIX documentation
9
- #A group of data elements which together specify the sender of an ONIX for Books message.
10
- #Mandatory in any ONIX for Books message, and non-repeating.
11
-
12
- attr_accessor :sender_name, :contact_name, :email_address, :to_xml
9
+ #name of company, which sent the message
10
+ attr_accessor :sender_name
11
+
12
+ #contact person
13
+ attr_accessor :contact_name
14
+
15
+ #contact email
16
+ attr_accessor :email_address
17
+
18
+ #xml representation of sender
19
+ attr_accessor :to_xml
13
20
 
21
+ #:nodoc:
14
22
  ATTRIBUTES = [
15
23
  :sender_name, :contact_name, :email_address
16
24
  ]
17
25
 
26
+ #:nodoc:
18
27
  RELATIONS = []
19
28
 
20
29
  def initialize(data)
@@ -2,7 +2,7 @@ module Elibri
2
2
  module ONIX
3
3
  z = $VERBOSE
4
4
  $VERBOSE = nil
5
- VERSION = "0.2.3"
5
+ VERSION = "0.2.4"
6
6
  Version = VERSION
7
7
  $VERBOSE = z
8
8
  end
@@ -6,10 +6,10 @@ describe Elibri::ONIX::Release_3_0::ONIXMessage do
6
6
  it "should be able to parse licence end info" do
7
7
 
8
8
  product = load_fixture("onix_unlimited_book_sample_example.xml")
9
- assert product.unlimited_licence
9
+ assert product.unlimited_licence?
10
10
 
11
11
  product = load_fixture("onix_epub_details_example.xml")
12
- assert !product.unlimited_licence
12
+ assert !product.unlimited_licence?
13
13
  assert_equal "20140307", product.licence_limited_to_before_type_cast
14
14
  assert_equal Date.new(2014, 3, 7), product.licence_limited_to
15
15
  end
@@ -167,20 +167,4 @@ describe Elibri::ONIX::Release_3_0::ONIXMessage do
167
167
  end
168
168
  end
169
169
 
170
-
171
- it "should consider elibri_dialect attribute and ignore attributes unrecognized in specified dialect" do
172
- xml_string = File.read File.join(File.dirname(__FILE__), "..", "test", "fixtures", "old_dialect.xml")
173
-
174
- onix = Elibri::ONIX::Release_3_0::ONIXMessage.new(xml_string)
175
- assert_equal '3.0', onix.release
176
- assert_equal '3.0.0', onix.elibri_dialect
177
-
178
- product = onix.products.first
179
- assert_equal '3.0.0', product.elibri_dialect
180
- assert_nil product.cover_type
181
- assert_nil product.cover_price
182
- assert_nil product.vat
183
- assert_nil product.pkwiu
184
- end
185
-
186
170
  end
@@ -0,0 +1,10 @@
1
+ require 'helper'
2
+
3
+ describe Elibri::ONIX::Release_3_0::ONIXMessage do
4
+
5
+ it "should be able to parse related products info" do
6
+ product = load_fixture("onix_related_products_example.xml")
7
+ assert_equal ["c486ef9c55659d3e123b"], product.related_products_record_references
8
+ end
9
+
10
+ end
@@ -6,9 +6,9 @@ describe Elibri::ONIX::Release_3_0::ONIXMessage do
6
6
  it "should be able to parse territorial rights info" do
7
7
 
8
8
  product1 = load_fixture("onix_territorial_rights_example.xml", 0)
9
- assert product1.sale_restricted_to_poland
9
+ assert product1.sale_restricted_to_poland?
10
10
 
11
11
  product2 = load_fixture("onix_territorial_rights_example.xml", 1)
12
- assert !product2.sale_restricted_to_poland
12
+ assert !product2.sale_restricted_to_poland?
13
13
  end
14
14
  end
@@ -0,0 +1,61 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <ONIXMessage xmlns="http://ns.editeur.org/onix/3.0/reference" xmlns:elibri="http://elibri.com.pl/ns/extensions" release="3.0">
3
+ <elibri:Dialect>3.0.1</elibri:Dialect>
4
+ <Header>
5
+ <Sender>
6
+ <SenderName>Elibri.com.pl</SenderName>
7
+ <ContactName>Tomasz Meka</ContactName>
8
+ <EmailAddress>kontakt@elibri.com.pl</EmailAddress>
9
+ </Sender>
10
+ <SentDateTime>20130124</SentDateTime>
11
+ </Header>
12
+ <Product>
13
+ <RecordReference>fdb8fa072be774d97a97</RecordReference>
14
+ <NotificationType>03</NotificationType>
15
+ <ProductIdentifier>
16
+ <ProductIDType>15</ProductIDType>
17
+ <IDValue>9788324799992</IDValue>
18
+ </ProductIdentifier>
19
+ <DescriptiveDetail>
20
+ <ProductComposition>00</ProductComposition>
21
+ <ProductForm>BA</ProductForm>
22
+ <TitleDetail>
23
+ <TitleType>01</TitleType>
24
+ <TitleElement>
25
+ <TitleElementLevel>01</TitleElementLevel>
26
+ <TitleText>Nielegalni</TitleText>
27
+ </TitleElement>
28
+ </TitleDetail>
29
+ </DescriptiveDetail>
30
+ <PublishingDetail>
31
+ <Publisher>
32
+ <PublishingRole>01</PublishingRole>
33
+ <PublisherIdentifier>
34
+ <PublisherIDType>01</PublisherIDType>
35
+ <IDTypeName>ElibriPublisherCode</IDTypeName>
36
+ <IDValue>11</IDValue>
37
+ </PublisherIdentifier>
38
+ <PublisherName>GREG</PublisherName>
39
+ </Publisher>
40
+ <CityOfPublication>Warszawa</CityOfPublication>
41
+ <PublishingStatus>04</PublishingStatus>
42
+ <SalesRights>
43
+ <SalesRightsType>01</SalesRightsType>
44
+ <Territory>
45
+ <RegionsIncluded>WORLD</RegionsIncluded>
46
+ </Territory>
47
+ </SalesRights>
48
+ </PublishingDetail>
49
+ <RelatedMaterial>
50
+ <RelatedProduct>
51
+ <ProductRelationCode>24</ProductRelationCode>
52
+ <ProductIdentifier>
53
+ <ProductIDType>01</ProductIDType>
54
+ <IDTypeName>elibri</IDTypeName>
55
+ <IDValue>c486ef9c55659d3e123b</IDValue>
56
+ </ProductIdentifier>
57
+ </RelatedProduct>
58
+ </RelatedMaterial>
59
+ <elibri:preview_exists>false</elibri:preview_exists>
60
+ </Product>
61
+ </ONIXMessage>