[prev in list] [next in list] [prev in thread] [next in thread] 

List:       mapbender-commits
Subject:    [Mapbender-commits] r9287 - trunk/mapbender/http/classes
From:       svn_mapbender () osgeo ! org
Date:       2015-09-10 14:39:33
Message-ID: 20150910143933.F081639012E () trac ! osgeo ! org
[Download RAW message or body]

Author: armin11
Date: 2015-09-10 07:39:33 -0700 (Thu, 10 Sep 2015)
New Revision: 9287

Modified:
   trunk/mapbender/http/classes/class_wfs_1_0_factory.php
   trunk/mapbender/http/classes/class_wfs_2_0_factory.php
Log:
Enhancement as done for wfs 1.1.0 - should be extracted to special class later!

Modified: trunk/mapbender/http/classes/class_wfs_1_0_factory.php
===================================================================
--- trunk/mapbender/http/classes/class_wfs_1_0_factory.php	2015-09-10 14:31:16 UTC \
                (rev 9286)
+++ trunk/mapbender/http/classes/class_wfs_1_0_factory.php	2015-09-10 14:39:33 UTC \
(rev 9287) @@ -76,43 +76,59 @@
 		foreach ($elementList as $elementNode){
 			$elementName = $elementNode->getAttribute("name");
 			$elementType = $elementNode->getAttribute("type");
+            		//if Type is empty, we assume an anonymousType, else we go looking for \
the anmed Type +            		if($elementType == ""){
+                		//Just querying for complexTypes containing a Sequence - good \
enough for Simple Features +                		$query = "xs:complexType//xs:element";
+                		$subElementList = $xpath->query($query,$elementNode);
+            		} else {
+                		// The elementType is now bound to a prefix e.g. topp:housType
+                		// if the prefix is in the targetNamespace, changces are good it's \
defined in this very document +                		// if the prefix is not in the \
targetNamespace, it's likely not defined here, and we bail  
-            // if Type is empty, we assume an anonymousType, else we go looking for \
                the anmed Type
-            if($elementType == ""){
-                // Just querying for complexTypes containing a Sequence - good \
                enough for Simple Features
-                $query = "xs:complexType//xs:element";
-                $subElementList = $xpath->query($query,$elementNode);
+                		list($elementTypeLocalname,$elementTypePrefix) = \
array_reverse(explode(":",$elementType)); +                		$elementTypeNamespace = \
$doc->lookupNamespaceURI($elementTypePrefix); +                \
if($elementTypeNamespace !== $targetNamespaceNode->nodeValue){ +                    \
$e = new mb_warning("Tried to parse FeatureTypeName $featureTypeName : $elementType \
is not in the targetNamespace");	 +                    			break;
+                		}
 
-            }else{
-
-                // The elementType is now bound to a prefix e.g. topp:housType
-                // if the prefix is in the targetNamespace, changces are good it's \
                defined in this very document
-                // if the prefiox is not in the targetNamespace, it's likely not \
                defined here, and we bail
-
-                list($elementTypeLocalname,$elementTypePrefix) = \
                array_reverse(explode(":",$elementType));
-                $elementTypeNamespace = \
                $doc->lookupNamespaceURI($elementTypePrefix);
-                if($elementTypeNamespace !== $targetNamespaceNode->nodeValue){
-                    $e = new mb_warning("Tried to parse FeatureTypeName \
                $featureTypeName : $elementType is not in the targetNamespace");	
-                    break;
-                }
-
-                // Just querying for complexTypes containing a Sequence - good \
                enough for Simple Features
-                $query = \
                sprintf("//xs:complexType[@name='%s']//xs:element",$elementTypeLocalname);
                
-                $subElementList = $xpath->query($query);
-
-            }
-			foreach($subElementList as $subElement){
-                // Since this is a rewrite of the old way, it reproduces it quirks
-                // in this case the namespace of the type was cut off for some \
reason +                		// Just querying for complexTypes containing a Sequence - \
good enough for Simple Features +                		$query = \
sprintf("//xs:complexType[@name='%s']//xs:element",$elementTypeLocalname); +          \
$subElementList = $xpath->query($query); +            		}
+	    		foreach ($subElementList as $subElement) {
+            			// Since this is a rewrite of the old way, it reproduces it quirks
+                		// in this case the namespace of the type was cut off for some \
reason  $name = $subElement->getAttribute('name');
-                $typeParts = explode(":",$subElement->getAttribute('type'));
-                if(count($typeParts) == 1){
-                    $type = $typeParts[0];
-                }else{
-                    $type = $typeParts[1];
-                }
-				$newFeatureType->addElement($name,$type);
-			}
+                		$typeParts = explode(":",$subElement->getAttribute('type'));
+				//$e = new mb_exception("element: ".$name." - type: ".$typeParts[0]);
+				if (empty($typeParts[0])) {
+					$e = new mb_warning("No type attribute found in xs:element - test for \
integrated simpleType!"); +					//it maybe a simple type
+					/*<xs:element name="kennung" nillable="true" minOccurs="0" maxOccurs="1">
+						<xs:simpleType>
+							<xs:restriction base="string">
+								<xs:maxLength value="40"/>
+							</xs:restriction>
+						</xs:simpleType>
+					</xs:element>*/
+					$query = "xs:simpleType/xs:restriction";
+					$restriction = $xpath->query($query,$subElement);
+					$type = $restriction->item(0)->getAttribute('base');
+					//TODO parse further information from xsd like maxLength: <xs:maxLength \
value="40"/> - add further column in wfs_element! +				} else {
+					switch (count($typeParts)) {
+						case 1 :
+							$type = $typeParts[0];
+						break;
+						case 2 :
+							$type = $typeParts[1];
+						break;
+					}
+				}
+	    			$newFeatureType->addElement($name,$type);
+	    		}
 
 		}
 		return $newFeatureType;

