@@ -188,6 +188,15 @@ void QgsProjectParser::featureTypeList( QDomElement& parentElement, QDomDocument
188188 abstractElem.appendChild ( abstractText );
189189 layerElem.appendChild ( abstractElem );
190190
191+ // keyword list
192+ if ( !layer->keywordList ().isEmpty () )
193+ {
194+ QDomElement keywordsElem = doc.createElement ( " Keywords" );
195+ QDomText keywordsText = doc.createTextNode ( layer->keywordList () );
196+ keywordsElem.appendChild ( keywordsText );
197+ layerElem.appendChild ( keywordsElem );
198+ }
199+
191200 // appendExGeographicBoundingBox( layerElem, doc, layer->extent(), layer->crs() );
192201
193202 QDomElement srsElem = doc.createElement ( " SRS" );
@@ -234,6 +243,27 @@ void QgsProjectParser::featureTypeList( QDomElement& parentElement, QDomDocument
234243 bBoxElement.setAttribute ( " maxy" , QString::number ( layerExtent.yMaximum () ) );
235244 layerElem.appendChild ( bBoxElement );
236245
246+ // layer metadata URL
247+ QString metadataUrl = layer->metadataUrl ();
248+ if ( !metadataUrl.isEmpty () )
249+ {
250+ QDomElement metaUrlElem = doc.createElement ( " MetadataURL" );
251+ QString metadataUrlType = layer->metadataUrlType ();
252+ metaUrlElem.setAttribute ( " type" , metadataUrlType );
253+ QString metadataUrlFormat = layer->metadataUrlFormat ();
254+ if ( metadataUrlFormat == " text/xml" )
255+ {
256+ metaUrlElem.setAttribute ( " format" , " XML" );
257+ }
258+ else
259+ {
260+ metaUrlElem.setAttribute ( " format" , " TXT" );
261+ }
262+ QDomText metaUrlText = doc.createTextNode ( metadataUrl );
263+ metaUrlElem.appendChild ( metaUrlText );
264+ layerElem.appendChild ( metaUrlElem );
265+ }
266+
237267 parentElement.appendChild ( layerElem );
238268 }
239269 }
@@ -246,8 +276,6 @@ void QgsProjectParser::owsGeneralAndResourceList( QDomElement& parentElement, QD
246276 // set parentElement id
247277 QFileInfo projectFileInfo ( mProjectPath );
248278 parentElement.setAttribute ( " id" , " ows-context-" + projectFileInfo.baseName () );
249- // OWSContext General element
250- QDomElement serviceElem = doc.createElement ( " Service" );
251279
252280 QDomElement propertiesElem = mXMLDoc ->documentElement ().firstChildElement ( " properties" );
253281 if ( propertiesElem.isNull () )
@@ -256,6 +284,7 @@ void QgsProjectParser::owsGeneralAndResourceList( QDomElement& parentElement, QD
256284 return ;
257285 }
258286
287+ // OWSContext General element
259288 QDomElement generalElem = doc.createElement ( " General" );
260289
261290 QDomElement windowElem = doc.createElement ( " Window" );
@@ -285,7 +314,7 @@ void QgsProjectParser::owsGeneralAndResourceList( QDomElement& parentElement, QD
285314
286315 // keyword list
287316 QDomElement keywordListElem = propertiesElem.firstChildElement ( " WMSKeywordList" );
288- if ( !keywordListElem.isNull () )
317+ if ( !keywordListElem.isNull () && !keywordListElem. text (). isEmpty () )
289318 {
290319 bool siaFormat = featureInfoFormatSIA2045 ();
291320
@@ -305,7 +334,7 @@ void QgsProjectParser::owsGeneralAndResourceList( QDomElement& parentElement, QD
305334
306335 if ( keywordList.size () > 0 )
307336 {
308- serviceElem .appendChild ( keywordsElem );
337+ generalElem .appendChild ( keywordsElem );
309338 }
310339 }
311340
@@ -346,7 +375,7 @@ void QgsProjectParser::owsGeneralAndResourceList( QDomElement& parentElement, QD
346375 QDomText lowerCornerText = doc.createTextNode ( QString::number ( combinedBBox.xMinimum () ) + " " + QString::number ( combinedBBox.yMinimum () ) );
347376 lowerCornerElem.appendChild ( lowerCornerText );
348377 bboxElem.appendChild ( lowerCornerElem );
349- QDomElement upperCornerElem = doc.createElement ( " ows:upperCorner " );
378+ QDomElement upperCornerElem = doc.createElement ( " ows:UpperCorner " );
350379 QDomText upperCornerText = doc.createTextNode ( QString::number ( combinedBBox.xMaximum () ) + " " + QString::number ( combinedBBox.yMaximum () ) );
351380 upperCornerElem.appendChild ( upperCornerText );
352381 bboxElem.appendChild ( upperCornerElem );
@@ -676,9 +705,9 @@ void QgsProjectParser::addLayers( QDomDocument &doc,
676705 }
677706
678707 // keyword list
679- QStringList keywordStringList = currentLayer->keywordList ().split ( " ," );
680- if ( keywordStringList.size () > 0 )
708+ if ( !currentLayer->keywordList ().isEmpty () )
681709 {
710+ QStringList keywordStringList = currentLayer->keywordList ().split ( " ," );
682711 bool siaFormat = featureInfoFormatSIA2045 ();
683712
684713 QDomElement keywordListElem = doc.createElement ( " KeywordList" );
@@ -768,10 +797,18 @@ void QgsProjectParser::addLayers( QDomDocument &doc,
768797 {
769798 QDomElement metaUrlElem = doc.createElement ( " MetadataURL" );
770799 QString metadataUrlType = currentLayer->metadataUrlType ();
771- if ( !metadataUrlType. isEmpty () )
800+ if ( version == " 1.1.1 " )
772801 {
773802 metaUrlElem.setAttribute ( " type" , metadataUrlType );
774803 }
804+ else if ( metadataUrlType == " FGDC" )
805+ {
806+ metaUrlElem.setAttribute ( " type" , " FGDC:1998" );
807+ }
808+ else if ( metadataUrlType == " TC211" )
809+ {
810+ metaUrlElem.setAttribute ( " type" , " ISO19115:2003" );
811+ }
775812 QString metadataUrlFormat = currentLayer->metadataUrlFormat ();
776813 if ( !metadataUrlFormat.isEmpty () )
777814 {
@@ -1067,9 +1104,9 @@ void QgsProjectParser::addOWSLayers( QDomDocument &doc,
10671104 layerElem.appendChild ( styleListElem );
10681105
10691106 // keyword list
1070- QStringList keywordStringList = currentLayer->keywordList ().split ( " ," );
1071- if ( keywordStringList.size () > 0 )
1107+ if ( !currentLayer->keywordList ().isEmpty () )
10721108 {
1109+ QStringList keywordStringList = currentLayer->keywordList ().split ( " ," );
10731110 bool siaFormat = featureInfoFormatSIA2045 ();
10741111
10751112 QDomElement keywordsElem = doc.createElement ( " ows:Keywords" );
@@ -1092,19 +1129,8 @@ void QgsProjectParser::addOWSLayers( QDomDocument &doc,
10921129 if ( !metadataUrl.isEmpty () )
10931130 {
10941131 QDomElement metaUrlElem = doc.createElement ( " MetadataURL" );
1095- QString metadataUrlType = currentLayer->metadataUrlType ();
1096- if ( !metadataUrlType.isEmpty () )
1097- {
1098- metaUrlElem.setAttribute ( " type" , metadataUrlType );
1099- }
11001132 QString metadataUrlFormat = currentLayer->metadataUrlFormat ();
1101- if ( !metadataUrlFormat.isEmpty () )
1102- {
1103- QDomElement metaUrlFormatElem = doc.createElement ( " Format" );
1104- QDomText metaUrlFormatText = doc.createTextNode ( metadataUrlFormat );
1105- metaUrlFormatElem.appendChild ( metaUrlFormatText );
1106- metaUrlElem.appendChild ( metaUrlFormatElem );
1107- }
1133+ metaUrlElem.setAttribute ( " format" , metadataUrlFormat );
11081134 QDomElement metaUrlORElem = doc.createElement ( " OnlineResource" );
11091135 metaUrlORElem.setAttribute ( " xmlns:xlink" , " http://www.w3.org/1999/xlink" );
11101136 metaUrlORElem.setAttribute ( " xlink:type" , " simple" );
@@ -2355,7 +2381,7 @@ void QgsProjectParser::serviceCapabilities( QDomElement& parentElement, QDomDocu
23552381
23562382 // keyword list
23572383 QDomElement keywordListElem = propertiesElem.firstChildElement ( " WMSKeywordList" );
2358- if ( !keywordListElem.isNull () )
2384+ if ( !keywordListElem.isNull () && !keywordListElem. text (). isEmpty () )
23592385 {
23602386 bool siaFormat = featureInfoFormatSIA2045 ();
23612387
@@ -2534,7 +2560,7 @@ void QgsProjectParser::serviceWFSCapabilities( QDomElement& parentElement, QDomD
25342560
25352561 // keyword list
25362562 QDomElement keywordListElem = propertiesElem.firstChildElement ( " WMSKeywordList" );
2537- if ( !keywordListElem.isNull () )
2563+ if ( !keywordListElem.isNull () && !keywordListElem. text (). isEmpty () )
25382564 {
25392565 bool siaFormat = featureInfoFormatSIA2045 ();
25402566
0 commit comments