本文整理汇总了C#中StatementSink.Add方法的典型用法代码示例。如果您正苦于以下问题:C# StatementSink.Add方法的具体用法?C# StatementSink.Add怎么用?C# StatementSink.Add使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类StatementSink
的用法示例。
在下文中一共展示了StatementSink.Add方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ToSemWeb
/// <summary>
/// Takes the contents of a dotNetRDF Graph and inputs it into a SemWeb StatementSink
/// </summary>
/// <param name="g">Graph</param>
/// <param name="mapping">Blank Node Mapping</param>
/// <param name="sink">Statement Sink</param>
public static void ToSemWeb(IGraph g, SemWebMapping mapping, StatementSink sink)
{
Statement stmt;
foreach (Triple t in g.Triples)
{
stmt = ToSemWeb(t, mapping);
//Stop adding statements if the sink tells up to stop
if (!sink.Add(stmt)) return;
}
}
示例2: Select
public override bool Distinct { get { return false; } } // not sure...
public override void Select(SelectFilter filter, SelectableSource targetModel, StatementSink sink) {
if (filter.Subjects == null) filter.Subjects = new Entity[] { new Variable("subject") };
if (filter.Predicates == null) filter.Predicates = new Entity[] { new Variable("predicate") };
if (filter.Objects == null) filter.Objects = new Entity[] { new Variable("object") };
if (filter.Metas == null) filter.Metas = new Entity[] { Statement.DefaultMeta };
foreach (Statement s in filter) { // until we can operate on filter directly
ArrayList evidence = prove(rules, targetModel, new Statement[] { s }, -1);
if (evidence == null)
continue; // not provable (in max number of steps, if that were given)
foreach (EvidenceItem ei in evidence) {
foreach (Statement h in ei.head) { // better be just one statement
if (filter.LiteralFilters != null
&& !LiteralFilter.MatchesFilters(h.Object, filter.LiteralFilters, targetModel))
continue;
sink.Add(h);
}
}
}
}
示例3: Select
/// <summary>
/// Selects Statements from the Source based on a Template
/// </summary>
/// <param name="template">Statement Template</param>
/// <param name="sink">Sink to stream results to</param>
public void Select(Statement template, StatementSink sink)
{
//Convert Template to an Enumerable
IEnumerable<Triple> ts = Enumerable.Empty<Triple>();
int hash;
if (template.Meta != Statement.DefaultMeta && template.Meta != null)
{
//Select from the specific Graph if it exists
Uri graphUri;
if (template.Meta.Uri == null)
{
hash = new Uri(GraphCollection.DefaultGraphUri).GetEnhancedHashCode();
graphUri = null;
}
else
{
graphUri = new Uri(template.Meta.Uri);
hash = graphUri.GetEnhancedHashCode();
}
if (this._store.HasGraph(graphUri))
{
ts = this.TemplateToEnumerable(template, this._store.Graph(graphUri));
SemWebMapping mapping = this.GetMapping(hash, this._store.Graph(graphUri));
foreach (Triple t in ts)
{
//Keep streaming Triples until the sink tells us to stop
Statement stmt = SemWebConverter.ToSemWeb(t, mapping);
if (!sink.Add(stmt)) return;
}
}
}
else
{
//Output the results from each Graph in turn
foreach (IGraph g in this._store.Graphs)
{
Entity graphUri;
if (g.BaseUri == null)
{
hash = new Uri(GraphCollection.DefaultGraphUri).GetEnhancedHashCode();
graphUri = new Entity(GraphCollection.DefaultGraphUri);
}
else
{
hash = g.BaseUri.GetEnhancedHashCode();
graphUri = new Entity(g.BaseUri.ToString());
}
SemWebMapping mapping = this.GetMapping(hash, g);
foreach (Triple t in this.TemplateToEnumerable(template, g))
{
Statement stmt = SemWebConverter.ToSemWeb(t, mapping);
stmt.Meta = graphUri;
if (!sink.Add(stmt)) return;
}
}
}
}
示例4: Select
private void Select(Resource templateSubject, Resource templatePredicate, Resource templateObject, Resource templateMeta, LiteralFilter[] litFilters, StatementSink result, int limit) {
if (result == null) throw new ArgumentNullException();
lock (syncroot) {
Init();
RunAddBuffer();
// Don't select on columns that we already know from the template.
// But grab the URIs and literal values for MultiRes selection.
SelectColumnFilter columns = new SelectColumnFilter();
columns.SubjectId = (templateSubject == null) || templateSubject is MultiRes;
columns.PredicateId = (templatePredicate == null) || templatePredicate is MultiRes;
columns.ObjectId = (templateObject == null) || templateObject is MultiRes;
columns.MetaId = (templateMeta == null) || templateMeta is MultiRes;
columns.SubjectUri = templateSubject == null;
columns.PredicateUri = templatePredicate == null;
columns.ObjectData = templateObject == null || (templateObject is MultiRes && ((MultiRes)templateObject).ContainsLiterals());
columns.MetaUri = templateMeta == null;
if (isOrContains(templatePredicate, rdfs_member)) {
columns.PredicateId = true;
columns.PredicateUri = true;
}
// Meta URIs tend to be repeated a lot, so we don't
// want to ever select them from the database.
// This preloads them, although it makes the first
// select quite slow.
/*if (templateMeta == null && SupportsSubquery) {
LoadMetaEntities();
columns.MetaUri = false;
}*/
// Have to select something
bool fakeSubjectIdSelect = false;
if (!columns.SubjectId && !columns.PredicateId && !columns.ObjectId && !columns.MetaId) {
columns.SubjectId = true;
fakeSubjectIdSelect = true;
}
// Pre-cache the IDs of resources in a MultiRes. TODO: Pool these into one array.
foreach (Resource r in new Resource[] { templateSubject, templatePredicate, templateObject, templateMeta }) {
MultiRes mr = r as MultiRes;
if (mr == null) continue;
PrefetchResourceIds(mr.items);
CleanMultiRes(mr);
if (mr.items.Length == 0) // no possible values
return;
}
// SQLite has a problem with LEFT JOIN: When a condition is made on the
// first table in the ON clause (q.objecttype=0/1), when it fails,
// it excludes the row from the first table, whereas it should only
// exclude the results of the join.
System.Text.StringBuilder cmd = new System.Text.StringBuilder("SELECT ");
if (!SupportsLimitClause && limit >= 1) {
cmd.Append("TOP ");
cmd.Append(limit);
cmd.Append(' ');
}
if (!HasUniqueStatementsConstraint)
cmd.Append("DISTINCT ");
SelectFilterColumns(columns, cmd);
cmd.Append(" FROM ");
cmd.Append(table);
cmd.Append("_statements AS q");
SelectFilterTables(columns, cmd);
cmd.Append(' ');
bool wroteWhere;
if (!WhereClause(templateSubject, templatePredicate, templateObject, templateMeta, cmd, out wroteWhere)) return;
// Transform literal filters into SQL.
if (litFilters != null) {
foreach (LiteralFilter f in litFilters) {
string s = FilterToSQL(f, "lit.value");
if (s != null) {
if (!wroteWhere) { cmd.Append(" WHERE "); wroteWhere = true; }
else { cmd.Append(" AND "); }
cmd.Append(' ');
cmd.Append(s);
}
}
}
if (SupportsLimitClause && limit >= 1) {
cmd.Append(" LIMIT ");
cmd.Append(limit);
}
cmd.Append(';');
if (Debug) {
string cmd2 = cmd.ToString();
//if (cmd2.Length > 80) cmd2 = cmd2.Substring(0, 80);
Console.Error.WriteLine(cmd2);
}
//.........这里部分代码省略.........
示例5: AddLiteral
public static void AddLiteral (StatementSink sink, string predicate, string value)
{
Statement stmt = new Statement (FSpotXMPBase,
(Entity)MetadataStore.Namespaces.Resolve (predicate),
new SemWeb.Literal (value));
sink.Add (stmt);
}
示例6: Add
private void Add(StatementSink store, Statement statement, Location position) {
try {
store.Add(statement);
} catch (Exception e) {
OnError("Add failed on statement { " + statement + " }: " + e.Message, position, e);
}
}
示例7: Select
//.........这里部分代码省略.........
foreach (Entity subj in filter.Subjects)
{
s = SemWebConverter.FromSemWeb(subj, this._mapping);
foreach (Entity pred in filter.Predicates)
{
p = SemWebConverter.FromSemWeb(pred, this._mapping);
ts = ts.Concat(this._g.GetTriplesWithSubjectPredicate(s, p));
}
}
}
else if (filter.Objects != null)
{
//Subject-Object filter
foreach (Entity subj in filter.Subjects)
{
s = SemWebConverter.FromSemWeb(subj, this._mapping);
foreach (Resource obj in filter.Objects)
{
o = SemWebConverter.FromSemWeb(obj, this._mapping);
ts = ts.Concat(this._g.GetTriplesWithSubjectObject(s, o));
}
}
}
else
{
//Subjects filter
foreach (Entity subj in filter.Subjects)
{
s = SemWebConverter.FromSemWeb(subj, this._mapping);
ts = ts.Concat(this._g.GetTriplesWithSubject(s));
}
}
}
else if (filter.Predicates != null)
{
if (filter.Objects != null)
{
//Predicate-Object Filter
foreach (Entity pred in filter.Predicates)
{
p = SemWebConverter.FromSemWeb(pred, this._mapping);
foreach (Resource obj in filter.Objects)
{
o = SemWebConverter.FromSemWeb(obj, this._mapping);
ts = ts.Concat(this._g.GetTriplesWithPredicateObject(p,o));
}
}
}
else
{
//Predicate Filter
foreach (Entity pred in filter.Predicates)
{
p = SemWebConverter.FromSemWeb(pred, this._mapping);
ts = ts.Concat(this._g.GetTriplesWithPredicate(p));
}
}
}
else if (filter.Objects != null)
{
//Object Filter
foreach (Resource obj in filter.Objects)
{
o = SemWebConverter.FromSemWeb(obj, this._mapping);
ts = ts.Concat(this._g.GetTriplesWithObject(o));
}
}
else
{
//Everything is null so this is a Select All
ts = this._g.Triples;
}
int count = 0;
foreach (Triple t in ts)
{
//Apply limit if applicable
if (filter.Limit > 0 && count >= filter.Limit) return;
//Convert to a Statement and apply applicable Literal Filters
Statement stmt = SemWebConverter.ToSemWeb(t, this._mapping);
if (filter.LiteralFilters != null)
{
if (LiteralFilter.MatchesFilters(stmt.Object, filter.LiteralFilters, this))
{
//If the Object matched the filters then we return the Triple and stop
//streaming if the sink tells us to
if (!sink.Add(stmt)) return;
count++;
}
//If it doesn't match the filter it is ignored
}
else
{
//Just add the statement and stop if the sink tells us to stop streaming
if (!sink.Add(stmt)) return;
count++;
}
}
}
示例8: Select
/// <summary>
/// Selects Statements that match a given Template
/// </summary>
/// <param name="template">Statement Template</param>
/// <param name="sink">Sink</param>
public void Select(Statement template, StatementSink sink)
{
//Implement as a SPARQL SELECT
List<ITriplePattern> patterns = this.TemplateToTriplePatterns(template);
StringBuilder query = new StringBuilder();
query.AppendLine("SELECT * WHERE {");
foreach (ITriplePattern pattern in patterns)
{
query.AppendLine(pattern.ToString() + ".");
}
query.AppendLine("}");
//Get the Results
Object results = this._store.ExecuteQuery(query.ToString());
if (results is SparqlResultSet)
{
SparqlResultSet rset = (SparqlResultSet)results;
foreach (SparqlResult r in rset)
{
Entity s = (template.Subject != null) ? template.Subject : SemWebConverter.ToSemWebEntity(r["s"], this._mapping);
Entity p = (template.Predicate != null) ? template.Predicate : SemWebConverter.ToSemWebEntity(r["p"], this._mapping);
Resource o = (template.Object != null) ? template.Object : SemWebConverter.ToSemWeb(r["o"], this._mapping);
Statement stmt = new Statement(s, p, o);
//Keep returning stuff until the sink tells us to stop
if (!sink.Add(stmt)) return;
}
}
}
示例9: Select
bool Select(Entity[] subjects, Entity[] predicates, Resource[] objects, Entity[] metas, LiteralFilter[] litFilters, int limit, StatementSink sink, bool ask) {
// TODO: Change meta into named graphs. Anything but a null or DefaultMeta
// meta returns no statements immediately.
if (metas != null && (metas.Length != 1 || metas[0] != Statement.DefaultMeta))
return false;
string query;
bool nonull = false;
if (subjects != null && subjects.Length == 1
&& predicates != null && predicates.Length == 1
&& objects != null && objects.Length == 1) {
query = "ASK WHERE { " + S(subjects[0], null) + " " + S(predicates[0], null) + " " + S(objects[0], null) + "}";
nonull = true;
} else {
if (ask)
query = "ASK";
else
query = "SELECT *";
query += " WHERE { ";
query += S(subjects, "subject");
query += " ";
query += S(predicates, "predicate");
query += " ";
query += S(objects, "object");
query += " . ";
query += SL(subjects, "subject");
query += SL(predicates, "predicate");
query += SL(objects, "object");
query += " }";
// TODO: Pass literal filters to server.
}
if (limit >= 1)
query += " LIMIT " + limit;
XmlDocument result = Load(query);
if (ask || nonull) {
foreach (XmlElement boolean in result.DocumentElement) {
if (boolean.Name != "boolean") continue;
bool ret = boolean.InnerText == "true";
if (ask)
return ret;
else if (ret)
sink.Add(new Statement(subjects[0], predicates[0], objects[0]));
return false;
}
throw new ApplicationException("Invalid server response: No boolean node.");
}
XmlElement bindings = null;
foreach (XmlElement e in result.DocumentElement)
if (e.Name == "results")
bindings = e;
if (bindings == null)
throw new ApplicationException("Invalid server response: No result node.");
MemoryStore distinctCheck = null;
if (bindings.GetAttribute("distinct") != "true")
distinctCheck = new MemoryStore();
Hashtable bnodes = new Hashtable();
foreach (XmlNode bindingnode in bindings) {
if (!(bindingnode is XmlElement)) continue;
XmlElement binding = (XmlElement)bindingnode;
Resource subj = GetBinding(binding, "subject", subjects, bnodes);
Resource pred = GetBinding(binding, "predicate", predicates, bnodes);
Resource obj = GetBinding(binding, "object", objects, bnodes);
if (!(subj is Entity) || !(pred is Entity)) continue;
Statement s = new Statement((Entity)subj, (Entity)pred, obj);
if (distinctCheck != null && distinctCheck.Contains(s)) continue;
if (litFilters != null && !LiteralFilter.MatchesFilters(s.Object, litFilters, this)) continue;
if (!sink.Add(s)) return true;
if (distinctCheck != null) distinctCheck.Add(s);
}
return true;
}
示例10: Select
public void Select(SelectFilter filter, StatementSink sink) {
if (filter.Predicates == null || filter.LiteralFilters != null) {
data.Select(filter, sink);
return;
}
ResSet remainingPredicates = new ResSet();
Entity[] subjects = filter.Subjects;
Entity[] predicates = filter.Predicates;
Resource[] objects = filter.Objects;
Entity[] metas = filter.Metas;
foreach (Entity p in predicates) {
if (p == type) {
if (objects != null) {
// Do the subjects have any of the types listed in the objects,
// or what things have those types?
// Expand objects by the subclass closure of the objects
data.Select(new SelectFilter(subjects, new Entity[] { p }, GetClosure(objects, subclasses), metas), sink);
// Process domains and ranges.
ResSet dom = new ResSet(), ran = new ResSet();
Hashtable domPropToType = new Hashtable();
Hashtable ranPropToType = new Hashtable();
foreach (Entity e in objects) {
Entity[] dc = GetClosure((ResSet)domainof[e], subprops);
if (dc != null)
foreach (Entity c in dc) {
dom.Add(c);
AddRelation(c, e, domPropToType, false);
}
dc = GetClosure((ResSet)rangeof[e], subprops);
if (dc != null)
foreach (Entity c in dc) {
ran.Add(c);
AddRelation(c, e, ranPropToType, false);
}
}
// If it's in the domain of any of these properties,
// we know its type.
if (subjects != null) {
if (dom.Count > 0) data.Select(new SelectFilter(subjects, dom.ToEntityArray(), null, metas), new ExpandDomRan(0, domPropToType, sink));
if (ran.Count > 0) data.Select(new SelectFilter(null, ran.ToEntityArray(), subjects, metas), new ExpandDomRan(1, ranPropToType, sink));
}
} else if (subjects != null) {
// What types do these subjects have?
// Expand the resulting types by the closure of their superclasses
data.Select(new SelectFilter(subjects, new Entity[] { p }, objects, metas), new Expand(superclasses, sink));
// Use domains and ranges to get type info
data.Select(new SelectFilter(subjects, null, null, metas), new Expand3(0, domains, superclasses, sink));
data.Select(new SelectFilter(null, null, subjects, metas), new Expand3(1, ranges, superclasses, sink));
} else {
// What has type what? We won't answer that question.
data.Select(filter, sink);
}
} else if ((p == subClassOf || p == subPropertyOf)
&& (metas == null || metas[0] == Statement.DefaultMeta)) {
Hashtable supers = (p == subClassOf) ? superclasses : superprops;
Hashtable subs = (p == subClassOf) ? subclasses : subprops;
if (subjects != null && objects != null) {
// Expand objects by the subs closure of the objects.
data.Select(new SelectFilter(subjects, new Entity[] { p }, GetClosure(objects, subs), metas), sink);
} else if (subjects != null) {
// get all of the supers of all of the subjects
foreach (Entity s in subjects)
foreach (Entity o in GetClosure(new Entity[] { s }, supers))
sink.Add(new Statement(s, p, o));
} else if (objects != null) {
// get all of the subs of all of the objects
foreach (Resource o in objects) {
if (o is Literal) continue;
foreach (Entity s in GetClosure(new Entity[] { (Entity)o }, subs))
sink.Add(new Statement(s, p, (Entity)o));
}
} else {
// What is a subclass/property of what? We won't answer that.
data.Select(filter, sink);
}
} else {
remainingPredicates.Add(p);
}
}
if (remainingPredicates.Count > 0) {
// Also query the subproperties of any property
// being queried, but remember which subproperties
// came from which superproperties so we can map them
// back to the properties actually queried. The closures
// contain the queried properties themselves too.
//.........这里部分代码省略.........
示例11: Select
public override void Select(SelectFilter filter, StatementSink result) {
ResSet
s = filter.Subjects == null ? null : new ResSet(filter.Subjects),
p = filter.Predicates == null ? null : new ResSet(filter.Predicates),
o = filter.Objects == null ? null : new ResSet(filter.Objects),
m = filter.Metas == null ? null : new ResSet(filter.Metas);
foreach (Statement st in statements) {
if (s != null && !s.Contains(st.Subject)) continue;
if (p != null && !p.Contains(st.Predicate)) continue;
if (o != null && !o.Contains(st.Object)) continue;
if (m != null && !m.Contains(st.Meta)) continue;
if (filter.LiteralFilters != null && !LiteralFilter.MatchesFilters(st.Object, filter.LiteralFilters, this)) continue;
if (!result.Add(st)) return;
}
}
示例12: Select
bool Select(Entity[] subjects, Entity[] predicates, Resource[] objects, Entity[] metas, LiteralFilter[] litFilters, int limit, StatementSink sink, bool ask) {
// TODO: Change meta into named graphs. Anything but a null or DefaultMeta
// meta returns no statements immediately.
if (metas != null && (metas.Length != 1 || metas[0] != Statement.DefaultMeta))
return false;
string query;
bool nonull = false;
if (subjects != null && subjects.Length == 1
&& predicates != null && predicates.Length == 1
&& objects != null && objects.Length == 1) {
query = "ASK WHERE { " + S(subjects[0], null) + " " + S(predicates[0], null) + " " + S(objects[0], null) + "}";
nonull = true;
} else {
if (ask)
query = "ASK { ";
else
query = "SELECT * WHERE { ";
query += S(subjects, "?subject");
query += " ";
query += S(predicates, "?predicate");
query += " ";
query += S(objects, "?object");
query += " . ";
query += SL(subjects, "?subject", false);
query += SL(predicates, "?predicate", false);
query += SL(objects, "?object", false);
query += " }";
// TODO: Pass literal filters to server.
}
if (limit >= 1)
query += " LIMIT " + limit;
Statement d = new Statement(
(subjects != null && subjects.Length == 1) ? subjects[0] : null,
(predicates != null && predicates.Length == 1) ? predicates[0] : null,
(objects != null && objects.Length == 1) ? objects[0] : null);
if (ask || nonull) {
BooleanWrap bw = new BooleanWrap();
Load(query, bw);
if (ask)
return bw.value;
else if (bw.value)
sink.Add(new Statement(subjects[0], predicates[0], objects[0]));
return false;
} else {
Load(query, new QueryToStatements(sink, litFilters, d));
return true;
}
}
示例13: WriteGraph
void WriteGraph(RdfGraph graph, RdfSourceWrapper sourcewrapper, StatementSink sink)
{
if (sink is RdfWriter)
((RdfWriter)sink).Namespaces.AddFrom(GetQueryPrefixes());
java.util.Iterator iter = graph.iterator();
while (iter.hasNext()) {
GraphStatement stmt = (GraphStatement)iter.next();
Statement s;
if (stmt is GraphStatementWrapper) {
s = ((GraphStatementWrapper)stmt).s;
} else {
s = new Statement(
sourcewrapper.ToEntity(stmt.getSubject()),
sourcewrapper.ToEntity(stmt.getPredicate()),
sourcewrapper.ToResource(stmt.getObject()),
stmt.getGraphName() == null ? Statement.DefaultMeta : sourcewrapper.ToEntity(stmt.getGraphName()));
}
if (s.AnyNull) continue; // unbound variable, or literal in bad position
sink.Add(s);
}
}
示例14: SelectDirectory
public void SelectDirectory (ImageDirectory dir, StatementSink sink)
{
foreach (DirectoryEntry e in dir.Entries) {
#if DEBUG_LOADER
System.Console.WriteLine ("{0}", e.Id);
#endif
switch (e.Id) {
case TagId.IPTCNAA:
System.IO.Stream iptcstream = new System.IO.MemoryStream (e.RawData);
FSpot.Iptc.IptcFile iptc = new FSpot.Iptc.IptcFile (iptcstream);
iptc.Select (sink);
break;
case TagId.PhotoshopPrivate:
System.IO.Stream bimstream = new System.IO.MemoryStream (e.RawData);
FSpot.Bim.BimFile bim = new FSpot.Bim.BimFile (bimstream);
bim.Select (sink);
break;
case TagId.XMP:
System.IO.Stream xmpstream = new System.IO.MemoryStream (e.RawData);
FSpot.Xmp.XmpFile xmp = new FSpot.Xmp.XmpFile (xmpstream);
xmp.Select (sink);
break;
case TagId.ImageDescription:
MetadataStore.AddLiteral (sink, "dc:description", "rdf:Alt",
new Literal (e.ValueAsString [0], "x-default", null));
break;
case TagId.UserComment:
MetadataStore.AddLiteral (sink, "exif:UserComment", "rdf:Alt",
new Literal (e.ValueAsString [0], "x-default", null));
break;
case TagId.Copyright:
MetadataStore.AddLiteral (sink, "dc:rights", "rdf:Alt",
new Literal (e.ValueAsString [0], "x-default", null));
break;
case TagId.Artist:
MetadataStore.Add (sink, "dc:creator", "rdf:Seq", e.ValueAsString);
break;
case TagId.ExifIfdPointer:
try {
ImageDirectory sub = ((SubdirectoryEntry)e).Directory [0];
SelectDirectory (sub, sink);
} catch (System.Exception exc) {
System.Console.WriteLine (exc);
}
break;
case TagId.Software:
MetadataStore.AddLiteral (sink, "xmp:CreatorTool", e.ValueAsString [0]);
break;
case TagId.DateTime:
try {
MetadataStore.AddLiteral (sink, "xmp:ModifyDate",
e.ValueAsDate.ToString ("yyyy-MM-ddThh:mm:ss"));
} catch (System.Exception ex) {
System.Console.WriteLine (String.Format ("error parsing {0}{2}{1}", e.ValueAsString[0], ex, Environment.NewLine));
}
break;
case TagId.DateTimeOriginal:
case TagId.DateTimeDigitized:
// FIXME subsectime needs to be included in these values
// FIXME shouldn't DateTimeOriginal be xmp:CreateDate? the spec says no but wtf?
try {
MetadataStore.AddLiteral (sink, "exif:" + e.Id.ToString (),
e.ValueAsDate.ToString ("yyyy-MM-ddThh:mm:ss"));
} catch (System.Exception ex) {
System.Console.WriteLine (String.Format ("error parsing {0}{2}{1}", e.ValueAsString[0], ex, Environment.NewLine));
}
break;
//case TagId.SpatialFrequencyResponse
case TagId.ExifCFAPattern:
CFAPattern pattern = new CFAPattern (e.RawData, e.IsLittle);
Entity empty = new BNode ();
Statement top = new Statement (MetadataStore.FSpotXMPBase,
(Entity)MetadataStore.Namespaces.Resolve ("exif:" + e.Id.ToString ()),
empty);
Statement cols = new Statement (empty,
(Entity) MetadataStore.Namespaces.Resolve ("exif:Columns"),
new Literal (pattern.Columns.ToString (), null, null));
sink.Add (cols);
Statement rows = new Statement (empty,
(Entity) MetadataStore.Namespaces.Resolve ("exif:Rows"),
new Literal (pattern.Rows.ToString (), null, null));
sink.Add (rows);
string [] vals = e.ArrayToString (pattern.Values);
MetadataStore.Add (sink, empty, "exif:Values", "rdf:Seq", vals);
sink.Add (top);
break;
case TagId.ExifVersion:
case TagId.FlashPixVersion:
case TagId.ColorSpace:
case TagId.CompressedBitsPerPixel:
case TagId.PixelYDimension:
case TagId.PixelXDimension:
case TagId.RelatedSoundFile:
case TagId.ExposureTime:
case TagId.FNumber:
case TagId.ExposureProgram:
case TagId.SpectralSensitivity:
//.........这里部分代码省略.........
示例15: Add
private void Add(StatementSink store, Statement statement, Location position) {
try {
store.Add(statement);
} catch (Exception e) {
if (!addFailuresAsWarnings)
OnError("Add failed on statement { " + statement + " }: " + e.Message, position, e);
else
OnWarning("Add failed on statement { " + statement + " }: " + e.Message, position, e);
}
}