1 /****************************************************************************** 2 * Project: OGR 3 * Purpose: OGRGMLASDriver implementation 4 * Author: Even Rouault, <even dot rouault at spatialys dot com> 5 * 6 * Initial development funded by the European Earth observation programme 7 * Copernicus 8 * 9 ****************************************************************************** 10 * Copyright (c) 2016, Even Rouault, <even dot rouault at spatialys dot com> 11 * 12 * Permission is hereby granted, free of charge, to any person obtaining a 13 * copy of this software and associated documentation files (the "Software"), 14 * to deal in the Software without restriction, including without limitation 15 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 16 * and/or sell copies of the Software, and to permit persons to whom the 17 * Software is furnished to do so, subject to the following conditions: 18 * 19 * The above copyright notice and this permission notice shall be included 20 * in all copies or substantial portions of the Software. 21 * 22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 23 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 25 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 26 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 27 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 28 * DEALINGS IN THE SOFTWARE. 29 ****************************************************************************/ 30 31 #ifndef OGR_GMLAS_CONSTS_INCLUDED_REDEFINABLE 32 #define OGR_GMLAS_CONSTS_INCLUDED_REDEFINABLE 33 34 #ifdef CONSTANT_DEFINITION 35 #define STRING_CONST(x,y) const char* const x = y 36 #define BOOL_CONST(x,y) const bool x = y 37 #define INT_CONST(x,y) const int x = y 38 #else 39 #define STRING_CONST(x,y) extern const char* const x 40 #define BOOL_CONST(x,y) extern const bool x 41 #define INT_CONST(x,y) extern const int x 42 #endif 43 44 namespace GMLASConstants 45 { 46 // Note the default values mentioned here should be kept 47 // consistent with what is documented in gmlasconf.xsd 48 BOOL_CONST(DEFAULT_RESOLUTION_ENABLED_DEFAULT, false); 49 BOOL_CONST(ALLOW_REMOTE_DOWNLOAD_DEFAULT, true); 50 BOOL_CONST(CACHE_RESULTS_DEFAULT, false); 51 BOOL_CONST(INTERNAL_XLINK_RESOLUTION_DEFAULT, false); 52 53 BOOL_CONST(ALLOW_REMOTE_SCHEMA_DOWNLOAD_DEFAULT, true); 54 BOOL_CONST(ALWAYS_GENERATE_OGR_ID_DEFAULT, false); 55 BOOL_CONST(REMOVE_UNUSED_LAYERS_DEFAULT, false); 56 BOOL_CONST(REMOVE_UNUSED_FIELDS_DEFAULT, false); 57 BOOL_CONST(USE_ARRAYS_DEFAULT, true); 58 BOOL_CONST(USE_NULL_STATE_DEFAULT, false); 59 BOOL_CONST(INCLUDE_GEOMETRY_XML_DEFAULT, false); 60 BOOL_CONST(INSTANTIATE_GML_FEATURES_ONLY_DEFAULT, true); 61 BOOL_CONST(ALLOW_XSD_CACHE_DEFAULT, true); 62 BOOL_CONST(SCHEMA_FULL_CHECKING_DEFAULT, true); 63 BOOL_CONST(HANDLE_MULTIPLE_IMPORTS_DEFAULT, false); 64 BOOL_CONST(VALIDATE_DEFAULT, false); 65 BOOL_CONST(FAIL_IF_VALIDATION_ERROR_DEFAULT, false); 66 BOOL_CONST(EXPOSE_METADATA_LAYERS_DEFAULT, false); 67 BOOL_CONST(SWE_PROCESS_DATA_RECORD_DEFAULT, true); 68 BOOL_CONST(SWE_PROCESS_DATA_ARRAY_DEFAULT, true); 69 BOOL_CONST(WARN_IF_EXCLUDED_XPATH_FOUND_DEFAULT, true); 70 BOOL_CONST(CASE_INSENSITIVE_IDENTIFIER_DEFAULT, true); 71 BOOL_CONST(PG_IDENTIFIER_LAUNDERING_DEFAULT, true); 72 INT_CONST(MAXIMUM_FIELDS_FLATTENING_DEFAULT, 10); 73 INT_CONST(MIN_VALUE_OF_MAX_IDENTIFIER_LENGTH, 10); 74 INT_CONST(INDENT_SIZE_DEFAULT, 2); 75 INT_CONST(INDENT_SIZE_MIN, 0); 76 INT_CONST(INDENT_SIZE_MAX, 8); 77 INT_CONST(MAX_FILE_SIZE_DEFAULT, 1024 * 1024); 78 79 80 INT_CONST(IDX_COMPOUND_FOLDED, -2); 81 82 // Pseudo index to indicate that this xpath is a part of a more detailed 83 // xpath that is folded into the main type, hence we shouldn't warn about it 84 // to be unexpected 85 // Would for example be the case of "element_compound_simplifiable" for : 86 // <xs:element name="element_compound_simplifiable"> 87 // <xs:complexType><xs:sequence> 88 // <xs:element name="subelement" type="xs:string"/> 89 // </xs:sequence></xs:complexType> 90 // </xs:element> 91 92 INT_CONST(MAXOCCURS_UNLIMITED, -2); 93 94 STRING_CONST(szXML_URI, "http://www.w3.org/XML/1998/namespace"); 95 STRING_CONST(szXS_URI, "http://www.w3.org/2001/XMLSchema"); 96 97 STRING_CONST(szXSI_URI, "http://www.w3.org/2001/XMLSchema-instance"); 98 STRING_CONST(szXSI_PREFIX, "xsi"); 99 STRING_CONST(szNIL, "nil"); 100 STRING_CONST(szAT_XSI_NIL, "@xsi:nil"); 101 102 STRING_CONST(szXMLNS_URI, "http://www.w3.org/2000/xmlns/"); 103 STRING_CONST(szXMLNS_PREFIX, "xmlns"); 104 STRING_CONST(szSCHEMA_LOCATION, "schemaLocation"); 105 STRING_CONST(szNO_NAMESPACE_SCHEMA_LOCATION, 106 "noNamespaceSchemaLocation"); 107 108 STRING_CONST(szXLINK_URI, "http://www.w3.org/1999/xlink"); 109 STRING_CONST(szXLINK_PREFIX, "xlink"); 110 STRING_CONST(szTYPE, "type"); 111 STRING_CONST(szHREF, "href"); 112 STRING_CONST(szOWNS, "owns"); 113 114 STRING_CONST(szSWE_URI, "http://www.opengis.net/swe/2.0"); 115 116 STRING_CONST(szOPENGIS_URL, "http://www.opengis.net/"); 117 118 STRING_CONST(szGML_URI, "http://www.opengis.net/gml"); 119 STRING_CONST(szGML32_URI, "http://www.opengis.net/gml/3.2"); 120 STRING_CONST(szGML_PREFIX, "gml"); 121 STRING_CONST(szSRS_NAME, "srsName"); 122 123 STRING_CONST(szWFS_URI, "http://www.opengis.net/wfs"); 124 STRING_CONST(szWFS20_URI, "http://www.opengis.net/wfs/2.0"); 125 STRING_CONST(szWFS_PREFIX, "wfs"); 126 STRING_CONST(szWFS20_SCHEMALOCATION, 127 "http://schemas.opengis.net/wfs/2.0/wfs.xsd"); 128 STRING_CONST(szMEMBER, "member"); 129 130 STRING_CONST(szOGRGMLAS_URI, "http://gdal.org/ogr/gmlas"); 131 STRING_CONST(szOGRGMLAS_PREFIX, "ogr_gmlas"); 132 133 STRING_CONST(szOGR_FIELDS_METADATA, "_ogr_fields_metadata"); 134 STRING_CONST(szOGR_LAYERS_METADATA, "_ogr_layers_metadata"); 135 STRING_CONST(szOGR_LAYER_RELATIONSHIPS, "_ogr_layer_relationships"); 136 STRING_CONST(szOGR_OTHER_METADATA, "_ogr_other_metadata"); 137 138 // Fields of szOGR_FIELDS_METADATA 139 STRING_CONST(szLAYER_NAME, "layer_name"); 140 STRING_CONST(szFIELD_INDEX, "field_index"); 141 STRING_CONST(szFIELD_NAME, "field_name"); 142 STRING_CONST(szFIELD_XPATH, "field_xpath"); 143 STRING_CONST(szFIELD_TYPE, "field_type"); 144 STRING_CONST(szFIELD_IS_LIST, "field_is_list"); 145 STRING_CONST(szFIELD_MIN_OCCURS, "field_min_occurs"); 146 STRING_CONST(szFIELD_MAX_OCCURS, "field_max_occurs"); 147 STRING_CONST(szFIELD_REPETITION_ON_SEQUENCE, "field_repetition_on_sequence"); 148 STRING_CONST(szFIELD_DEFAULT_VALUE, "field_default_value"); 149 STRING_CONST(szFIELD_FIXED_VALUE, "field_fixed_value"); 150 STRING_CONST(szFIELD_CATEGORY, "field_category"); 151 STRING_CONST(szFIELD_RELATED_LAYER, "field_related_layer"); 152 STRING_CONST(szFIELD_JUNCTION_LAYER, "field_junction_layer"); 153 STRING_CONST(szFIELD_DOCUMENTATION, "field_documentation"); 154 155 // Fields of szOGR_LAYERS_METADATA 156 // szLAYER_NAME 157 STRING_CONST(szLAYER_XPATH, "layer_xpath"); 158 STRING_CONST(szLAYER_CATEGORY, "layer_category"); 159 STRING_CONST(szLAYER_PKID_NAME, "layer_pkid_name"); 160 STRING_CONST(szLAYER_PARENT_PKID_NAME, "layer_parent_pkid_name"); 161 STRING_CONST(szLAYER_DOCUMENTATION, "layer_documentation"); 162 163 // Fields of szOGR_LAYER_RELATIONSHIPS 164 STRING_CONST(szPARENT_LAYER, "parent_layer"); 165 STRING_CONST(szPARENT_PKID, "parent_pkid"); 166 STRING_CONST(szPARENT_ELEMENT_NAME, "parent_element_name"); 167 STRING_CONST(szCHILD_LAYER, "child_layer"); 168 STRING_CONST(szCHILD_PKID, "child_pkid"); 169 170 // Fields of szOGR_OTHER_METADATA 171 STRING_CONST(szKEY, "key"); 172 STRING_CONST(szVALUE, "value"); 173 174 STRING_CONST(szCONFIGURATION_FILENAME, "configuration_filename"); 175 STRING_CONST(szCONFIGURATION_INLINED, "configuration_inlined"); 176 STRING_CONST(szDOCUMENT_FILENAME, "document_filename"); 177 178 STRING_CONST(szNAMESPACE_URI_FMT, "namespace_uri_%d"); 179 STRING_CONST(szNAMESPACE_LOCATION_FMT, "namespace_location_%d"); 180 STRING_CONST(szNAMESPACE_PREFIX_FMT, "namespace_prefix_%d"); 181 STRING_CONST(szGML_VERSION, "gml_version"); 182 STRING_CONST(szSCHEMA_NAME_FMT, "schema_name_%d"); 183 184 // Fields of a junction table 185 STRING_CONST(szOCCURRENCE, "occurrence"); 186 // szPARENT_PKID 187 // szCHILD_PKID 188 189 STRING_CONST(szOGR_PKID, "ogr_pkid"); 190 STRING_CONST(szPKID_SUFFIX, "_pkid"); 191 STRING_CONST(szPARENT_PREFIX, "parent_"); 192 STRING_CONST(szXML_SUFFIX, "_xml"); 193 STRING_CONST(szRAW_CONTENT_SUFFIX, "_rawcontent"); 194 STRING_CONST(szAT_XLINK_HREF, "@xlink:href"); 195 STRING_CONST(szHREF_SUFFIX, "_href"); 196 197 // Values of layer_category 198 STRING_CONST(szTOP_LEVEL_ELEMENT, "TOP_LEVEL_ELEMENT"); 199 STRING_CONST(szNESTED_ELEMENT, "NESTED_ELEMENT"); 200 STRING_CONST(szJUNCTION_TABLE, "JUNCTION_TABLE"); 201 STRING_CONST(szSWE_DATA_ARRAY, "SWE_DATA_ARRAY"); 202 203 // Values of field_category 204 STRING_CONST(szREGULAR, "REGULAR"); 205 STRING_CONST(szPATH_TO_CHILD_ELEMENT_NO_LINK, 206 "PATH_TO_CHILD_ELEMENT_NO_LINK"); 207 STRING_CONST(szPATH_TO_CHILD_ELEMENT_WITH_LINK, 208 "PATH_TO_CHILD_ELEMENT_WITH_LINK"); 209 STRING_CONST(szPATH_TO_CHILD_ELEMENT_WITH_JUNCTION_TABLE, 210 "PATH_TO_CHILD_ELEMENT_WITH_JUNCTION_TABLE"); 211 STRING_CONST(szGROUP, "GROUP"); 212 STRING_CONST(szSWE_FIELD, "SWE_FIELD"); 213 214 STRING_CONST(szGMLAS_PREFIX, "GMLAS:"); 215 STRING_CONST(szDEFAULT_CONF_FILENAME, "gmlasconf.xml"); 216 217 // Open options 218 STRING_CONST(szCONFIG_FILE_OPTION, "CONFIG_FILE"); 219 STRING_CONST(szXSD_OPTION, "XSD"); 220 STRING_CONST(szREFRESH_CACHE_OPTION, "REFRESH_CACHE"); 221 STRING_CONST(szEXPOSE_METADATA_LAYERS_OPTION, 222 "EXPOSE_METADATA_LAYERS"); 223 STRING_CONST(szSWAP_COORDINATES_OPTION, "SWAP_COORDINATES"); 224 STRING_CONST(szVALIDATE_OPTION, "VALIDATE"); 225 STRING_CONST(szREMOVE_UNUSED_LAYERS_OPTION, "REMOVE_UNUSED_LAYERS"); 226 STRING_CONST(szREMOVE_UNUSED_FIELDS_OPTION, "REMOVE_UNUSED_FIELDS"); 227 STRING_CONST(szFAIL_IF_VALIDATION_ERROR_OPTION, 228 "FAIL_IF_VALIDATION_ERROR"); 229 STRING_CONST(szKEEP_RELATIVE_PATHS_FOR_METADATA_OPTION, 230 "KEEP_RELATIVE_PATHS_FOR_METADATA"); 231 STRING_CONST(szEXPOSE_CONFIGURATION_IN_METADATA_OPTION, 232 "EXPOSE_CONFIGURATION_IN_METADATA"); 233 STRING_CONST(szEXPOSE_SCHEMAS_NAME_IN_METADATA_OPTION, 234 "EXPOSE_SCHEMAS_NAME_IN_METADATA"); 235 STRING_CONST(szSCHEMA_FULL_CHECKING_OPTION, "SCHEMA_FULL_CHECKING"); 236 STRING_CONST(szHANDLE_MULTIPLE_IMPORTS_OPTION, 237 "HANDLE_MULTIPLE_IMPORTS"); 238 239 // Creation options 240 STRING_CONST(szINPUT_XSD_OPTION, "INPUT_XSD"); 241 STRING_CONST(szLAYERS_OPTION, "LAYERS"); 242 STRING_CONST(szSRSNAME_FORMAT_OPTION, "SRSNAME_FORMAT"); 243 STRING_CONST(szINDENT_SIZE_OPTION, "INDENT_SIZE"); 244 STRING_CONST(szCOMMENT_OPTION, "COMMENT"); 245 STRING_CONST(szLINEFORMAT_OPTION, "LINEFORMAT"); 246 STRING_CONST(szWRAPPING_OPTION, "WRAPPING"); 247 STRING_CONST(szTIMESTAMP_OPTION, "TIMESTAMP"); 248 STRING_CONST(szWFS20_SCHEMALOCATION_OPTION, "WFS20_SCHEMALOCATION"); 249 STRING_CONST(szGENERATE_XSD_OPTION, "GENERATE_XSD"); 250 STRING_CONST(szOUTPUT_XSD_FILENAME_OPTION, "OUTPUT_XSD_FILENAME"); 251 252 // Values for SRSNAME_FORMAT option 253 STRING_CONST(szSHORT, "SHORT"); 254 STRING_CONST(szOGC_URN, "OGC_URN"); 255 STRING_CONST(szOGC_URL, "OGC_URL"); 256 STRING_CONST(szSRSNAME_DEFAULT, "OGC_URL"); 257 258 // Values for LINEFORMAT option 259 STRING_CONST(szCRLF, "CRLF"); 260 STRING_CONST(szLF, "LF"); 261 262 // Value for WRAPPING option 263 STRING_CONST(szWFS2_FEATURECOLLECTION, "WFS2_FEATURECOLLECTION"); 264 STRING_CONST(szGMLAS_FEATURECOLLECTION, "GMLAS_FEATURECOLLECTION"); 265 266 STRING_CONST(szFEATURE_COLLECTION, "FeatureCollection"); 267 STRING_CONST(szFEATURE_MEMBER, "featureMember"); 268 269 // XML types 270 STRING_CONST(szXS_STRING, "string"); 271 STRING_CONST(szXS_TOKEN, "token"); 272 STRING_CONST(szXS_NMTOKEN, "NMTOKEN"); 273 STRING_CONST(szXS_NCNAME, "NCName"); 274 STRING_CONST(szXS_QNAME, "QName"); 275 STRING_CONST(szXS_ID, "ID"); 276 STRING_CONST(szXS_IDREF, "IDREF"); 277 STRING_CONST(szXS_BOOLEAN, "boolean"); 278 STRING_CONST(szXS_BYTE, "byte"); 279 STRING_CONST(szXS_SHORT, "short"); 280 STRING_CONST(szXS_INT, "int"); 281 STRING_CONST(szXS_LONG, "long"); 282 STRING_CONST(szXS_INTEGER, "integer"); 283 STRING_CONST(szXS_NEGATIVE_INTEGER, "negativeInteger"); 284 STRING_CONST(szXS_NON_NEGATIVE_INTEGER, "nonNegativeInteger"); 285 STRING_CONST(szXS_NON_POSITIVE_INTEGER, "nonPositiveInteger"); 286 STRING_CONST(szXS_POSITIVE_INTEGER, "positiveInteger"); 287 STRING_CONST(szXS_UNSIGNED_BYTE, "unsignedByte"); 288 STRING_CONST(szXS_UNSIGNED_SHORT, "unsignedShort"); 289 STRING_CONST(szXS_UNSIGNED_INT, "unsignedInt"); 290 STRING_CONST(szXS_UNSIGNED_LONG, "unsignedLong"); 291 STRING_CONST(szXS_FLOAT, "float"); 292 STRING_CONST(szXS_DOUBLE, "double"); 293 STRING_CONST(szXS_DECIMAL, "decimal"); 294 STRING_CONST(szXS_DATE, "date"); 295 STRING_CONST(szXS_GYEAR, "gYear"); 296 STRING_CONST(szXS_GYEAR_MONTH, "gYearMonth"); 297 STRING_CONST(szXS_TIME, "time"); 298 STRING_CONST(szXS_DATETIME, "dateTime"); 299 STRING_CONST(szXS_ANY_URI, "anyURI"); 300 STRING_CONST(szXS_ANY_TYPE, "anyType"); 301 STRING_CONST(szXS_ANY_SIMPLE_TYPE, "anySimpleType"); 302 STRING_CONST(szXS_DURATION, "duration"); 303 STRING_CONST(szXS_BASE64BINARY, "base64Binary"); 304 STRING_CONST(szXS_HEXBINARY, "hexBinary"); 305 // Extensions to XML types 306 STRING_CONST(szFAKEXS_GEOMETRY, "geometry"); 307 STRING_CONST(szFAKEXS_JSON_DICT, "json_dict"); 308 309 STRING_CONST(szAT_ANY_ATTR, "@*"); 310 STRING_CONST(szMATCH_ALL, "/*"); 311 STRING_CONST(szEXTRA_SUFFIX, ";extra="); 312 } 313 314 #undef STRING_CONST 315 #undef INT_CONST 316 #undef BOOL_CONST 317 318 using namespace GMLASConstants; 319 320 #endif // OGR_GMLAS_CONSTS_INCLUDED_REDEFINABLE 321