示例#1
0
static int
check_bad_xml (void *cache)
{
/* parsing a not-well-formed XML Sample */
    FILE *fl;
    int sz = 0;
    int rd;
    unsigned char *xml = NULL;
    unsigned char *p_result = NULL;
    int len;
    char *err1;
    char *err2;
    char *version = gaia_libxml2_version ();

    if (version == NULL)
      {
	  fprintf (stderr, "unable to get the library version\n");
	  return 0;
      }
    free (version);

/* loading the XMLDocument */
    fl = fopen ("books-bad.xml", "rb");
    if (!fl)
      {
	  fprintf (stderr, "cannot open \"books-bad.xml\"\n");
	  return 0;
      }
    if (fseek (fl, 0, SEEK_END) == 0)
	sz = ftell (fl);
    xml = malloc (sz);
    rewind (fl);
    rd = fread (xml, 1, sz, fl);
    if (rd != sz)
      {
	  fprintf (stderr, "read error \"books-bad.xml\"\n");
	  return 0;
      }
    fclose (fl);

/* parsing the XMLDocument */
    gaiaXmlToBlob (cache, xml, rd, 1, NULL, &p_result, &len, &err1, &err2);
    if (p_result != NULL)
      {
	  fprintf (stderr, "this is not a well-formed XML !!!\n");
	  return 0;
      }

    free (xml);
    return 1;
}
示例#2
0
static int
check_bad_schema (void *cache)
{
/* validating by invalid Schema */
    FILE *fl;
    int sz = 0;
    int rd;
    unsigned char *xml = NULL;
    unsigned char *p_result = NULL;
    int len;
    char *err1;
    char *err2;

/* loading the XMLDocument */
    fl = fopen ("books.xml", "rb");
    if (!fl)
      {
	  fprintf (stderr, "cannot open \"books.xml\"\n");
	  return 0;
      }
    if (fseek (fl, 0, SEEK_END) == 0)
	sz = ftell (fl);
    xml = malloc (sz);
    rewind (fl);
    rd = fread (xml, 1, sz, fl);
    if (rd != sz)
      {
	  fprintf (stderr, "read error \"books.xml\"\n");
	  return 0;
      }
    fclose (fl);

/* validating the XMLDocument */
    gaiaXmlToBlob (cache, xml, rd, 1, "books-bad.xsd", &p_result, &len, &err1,
		   &err2);
    if (p_result != NULL)
      {
	  fprintf (stderr, "this is not a valid XML !!!\n");
	  return 0;
      }

    free (xml);
    return 1;
}
示例#3
0
int main (int argc, char *argv[])
{
    int ret;
    sqlite3 *handle;
    char *err_msg = NULL;
    char **results;
    int rows;
    int columns;
    unsigned char *blob;
    int blob_len;
    char *hexBlob;
    unsigned char *xml;
    int len;
    char *sql;
    void *cache = spatialite_alloc_connection();

    if (argc > 1 || argv[0] == NULL)
	argc = 1;		/* silencing stupid compiler warnings */

    ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL);
    if (ret != SQLITE_OK) {
	fprintf(stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (handle));
	sqlite3_close(handle);
	return -1;
    }

    spatialite_init_ex (handle, cache, 0);

    ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata(1, 'WGS84')", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
	fprintf(stderr, "Unexpected InitSpatialMetadata result: %i, (%s)\n", ret, err_msg);
	sqlite3_free (err_msg);
	return -2;
    }

