This sounds very much like constraint programming to me. For the most part, unification is an equality constraint between two variables. If the two are unbound, there's no change, if one is bound, the value is propagated to the other, if both are bound, the values must be equivalent or the network is inconsistent. On an inconsistency, remove the last constraint and try placing it somewhere else. The more complex "conditional unification" you're talking about are procedural constraints; the constraint is satisfied iff the body of the URI matches the HTML.
You may want to look at this