libcsem
0.2
|
/* $Id: sample_rdfa_stream_8c-example.html,v 1.1 2013-04-22 20:16:27 hitoshi Exp $ */ #include <stdio.h> #include <stdlib.h> #include <fcntl.h> #include "csem/csem_stream.h" CSEM_Bool startScope(const void *userdata, const CSEM_Url *resource, const CSEM_List *types) { int i = 0; puts("START_SCOPE"); if(resource) { char *resource_str = NULL; CSEM_URL_Serialize(resource, &resource_str); printf("\t@resource=\"%s\"\n", resource_str); free(resource_str); } for(i = 0; types && i < CSEM_List_Size(types); i++) { printf("\t@typeof=\"%s\"\n", (char *)CSEM_List_Get(types, i)); } return CSEM_TRUE; } void endScope(const void *userdata) { puts("END_SCOPE\n"); } CSEM_Bool startProp(const void *userdata, const char *propName, CSEM_Bool hasUrlValue) { puts("START_PROP"); printf("\t@property=\"%s\"\n", propName); return CSEM_TRUE; } void itemProp(const void *userdata, const char *value, int len) { puts("PROP_VALUE"); printf("\t"); fwrite(value, 1, len, stdout); printf("\n"); } void endProp(const void *userdata) { puts("END_PROP\n"); } int main(int argc, char *argv[]) { CSEM_Error error = CSEM_ERROR_NONE; CSEM_Parser *stream = NULL; CSEM_Url *baseURL = NULL; CSEM_Handler *handler = NULL; CSEM_RDFa_Handlers *rdfaHandler = NULL; char *filename = NULL; int fd = -1; /* setup input parameters */ if(argc < 2) { error = CSEM_ERROR_PARAMETER; printf("./sample [filename]\n"); goto FINISH; } filename = argv[1]; /* init */ if((error = CSEM_Parser_Create(&stream))) { fprintf(stderr, "failed to create parser\n"); goto FINISH; } /* set base url */ if((error = CSEM_URL_Parse("http://localhost/test/", &baseURL))) { goto FINISH; } CSEM_Parser_SetBaseURL(stream, baseURL); /* register callback handlers to stream parser */ if((error = CSEM_Handler_Create(&handler))) { fprintf(stderr, "failed to create handler\n"); goto FINISH; } if((error = CSEM_RDFa_CreateHandler(&rdfaHandler))) { fprintf(stderr, "failed to create RDFa Lite handler\n"); goto FINISH; } CSEM_RDFa_SetItemStart(rdfaHandler, startScope); CSEM_RDFa_SetItemEnd(rdfaHandler, endScope); CSEM_RDFa_SetPropStart(rdfaHandler, startProp); CSEM_RDFa_SetPropValue(rdfaHandler, itemProp); CSEM_RDFa_SetPropEnd(rdfaHandler, endProp); CSEM_Handler_SetRDFaHandler(handler, rdfaHandler); CSEM_Parser_SetHandler(stream, handler); /* start parse process */ if(!(fd = open(filename, O_RDONLY))) { fprintf(stderr, "failed to open %s\n", filename); goto FINISH; } if((error = CSEM_Parser_Parse(stream, fd))) { fprintf(stderr, "failed parsing %s\n", filename); goto FINISH; } FINISH: CSEM_Parser_Dispose(stream); CSEM_Handler_Dispose(handler, CSEM_TRUE); CSEM_URL_Dispose(baseURL); puts("END"); return error ? 1 : 0; }