#ifdef ENABLE_LIBXML2	/* only if LIBXML2 is supported */

    ret = sqlite3_get_table (handle, "SELECT CreateStylingTables(1)", &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error CreateStylingTables: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -3;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -4;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #0 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -5;
    }
    sqlite3_free_table(results);

    blob = load_blob("empty.png", &blob_len);
    if (blob == NULL) 
        return -6;
    hexBlob = build_hex_blob(blob, blob_len);
    free(blob);
    if (hexBlob == NULL)
        return -7;
    sql = sqlite3_mprintf("SELECT RegisterExternalGraphic('url-A', x%Q)", hexBlob);
    ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
    sqlite3_free(sql);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterExternalGraphic #1: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -8;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -9;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #1 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -10;
    }
    sqlite3_free_table(results);

    sql = sqlite3_mprintf("SELECT RegisterExternalGraphic('url-A', x%Q, 'title', 'abstract', 'file_name')", hexBlob);
    ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
    free(hexBlob);
    sqlite3_free(sql);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterExternalGraphic #2: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -11;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -12;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #2 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -13;
    }
    sqlite3_free_table(results);

    xml = load_xml("thunderstorm_mild.svg", &len);
    if (xml == NULL) 
        return -14;
    gaiaXmlToBlob (cache, xml, len, 1, NULL, &blob, &blob_len, NULL, NULL); 
    free(xml);
    if (blob == NULL) {
        fprintf (stderr, "this is not a well-formed XML !!!\n");
        return -15;
    }
    hexBlob = build_hex_blob(blob, blob_len);
    free(blob);
    if (hexBlob == NULL)
        return -16;
    sql = sqlite3_mprintf("SELECT RegisterExternalGraphic('url-B', x%Q, 'title', 'abstract', 'file_name')", hexBlob);
    ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
    sqlite3_free(sql);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterExternalGraphic #3: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -17;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -18;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #3 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -19;
    }
    sqlite3_free_table(results);

    sql = sqlite3_mprintf("SELECT RegisterExternalGraphic('url-B', x%Q)", hexBlob);
    ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
    free(hexBlob);
    sqlite3_free(sql);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterExternalGraphic #4: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -20;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -21;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #4 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -22;
    }
    sqlite3_free_table(results);

    ret = sqlite3_exec (handle, "CREATE TABLE table1 (id INTEGER PRIMARY KEY AUTOINCREMENT)", NULL, NULL, &err_msg);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error Create Table table1: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -23;
    }
    ret = sqlite3_get_table (handle, "SELECT AddGeometryColumn('table1', 'geom', 4326, 'POINT', 'XY')", &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error AddGeometryColumn: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -24;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -25;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #5 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -26;
    }
    sqlite3_free_table(results);

    xml = load_xml("stazioni_se.xml", &len);
    if (xml == NULL) 
        return -27;
    gaiaXmlToBlob (cache, xml, len, 1, NULL, &blob, &blob_len, NULL, NULL); 
    free(xml);
    if (blob == NULL) {
        fprintf (stderr, "this is not a well-formed XML !!!\n");
        return -28;
    }
    hexBlob = build_hex_blob(blob, blob_len);
    free(blob);
    if (hexBlob == NULL)
        return -29;
    sql = sqlite3_mprintf("SELECT RegisterVectorStyledLayer('table1', 'geom', x%Q)", hexBlob);
    ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
    sqlite3_free(sql);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterVectorStyledLayer #6: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -30;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -31;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #6 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -32;
    }
    sqlite3_free_table(results);
    
    sql = sqlite3_mprintf("SELECT RegisterVectorStyledLayer('table1', 'geom', 0, x%Q)", hexBlob);
    free(hexBlob);
    ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
    sqlite3_free(sql);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterVectorStyledLayer #7: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -33;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -34;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #7 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -35;
    }
    sqlite3_free_table(results);

    xml = load_xml("raster_se.xml", &len);
    if (xml == NULL) 
        return -36;
    gaiaXmlToBlob (cache, xml, len, 1, NULL, &blob, &blob_len, NULL, NULL); 
    free(xml);
    if (blob == NULL) {
        fprintf (stderr, "this is not a well-formed XML !!!\n");
        return -37;
    }
    hexBlob = build_hex_blob(blob, blob_len);
    free(blob);
    if (hexBlob == NULL)
        return -38;
    sql = sqlite3_mprintf("SELECT RegisterRasterStyledLayer('srtm', x%Q)", hexBlob);
    ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
    sqlite3_free(sql);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterRasterStyledLayer #8: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -39;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -40;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #8 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -41;
    }
    sqlite3_free_table(results);
    
    sql = sqlite3_mprintf("SELECT RegisterRasterStyledLayer('srtm', 0, x%Q)", hexBlob);
    free(hexBlob);
    ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg);
    sqlite3_free(sql);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterRasterStyledLayer #9: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -42;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -43;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #9 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -44;
    }
    sqlite3_free_table(results);
    
    ret = sqlite3_get_table (handle, "SELECT RegisterStyledGroup('group', 'srtm', 0)", &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterStyledGroup #10: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -45;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -46;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #10 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -47;
    }
    sqlite3_free_table(results);
    
    ret = sqlite3_get_table (handle, "SELECT RegisterStyledGroup('group', 'table1', 'geom', 0)", &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterStyledGroup #11: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -48;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -49;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #12 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -50;
    }
    sqlite3_free_table(results);
    
    ret = sqlite3_get_table (handle, "SELECT RegisterStyledGroup('group', 'srtm', 0, 4)", &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterStyledGroup #13: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -51;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -52;
    }
    if (strcmp(results[1 * columns + 0], "0") != 0)
    {
	fprintf (stderr, "Unexpected #13 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -53;
    }
    sqlite3_free_table(results);
    
    ret = sqlite3_get_table (handle, "SELECT RegisterStyledGroup('group', 'table1', 'geom', 0, 1)", &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterStyledGroup #14: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -54;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -55;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #14 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -56;
    }
    sqlite3_free_table(results);
    
    ret = sqlite3_get_table (handle, "SELECT SetStyledGroupInfos('group', 'title', 'abstract')", &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterStyledGroup #15: %s\n", err_msg);
      sqlite3_free (err_msg);
      return -57;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -58;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #15 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -59;
    }
    sqlite3_free_table(results);
    
    ret = sqlite3_get_table (handle, "SELECT SetStyledGroupInfos('group-bis', 'title', 'abstract')", &results, &rows, &columns, &err_msg);
    if (ret != SQLITE_OK) {
      fprintf (stderr, "Error RegisterStyledGroup #16: %s\n", err_msg);
      sqlite3_free (err_msg);
      return 60;
    }
    if ((rows != 1) || (columns != 1))
    {
	sqlite3_free_table(results);
	fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns);
	return -61;
    }
    if (strcmp(results[1 * columns + 0], "1") != 0)
    {
	fprintf (stderr, "Unexpected #16 result (got %s, expected 1)", results[1 * columns + 0]);
	sqlite3_free_table(results);
	return -62;
    }
    sqlite3_free_table(results);


