Skip to content
Julien Boulnois edited this page Jun 14, 2016 · 6 revisions

ONIX

Changement de prix et offres promotionnelles

ONIX 3.0 permet d'indiquer plusieurs prix dans l'avenir, ce qui permet de prévoir ces changements à l'avance. Cela implique que plusieurs balises sont renseignées, avec des sous éléments permettant d'isoler les dates où s'appliquent ces prix.

Par exemple, un titre qui aurait un prix initial de 6,99 euros puis une promotion à 2,99 entre le 14 avril et le 27 avril:

<Price>
 <PriceType>04</PriceType>
 <PriceAmount>6.99</PriceAmount>
 <Tax>
  <TaxType>01</TaxType>
  <TaxRatePercent>7.0</TaxRatePercent>
  <TaxAmount>0.46</TaxAmount>
 </Tax>
 <CurrencyCode>EUR</CurrencyCode>
 <PriceDate>
  <PriceDateRole>14</PriceDateRole>
  <Date>20120215</Date>
 </PriceDate>
 <PriceDate>
  <PriceDateRole>15</PriceDateRole>
  <Date>20120513</Date>
 </PriceDate>
</Price>
<Price>
<PriceType>04</PriceType>
 <PriceAmount>2.99</PriceAmount>
 <Tax>
  <TaxType>01</TaxType>
  <TaxRatePercent>7.0</TaxRatePercent>
  <TaxAmount>0.20</TaxAmount>
 </Tax>
 <CurrencyCode>EUR</CurrencyCode>
 <PriceDate>
  <PriceDateRole>14</PriceDateRole>
  <Date>20120514</Date>
 </PriceDate>
 <PriceDate>
  <PriceDateRole>15</PriceDateRole>
  <Date>20120527</Date>
 </PriceDate>
</Price>
<Price>
 <PriceType>04</PriceType>
 <PriceAmount>6.99</PriceAmount>
 <Tax>
  <TaxType>01</TaxType>
  <TaxRatePercent>7.0</TaxRatePercent>
  <TaxAmount>0.46</TaxAmount>
 </Tax>
 <CurrencyCode>EUR</CurrencyCode>
  <PriceDate>
   <PriceDateRole>14</PriceDateRole>
   <Date>20120528</Date>
  </PriceDate>
</Price>

La balise <Price> peut contenir d'aucune à deux balises <PriceDate>, la balise contient elle même une balise <PriceDateRole> qui indique s'il s'agit d'une date de début (14) ou une date de fin (15) :

  • lorsque qu'il n'y a pas de balise <PriceDate>, cela signifie qu'il n'y a aucun changement de prix annoncé
  • lorsque qu'il n'y a qu'une balise <PriceDate> avec <PriceDateRole>14</PriceDateRole>, cela signifie qu'il s'agit d'un changement de prix permanent à la <Date> indiquée
  • lorsque qu'il n'y a qu'une balise <PriceDate> avec <PriceDateRole>15</PriceDateRole>, cela signifie la fin du prix initial à la <Date> indiquée
  • enfin, lorsque qu'il y a deux balises <PriceDate> avec les deux <PriceDateRole>, il s'agit d'une promotion entre les deux dates.

Le prix courant peux ainsi être isolé en fonction de la date courante :

si pas de date_début ou date_courante >= date_debut  alors
 si pas de date_fin ou date_courante < date_fin alors
  vrai
 sinon
  faux
sinon
 faux

Même si les métadonnées sont renvoyées à chaque changement dans le prix courant, la meilleure solution consiste tout de même à sauvegarder ces changements de prix afin de les traiter localement à la date indiquée. Cela évite une durée delta de récupération des métadonnées (Dilicom).

Multi-formats

Afin de modéliser le multi-formats (plusieurs fichiers pour une offre commerciale), ONIX 3.0 permet l'utilisation de la balise <ProductPart>. Cette dernière étant plus limitée sémantiquement que la balise Product (pas de description de la protection par exemple), il faut coupler ProductPart avec des notice complète Product, indiqué comme "non vendu séparément"(<ProductAvailability>45</ProductAvailability>). Cela implique donc de croiser les notices Product avec leurs références dans les balises <ProductPart>.

Par exemple, il est proposé une offre commerciale multi-formats comprenant un ePub avec watermark et un PDF avec watermark.

Une notice Product PDF non vendable séparément est donc renseignée :

