|
|
@@ -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;
|