int rdfa_parse_start(rdfacontext* context) { /* create the buffers and expat parser */ int rval = RDFA_PARSE_SUCCESS; context->wb_allocated = sizeof(char) * READ_BUFFER_SIZE; /* +1 for NUL at end, to allow strstr() etc. to work * malloc - only the first char needs to be NUL */ context->working_buffer = (char*)malloc(context->wb_allocated + 1); *context->working_buffer = '\0'; context->done = 0; context->context_stack = rdfa_create_list(32); /* initialize the context stack */ rdfa_push_item(context->context_stack, context, RDFALIST_FLAG_CONTEXT); #ifdef LIBRDFA_IN_RAPTOR context->sax2 = raptor_new_sax2(context->world, context->locator, context); #else /* init libxml2 */ xmlInitParser(); #endif /* set up the context stack */ #ifdef LIBRDFA_IN_RAPTOR raptor_sax2_set_start_element_handler(context->sax2, raptor_rdfa_start_element); raptor_sax2_set_end_element_handler(context->sax2, raptor_rdfa_end_element); raptor_sax2_set_characters_handler(context->sax2, raptor_rdfa_character_data); raptor_sax2_set_namespace_handler(context->sax2, raptor_rdfa_namespace_handler); #endif rdfa_init_context(context); #ifdef LIBRDFA_IN_RAPTOR context->base_uri = raptor_new_uri(context->sax2->world, (const unsigned char*)context->base); raptor_sax2_parse_start(context->sax2, context->base_uri); #endif return rval; }
rdfalist* rdfa_resolve_curie_list( rdfacontext* rdfa_context, const char* uris, curieparse_t mode) { rdfalist* rval = rdfa_create_list(3); char* working_uris = NULL; char* uptr = NULL; char* ctoken = NULL; working_uris = rdfa_replace_string(working_uris, uris); // go through each item in the list of CURIEs and resolve each ctoken = strtok_r(working_uris, RDFA_WHITESPACE, &uptr); while(ctoken != NULL) { char* resolved_curie = NULL; if((mode == CURIE_PARSE_INSTANCEOF_DATATYPE) || (mode == CURIE_PARSE_ABOUT_RESOURCE) || (mode == CURIE_PARSE_PROPERTY)) { resolved_curie = rdfa_resolve_curie(rdfa_context, ctoken, mode); } else if(mode == CURIE_PARSE_RELREV) { resolved_curie = rdfa_resolve_relrev_curie(rdfa_context, ctoken); } // add the CURIE if it was a valid one if(resolved_curie != NULL) { rdfa_add_item(rval, resolved_curie, RDFALIST_FLAG_TEXT); free(resolved_curie); } ctoken = strtok_r(NULL, RDFA_WHITESPACE, &uptr); } free(working_uris); return rval; }
void run_curie_tests() { rdfacontext* context = rdfa_create_context("http://example.org/"); rdfa_init_context(context); rdfa_update_mapping( context->uri_mappings, "dc", "http://purl.org/dc/elements/1.1/"); rdfa_update_mapping( context->uri_mappings, "dctv", "http://purl.org/dc/dcmitype/"); printf("------------------------ CURIE tests ---------------------\n"); run_test(context, "IRI", "http://www.example.org/iri", rdfa_resolve_curie, "http://www.example.org/iri", CURIE_PARSE_HREF_SRC); run_test(context, "Safe CURIE", "[dc:title]", rdfa_resolve_curie, "http://purl.org/dc/elements/1.1/title", CURIE_PARSE_PROPERTY); run_test(context, "Unsafe CURIE", "dc:title", rdfa_resolve_curie, "http://purl.org/dc/elements/1.1/title", CURIE_PARSE_PROPERTY); run_test(context, "Non-prefixed CURIE", ":nonprefixed", rdfa_resolve_curie, "http://example.org/nonprefixed", CURIE_PARSE_PROPERTY); run_test(context, "Reference-only CURIE", "foobar", rdfa_resolve_curie, NULL, CURIE_PARSE_PROPERTY); run_test(context, "Reference-only safe CURIE", "[foobar]", rdfa_resolve_curie, NULL, CURIE_PARSE_PROPERTY); run_test(context, "Empty safe CURIE", "[]", rdfa_resolve_curie, NULL, CURIE_PARSE_PROPERTY); run_test(context, "Blank named safe CURIE", "[_:frank]", rdfa_resolve_curie, "_:frank", CURIE_PARSE_PROPERTY); rdfalist* dctvlist = rdfa_create_list(2); rdfa_add_item( dctvlist, "http://purl.org/dc/dcmitype/Image", RDFALIST_FLAG_NONE); rdfa_add_item( dctvlist, "http://purl.org/dc/dcmitype/Sound", RDFALIST_FLAG_NONE); run_list_test( context, "XHTML multiple @type_of", "[dctv:Image] [dctv:Sound]", rdfa_resolve_curie_list, dctvlist, CURIE_PARSE_INSTANCEOF_DATATYPE); rdfa_free_list(dctvlist); rdfalist* nllist = rdfa_create_list(2); rdfa_add_item( nllist, XHTML_VOCAB_URI "next", RDFALIST_FLAG_NONE); rdfa_add_item( nllist, XHTML_VOCAB_URI "license", RDFALIST_FLAG_NONE); run_list_test( context, "XHTML multiple @rel/@rev", "next license", rdfa_resolve_curie_list, nllist, CURIE_PARSE_RELREV); rdfa_free_list(nllist); rdfalist* dtlist = rdfa_create_list(2); rdfa_add_item( dtlist, XHTML_VOCAB_URI "description", RDFALIST_FLAG_NONE); rdfa_add_item( dtlist, XHTML_VOCAB_URI "title", RDFALIST_FLAG_NONE); run_list_test( context, "XHTML multiple @property", "description title", rdfa_resolve_curie_list, dtlist, CURIE_PARSE_PROPERTY); rdfa_free_list(dtlist); run_test_set(context, "XHTML @rel/@rev reserved", my_g_relrev_reserved_words, XHTML_RELREV_RESERVED_WORDS_SIZE, rdfa_resolve_relrev_curie, XHTML_VOCAB_URI, CURIE_PARSE_RELREV); printf("---------------------- CURIE test results ---------------------\n" "%i passed, %i failed\n", g_test_passes, g_test_fails); rdfa_free_context(context); }