knowL: Knowledge Libraries
Loading...
Searching...
No Matches
Object.h
1#pragma once
2
3#include <knowCore/Uris/Uris.h>
4
5#include "BlankNode.h"
6#include "Literal.h"
7
8namespace knowRDF
9{
10 class Object
11 {
12 public:
13 enum class Type
14 {
15 Undefined,
16 Uri,
18 Literal,
19 Variable
20 };
21 public:
22 Object();
23 Object(const QString& _string, Type _type);
24 Object(const knowCore::Uri& _uri);
25 Object(const BlankNode& _blankNodeRef);
26 Object(const Literal& _literal);
27 template<typename _T_>
28 requires(knowCore::Uris::IsUriDefinitionV<_T_>)
29 Object(const _T_& _t) : Object(knowCore::Uri(_t))
30 {
31 }
32 template<typename _T_>
33 static Object fromValue(const _T_& _value, const Lang& _lang = Lang(QString()));
34 template<typename _T_>
35 static cres_qresult<Object> fromValue(const knowCore::Uri& _dataTypeUri, const _T_& _value,
36 const QString& _lang = QString(),
37 knowCore::TypeCheckingMode _conversion
38 = knowCore::TypeCheckingMode::Safe);
39 // Object(const knowCore::Uri& _uri, const char* _value, const QString& _lang =
40 // QString());
41 Object(const Object& _rhs);
42 Object& operator=(const Object& _rhs);
43 ~Object();
44 bool operator==(const Object& _rhs) const;
45 Type type() const;
46 knowCore::Uri uri() const;
47 BlankNode blankNode() const;
48 Literal literal() const;
49 QString variableName() const;
50 cres_qresult<QByteArray> md5() const;
51 cres_qresult<QJsonValue> toJsonValue(const knowCore::SerialisationContexts&) const;
52 static cres_qresult<Object> fromJsonValue(const QJsonValue& _value,
53 const knowCore::DeserialisationContexts& _context);
54 cres_qresult<QCborValue> toCborValue(const knowCore::SerialisationContexts&) const;
55 static cres_qresult<Object> fromCborValue(const QCborValue& _value,
56 const knowCore::DeserialisationContexts& _context);
57 private:
58 struct Private;
59 QSharedDataPointer<Private> d;
60 };
61 template<typename _T_>
62 Object Object::fromValue(const _T_& _value, const Lang& _lang)
63 {
64 return Literal::fromValue<_T_>(_value, _lang);
65 }
66 template<typename _T_>
67 cres_qresult<Object> Object::fromValue(const knowCore::Uri& _dataTypeUri, const _T_& _value,
68 const QString& _lang,
69 knowCore::TypeCheckingMode _conversion)
70 {
71 return Literal::fromValue(_dataTypeUri, _value, _lang, _conversion);
72 }
73 uint qHash(const Object& key, std::size_t seed = 0);
74} // namespace knowRDF
75
76clog_format_declare_formatter(knowRDF::Object)
77{
78 switch(p.type())
79 {
80 case knowRDF::Object::Type::Undefined:
81 break;
82 case knowRDF::Object::Type::Uri:
83 return format_to(ctx.out(), "uri({})", p.uri());
84 case knowRDF::Object::Type::BlankNode:
85 return format_to(ctx.out(), "blank_node({})", p.blankNode());
86 case knowRDF::Object::Type::Literal:
87 return format_to(ctx.out(), "literal({})", p.literal());
88 case knowRDF::Object::Type::Variable:
89 return format_to(ctx.out(), "variable(?{})", p.variableName());
90 }
91 return format_to(ctx.out(), "undefined()");
92}
93
94clog_format_declare_enum_formatter(knowRDF::Object::Type, Undefined, Uri, BlankNode, Literal,
95 Variable);
96
97#include <knowCore/MetaType.h>
98KNOWCORE_DECLARE_FULL_METATYPE(knowRDF, Object);
Definition MetaType.h:126
Definition MetaType.h:159
Definition Uri.h:15
Definition BlankNode.h:25
Definition Literal.h:14
Definition Object.h:11