summaryrefslogtreecommitdiffstats
path: root/src/raptor_concepts.c
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 05:40:05 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 05:40:05 +0000
commit4038ab95a094b363f1748f3dcb51511a1217475d (patch)
tree7f393d66a783f91ddd263c78d681e485cf4f45ca /src/raptor_concepts.c
parentInitial commit. (diff)
downloadraptor2-8a74621eb7909f43a549b042a496e042ad12fdcb.tar.xz
raptor2-8a74621eb7909f43a549b042a496e042ad12fdcb.zip
Adding upstream version 2.0.16.upstream/2.0.16upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/raptor_concepts.c')
-rw-r--r--src/raptor_concepts.c199
1 files changed, 199 insertions, 0 deletions
diff --git a/src/raptor_concepts.c b/src/raptor_concepts.c
new file mode 100644
index 0000000..443edb0
--- /dev/null
+++ b/src/raptor_concepts.c
@@ -0,0 +1,199 @@
+/* -*- Mode: c; c-basic-offset: 2 -*-
+ *
+ * raptor_concepts.c - Raptor RDF namespace concepts
+ *
+ * Copyright (C) 2010, David Beckett http://www.dajobe.org/
+ *
+ * This package is Free Software and part of Redland http://librdf.org/
+ *
+ * It is licensed under the following three licenses as alternatives:
+ * 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version
+ * 2. GNU General Public License (GPL) V2 or any newer version
+ * 3. Apache License, V2.0 or any newer version
+ *
+ * You may not use this file except in compliance with at least one of
+ * the above three licenses.
+ *
+ * See LICENSE.html or LICENSE.txt at the top of this package for the
+ * complete terms and further detail along with the license texts for
+ * the licenses in COPYING.LIB, COPYING and LICENSE-2.0.txt respectively.
+ *
+ *
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include <raptor_config.h>
+#endif
+
+/* Raptor includes */
+#include "raptor2.h"
+#include "raptor_internal.h"
+
+
+/*
+ * http://www.w3.org/TR/rdf-syntax-grammar/#section-grammar-summary
+ *
+ * coreSyntaxTerms := rdf:RDF | rdf:ID | rdf:about | rdf:bagID |
+ rdf:parseType | rdf:resource | rdf:nodeID | rdf:datatype
+ * syntaxTerms := coreSyntaxTerms | rdf:Description | rdf:li
+ * oldTerms := rdf:aboutEach | rdf:aboutEachPrefix | rdf:bagID
+ *
+ * nodeElementURIs := anyURI - ( coreSyntaxTerms | rdf:li | oldTerms )
+ * propertyElementURIs := anyURI - ( coreSyntaxTerms | rdf:Description | oldTerms )
+ * propertyAttributeURIs := anyURI - ( coreSyntaxTerms | rdf:Description | rdf:li | oldTerms )
+ *
+ * So, forbidden terms in the RDF namespace are:
+ * nodeElements
+ * RDF | ID | about | bagID | parseType | resource | nodeID | datatype |
+ * li | aboutEach | aboutEachPrefix | bagID
+ *
+ * propertyElements
+ * RDF | ID | about | bagID | parseType | resource | nodeID | datatype |
+ * Description | aboutEach | aboutEachPrefix | bagID
+ *
+ * propertyAttributes
+ * RDF | ID | about | bagID | parseType | resource | nodeID | datatype |
+ * Description | li | aboutEach | aboutEachPrefix | bagID
+ *
+ * Information about rdf attributes:
+ * raptor_term_type type
+ * Set when the attribute is a property rather than just syntax
+ * NOTE: raptor_rdfxml_process_property_attributes() expects only
+ * RAPTOR_TERM_TYPE_NONE,
+ * RAPTOR_TERM_TYPE_LITERAL or RAPTOR_TERM_TYPE_URI
+ * allowed_unprefixed_on_attribute
+ * If allowed for legacy reasons to be unprefixed as an attribute.
+ *
+ */
+
+/* (number of terms in RDF NS) + 1: for final sentinel row */
+const raptor_rdf_ns_term_info raptor_rdf_ns_terms_info[RDF_NS_LAST + 2] = {
+ /* term allowed boolean flags:
+ * node element; property element; property attr; unprefixed attr
+ */
+ /* syntax only */
+ { "RDF", RAPTOR_TERM_TYPE_UNKNOWN, 0, 0, 0, 0 }, /* just root */
+ { "Description", RAPTOR_TERM_TYPE_UNKNOWN, 1, 0, 0, 0 },
+ { "li", RAPTOR_TERM_TYPE_UNKNOWN, 0, 1, 0, 0 },
+ { "about", RAPTOR_TERM_TYPE_UNKNOWN, 0, 0, 0, 1 },
+ { "aboutEach", RAPTOR_TERM_TYPE_UNKNOWN, 0, 0, 0, 0 }, /* deprecated */
+ { "aboutEachPrefix", RAPTOR_TERM_TYPE_UNKNOWN, 0, 0, 0, 0 }, /* deprecated */
+ { "ID", RAPTOR_TERM_TYPE_UNKNOWN, 0, 0, 0, 1 },
+ { "bagID", RAPTOR_TERM_TYPE_UNKNOWN, 0, 0, 0, 1 },
+ { "resource", RAPTOR_TERM_TYPE_UNKNOWN, 0, 0, 0, 1 },
+ { "parseType", RAPTOR_TERM_TYPE_UNKNOWN, 0, 0, 0, 1 },
+ { "nodeID", RAPTOR_TERM_TYPE_UNKNOWN, 0, 0, 0, 0 },
+ { "datatype", RAPTOR_TERM_TYPE_UNKNOWN, 0, 0, 0, 0 },
+
+ /* rdf:Property-s */
+ { "type", RAPTOR_TERM_TYPE_URI , 1, 1, 1, 1 },
+ { "value", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ { "subject", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ { "predicate", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ { "object", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ { "first", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ { "rest", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+
+ /* rdfs:Class-s */
+ { "Seq", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ { "Bag", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ { "Alt", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ { "Statement", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ { "Property", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ { "List", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+
+ /* rdfs:Resource-s */
+ { "nil", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+
+ /* datatypes */
+ { "XMLLiteral", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ { "PlainLiteral", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ /* RDF 1.1 */
+ /* http://www.w3.org/TR/2013/WD-rdf11-concepts-20130723/#section-html */
+ { "HTML", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+ /* http://www.w3.org/TR/2013/WD-rdf11-concepts-20130723/#section-Datatypes */
+ { "langString", RAPTOR_TERM_TYPE_LITERAL, 1, 1, 1, 0 },
+
+ /* internal */
+ { NULL , RAPTOR_TERM_TYPE_UNKNOWN, 1, 1, 1, 0 }
+};
+
+
+
+int
+raptor_concepts_init(raptor_world* world)
+{
+ int i;
+
+ for(i = 0; i < RDF_NS_LAST + 1; i++) {
+ unsigned char* name = (unsigned char*)raptor_rdf_ns_terms_info[i].name;
+ world->concepts[i] = raptor_new_uri_for_rdf_concept(world, name);
+ if(!world->concepts[i])
+ return 1;
+
+ /* only make a term for things that are not syntax-only */
+ /* OR use:
+ raptor_rdf_ns_terms_info[i].allowed_as_nodeElement ||
+ raptor_rdf_ns_terms_info[i].allowed_as_propertyElement ||
+ raptor_rdf_ns_terms_info[i].allowed_as_propertyAttribute)
+ */
+ if(i > RDF_NS_LAST_SYNTAX_TERM) {
+ world->terms[i] = raptor_new_term_from_uri(world, world->concepts[i]);
+ if(!world->terms[i])
+ return 1;
+ }
+ }
+
+ world->xsd_namespace_uri = raptor_new_uri(world, raptor_xmlschema_datatypes_namespace_uri);
+ if(!world->xsd_namespace_uri)
+ return 1;
+
+ world->xsd_boolean_uri = raptor_new_uri_from_uri_local_name(world, world->xsd_namespace_uri, (const unsigned char*)"boolean");
+ if(!world->xsd_boolean_uri)
+ return 1;
+
+ world->xsd_decimal_uri = raptor_new_uri_from_uri_local_name(world, world->xsd_namespace_uri, (const unsigned char*)"decimal");
+ if(!world->xsd_decimal_uri)
+ return 1;
+
+ world->xsd_double_uri = raptor_new_uri_from_uri_local_name(world, world->xsd_namespace_uri, (const unsigned char*)"double");
+ if(!world->xsd_double_uri)
+ return 1;
+
+ world->xsd_integer_uri = raptor_new_uri_from_uri_local_name(world, world->xsd_namespace_uri, (const unsigned char*)"integer");
+ if(!world->xsd_integer_uri)
+ return 1;
+
+ return 0;
+}
+
+
+
+void
+raptor_concepts_finish(raptor_world* world)
+{
+ int i;
+
+ for(i = 0; i < RDF_NS_LAST + 1; i++) {
+ raptor_uri* concept_uri = world->concepts[i];
+ if(concept_uri) {
+ raptor_free_uri(concept_uri);
+ world->concepts[i] = NULL;
+ }
+ if(world->terms[i])
+ raptor_free_term(world->terms[i]);
+ }
+
+ if(world->xsd_boolean_uri)
+ raptor_free_uri(world->xsd_boolean_uri);
+ if(world->xsd_decimal_uri)
+ raptor_free_uri(world->xsd_decimal_uri);
+ if(world->xsd_double_uri)
+ raptor_free_uri(world->xsd_double_uri);
+ if(world->xsd_integer_uri)
+ raptor_free_uri(world->xsd_integer_uri);
+
+ if(world->xsd_namespace_uri)
+ raptor_free_uri(world->xsd_namespace_uri);
+}