4#include <knowCore/Value.h>
8 using Lang = cext_named_type<QString, struct LangTag>;
16 const QString& _lang = QString());
26 template<
typename _T_>
27 static Literal fromValue(
const _T_& _value,
const Lang& _lang = Lang(QString()));
28 static cres_qresult<Literal> fromValue(
const knowCore::Value& _value,
const Lang& _lang);
29 static cres_qresult<Literal> fromValue(
const Literal& _value,
30 const Lang& _lang = Lang(QString()));
31 static cres_qresult<Literal> fromValue(
const QVariant& _value,
32 const Lang& _lang = Lang(QString()))
36 template<
typename _T_>
37 static cres_qresult<Literal>
38 fromValue(
const knowCore::Uri& _datatype,
const _T_& _value,
const QString& _lang = QString(),
39 knowCore::TypeCheckingMode _conversion = knowCore::TypeCheckingMode::Safe);
59 const QString& _lang = QString(),
60 knowCore::TypeCheckingMode _conversion
61 = knowCore::TypeCheckingMode::Safe);
65 static cres_qresult<Literal>
fromVariant(
const QVariant& _value,
66 const QString& _lang = QString());
73 const QString& _value,
74 const QString& _lang = QString());
79 bool operator<(
const Literal& _rhs)
const;
80 bool operator==(
const Literal& _rhs)
const;
81 cres_qresult<QByteArray> md5()
const;
83 static cres_qresult<Literal> fromJsonValue(
const QJsonValue& _value,
86 static cres_qresult<Literal> fromCborValue(
const QCborValue& _value,
90 QSharedDataPointer<Private> d;
92 template<
typename _T_>
93 Literal Literal::fromValue(
const _T_& _value,
const Lang& _lang)
97 template<
typename _T_>
98 inline cres_qresult<Literal> Literal::fromValue(
const knowCore::Uri& _datatype,
const _T_& _value,
100 knowCore::TypeCheckingMode _conversion)
102 const auto [success,
value, message] = Value::fromValue(_datatype, _value, _conversion);
108 else if constexpr(std::is_same_v<QString, _T_> or std::is_same_v<QByteArray, _T_>)
110 const auto [success_2, value_2, message_2] = Value::fromRdfLiteral(_datatype, _value);
113 clog_assert(value_2.value().datatype() == _datatype);
114 return cres_success(
Literal(value_2.value(), _lang));
124 return cres_forward_failure(message);
128 inline cres_qresult<Literal>
129 Literal::fromValue<QVariant>(
const knowCore::Uri& _datatype,
const QVariant& _value,
130 const QString& _lang, knowCore::TypeCheckingMode _conversion)
132 return fromVariant(_datatype, _value, _lang, _conversion);
134 uint qHash(
const Literal& key, std::size_t seed = 0);
139 if(p.datatype() != p.Value::datatype())
141 if(p.lang().isEmpty())
143 return format_to(ctx.out(),
"{}({})", p.datatype(), (
const knowCore::Value&)p);
147 return format_to(ctx.out(),
"{}({})@{}", p.datatype(), (
const knowCore::Value&)p, p.lang());
150 else if(p.lang().isEmpty())
156 return format_to(ctx.out(),
"{}@{}", (
const knowCore::Value&)p, p.lang());
160#include <knowCore/MetaType.h>
161KNOWCORE_DECLARE_FULL_METATYPE(knowRDF, Literal);
163inline knowRDF::Lang
operator"" _kRDFlang(
const char* _text, std::size_t _size)
165 return knowRDF::Lang(QString::fromUtf8(_text, _size));
168#if __cplusplus > 201703L
169inline knowRDF::Lang
operator"" _kRDFlang(
const char8_t* _text, std::size_t _size)
171 return knowRDF::Lang(QString::fromUtf8((
const char*)_text, _size));
Definition MetaType.h:126
Definition MetaType.h:159
static Value fromValue(const _T_ &_value)
Definition Value.h:241
cres_qresult< _T_ > value(TypeCheckingMode _conversion=TypeCheckingMode::Safe) const
Definition Value.h:353
QString lang() const
Definition Literal.cpp:153
static cres_qresult< Literal > fromVariant(const knowCore::Uri &_datatype, const QVariant &_value, const QString &_lang=QString(), knowCore::TypeCheckingMode _conversion=knowCore::TypeCheckingMode::Safe)
Definition Literal.cpp:102
static cres_qresult< Literal > fromRdfLiteral(const knowCore::Uri &_datatype, const QString &_value, const QString &_lang=QString())
Definition Literal.cpp:139
knowCore::Uri datatype() const
Definition Literal.cpp:53
Literal()
Definition Literal.cpp:22