Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
JsonLdCodec.cs
1using System;
2using System.Collections.Generic;
3using System.Text;
4using System.Threading.Tasks;
6
8{
13 {
17 public JsonLdCodec()
18 {
19 }
20
24 public string[] ContentTypes => JsonLdContentTypes;
25
26 private static readonly string[] JsonLdContentTypes = new string[]
27 {
29 };
30
34 public string[] FileExtensions => JsonLdFileExtensions;
35
36 private static readonly string[] JsonLdFileExtensions = new string[]
37 {
39 };
40
44 public const string DefaultContentType = "application/ld+json";
45
49 public const string DefaultExtension = "jsonld";
50
57 public bool Decodes(string ContentType, out Grade Grade)
58 {
59 if (Array.IndexOf(JsonLdContentTypes, ContentType) >= 0)
60 {
61 Grade = Grade.Excellent;
62 return true;
63 }
64 else
65 {
66 Grade = Grade.NotAtAll;
67 return false;
68 }
69 }
70
80 public async Task<object> DecodeAsync(string ContentType, byte[] Data, Encoding Encoding, KeyValuePair<string, string>[] Fields, Uri BaseUri)
81 {
82 string s = CommonTypes.GetString(Data, Encoding ?? Encoding.UTF8);
83 JsonLdDocument Parsed = await JsonLdDocument.CreateAsync(s, BaseUri, "n", BlankNodeIdMode.Guid);
84 return Parsed;
85 }
86
94 public bool Encodes(object Object, out Grade Grade, params string[] AcceptedContentTypes)
95 {
96 if (Object is JsonLdDocument &&
97 InternetContent.IsAccepted(JsonLdContentTypes, AcceptedContentTypes))
98 {
99 Grade = Grade.Excellent;
100 return true;
101 }
102 else if (Object is ISemanticModel &&
103 InternetContent.IsAccepted(JsonLdContentTypes, AcceptedContentTypes))
104 {
105 Grade = Grade.Barely;
106 return true;
107 }
108
109 Grade = Grade.NotAtAll;
110 return false;
111 }
112
120 public Task<KeyValuePair<byte[], string>> EncodeAsync(object Object, Encoding Encoding, params string[] AcceptedContentTypes)
121 {
122 if (Encoding is null)
123 Encoding = Encoding.UTF8;
124
125 string Text;
126
127 if (Object is JsonLdDocument Doc)
128 Text = Doc.Text;
129 else
130 {
131 if (!(Object is ISemanticModel Model))
132 throw new ArgumentException("Unable to encode object.", nameof(Object));
133
134 StringBuilder sb = new StringBuilder();
135
136 foreach (ISemanticTriple Triple in Model)
137 {
138 sb.Append(Triple.Subject);
139 sb.Append('\t');
140 sb.Append(Triple.Predicate);
141 sb.Append('\t');
142 sb.Append(Triple.Object);
143 sb.Append('\t');
144 sb.AppendLine(".");
145 }
146
147 Text = sb.ToString();
148 }
149
150 byte[] Bin = Encoding.GetBytes(Text);
151 string ContentType = JsonLdContentTypes[0] + "; charset=" + Encoding.WebName;
152
153 return Task.FromResult(new KeyValuePair<byte[], string>(Bin, ContentType));
154 }
155
162 public bool TryGetContentType(string FileExtension, out string ContentType)
163 {
164 if (string.Compare(FileExtension, JsonLdFileExtensions[0], true) == 0)
165 {
166 ContentType = JsonLdContentTypes[0];
167 return true;
168 }
169 else
170 {
171 ContentType = null;
172 return false;
173 }
174 }
175
182 public bool TryGetFileExtension(string ContentType, out string FileExtension)
183 {
184 if (Array.IndexOf(JsonLdContentTypes, ContentType) >= 0)
185 {
186 FileExtension = JsonLdFileExtensions[0];
187 return true;
188 }
189 else
190 {
191 FileExtension = null;
192 return false;
193 }
194 }
195 }
196}
Helps with parsing of commong data types.
Definition: CommonTypes.cs:13
static string GetString(byte[] Data, Encoding DefaultEncoding)
Gets a string from its binary representation, taking any Byte Order Mark (BOM) into account.
Static class managing encoding and decoding of internet content.
static bool IsAccepted(string ContentType, params string[] AcceptedContentTypes)
Checks if a given content type is acceptable.
Encoder and Decoder of semantic information in JSON-LD Documents.
Definition: JsonLdCodec.cs:13
bool Decodes(string ContentType, out Grade Grade)
If the decoder decodes content of a given Internet Content Type.
Definition: JsonLdCodec.cs:57
const string DefaultExtension
jsonld
Definition: JsonLdCodec.cs:49
Task< KeyValuePair< byte[], string > > EncodeAsync(object Object, Encoding Encoding, params string[] AcceptedContentTypes)
Encodes an object
Definition: JsonLdCodec.cs:120
async Task< object > DecodeAsync(string ContentType, byte[] Data, Encoding Encoding, KeyValuePair< string, string >[] Fields, Uri BaseUri)
Decodes an object
Definition: JsonLdCodec.cs:80
string[] FileExtensions
Supported file extensions.
Definition: JsonLdCodec.cs:34
string[] ContentTypes
Supported Internet Content Types.
Definition: JsonLdCodec.cs:24
JsonLdCodec()
Encoder and Decoder of semantic information in JSON-LD Documents.
Definition: JsonLdCodec.cs:17
bool TryGetContentType(string FileExtension, out string ContentType)
Tries to get the content type of content of a given file extension.
Definition: JsonLdCodec.cs:162
const string DefaultContentType
application/ld+json
Definition: JsonLdCodec.cs:44
bool Encodes(object Object, out Grade Grade, params string[] AcceptedContentTypes)
If the encoder encodes a specific object.
Definition: JsonLdCodec.cs:94
bool TryGetFileExtension(string ContentType, out string FileExtension)
Tries to get the file extension of content of a given content type.
Definition: JsonLdCodec.cs:182
Contains semantic information stored in a JSON-LD document.
static Task< JsonLdDocument > CreateAsync(string Text)
Contains semantic information stored in a turtle document.
Basic interface for Internet Content decoders. A class implementing this interface and having a defau...
Basic interface for Internet Content encoders. A class implementing this interface and having a defau...
Interface for semantic models.
Interface for semantic triples.
ISemanticElement Object
Object element
ISemanticElement Predicate
Predicate element
ISemanticElement Subject
Subject element
BlankNodeIdMode
How blank node IDs are generated
Grade
Grade enumeration
Definition: Grade.cs:7