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, Uri, BlankNode, Literal, Variable
16 };
17 public:
18 Object();
19 Object(const QString& _string, Type _type);
20 Object(const knowCore::Uri& _uri);
21 Object(const BlankNode& _blankNodeRef);
22 Object(const Literal& _literal);
23 template<typename _T_, std::enable_if_t<knowCore::Uris::IsUriDefinitionV<_T_>, int> = 0>
24 Object(const _T_& _t) : Object(knowCore::Uri(_t)) {}
25 template<typename _T_>
26 static Object fromValue(const _T_& _value, const Lang& _lang = Lang(QString()));
27 template<typename _T_>
28 static knowCore::ReturnValue<Object> fromValue(const knowCore::Uri& _dataTypeUri, const _T_& _value, const QString& _lang = QString(), knowCore::TypeCheckingMode _conversion = knowCore::TypeCheckingMode::Safe);
29 // Object(const knowCore::Uri& _uri, const char* _value, const QString& _lang = QString());
30 Object(const Object& _rhs);
31 Object& operator=(const Object& _rhs);
32 ~Object();
33 bool operator==(const Object& _rhs) const;
34 Type type() const;
35 knowCore::Uri uri() const;
36 BlankNode blankNode() const;
37 Literal literal() const;
38 QString variableName() const;
41 static knowCore::ReturnValue<Object> fromJsonValue(const QJsonValue& _value, const knowCore::DeserialisationContexts& _context);
43 static knowCore::ReturnValue<Object> fromCborValue(const QCborValue& _value, const knowCore::DeserialisationContexts& _context);
44 private:
45 struct Private;
46 QSharedDataPointer<Private> d;
47 };
48 template<typename _T_>
49 Object Object::fromValue(const _T_& _value, const Lang& _lang)
50 {
51 return Literal::fromValue<_T_>(_value, _lang);
52 }
53 template<typename _T_>
54 knowCore::ReturnValue<Object> Object::fromValue(const knowCore::Uri& _dataTypeUri, const _T_& _value, const QString& _lang, knowCore::TypeCheckingMode _conversion)
55 {
56 const auto [success, literal, message] = Literal::fromValue(_dataTypeUri, _value, _lang, _conversion);
57 if(success)
58 {
59 return kCrvSuccess(Object(literal));
60 } else {
61 return kCrvError(message);
62 }
63 }
64 uint qHash(const Object& key, uint seed = 0);
65}
66
67
68KNOWCORE_CORE_DECLARE_FORMATTER(knowRDF::Object)
69{
70 switch(p.type())
71 {
72 case knowRDF::Object::Type::Undefined:
73 break;
74 case knowRDF::Object::Type::Uri:
75 return format_to(ctx.out(), "uri({})", p.uri());
76 case knowRDF::Object::Type::BlankNode:
77 return format_to(ctx.out(), "blank_node({})", p.blankNode());
78 case knowRDF::Object::Type::Literal:
79 return format_to(ctx.out(), "literal({})", p.literal());
80 case knowRDF::Object::Type::Variable:
81 return format_to(ctx.out(), "variable(?{})", p.variableName());
82 }
83 return forward("undefined()", ctx);
84
85}
86
87KNOWCORE_CORE_DECLARE_FORMATTER_ENUM(knowRDF::Object::Type, Undefined, Uri, BlankNode, Literal, Variable);
88
89#include <knowCore/MetaType.h>
90KNOWCORE_DECLARE_FULL_METATYPE(knowRDF, Object)
Definition MetaType.h:114
Definition NamedType.h:40
Definition ReturnValue.h:29
Definition MetaType.h:145
Definition Uri.h:14
Definition BlankNode.h:23
Definition Literal.h:14
Definition Object.h:11