#endif
    
    ret = sqlite3_close (handle);
    if (ret != SQLITE_OK) {
        fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle));
	return -57;
    }
        
    spatialite_cleanup_ex (cache);

#ifdef ENABLE_LIBXML2	/* only if LIBXML2 is supported */
    xmlCleanupParser();
#endif
    
    return 0;
}
示例#4
0
static int
check_mline_gpx (sqlite3 * handle, void *cache, const char *path)
{
/* parsing an XML Sample */
    FILE *fl;
    int sz = 0;
    int rd;
    unsigned char *xml = NULL;
    int uncompressed_sz;
    unsigned char *p_result = NULL;
    gaiaGeomCollPtr geom;
    gaiaLinestringPtr ln;
    double x;
    double y;
    double z;
    double m;

/* loading the XMLDocument */
    fl = fopen (path, "rb");
    if (!fl)
      {
	  fprintf (stderr, "cannot open \"%s\"\n", path);
	  return 0;
      }
    if (fseek (fl, 0, SEEK_END) == 0)
	sz = ftell (fl);
    xml = malloc (sz);
    rewind (fl);
    rd = fread (xml, 1, sz, fl);
    if (rd != sz)
      {
	  fprintf (stderr, "read error \"%s\"\n", path);
	  return 0;
      }
    fclose (fl);

/* parsing the GPX document (no validation / not compressed) */
    gaiaXmlToBlob (cache, xml, rd, 0, NULL, &p_result, &uncompressed_sz, NULL,
		   NULL);
    if (p_result == NULL)
      {
	  fprintf (stderr, "unable to parse(gpx)\"%s\"\n", path);
	  return 0;
      }

    geom = gaiaXmlBlobMLineFromGPX (p_result, uncompressed_sz, handle);
    if (geom == NULL)
      {
	  fprintf (stderr, "XB_MLineFromGPX: unexpected failure \"%s\"\n",
		   path);
	  return 0;
      }

    if (geom->Srid != 4326)
      {
	  fprintf (stderr, "XB_MLineFromGPX: invalid SRID (%d) \"%s\"\n",
		   geom->Srid, path);
	  return 0;
      }
    ln = geom->FirstLinestring;
    if (ln == NULL)
      {
	  fprintf (stderr, "XB_MLineFromGPX: not a Linestring \"%s\"\n", path);
	  return 0;
      }
    if (ln->Points < 5)
      {
	  fprintf (stderr, "XB_MLineFromGPX: too few points \"%s\"\n", path);
	  return 0;
      }
    gaiaGetPointXYZM (ln->Coords, 4, &x, &y, &z, &m);
    if (strcmp (path, "Gpx-sample.gpx") == 0)
      {
	  if (x != 37.808177)
	    {
		fprintf (stderr, "XB_MLineFromGPX: unexpected X=%f \"%s\"\n", x,
			 path);
		return 0;
	    }
	  if (y != 55.753587)
	    {
		fprintf (stderr, "XB_MLineFromGPX: unexpected Y=%f \"%s\"\n", y,
			 path);
		return 0;
	    }
	  if (z != 135.0)
	    {
		fprintf (stderr, "XB_MLineFromGPX: unexpected Z=%f \"%s\"\n", z,
			 path);
		return 0;
	    }
	  if (m < 2454970.667060 || m > 2454970.667061)
	    {
		fprintf (stderr, "XB_MLineFromGPX: unexpected M=%f \"%s\"\n", m,
			 path);
		return 0;
	    }
      }
    else
      {
	  if (x != -25.1959200)
	    {
		fprintf (stderr, "XB_MLineFromGPX: unexpected X=%f \"%s\"\n", x,
			 path);
		return 0;
	    }
	  if (y != 37.7710900)
	    {
		fprintf (stderr, "XB_MLineFromGPX: unexpected Y=%f \"%s\"\n", y,
			 path);
		return 0;
	    }
	  if (z != 0.0)
	    {
		fprintf (stderr, "XB_MLineFromGPX: unexpected Z=%f \"%s\"\n", z,
			 path);
		return 0;
	    }
	  if (m != 1721059.50)
	    {
		fprintf (stderr, "XB_MLineFromGPX: unexpected M=%f \"%s\"\n", m,
			 path);
		return 0;
	    }
      }

    gaiaFreeGeomColl (geom);
    free (p_result);
    free (xml);
    return 1;
}
示例#5
0
static int
check_parse (void *cache, const char *path)
{
/* parsing an XML Sample */
    FILE *fl;
    int sz = 0;
    int rd;
    unsigned char *xml = NULL;
    int compressed_sz;
    int uncompressed_sz;
    int doc_sz;
    int formatted_sz;
    int formatted_txt_sz;
    unsigned char *p_result = NULL;
    unsigned char *out;
    char *txt;

/* loading the XMLDocument */
    fl = fopen (path, "rb");
    if (!fl)
      {
	  fprintf (stderr, "cannot open \"%s\"\n", path);
	  return 0;
      }
    if (fseek (fl, 0, SEEK_END) == 0)
	sz = ftell (fl);
    xml = malloc (sz);
    rewind (fl);
    rd = fread (xml, 1, sz, fl);
    if (rd != sz)
      {
	  fprintf (stderr, "read error \"%s\"\n", path);
	  return 0;
      }
    fclose (fl);

/* parsing the XMLDocument (no validation / compressed) */
    gaiaXmlToBlob (cache, xml, rd, 1, NULL, &p_result, &compressed_sz, NULL,
		   NULL);
    if (p_result == NULL)
      {
	  fprintf (stderr, "unable to parse(1) \"%s\"\n", path);
	  return 0;
      }
    doc_sz = gaiaXmlBlobGetDocumentSize (p_result, compressed_sz);
    gaiaXmlFromBlob (p_result, compressed_sz, 4, &out, &formatted_sz);
    if (out == NULL)
      {
	  fprintf (stderr, "unable to format(1) \"%s\"\n", path);
	  return 0;
      }
    free (out);
    txt = gaiaXmlTextFromBlob (p_result, compressed_sz, 2);
    if (txt == NULL)
      {
	  fprintf (stderr, "unable to format-text(1) \"%s\"\n", path);
	  return 0;
      }
    formatted_txt_sz = strlen (txt);
    free (txt);
    free (p_result);

/* parsing the XMLDocument (no validation / not compressed) */
    gaiaXmlToBlob (cache, xml, rd, 0, NULL, &p_result, &uncompressed_sz, NULL,
		   NULL);
    if (p_result == NULL)
      {
	  fprintf (stderr, "unable to parse(2) \"%s\"\n", path);
	  return 0;
      }
    free (p_result);

    if (strcmp (path, "books.xml") == 0)
      {
	  if (compressed_sz != 432)
	    {
		fprintf (stderr,
			 "books.xml: unexpected compressed size %d (expected 432)\n",
			 compressed_sz);
		return 0;
	    }
	  if (uncompressed_sz != 780)
	    {
		fprintf (stderr,
			 "books.xml: unexpected compressed size %d (expected 780)\n",
			 uncompressed_sz);
		return 0;
	    }
	  if (doc_sz != 741)
	    {
		fprintf (stderr,
			 "books.xml: unexpected document size %d (expected 741)\n",
			 doc_sz);
		return 0;
	    }
	  if (formatted_sz != 863)
	    {
		fprintf (stderr,
			 "books.xml: unexpected formatted size %d (expected 863)\n",
			 formatted_sz);
		return 0;
	    }
	  if (formatted_txt_sz != 803)
	    {
		fprintf (stderr,
			 "books.xml: unexpected formatted-text size %d (expected 803)\n",
			 formatted_txt_sz);
		return 0;
	    }
      }
    if (strcmp (path, "opera.xml") == 0)
      {
	  if (compressed_sz != 425)
	    {
		fprintf (stderr,
			 "opera.xml: unexpected compressed size %d (expected 425)\n",
			 compressed_sz);
		return 0;
	    }
	  if (uncompressed_sz != 951)
	    {
		fprintf (stderr,
			 "opera.xml: unexpected compressed size %d (expected 951)\n",
			 uncompressed_sz);
		return 0;
	    }
	  if (doc_sz != 912)
	    {
		fprintf (stderr,
			 "opera.xml: unexpected document size %d (expected 912)\n",
			 doc_sz);
		return 0;
	    }
	  if (formatted_sz != 969)
	    {
		fprintf (stderr,
			 "opera.xml: unexpected formatted size %d (expected 969)\n",
			 formatted_sz);
		return 0;
	    }
	  if (formatted_txt_sz != 909)
	    {
		fprintf (stderr,
			 "opera.xml: unexpected formatted-text size %d (expected 909)\n",
			 formatted_txt_sz);
		return 0;
	    }
      }
    if (strcmp (path, "movies.xml") == 0)
      {
	  if (compressed_sz != 577)
	    {
		fprintf (stderr,
			 "movies.xml: unexpected compressed size %d (expected 577)\n",
			 compressed_sz);
		return 0;
	    }
	  if (uncompressed_sz != 1809)
	    {
		fprintf (stderr,
			 "movies.xml: unexpected compressed size %d (expected 1809)\n",
			 uncompressed_sz);
		return 0;
	    }
	  if (doc_sz != 1770)
	    {
		fprintf (stderr,
			 "movies.xml: unexpected document size %d (expected 1770)\n",
			 doc_sz);
		return 0;
	    }
	  if (formatted_sz != 944)
	    {
		fprintf (stderr,
			 "movies.xml: unexpected formatted size %d (expected 944)\n",
			 formatted_sz);
		return 0;
	    }
	  if (formatted_txt_sz != 884)
	    {
		fprintf (stderr,
			 "movies.xml: unexpected formatted-text size %d (expected 884)\n",
			 formatted_txt_sz);
		return 0;
	    }
      }
    free (xml);

    return 1;
}
示例#6
0
static int
check_extended (void *cache, const char *path, int mode)
{
/* validating an XML Sample */
    FILE *fl;
    int sz = 0;
    int rd;
    unsigned char *xml = NULL;
    int iso;
    int style;
    int svg;
    unsigned char *p_result = NULL;
    int len;
    char *file_id = NULL;
    char *parent_id = NULL;
    char *title = NULL;
    char *abstract = NULL;
    unsigned char *geom_blob;
    int geom_size;
    gaiaGeomCollPtr geom;

/* loading the XMLDocument */
    fl = fopen (path, "rb");
    if (!fl)
      {
	  fprintf (stderr, "cannot open \"%s\"\n", path);
	  return 0;
      }
    if (fseek (fl, 0, SEEK_END) == 0)
	sz = ftell (fl);
    xml = malloc (sz);
    rewind (fl);
    rd = fread (xml, 1, sz, fl);
    if (rd != sz)
      {
	  fprintf (stderr, "read error \"%s\"\n", path);
	  return 0;
      }
    fclose (fl);

/* simple parsing without validation */
    gaiaXmlToBlob (cache, xml, rd, 1, NULL, &p_result, &len, NULL, NULL);
    if (p_result == NULL)
      {
	  fprintf (stderr, "unable to parse \"%s\"\n", path);
	  return 0;
      }

/* checking the payload type */
    iso = gaiaIsIsoMetadataXmlBlob (p_result, len);
    style = gaiaIsSldSeRasterStyleXmlBlob (p_result, len);
    style = gaiaIsSldSeVectorStyleXmlBlob (p_result, len);
    svg = gaiaIsSvgXmlBlob (p_result, len);
    if (mode == ISO_METADATA && iso && !style && !svg)
	;
    else if (mode == SLD_SE_STYLE && !iso && style && !svg)
	;
    else if (mode == SVG && !iso && !style && svg)
	;
    else
      {
	  fprintf (stderr, "mismatching type: \"%s\" iso=%d style=%d svg=%d\n",
		   path, iso, style, svg);
	  return 0;
      }

/* testing ISO Metadata attributes */
    file_id = gaiaXmlBlobGetFileId (p_result, len);
    parent_id = gaiaXmlBlobGetParentId (p_result, len);
    title = gaiaXmlBlobGetTitle (p_result, len);
    abstract = gaiaXmlBlobGetAbstract (p_result, len);
    gaiaXmlBlobGetGeometry (p_result, len, &geom_blob, &geom_size);
    if (mode == ISO_METADATA)
      {
	  /* verifying ISO Metadata attributes */
	  if (file_id == NULL)
	    {
		fprintf (stderr, "unexpected NULL FileIdentifier in \"%s\"\n",
			 path);
		return 0;
	    }
	  if (strcmp (file_id, "029097fd-2ef2-487c-a5ca-6ec7a3dbac53") != 0)
	    {
		fprintf (stderr, "unexpected FileIdentifier in \"%s\" [%s]\n",
			 path, file_id);
		return 0;
	    }
	  if (parent_id == NULL)
	    {
		fprintf (stderr, "unexpected NULL ParentIdentifier in \"%s\"\n",
			 path);
		return 0;
	    }
	  if (strcmp (parent_id, "024027fd-3ef2-487c-a8ca-6ec8a3dfac57") != 0)
	    {
		fprintf (stderr, "unexpected ParentIdentifier in \"%s\" [%s]\n",
			 path, parent_id);
		return 0;
	    }
	  if (title == NULL)
	    {
		fprintf (stderr, "unexpected NULL Title in \"%s\"\n", path);
		return 0;
	    }
	  if (strcmp (title, "Image2000 Product 1 (nl2) Multispectral") != 0)
	    {
		fprintf (stderr, "unexpected Title in \"%s\" [%s]\n", path,
			 title);
		return 0;
	    }
	  if (abstract == NULL)
	    {
		fprintf (stderr, "unexpected NULL Abstract in \"%s\"\n", path);
		return 0;
	    }
	  if (strcmp
	      (abstract,
	       "IMAGE2000 product 1 individual orthorectified scenes.") != 0)
	    {
		fprintf (stderr, "unexpected Abstract in \"%s\" [%s]\n", path,
			 abstract);
		return 0;
	    }
	  if (geom_blob == NULL)
	    {
		fprintf (stderr, "unexpected NULL Geometry in \"%s\"\n", path);
		return 0;
	    }
	  geom = gaiaFromSpatiaLiteBlobWkb (geom_blob, geom_size);
	  if (geom == NULL)
	    {
		fprintf (stderr, "unexpected invalid Geometry in \"%s\"\n",
			 path);
		return 0;
	    }
	  if (geom->Srid != 4326)
	    {
		fprintf (stderr, "unexpected Geometry SRID in \"%s\" [%d]\n",
			 path, geom->Srid);
		return 0;
	    }
	  if (geom->DeclaredType != GAIA_MULTIPOLYGON)
	    {
		fprintf (stderr, "unexpected Geometry Type in \"%s\" [%d]\n",
			 path, geom->DeclaredType);
		return 0;
	    }
	  if (geom->MinX != 3.93000000)
	    {
		fprintf (stderr, "unexpected Geometry MinX in \"%s\" [%1.8f]\n",
			 path, geom->MinX);
		return 0;
	    }
	  if (geom->MinY != 52.10000000)
	    {
		fprintf (stderr, "unexpected Geometry MinY in \"%s\" [%1.8f]\n",
			 path, geom->MinY);
		return 0;
	    }
	  if (geom->MaxX != 7.57000000)
	    {
		fprintf (stderr, "unexpected Geometry MaxX in \"%s\" [%1.8f]\n",
			 path, geom->MaxX);
		return 0;
	    }
	  if (geom->MaxY != 54.10000000)
	    {
		fprintf (stderr, "unexpected Geometry MaxY in \"%s\" [%1.8f]\n",
			 path, geom->MaxY);
		return 0;
	    }
	  gaiaFreeGeomColl (geom);
      }
    else
      {
	  /* not ISO Metadata */
	  if (strcmp (path, "stazioni_se.xml") == 0)
	    {
		if (strcmp (title, "Railway Stations - blue star") != 0)
		  {
		      fprintf (stderr, "unexpected Title in \"%s\"\n", path);
		      return 0;
		  }
		if (strcmp (abstract, "a simple SE Point Symbolizer") != 0)
		  {
		      fprintf (stderr, "unexpected Abstract in \"%s\"\n", path);
		      return 0;
		  }
	    }
	  else
	    {
		if (title != NULL)
		  {
		      fprintf (stderr, "unexpected Title in \"%s\"\n", path);
		      return 0;
		  }
		if (abstract != NULL)
		  {
		      fprintf (stderr, "unexpected Abstract in \"%s\"\n", path);
		      return 0;
		  }
	    }
      }

    free (p_result);
    free (xml);
    if (file_id)
	free (file_id);
    if (parent_id)
	free (parent_id);
    if (title)
	free (title);
    if (abstract)
	free (abstract);
    if (geom_blob)
	free (geom_blob);

    return 1;
}
示例#7
0
static int
check_validate (void *cache, const char *path)
{
/* validating an XML Sample */
    FILE *fl;
    int sz = 0;
    int rd;
    unsigned char *xml = NULL;
    char *schema_uri = NULL;
    char *schema_uri2 = NULL;
    unsigned char *p_result = NULL;
    int len;

/* loading the XMLDocument */
    fl = fopen (path, "rb");
    if (!fl)
      {
	  fprintf (stderr, "cannot open \"%s\"\n", path);
	  return 0;
      }
    if (fseek (fl, 0, SEEK_END) == 0)
	sz = ftell (fl);
    xml = malloc (sz);
    rewind (fl);
    rd = fread (xml, 1, sz, fl);
    if (rd != sz)
      {
	  fprintf (stderr, "read error \"%s\"\n", path);
	  return 0;
      }
    fclose (fl);

/* extracting the Internal SchemaURI */
    schema_uri = gaiaXmlGetInternalSchemaURI (cache, xml, rd);
    if (schema_uri == NULL)
      {
	  fprintf (stderr, "unable to identify the Schema for \"%s\"\n", path);
	  return 0;
      }
/* validating the XMLDocument */
    gaiaXmlToBlob (cache, xml, rd, 1, schema_uri, &p_result, &len, NULL, NULL);
    if (p_result == NULL)
      {
	  fprintf (stderr, "unable to validate \"%s\"\n", path);
	  return 0;
      }
    if (!gaiaIsSchemaValidatedXmlBlob (p_result, len))
      {
	  fprintf (stderr, "validation failed: \"%s\"\n", path);
	  return 0;
      }
    schema_uri2 = gaiaXmlBlobGetSchemaURI (p_result, len);
    if (schema_uri2 == NULL)
      {
	  fprintf (stderr,
		   "unable to retrieve the ValidationSchemaURI for \"%s\"\n",
		   path);
	  return 0;
      }
    if (strcmp (schema_uri, schema_uri2) != 0)
      {
	  fprintf (stderr,
		   "%s: mismatching SchemaURI \"%s\" (expected \"%s\")\n", path,
		   schema_uri2, schema_uri);
	  return 0;
      }

    free (schema_uri);
    free (schema_uri2);
    free (p_result);
    free (xml);

    return 1;
}