protected void validateTagsOnlyOnce(Node parentNode, String[] allowedChildNames) throws RrdException {
		// validate node only once
		if(validatedNodes.contains(parentNode)) {
			return;
		}
		Node[] childs = getChildNodes(parentNode);
		main:
		for(int i = 0; i < childs.length; i++) {
			String childName = childs[i].getNodeName();
			for(int j = 0; j < allowedChildNames.length; j++) {
				if(allowedChildNames[j].equals(childName)) {
					// only one such tag is allowed
					allowedChildNames[j] = "<--removed-->";
					continue main;
				}
				else if(allowedChildNames[j].equals(childName + "*")) {
					// several tags allowed
					continue main;
				}
			}
			if(!isEmptyNode(childs[i])) {
				throw new RrdException("Unexpected tag encountered: <" + childName + ">");
			}
		}
		// everything is OK
		validatedNodes.add(parentNode);
	}