Bonejob

DOIO XML Serialization object.

Mar 9th, 2021
822
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 9.26 KB | None | 0 0
  1.  
  2. // journalXML
  3. // Author: Richard Barnes
  4. // Date: March 1st, 2021
  5. // Updated: March 2nd, 2021
  6. // Purpose: A class to create the xml required for submission to the CrossRef endpoint.
  7. // This file was generated from a template xml document called journal.xml
  8. // These files are stored in the root of the Git structure in a folder called Specifications.
  9. // From a visual studio cmd prompt use;
  10. // xsd journal.xml
  11. // xsd /c /l:cs journal.xsd
  12.  
  13. using System;
  14. using System.Globalization;
  15. using System.Web.Configuration;
  16.  
  17. namespace NORMIN.DOI
  18. {
  19.     /// <remarks/>
  20.     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
  21.     [System.SerializableAttribute()]
  22.     [System.Diagnostics.DebuggerStepThroughAttribute()]
  23.     [System.ComponentModel.DesignerCategoryAttribute("code")]
  24.     [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.crossref.org/schema/4.4.2")]
  25.     [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.crossref.org/schema/4.4.2", IsNullable=false)]
  26.     public class DoiBatch {
  27.  
  28.         private DoiBatchHead[] _headField;
  29.         private DoiBatchBodyJournalJournalMetadata[][][] _bodyField;
  30.         private string _versionField;
  31.  
  32.         /// <remarks/>
  33.         [System.Xml.Serialization.XmlElementAttribute("head")]
  34.         public DoiBatchHead[] Head {
  35.             get => this._headField;
  36.             set => this._headField = value;
  37.         }
  38.  
  39.         /// <remarks/>
  40.         [System.Xml.Serialization.XmlArrayItemAttribute("journal", typeof(DoiBatchBodyJournalJournalMetadata[]), IsNullable=false)]
  41.         [System.Xml.Serialization.XmlArrayItemAttribute("journal_metadata", typeof(DoiBatchBodyJournalJournalMetadata), IsNullable=false, NestingLevel=1)]
  42.         public DoiBatchBodyJournalJournalMetadata[][][] Body {
  43.             get => this._bodyField;
  44.             set => this._bodyField = value;
  45.         }
  46.  
  47.         /// <remarks/>
  48.         [System.Xml.Serialization.XmlAttributeAttribute()]
  49.         public string Version {
  50.             get => this._versionField;
  51.             set => this._versionField = value;
  52.         }
  53.     }
  54.  
  55.     /// <remarks/>
  56.     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
  57.     [System.SerializableAttribute()]
  58.     [System.Diagnostics.DebuggerStepThroughAttribute()]
  59.     [System.ComponentModel.DesignerCategoryAttribute("code")]
  60.     [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.crossref.org/schema/4.4.2")]
  61.     public class DoiBatchHead {
  62.  
  63.         private string _doiBatchIdField;
  64.  
  65.         private string _timestampField;
  66.  
  67.         private string _registrantField;
  68.  
  69.         private DoiBatchHeadDepositor[] _depositorField;
  70.  
  71.         /// <remarks/>
  72.         public string DoiBatchId {
  73.             get => this._doiBatchIdField;
  74.             set => this._doiBatchIdField = value;
  75.         }
  76.  
  77.         /// <remarks/>
  78.         public string Timestamp {
  79.             get => this._timestampField;
  80.             set => this._timestampField = value;
  81.         }
  82.  
  83.         /// <remarks/>
  84.         public string Registrant {
  85.             get => this._registrantField;
  86.             set => this._registrantField = value;
  87.         }
  88.  
  89.         /// <remarks/>
  90.         [System.Xml.Serialization.XmlElementAttribute("depositor")]
  91.         public DoiBatchHeadDepositor[] Depositor {
  92.             get => this._depositorField;
  93.             set => this._depositorField = value;
  94.         }
  95.     }
  96.  
  97.     /// <remarks/>
  98.     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
  99.     [System.SerializableAttribute()]
  100.     [System.Diagnostics.DebuggerStepThroughAttribute()]
  101.     [System.ComponentModel.DesignerCategoryAttribute("code")]
  102.     [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.crossref.org/schema/4.4.2")]
  103.     public class DoiBatchHeadDepositor {
  104.  
  105.         private string _depositorNameField;
  106.  
  107.         private string _emailAddressField;
  108.  
  109.         /// <remarks/>
  110.         public string DepositorName {
  111.             get => this._depositorNameField;
  112.             set => this._depositorNameField = value;
  113.         }
  114.  
  115.         /// <remarks/>
  116.         public string EmailAddress {
  117.             get => this._emailAddressField;
  118.             set => this._emailAddressField = value;
  119.         }
  120.     }
  121.  
  122.     /// <remarks/>
  123.     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
  124.     [System.SerializableAttribute()]
  125.     [System.Diagnostics.DebuggerStepThroughAttribute()]
  126.     [System.ComponentModel.DesignerCategoryAttribute("code")]
  127.     [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.crossref.org/schema/4.4.2")]
  128.     public class DoiBatchBodyJournalJournalMetadata {
  129.  
  130.         private string _fullTitleField;
  131.  
  132.         private string _abbrevTitleField;
  133.  
  134.         private DoiBatchBodyJournalJournalMetadataDoiData[] _doiDataField;
  135.  
  136.         private string _languageField;
  137.  
  138.         /// <remarks/>
  139.         public string FullTitle {
  140.             get => this._fullTitleField;
  141.             set => this._fullTitleField = value;
  142.         }
  143.  
  144.         /// <remarks/>
  145.         public string AbbrevTitle {
  146.             get => this._abbrevTitleField;
  147.             set => this._abbrevTitleField = value;
  148.         }
  149.  
  150.         /// <remarks/>
  151.         [System.Xml.Serialization.XmlElementAttribute("doi_data")]
  152.         public DoiBatchBodyJournalJournalMetadataDoiData[] DoiData {
  153.             get => this._doiDataField;
  154.             set => this._doiDataField = value;
  155.         }
  156.  
  157.         /// <remarks/>
  158.         [System.Xml.Serialization.XmlAttributeAttribute()]
  159.         public string Language {
  160.             get => this._languageField;
  161.             set => this._languageField = value;
  162.         }
  163.     }
  164.  
  165.     /// <remarks/>
  166.     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
  167.     [System.SerializableAttribute()]
  168.     [System.Diagnostics.DebuggerStepThroughAttribute()]
  169.     [System.ComponentModel.DesignerCategoryAttribute("code")]
  170.     [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.crossref.org/schema/4.4.2")]
  171.     public class DoiBatchBodyJournalJournalMetadataDoiData {
  172.  
  173.         private string _doiField;
  174.  
  175.         private string _resourceField;
  176.  
  177.         /// <remarks/>
  178.         public string Doi {
  179.             get => this._doiField;
  180.             set => this._doiField = value;
  181.         }
  182.  
  183.         /// <remarks/>
  184.         public string Resource {
  185.             get => this._resourceField;
  186.             set => this._resourceField = value;
  187.         }
  188.     }
  189.  
  190.     /// <remarks/>
  191.     [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.8.3928.0")]
  192.     [System.SerializableAttribute()]
  193.     [System.Diagnostics.DebuggerStepThroughAttribute()]
  194.     [System.ComponentModel.DesignerCategoryAttribute("code")]
  195.     [System.Xml.Serialization.XmlTypeAttribute(AnonymousType=true, Namespace="http://www.crossref.org/schema/4.4.2")]
  196.     [System.Xml.Serialization.XmlRootAttribute(Namespace="http://www.crossref.org/schema/4.4.2", IsNullable=false)]
  197.     public class NewDataSet {
  198.  
  199.         private DoiBatch[] _itemsField;
  200.  
  201.         /// <remarks/>
  202.         [System.Xml.Serialization.XmlElementAttribute("doi_batch")]
  203.         public DoiBatch[] Items {
  204.             get => this._itemsField;
  205.             set => this._itemsField = value;
  206.         }
  207.     }
  208.    
  209.     public class CreateXml
  210.     {
  211.         public DoiBatch Create(JournalPostData jPost)
  212.         {
  213.             // Create Batch
  214.             DoiBatch doiBatch = new DoiBatch();
  215.  
  216.             #region Header
  217.  
  218.             // Create header for batch
  219.             DoiBatchHead doiHead = new DoiBatchHead();
  220.             // create depositor
  221.             DoiBatchHeadDepositor doiDepositor = new DoiBatchHeadDepositor
  222.             {
  223.                 DepositorName = jPost.DepositorName,
  224.                 EmailAddress = jPost.DepositorEmail
  225.             };
  226.             // add depositor to head.
  227.             doiHead.Depositor = new[] {doiDepositor};
  228.             // give it a unique guid.
  229.             doiHead.DoiBatchId = new Guid().ToString();
  230.             // give it a timestamp. Don't use local culture so the date settings on system do not matter.
  231.             doiHead.Timestamp = DateTime.Now.ToOADate().ToString(CultureInfo.InvariantCulture);
  232.             // set owner organization.
  233.             doiHead.Registrant = jPost.DepositorName;
  234.  
  235.             #endregion
  236.  
  237.             #region Body
  238.  
  239.             // create body
  240.             DoiBatchBodyJournalJournalMetadata doiBody = new DoiBatchBodyJournalJournalMetadata();
  241.             DoiBatchBodyJournalJournalMetadataDoiData doiBodyData = new DoiBatchBodyJournalJournalMetadataDoiData();
  242.             // set DOI Reference ID and journal location.
  243.             doiBodyData.Doi = jPost.DoiPrefix + jPost.RefNum;
  244.             doiBodyData.Resource = jPost.BaseUrl + @"?refnum=" + jPost.RefNum;
  245.  
  246.             // Fill body
  247.  
  248.             doiBody.DoiData = new[] { doiBodyData };
  249.             doiBody.FullTitle = jPost.Title;
  250.             doiBody.AbbrevTitle = jPost.Title.Substring(0, 10); //truncate title.
  251.             doiBody.Language = "EN";
  252.  
  253.             // Fill batch
  254.  
  255.             doiBatch.Head = new [] { doiHead };
  256.             doiBatch.Body = new[] { new[]{ new []{doiBody}}};
  257.  
  258.             return doiBatch;
  259.         #endregion
  260.         }
  261.     }
  262.  
  263. }
  264.  
  265.  
  266.  
Advertisement
Add Comment
Please, Sign In to add comment