public function getNodeTypeDefinitionFromXml(DOMElement $node)
{
$data = array();
// nodetype
$data['name'] = $node->getAttribute('name');
$data['isAbstract'] = Helper::getBoolAttribute($node, 'isAbstract');
$data['isMixin'] = Helper::getBoolAttribute($node, 'isMixin');
$data['isQueryable'] = Helper::getBoolAttribute($node, 'isQueryable');
$data['hasOrderableChildNodes'] = Helper::getBoolAttribute($node, 'hasOrderableChildNodes');
$data['primaryItemName'] = $node->getAttribute('primaryItemName') ?: null;
$data['declaredSuperTypeNames'] = array();
$xp = new DOMXPath($node->ownerDocument);
$supertypes = $xp->query('supertypes/supertype', $node);
foreach ($supertypes as $supertype) {
$data['declaredSuperTypeNames'][] = $supertype->nodeValue;
}
$data['declaredPropertyDefinitions'] = array();
$properties = $xp->query('propertyDefinition', $node);
foreach ($properties as $propertyDefinition) {
$data['declaredPropertyDefinitions'][] = $this->getPropertyDefinitionFromXml($propertyDefinition);
}
$data['declaredNodeDefinitions'] = array();
$declaredNodeDefinitions = $xp->query('childNodeDefinition', $node);
foreach ($declaredNodeDefinitions as $nodeDefinition) {
$data['declaredNodeDefinitions'][] = $this->getNodeDefinitionFromXml($nodeDefinition);
}
return $data;
}