knowL: Knowledge Libraries
Loading...
Searching...
No Matches
Subject.h
1#pragma once
2
3#include <QSharedDataPointer>
4
5#include <knowCore/ReturnValue.h>
6#include <knowCore/Uris/Uris.h>
7
8#include "Forward.h"
9
10class QString;
11
12namespace knowRDF
13{
17 class Subject
18 {
19 public:
20 enum class Type
21 {
22 Undefined, Uri, BlankNode, Variable
23 };
24 public:
25 Subject();
26 Subject(const QString& _string, Type _type);
27 Subject(const knowCore::Uri& _uri);
28 Subject(const knowCore::Uri& _base, const QString& _suffix);
29 Subject(const BlankNode& _blankNodeRef);
30 Subject(const Subject& _rhs);
34 template<typename _T_, std::enable_if_t<knowCore::Uris::IsUriDefinitionV<_T_>, int> = 0>
35 Subject(const _T_& _t) : Subject(knowCore::Uri(_t)) {}
36 Subject& operator=(const Subject& _rhs);
37 ~Subject();
38 bool operator==(const Subject& _rhs) const;
39 Type type() const;
40 knowCore::Uri uri() const;
41 BlankNode blankNode() const;
42 QString variableName() const;
43 QByteArray md5() const;
44 QJsonValue toJsonValue() const;
45 static knowCore::ReturnValue<Subject> fromJsonValue(const QJsonValue& _value);
46 QCborValue toCborValue() const;
47 static knowCore::ReturnValue<Subject> fromCborValue(const QCborValue& _value);
48 private:
49 struct Private;
50 QSharedDataPointer<Private> d;
51 };
52 uint qHash(const Subject& key, uint seed = 0);
53}
54
55KNOWCORE_CORE_DECLARE_FORMATTER(knowRDF::Subject)
56{
57 switch(p.type())
58 {
59 case knowRDF::Subject::Type::Undefined:
60 break;
61 case knowRDF::Subject::Type::Uri:
62 return format_to(ctx.out(), "uri({})", p.uri());
63 case knowRDF::Subject::Type::BlankNode:
64 return format_to(ctx.out(), "blank_node({})", p.blankNode());
65 case knowRDF::Subject::Type::Variable:
66 return format_to(ctx.out(), "variable(?{})", p.variableName());
67 }
68 return forward("undefined()", ctx);
69
70}
Definition ReturnValue.h:29
Definition Uri.h:14
Definition BlankNode.h:23
Definition Subject.h:18
Subject(const _T_ &_t)
Definition Subject.h:35