Explorar el Código

fixed Resintall xsd at annotation under element with @type

Piotr Labudda hace 8 años
padre
commit
5939536c7f

+ 2 - 2
SE/schema/ant-object/default_db.BI_audit_operational_raport_note/BI_audit_operational_raport_note/BI_audit_operational_raport_note.xsd

@@ -68,9 +68,9 @@
          <xs:element name="action"
             type="default_db__x3A__BI_audit_operational_raport_note:action_Type"
             id="raport_note___d5e6239-1_action">
-            <!--<xs:annotation>
+            <xs:annotation>
                <xs:documentation>W przypadku chęci wyłączania jakiegoś obiektu z raportów, należy wybrać akcję na IGNORE. W przypadku posiadania jakiegoś podejrzenia dla pracownika/osoby z KRS/firmy, należy wybrać opcję REPORT, aby była ona raportowana.</xs:documentation>
-            </xs:annotation>-->
+            </xs:annotation>
          </xs:element>
          <xs:element name="A_RECORD_CREATE_DATE" type="xs:dateTime" id="raport_note___d5e6239-RCD"/>
          <xs:element name="A_RECORD_CREATE_AUTHOR" type="xs:string" id="raport_note___d5e6239-RCA"/>

+ 20 - 23
SE/se-lib/XML.php

@@ -224,53 +224,50 @@ class XML {
 	public static function findElementRestrictions($docArray, $nodeArray) {
 		$restrictions = [];
 		$fieldName = self::findElementName($docArray, $nodeArray);
+		DBG::log([ 'is_empty($nodeArray[2])' => empty($nodeArray[2]), 'is_empty_type' => empty($nodeArray[1]['type']) ], 'array', "DBG: findElementRestrictions field({$fieldName})");
 		if (!empty($nodeArray[1]['nillable']) && 'true' === $nodeArray[1]['nillable']) $restrictions['nillable'] = true;
 		if (!empty($nodeArray[2])) {
 			foreach ($nodeArray[2] as $c) {
 				switch (XML::getTagName($c[0])) {
 					case 'annotation': break; // skip xsd:element/xsd:annotation @see findElementAppInfo
-					case 'simpleType': { // xsd:element/xsd:simpleType
-						if (empty($c[2][0]) || 'restriction' != XML::getTagName($c[2][0][0])) throw new Exception("Missing 'xsd:restriction' for field '{$fieldName}'");
-						if (empty($c[2][0][1]['base'])) throw new Exception("Missing 'xsd:restriction/@base' for field '{$fieldName}'");
-						// xsd:element/xsd:simpleType/xsd:restriction/xsd:string
-						foreach ($c[2][0][2] as $tagRestriction) {
-							// xsd:string/xsd:maxLength
-							$val = $tagRestriction[1]['value'];
-							if ('enumeration' == XML::getTagName($tagRestriction[0])) {
-								$restrictions['enumeration'][$val] = $val;
-							} else {
-								$restrictions[XML::getTagName($tagRestriction[0])] = $val;
-							}
-						}
-					} break;
+					case 'simpleType': $restrictions = XML::parseSimpleTypeRestrictions($docArray, $c, $fieldName);
 					default: {
 						DBG::log($c, 'array', "Not imeplemented element child '{$c[0]}'");
 					}
 				}
 			}
 		}
-		if (empty($nodeArray[2]) && !empty($nodeArray[1]['type'])) {
+		if (!empty($nodeArray[1]['type'])) {
 			list($prefix, $name) = explode(':', $nodeArray[1]['type']);
 			if ($prefix === XML::findTargetNamespacePrefix($docArray)) {
 				$simpleTypeNode = self::findSimpleTypeNode($docArray, $name);
-				return XML::findSimpleTypeRestrictions($docArray, $simpleTypeNode);
+				return XML::parseSimpleTypeRestrictions($docArray, $simpleTypeNode, $fieldName);
 			}
 		}
 		return $restrictions;
 	}
-	public static function findSimpleTypeRestrictions($docArray, $nodeArray) { // $nodeArray must be 'simpleType' === XML::getTagName($nodeArray[0])
-		DBG::log($nodeArray, 'array', "TODO: findElementRestrictions \$nodeArray");
+	public static function parseSimpleTypeRestrictions($docArray, $simpleTypeNode, $fieldName) { // $simpleTypeNode must be 'simpleType' === XML::getTagName($nodeArray[0]), expected 'xsd:restriction' child
+		DBG::log($simpleTypeNode, 'array', "DBG: parseSimpleTypeRestrictions \$simpleTypeNode for field '{$fieldName}'");
+		if (empty($simpleTypeNode[2])) return []; // Missing childrens in simpleType definition
+		$restrictionNode = null;
+		foreach ($simpleTypeNode[2] as $c) {
+			if ('restriction' == XML::getTagName($c[0])) {
+				$restrictionNode = $c;
+				break;
+			}
+		}
+		DBG::log($restrictionNode, 'array', "DBG: parseSimpleTypeRestrictions \$restrictionNode for field '{$fieldName}'");
+		if (empty($restrictionNode)) return []; // Missing xsd:restriction in simpleType definition
 		$restrictions = [];
-		if (empty($nodeArray[2][0]) || 'restriction' != XML::getTagName($nodeArray[2][0][0])) throw new Exception("Missing 'xsd:restriction' for field '{$fieldName}'");
-		if (empty($nodeArray[2][0][1]['base'])) throw new Exception("Missing 'xsd:restriction/@base' for field '{$fieldName}'");
-		// xsd:element/xsd:simpleType/xsd:restriction/xsd:string
-		foreach ($nodeArray[2][0][2] as $tagRestriction) {
+		if (empty($restrictionNode[1]['base'])) throw new Exception("Missing 'xsd:restriction/@base' for field '{$fieldName}'");
+		// xsd:simpleType/xsd:restriction/xsd:string
+		foreach ($restrictionNode[2] as $tagRestriction) {
 			// xsd:string/xsd:maxLength
 			$val = $tagRestriction[1]['value'];
 			if ('enumeration' == XML::getTagName($tagRestriction[0])) {
 				$restrictions['enumeration'][$val] = $val;
 			} else {
-				$restrictions[XML::getTagName($tagRestriction[0])] = $val;
+				$restrictions[ XML::getTagName($tagRestriction[0]) ] = $val;
 			}
 		}
 		return $restrictions;