<Product>
 <RecordReference>immateriel.fr-RP11918</RecordReference>
 <NotificationType>03</NotificationType>
 <ProductIdentifier>
   <ProductIDType>01</ProductIDType>
   <IDValue>RP11918</IDValue>
 </ProductIdentifier>
 <ProductIdentifier>
   <ProductIDType>03</ProductIDType>
   <IDValue>3600120419194</IDValue>
 </ProductIdentifier>
 <DescriptiveDetail>
   <ProductComposition>00</ProductComposition>
   <ProductForm>ED</ProductForm>
   <ProductFormDetail>E107</ProductFormDetail>
   <ProductFormDescription>PDF avec Tatouage</ProductFormDescription>
   <ProductContentType>10</ProductContentType>
   <EpubTechnicalProtection>02</EpubTechnicalProtection>
   <EpubUsageConstraint>
     <EpubUsageType>02</EpubUsageType>
     <EpubUsageStatus>01</EpubUsageStatus>
   </EpubUsageConstraint>
   <EpubUsageConstraint>
     <EpubUsageType>03</EpubUsageType>
     <EpubUsageStatus>01</EpubUsageStatus>
   </EpubUsageConstraint>
   <EpubUsageConstraint>
     <EpubUsageType>04</EpubUsageType>
     <EpubUsageStatus>01</EpubUsageStatus>
   </EpubUsageConstraint>
  [...]
 <ProductSupply>
   <SupplyDetail>
     <Supplier>
       <SupplierRole>03</SupplierRole>
       <SupplierIdentifier>
         <SupplierIDType>02</SupplierIDType>
         <IDValue>D1</IDValue>
       </SupplierIdentifier>
       <SupplierIdentifier>
         <SupplierIDType>06</SupplierIDType>
         <IDValue>3012410001000</IDValue>
       </SupplierIdentifier>
       <SupplierName>immatériel·fr</SupplierName>
     </Supplier>
     **<ProductAvailability>45</ProductAvailability>**
     **<UnpricedItemType>03</UnpricedItemType>**
   </SupplyDetail>
 </ProductSupply>
</Product>

Et une notice Product pour l'ePub :

<Product>
 <RecordReference>immateriel.fr-RP11919</RecordReference>
 <NotificationType>03</NotificationType>
 <ProductIdentifier>
   <ProductIDType>01</ProductIDType>
   <IDValue>RP11919</IDValue>
 </ProductIdentifier>
 <ProductIdentifier>
   <ProductIDType>03</ProductIDType>
   <IDValue>3600120419200</IDValue>
 </ProductIdentifier>
 <DescriptiveDetail>
   <ProductComposition>00</ProductComposition>
   <ProductForm>ED</ProductForm>
   <ProductFormDetail>E101</ProductFormDetail>
   <ProductFormDescription>ePub avec Tatouage</ProductFormDescription>
   <ProductContentType>10</ProductContentType>
   <EpubTechnicalProtection>02</EpubTechnicalProtection>
   <EpubUsageConstraint>
     <EpubUsageType>02</EpubUsageType>
     <EpubUsageStatus>01</EpubUsageStatus>
   </EpubUsageConstraint>
   <EpubUsageConstraint>
     <EpubUsageType>03</EpubUsageType>
     <EpubUsageStatus>01</EpubUsageStatus>
   </EpubUsageConstraint>
   <EpubUsageConstraint>
     <EpubUsageType>04</EpubUsageType>
     <EpubUsageStatus>01</EpubUsageStatus>
   </EpubUsageConstraint>
[...]
 <ProductSupply>
   <SupplyDetail>
     <Supplier>
       <SupplierRole>03</SupplierRole>
       <SupplierIdentifier>
         <SupplierIDType>02</SupplierIDType>
         <IDValue>D1</IDValue>
       </SupplierIdentifier>
       <SupplierIdentifier>
         <SupplierIDType>06</SupplierIDType>
         <IDValue>3012410001000</IDValue>
       </SupplierIdentifier>
       <SupplierName>immatériel·fr</SupplierName>
     </Supplier>
     **<ProductAvailability>45</ProductAvailability>**
     **<UnpricedItemType>03</UnpricedItemType>**
   </SupplyDetail>
 </ProductSupply>
</Product>

Et enfin la notice Product de l'offre commerciale qui sera vendu, contenant les balises ProductPart faisant référence aux fiches précédentes :

