From c5fb8c6326dfe8c46fe2247e611ae1bf94275da0 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 14 Aug 2020 16:05:10 +0200 Subject: Merge datatype and/or language into node This moves closer to the sord API, and is more convenient in most cases. --- serd/serd.h | 38 ++++++++++++++++++++++++++++++-------- 1 file changed, 30 insertions(+), 8 deletions(-) (limited to 'serd') diff --git a/serd/serd.h b/serd/serd.h index 1333b61a..a488dad7 100644 --- a/serd/serd.h +++ b/serd/serd.h @@ -197,8 +197,10 @@ typedef enum { Flags indicating certain string properties relevant to serialisation. */ typedef enum { - SERD_HAS_NEWLINE = 1, /**< Contains line breaks ('\\n' or '\\r') */ - SERD_HAS_QUOTE = 1 << 1 /**< Contains quotes ('"') */ + SERD_HAS_NEWLINE = 1, /**< Contains line breaks ('\\n' or '\\r') */ + SERD_HAS_QUOTE = 1 << 1, /**< Contains quotes ('"') */ + SERD_HAS_DATATYPE = 1 << 2, /**< Literal node has datatype */ + SERD_HAS_LANGUAGE = 1 << 3 /**< Literal node has language */ } SerdNodeFlag; /** @@ -455,6 +457,16 @@ SERD_API SerdNode* serd_node_new_substring(SerdType type, const char* str, size_t len); +/** + Create a new literal node from `str`. + + Either `datatype` or `lang` can be given, but not both, unless `datatype` is + rdf:langString in which case it is ignored. +*/ +SERD_API +SerdNode* +serd_node_new_literal(const char* str, const char* datatype, const char* lang); + /** Simple wrapper for serd_node_new_uri() to resolve a URI node. */ @@ -604,6 +616,20 @@ SERD_API SerdNodeFlags serd_node_flags(const SerdNode* node); +/** + Return the datatype of a literal node, or NULL. +*/ +SERD_API +const SerdNode* +serd_node_datatype(const SerdNode* node); + +/** + Return the language tag of a literal node, or NULL. +*/ +SERD_API +const SerdNode* +serd_node_language(const SerdNode* node); + /** Return true iff `a` is equal to `b`. */ @@ -653,9 +679,7 @@ typedef SerdStatus (*SerdStatementSink)(void* handle, const SerdNode* graph, const SerdNode* subject, const SerdNode* predicate, - const SerdNode* object, - const SerdNode* object_datatype, - const SerdNode* object_lang); + const SerdNode* object); /** Sink (callback) for anonymous node end markers. @@ -1043,9 +1067,7 @@ serd_writer_write_statement(SerdWriter* writer, const SerdNode* graph, const SerdNode* subject, const SerdNode* predicate, - const SerdNode* object, - const SerdNode* datatype, - const SerdNode* lang); + const SerdNode* object); /** Mark the end of an anonymous node's description. -- cgit v1.2.1