Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
TurtleCodec.cs
1using System;
3using System.Text;
4using System.Threading.Tasks;
8
10{
15 {
19 public TurtleCodec()
20 {
21 }
22
26 public string[] ContentTypes => TurtleContentTypes;
27
31 public static readonly string[] TurtleContentTypes = new string[]
32 {
34 "application/x-turtle"
35 };
36
40 public string[] FileExtensions => TurtleFileExtensions;
41
42 private static readonly string[] TurtleFileExtensions = new string[]
43 {
45 };
46
50 public const string DefaultContentType = "text/turtle";
51
55 public const string DefaultExtension = "ttl";
56
63 public bool Decodes(string ContentType, out Grade Grade)
64 {
65 if (Array.IndexOf(TurtleContentTypes, ContentType) >= 0)
66 {
67 Grade = Grade.Ok;
68 return true;
69 }
70 else
71 {
72 Grade = Grade.NotAtAll;
73 return false;
74 }
75 }
76
87 public Task<ContentResponse> DecodeAsync(string ContentType, byte[] Data, Encoding Encoding,
88 KeyValuePair<string, string>[] Fields, Uri BaseUri, ICodecProgress Progress)
89 {
90 string s = Strings.GetString(Data, Encoding ?? Encoding.UTF8);
91 TurtleDocument Parsed = new TurtleDocument(s, BaseUri, "n", BlankNodeIdMode.Guid);
92 return Task.FromResult(new ContentResponse(ContentType, Parsed, Data));
93 }
94
102 public bool Encodes(object Object, out Grade Grade, params string[] AcceptedContentTypes)
103 {
104 if (Object is TurtleDocument &&
105 InternetContent.IsAccepted(TurtleContentTypes, AcceptedContentTypes))
106 {
107 Grade = Grade.Excellent;
108 return true;
109 }
110 else if (Object is ISemanticModel)
111 {
112 if (InternetContent.IsAccepted(TurtleContentTypes, AcceptedContentTypes))
113 {
114 Grade = Grade.Ok;
115 return true;
116 }
117 else if (InternetContent.IsAccepted(PlainTextCodec.DefaultContentType, AcceptedContentTypes))
118 {
119 Grade = Grade.Barely;
120 return true;
121 }
122 }
123
124 Grade = Grade.NotAtAll;
125 return false;
126 }
127
136 public Task<ContentResponse> EncodeAsync(object Object, Encoding Encoding, ICodecProgress Progress, params string[] AcceptedContentTypes)
137 {
138 if (Encoding is null)
139 Encoding = Encoding.UTF8;
140
141 string Text;
142
143 if (Object is TurtleDocument Doc)
144 Text = Doc.Text;
145 else
146 {
147 if (!(Object is ISemanticModel Model))
148 return Task.FromResult(new ContentResponse(new ArgumentException("Unable to encode object.", nameof(Object))));
149
150 StringBuilder sb = new StringBuilder();
151
152 foreach (ISemanticTriple Triple in Model)
153 {
154 sb.Append(Triple.Subject);
155 sb.Append('\t');
156 sb.Append(Triple.Predicate);
157 sb.Append('\t');
158 sb.Append(Triple.Object);
159 sb.Append('\t');
160 sb.AppendLine(".");
161 }
162
163 Text = sb.ToString();
164 }
165
166 byte[] Bin = Encoding.GetBytes(Text);
167 string ContentType = TurtleContentTypes[0] + "; charset=" + Encoding.WebName;
168
169 return Task.FromResult(new ContentResponse(ContentType, Object, Bin));
170 }
171
178 public bool TryGetContentType(string FileExtension, out string ContentType)
179 {
180 if (string.Compare(FileExtension, TurtleFileExtensions[0], true) == 0)
181 {
182 ContentType = TurtleContentTypes[0];
183 return true;
184 }
185 else
186 {
187 ContentType = null;
188 return false;
189 }
190 }
191
198 public bool TryGetFileExtension(string ContentType, out string FileExtension)
199 {
200 if (Array.IndexOf(TurtleContentTypes, ContentType) >= 0)
201 {
202 FileExtension = TurtleFileExtensions[0];
203 return true;
204 }
205 else
206 {
207 FileExtension = null;
208 return false;
209 }
210 }
211 }
212}
Contains information about a response to a content request.
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 Turtle Documents.
Definition: TurtleCodec.cs:15
const string DefaultContentType
text/turtle
Definition: TurtleCodec.cs:50
Task< ContentResponse > DecodeAsync(string ContentType, byte[] Data, Encoding Encoding, KeyValuePair< string, string >[] Fields, Uri BaseUri, ICodecProgress Progress)
Decodes an object
Definition: TurtleCodec.cs:87
string[] FileExtensions
Supported file extensions.
Definition: TurtleCodec.cs:40
bool Encodes(object Object, out Grade Grade, params string[] AcceptedContentTypes)
If the encoder encodes a specific object.
Definition: TurtleCodec.cs:102
bool TryGetContentType(string FileExtension, out string ContentType)
Tries to get the content type of content of a given file extension.
Definition: TurtleCodec.cs:178
bool TryGetFileExtension(string ContentType, out string FileExtension)
Tries to get the file extension of content of a given content type.
Definition: TurtleCodec.cs:198
TurtleCodec()
Encoder and Decoder of semantic information in Turtle Documents.
Definition: TurtleCodec.cs:19
string[] ContentTypes
Supported Internet Content Types.
Definition: TurtleCodec.cs:26
static readonly string[] TurtleContentTypes
Internet Content-Types indicating a Turtle Document.
Definition: TurtleCodec.cs:31
Task< ContentResponse > EncodeAsync(object Object, Encoding Encoding, ICodecProgress Progress, params string[] AcceptedContentTypes)
Encodes an object
Definition: TurtleCodec.cs:136
bool Decodes(string ContentType, out Grade Grade)
If the decoder decodes content of a given Internet Content Type.
Definition: TurtleCodec.cs:63
Contains semantic information stored in a turtle document. https://www.w3.org/TR/rdf12-turtle/ https:...
Plain text encoder/decoder.
const string DefaultContentType
text/plain
Static class managing binary representations of strings.
Definition: Strings.cs:10
static string GetString(byte[] Data, int Offset, int Count, Encoding DefaultEncoding)
Gets a string from its binary representation, taking any Byte Order Mark (BOM) into account.
Definition: Strings.cs:148
Interface for reporting progress about an encoding or decoding.
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