namespace Umbraco.Cms.Core.Models.PublishedContent
{
///
/// Represents a property of an IPublishedElement.
///
public interface IPublishedProperty
{
IPublishedPropertyType PropertyType { get; }
///
/// Gets the alias of the property.
///
string Alias { get; }
///
/// Gets a value indicating whether the property has a value.
///
///
/// This is somewhat implementation-dependent -- depending on whatever IPublishedCache considers
/// a missing value.
/// The XmlPublishedCache raw values are strings, and it will consider missing, null or empty (and
/// that includes whitespace-only) strings as "no value".
/// Other caches that get their raw value from the database would consider that a property has "no
/// value" if it is missing, null, or an empty string (including whitespace-only).
///
bool HasValue(string? culture = null, string? segment = null);
///
/// Gets the source value of the property.
///
///
/// The source value is whatever was passed to the property when it was instantiated, and it is
/// somewhat implementation-dependent -- depending on how the IPublishedCache is implemented.
/// The XmlPublishedCache source values are strings exclusively since they come from the Xml cache.
/// For other caches that get their source value from the database, it would be either a string,
/// an integer (Int32), a date and time (DateTime) or a decimal (double).
/// If you're using that value, you're probably wrong, unless you're doing some internal
/// Umbraco stuff.
///
object? GetSourceValue(string? culture = null, string? segment = null);
///
/// Gets the object value of the property.
///
///
/// The value is what you want to use when rendering content in an MVC view ie in C#.
/// It can be null, or any type of CLR object.
/// It has been fully prepared and processed by the appropriate converter.
///
object? GetValue(string? culture = null, string? segment = null);
///
/// Gets the XPath value of the property.
///
///
/// The XPath value is what you want to use when navigating content via XPath eg in the XSLT engine.
/// It must be either null, or a string, or an XPathNavigator.
/// It has been fully prepared and processed by the appropriate converter.
///
object? GetXPathValue(string? culture = null, string? segment = null);
}
}