diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:40:05 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 05:40:05 +0000 |
commit | 4038ab95a094b363f1748f3dcb51511a1217475d (patch) | |
tree | 7f393d66a783f91ddd263c78d681e485cf4f45ca /src/raptor_concepts.c | |
parent | Initial commit. (diff) | |
download | raptor2-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.c | 199 |
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); +} |