/// <summary> /// Takes a data value from the _queryResults datatable and returns a marshalled data object. /// </summary> /// <param name="cellValue">A cell value from a Virtuoso results datatable.</param> /// <returns>A reference to the marshalled data object.</returns> private object ParseCellValue(object cellValue) { if (cellValue is SqlExtendedString) { SqlExtendedString extendedString = cellValue as SqlExtendedString; if (extendedString.IsResource()) { // NOTE: We create an UriRef for correct equality comparision with fragment identifiers. return(new UriRef(extendedString.ToString(), UriKind.RelativeOrAbsolute)); } else if (extendedString.IsString() || extendedString.IsBlankId()) { return(extendedString.ToString()); } } else if (cellValue is SqlRdfBox) { SqlRdfBox box = cellValue as SqlRdfBox; if (box.StrType != null) { try { // NOTE: We create an UriRef for correct equality comparision with fragment identifiers. return(XsdTypeMapper.DeserializeString(box.Value.ToString(), new UriRef(box.StrType))); } catch (KeyNotFoundException) { // The given data type is not known by the XsdTypeMapper. return(box.Value.ToString()); } } else if (box.Value is SqlExtendedString && box.StrLang != null) { return(new Tuple <string, CultureInfo>(box.Value.ToString(), new CultureInfo(box.StrLang))); } else if (box.Value != null) { return(box.Value.ToString()); } } else if (cellValue is int) { // TODO: We need a different approach to store and read booleans. return(cellValue); } else if (cellValue is DateTime) { // Virtuoso delivers the time not as UTC but as "unspecified" // we convert it to local time return(((DateTime)cellValue).ToLocalTime()); } else if (cellValue is VirtuosoDateTimeOffset) { return(((VirtuosoDateTimeOffset)cellValue).Value.UtcDateTime.ToUniversalTime()); } return(cellValue); }
public static bool IsString(this SqlExtendedString extendedString) { return(extendedString.IriType == SqlExtendedStringType.IRI && extendedString.StrType == SqlExtendedStringType.BNODE); }
public static bool IsBlankId(this SqlExtendedString extendedString) { return(extendedString.IriType == SqlExtendedStringType.BNODE); }
public static bool IsResource(this SqlExtendedString extendedString) { return(extendedString.IriType == SqlExtendedStringType.IRI && extendedString.StrType == SqlExtendedStringType.IRI); }