|
|
@@ -224,10 +224,24 @@ 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})");
|
|
|
+ $childNodes = !empty($nodeArray[2]) ? $nodeArray[2] : null; // definition in child nodes
|
|
|
+ $typeAlias = !empty($nodeArray[1]['type']) ? $nodeArray[1]['type'] : null; // definition alias - search simpleType with name = Type
|
|
|
+ DBG::log([
|
|
|
+ 'has $childNodes' => !empty($childNodes),
|
|
|
+ 'has $typeAlias' => !empty($typeAlias),
|
|
|
+ '$typeAlias' => $typeAlias,
|
|
|
+ '$nodeArray' => $nodeArray
|
|
|
+ ], '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) {
|
|
|
+ if ($typeAlias) {
|
|
|
+ list($prefix, $name) = explode(':', $typeAlias);
|
|
|
+ if ($prefix === XML::findTargetNamespacePrefix($docArray)) {
|
|
|
+ $simpleTypeNode = self::findSimpleTypeNode($docArray, $name);
|
|
|
+ return XML::parseSimpleTypeRestrictions($docArray, $simpleTypeNode, $fieldName);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if ($childNodes) {
|
|
|
+ foreach ($childNodes as $c) {
|
|
|
switch (XML::getTagName($c[0])) {
|
|
|
case 'annotation': break; // skip xsd:element/xsd:annotation @see findElementAppInfo
|
|
|
case 'simpleType': $restrictions = XML::parseSimpleTypeRestrictions($docArray, $c, $fieldName);
|
|
|
@@ -237,13 +251,6 @@ class XML {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
- if (!empty($nodeArray[1]['type'])) {
|
|
|
- list($prefix, $name) = explode(':', $nodeArray[1]['type']);
|
|
|
- if ($prefix === XML::findTargetNamespacePrefix($docArray)) {
|
|
|
- $simpleTypeNode = self::findSimpleTypeNode($docArray, $name);
|
|
|
- return XML::parseSimpleTypeRestrictions($docArray, $simpleTypeNode, $fieldName);
|
|
|
- }
|
|
|
- }
|
|
|
return $restrictions;
|
|
|
}
|
|
|
public static function parseSimpleTypeRestrictions($docArray, $simpleTypeNode, $fieldName) { // $simpleTypeNode must be 'simpleType' === XML::getTagName($nodeArray[0]), expected 'xsd:restriction' child
|