<Product>
 <RecordReference>immateriel.fr-O108385</RecordReference>
 <NotificationType>03</NotificationType>
 <ProductIdentifier>
   <ProductIDType>01</ProductIDType>
   <IDValue>O108385</IDValue>
 </ProductIdentifier>
 <ProductIdentifier>
   <ProductIDType>03</ProductIDType>
   <IDValue>9782814504448</IDValue>
 </ProductIdentifier>
 <ProductIdentifier>
   <ProductIDType>15</ProductIDType>
   <IDValue>9782814504448</IDValue>
 </ProductIdentifier>
 <DescriptiveDetail>
   <ProductComposition>10</ProductComposition>
   <ProductForm>EA</ProductForm>
   <ProductFormDescription>Multi-format incluant PDF avec Tatouage, ePub avec Tatouage</ProductFormDescription>
   <ProductPart>
     <ProductIdentifier>
       <ProductIDType>01</ProductIDType>
       <IDValue>RP11918</IDValue>
     </ProductIdentifier>
     <ProductIdentifier>
       <ProductIDType>03</ProductIDType>
       **<IDValue>3600120419194</IDValue>**
     </ProductIdentifier>
     <ProductForm>ED</ProductForm>
     <ProductFormDetail>E107</ProductFormDetail>
     <ProductFormDescription>PDF avec Tatouage</ProductFormDescription>
     <ProductContentType>10</ProductContentType>
     <NumberOfCopies>1</NumberOfCopies>
   </ProductPart>
   <ProductPart>
     <ProductIdentifier>
       <ProductIDType>01</ProductIDType>
       <IDValue>RP11919</IDValue>
     </ProductIdentifier>
     <ProductIdentifier>
       <ProductIDType>03</ProductIDType>
       **<IDValue>3600120419200</IDValue>**
     </ProductIdentifier>
     <ProductForm>ED</ProductForm>
     <ProductFormDetail>E101</ProductFormDetail>
     <ProductFormDescription>ePub avec Tatouage</ProductFormDescription>
     <ProductContentType>10</ProductContentType>
     <NumberOfCopies>1</NumberOfCopies>
   </ProductPart>
...

Plusieurs manières de traiter ces données sont possibles :

  • faire une lecture croisée de l'ONIX en référençant dans un premier temps les notices "non vendues séparément" à partir de leur EAN (3xxx), puis récupérer les informations de ces notices dans un second temps via les balises ProductPart de l'offre commerciale. Il faut noter que les notices "non vendues séparément" arrivent toujours avant dans le flux ONIX, ce qui permet éventuellement un traitement séquentiel.
  • ignorer les notices "non vendues séparément" et s'en remettre aux balises description des balises ProductPart (exemple: <ProductFormDescription>ePub avec Tatouage</ProductFormDescription>)
  • ignorer les notices "non vendues séparément" ainsi que les balises ProductPart et s'en remettre à la balise description le l'offre commerciale (exemple: <ProductFormDescription>Multi-format incluant PDF avec Tatouage, ePub avec Tatouage</ProductFormDescription>)

Mise à jour des couvertures

 <SupportingResource>
     <ResourceContentType>01</ResourceContentType>
     <ContentAudience>00</ContentAudience>
     <ResourceMode>03</ResourceMode>
     <ResourceVersion>
       <ResourceForm>02</ResourceForm>
       <ResourceLink>[http://images.immateriel.fr/covers/9782362310614.png](http://images.immateriel.fr/covers/9782362310614.png)</ResourceLink>
       **<ContentDate>**
         **<ContentDateRole>17</ContentDateRole>**
         **<DateFormat>00</DateFormat>**
         **<Date>20130319</Date>**
       **</ContentDate>**
     </ResourceVersion>
  </SupportingResource>

La balise <ContentDate> avec le <ContentDateRole>17 (dernière mise à jour) permet de déterminer quand la couverture à été mise à jour et ainsi de ne la télécharger que si nécessaire. Si la date est supérieure à la date de la couverture dans votre système, vous devez la récupérer et la remplacer. Dans l'exemple précédent, on voit ainsi que la couverture a été mise à jour le 19 mars 2013.

Il faut noter que les extraits utilisent également le même schema.

Livres à paraître

 <MarketPublishingDetail>
   <MarketPublishingStatus>04</MarketPublishingStatus>
   <MarketDate>
     **<MarketDateRole>01</MarketDateRole>**
     <DateFormat>00</DateFormat>
     **<Date>20130415</Date>**
   </MarketDate>
 </MarketPublishingDetail>
 <SupplyDetail>
 ...
  **<ProductAvailability>10</ProductAvailability>**
 </SupplyDetail>

Les titres à paraître sont indiqués via ONIX avec le statut de disponibilité <ProductAvailability>10 (pas encore disponible), la date de mise en vente prévue est renseignée via <MarketDate>. Dans l'exemple ci-dessus, le titre sera effectivement en vente le 15 avril 2013.

Sans mise à jour entre temps, il est considéré que le produit doit être mis en vente à cette date. Malgré tout, un message de mise à jour rendant le livre disponible via <ProductAvailability>20 est envoyé le jour de la mise en vente.