1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
using System.Xml;
using SemWeb;
namespace Beagle.Util {
public class XmpFile : SemWeb.StatementSource, SemWeb.StatementSink
{
MetadataStore store;
public MetadataStore Store {
get { return store; }
}
public XmpFile (System.IO.Stream stream) : this ()
{
Load (stream);
}
public XmpFile ()
{
store = new MetadataStore ();
}
public void Load (System.IO.Stream stream)
{
try {
store.Import (new SemWeb.RdfXmlReader (stream));
//Dump ();
} catch (System.Exception e) {
System.Console.WriteLine (e.ToString ());
}
}
public void Save (System.IO.Stream stream)
{
try {
XmlTextWriter text;
RdfXmlWriter writer;
text = new XmlTextWriter (stream, System.Text.Encoding.UTF8);
using (writer = new RdfXmlWriter (text, MetadataStore.Namespaces)) {
text.WriteProcessingInstruction ("xpacket", "begin=\"\ufeff\" id=\"testing\"");
text.WriteStartElement ("x:xmpmeta");
text.WriteAttributeString ("xmlns", "x", null, "adobe:ns:meta/");
store.Select (writer);
}
text.WriteEndElement ();
text.WriteProcessingInstruction ("xpacket", "end=\"r\"");
text.Close ();
} catch (System.Exception e) {
System.Console.WriteLine (e);
}
}
public bool Add (Statement stmt)
{
return ((SemWeb.StatementSink)store).Add (stmt);
}
public void Select (SemWeb.StatementSink sink)
{
store.Select (sink);
}
public void Dump ()
{
foreach (SemWeb.Statement stmt in store) {
System.Console.WriteLine(stmt);
}
}
#if TEST_XMP
static void Main (string [] args)
{
XmpFile xmp = new XmpFile (System.IO.File.OpenRead (args [0]));
//xmp.Store.Dump ();
#if false
System.IO.StreamReader stream = new System.IO.StreamReader (System.IO.File.OpenRead (args [0]));
while (stream.BaseStream.Position < stream.BaseStream.Length) {
System.Console.WriteLine (stream.ReadLine ());
}
#endif
}
#endif
}
}
|