|
|
@@ -108,8 +108,9 @@ class XML {
|
|
|
// TODO:TYPE_RECURCE: if local ns prefix then find correct typeName?
|
|
|
// TODO:TYPE_RECURCE:the same for restrictions
|
|
|
$type = $nodeArray[1]['type'];
|
|
|
- if ('xs:' == substr($type, 0, 3)) return "xsd:" . substr($type, 3);
|
|
|
- if ('xsd:' == substr($type, 0, 4)) return $type;
|
|
|
+ DBG::log(['is_xs:' => ('xs:' === substr($type, 0, 3)), 'is_xsd:'=>('xsd:' === substr($type, 0, 4))], 'array', "DBG: findElementType field({$fieldName}) type({$type})");
|
|
|
+ if ('xs:' === substr($type, 0, 3)) return "xsd:" . substr($type, 3);
|
|
|
+ if ('xsd:' === substr($type, 0, 4)) return $type;
|
|
|
list($prefix, $name) = explode(':', $type);
|
|
|
if ($prefix === self::findTargetNamespacePrefix($docArray)) {
|
|
|
$simpleTypeNode = self::findSimpleTypeNode($docArray, $name);
|
|
|
@@ -133,8 +134,8 @@ class XML {
|
|
|
if ($isEnum) return 'p5:enum';
|
|
|
|
|
|
// TODO: recurse with limit
|
|
|
- if ('xs:' == substr($type, 0, 3)) return "xsd:" . substr($type, 3);
|
|
|
- if ('xsd:' == substr($type, 0, 4)) return $type;
|
|
|
+ if ('xs:' === substr($type, 0, 3)) return "xsd:" . substr($type, 3);
|
|
|
+ if ('xsd:' === substr($type, 0, 4)) return $type;
|
|
|
list($prefix, $name) = explode(':', $type);
|
|
|
$simpleTypeNode = self::findSimpleTypeNode($docArray, $name);
|
|
|
DBG::log($simpleTypeNode, 'array', "\$simpleTypeNode \$fieldName='{$fieldName}' ... type='{$type}'");
|
|
|
@@ -146,8 +147,7 @@ class XML {
|
|
|
if (empty($restrictionNode[1]['base'])) throw new Exception("Missing xsd:restriction/@base (node/@type => xsd:simpleType/[@type='{$simpleTypeNode[1]['type']}']/xsd:restriction')");
|
|
|
$type = $restrictionNode[1]['base'];
|
|
|
DBG::log($type, 'array', "findElementType \$fieldName='{$fieldName}' ... type='{$type}'");
|
|
|
- if ('xs:' == substr($type, 0, 3)) return "xsd:" . substr($type, 3);
|
|
|
- if ('xsd:' == substr($type, 0, 4)) return $type;
|
|
|
+ return self::convertXsdTypeToXsdPrefix($type);
|
|
|
}
|
|
|
// TODO: throw...
|
|
|
}
|
|
|
@@ -179,7 +179,14 @@ class XML {
|
|
|
if (empty($nodeArray[2][0][0]) || !self::isXsdTag($nodeArray[2][0][0], 'simpleType')) throw new Exception("Missing 'xsd:simpleType' for field '{$fieldName}'");
|
|
|
if (empty($nodeArray[2][0][2][0]) || !self::isXsdTag($nodeArray[2][0][2][0][0], 'restriction')) throw new Exception("Missing 'xsd:restriction' for field '{$fieldName}'");
|
|
|
if (empty($nodeArray[2][0][2][0][1]['base'])) throw new Exception("Missing 'xsd:restriction/@base' for field '{$fieldName}'");
|
|
|
- return $nodeArray[2][0][2][0][1]['base'];
|
|
|
+ return self::convertXsdTypeToXsdPrefix($nodeArray[2][0][2][0][1]['base']);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static function convertXsdTypeToXsdPrefix($type) {
|
|
|
+ // TODO: validate if type is supported in object engine and gui
|
|
|
+ if ('xs:' === substr($type, 0, 3)) return "xsd:" . substr($type, 3);
|
|
|
+ if ('xsd:' === substr($type, 0, 4)) return $type;
|
|
|
+ throw new Exception("Not implemented type '{$type}'");
|
|
|
}
|
|
|
|
|
|
public static function findElementRestrictions($docArray, $nodeArray) {
|