A few questions…
What is your use case for parentId? Is this going to be used to look up something else? If so, it should be an edge not a predicate.
Are you going to want to keep resouceIds and tagIds in sync yourself manually? It might be easier to use just the reverse edge for whichever side seems more natural. I would keep the actual edge on the side where you write to most usually. (The primary type)