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