Modified: trunk/mapbender/http/classes/class_wfs_2_0_factory.php
===================================================================
--- trunk/mapbender/http/classes/class_wfs_2_0_factory.php	2015-09-10 14:31:16 UTC \
                (rev 9286)
+++ trunk/mapbender/http/classes/class_wfs_2_0_factory.php	2015-09-10 14:39:33 UTC \
(rev 9287) @@ -172,43 +172,59 @@
 		foreach ($elementList as $elementNode){
 			$elementName = $elementNode->getAttribute("name");
 			$elementType = $elementNode->getAttribute("type");
+            		//if Type is empty, we assume an anonymousType, else we go looking for \
the anmed Type +            		if($elementType == ""){
+                		//Just querying for complexTypes containing a Sequence - good \
enough for Simple Features +                		$query = "xs:complexType//xs:element";
+                		$subElementList = $xpath->query($query,$elementNode);
+            		} else {
+                		// The elementType is now bound to a prefix e.g. topp:housType
+                		// if the prefix is in the targetNamespace, changces are good it's \
defined in this very document +                		// if the prefix is not in the \
targetNamespace, it's likely not defined here, and we bail  
-            // if Type is empty, we assume an anonymousType, else we go looking for \
                the anmed Type
-            if($elementType == ""){
-                // Just querying for complexTypes containing a Sequence - good \
                enough for Simple Features
-                $query = "xs:complexType//xs:element";
-                $subElementList = $xpath->query($query,$elementNode);
+                		list($elementTypeLocalname,$elementTypePrefix) = \
array_reverse(explode(":",$elementType)); +                		$elementTypeNamespace = \
$doc->lookupNamespaceURI($elementTypePrefix); +                \
if($elementTypeNamespace !== $targetNamespaceNode->nodeValue){ +                    \
$e = new mb_warning("Tried to parse FeatureTypeName $featureTypeName : $elementType \
is not in the targetNamespace");	 +                    			break;
+                		}
 
-            }else{
-
-                // The elementType is now bound to a prefix e.g. topp:housType
-                // if the prefix is in the targetNamespace, changces are good it's \
                defined in this very document
-                // if the prefiox is not in the targetNamespace, it's likely not \
                defined here, and we bail
-
-                list($elementTypeLocalname,$elementTypePrefix) = \
                array_reverse(explode(":",$elementType));
-                $elementTypeNamespace = \
                $doc->lookupNamespaceURI($elementTypePrefix);
-                if($elementTypeNamespace !== $targetNamespaceNode->nodeValue){
-                    $e = new mb_warning("Tried to parse FeatureTypeName \
                $featureTypeName : $elementType is not in the targetNamespace");	
-                    break;
-                }
-
-                // Just querying for complexTypes containing a Sequence - good \
                enough for Simple Features
-                $query = \
                sprintf("//xs:complexType[@name='%s']//xs:element",$elementTypeLocalname);
                
-                $subElementList = $xpath->query($query);
-
-            }
-			foreach($subElementList as $subElement){
-                // Since this is a rewrite of the old way, it reproduces it quirks
-                // in this case the namespace of the type was cut off for some \
reason +                		// Just querying for complexTypes containing a Sequence - \
good enough for Simple Features +                		$query = \
sprintf("//xs:complexType[@name='%s']//xs:element",$elementTypeLocalname); +          \
$subElementList = $xpath->query($query); +            		}
+	    		foreach ($subElementList as $subElement) {
+            			// Since this is a rewrite of the old way, it reproduces it quirks
+                		// in this case the namespace of the type was cut off for some \
reason  $name = $subElement->getAttribute('name');
-                $typeParts = explode(":",$subElement->getAttribute('type'));
-                if(count($typeParts) == 1){
-                    $type = $typeParts[0];
-                }else{
-                    $type = $typeParts[1];
-                }
-				$newFeatureType->addElement($name,$type);
-			}
+                		$typeParts = explode(":",$subElement->getAttribute('type'));
+				//$e = new mb_exception("element: ".$name." - type: ".$typeParts[0]);
+				if (empty($typeParts[0])) {
+					$e = new mb_warning("No type attribute found in xs:element - test for \
integrated simpleType!"); +					//it maybe a simple type
+					/*<xs:element name="kennung" nillable="true" minOccurs="0" maxOccurs="1">
+						<xs:simpleType>
+							<xs:restriction base="string">
+								<xs:maxLength value="40"/>
+							</xs:restriction>
+						</xs:simpleType>
+					</xs:element>*/
+					$query = "xs:simpleType/xs:restriction";
+					$restriction = $xpath->query($query,$subElement);
+					$type = $restriction->item(0)->getAttribute('base');
+					//TODO parse further information from xsd like maxLength: <xs:maxLength \
value="40"/> - add further column in wfs_element! +				} else {
+					switch (count($typeParts)) {
+						case 1 :
+							$type = $typeParts[0];
+						break;
+						case 2 :
+							$type = $typeParts[1];
+						break;
+					}
+				}
+	    			$newFeatureType->addElement($name,$type);
+	    		}
 
 		}
 		return $newFeatureType;

_______________________________________________
Mapbender_commits mailing list
Mapbender_commits@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/mapbender_commits


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic