/// <summary>
 /// Get DublinCore Metadata of supported file formats using IDublinCore Interface.
 /// Feature is supported in version 18.5 or greater of the API
 /// </summary>
 public static void GetDublinCoreMetadataUsingIDublinCore()
 {
     try
     {
         string[] files = Directory.GetFiles(XMPFilesDirectory);
         foreach (string file in files)
         {
             try
             {
                 using (FormatBase format = FormatFactory.RecognizeFormat(file))
                 {
                     IDublinCore dublinCoreContainer = format as IDublinCore;
                     if (dublinCoreContainer != null)
                     {
                         DublinCoreMetadata dublinCoreMetadata = dublinCoreContainer.GetDublinCore();
                         if (dublinCoreMetadata != null)
                         {
                             Console.WriteLine(dublinCoreMetadata.Creator);
                             Console.WriteLine(dublinCoreMetadata.Format);
                             Console.WriteLine(dublinCoreMetadata.Subject);
                         }
                     }
                 }
             }
             catch
             {
                 Console.WriteLine("Could not load {0}", file);
             }
         }
     }
     catch (Exception)
     {
         throw;
     }
 }
        public void DublinCoreMetadataConverter_Decode()
        {
            DublinCoreMetadata expected = new DublinCoreMetadata();

            expected.Title.Add("Title1");
            expected.Title.Add("Title2");
            expected.Creator.Add("Creator 1");
            expected.Creator.Add("Creator 2");
            expected.Date.Add(new DateTime(1987, 2, 16, 0, 0, 0, DateTimeKind.Utc));

            XElement metadata = XElement.Parse($@"{OAI_DC_ROOT}
  <dc:title>Title1</dc:title>
  <dc:title>Title2</dc:title>
  <dc:creator>Creator 1</dc:creator>
  <dc:creator>Creator 2</dc:creator>
  <dc:date>1987-02-16T00:00:00Z</dc:date>
</oai_dc:dc>");

            DublinCoreMetadata actual = _converter.Decode(metadata);

            Assert.AreEqual(expected.Title.Count, actual.Title.Count);
            Assert.AreEqual(expected.Title[0], actual.Title[0]);
            Assert.AreEqual(expected.Title[1], actual.Title[1]);
            Assert.AreEqual(expected.Creator[0], actual.Creator[0]);
            Assert.AreEqual(expected.Creator[1], actual.Creator[1]);
            Assert.AreEqual(expected.Date[0], actual.Date[0]);
        }
 /// <summary>
 /// Get Dublin Core metadata using MetadataUtility class.
 /// Feature is supported in version 18.5 or greater of the API
 /// </summary>
 public static void GetDublinCoreMetadata()
 {
     try
     {
         string[] files = Directory.GetFiles(XMPFilesDirectory);
         foreach (string file in files)
         {
             try
             {
                 DublinCoreMetadata dublinCoreMetadata = (DublinCoreMetadata)MetadataUtility.ExtractSpecificMetadata(file, MetadataType.DublinCore);
                 if (dublinCoreMetadata != null)
                 {
                     Console.WriteLine(dublinCoreMetadata.Creator);
                     Console.WriteLine(dublinCoreMetadata.Format);
                     Console.WriteLine(dublinCoreMetadata.Subject);
                 }
             }
             catch
             {
                 Console.WriteLine("Could not load {0}", file);
             }
         }
     }
     catch (Exception)
     {
         throw;
     }
 }
        public void DublinCoreMetadataConverter_Encode()
        {
            string expected = $@"{OAI_DC_ROOT}
  <dc:title>Title1</dc:title>
  <dc:title>Title2</dc:title>
  <dc:creator>Creator 1</dc:creator>
  <dc:creator>Creator 2</dc:creator>
  <dc:date>1987-02-16T00:00:00Z</dc:date>
</oai_dc:dc>";

            DublinCoreMetadata metadata = new DublinCoreMetadata();

            metadata.Title.Add("Title1");
            metadata.Title.Add("Title2");
            metadata.Creator.Add("Creator 1");
            metadata.Creator.Add("Creator 2");
            metadata.Date.Add(new DateTime(1987, 2, 16, 0, 0, 0, DateTimeKind.Utc));

            string actual = _converter.Encode(metadata).ToString();

            Assert.AreEqual(expected, actual);
        }