change DSL for nested properties

this is a shorter approach that also seems consistent with the
existing structure. also trying to avoid having more blocks than
necessary in the DSL
extract Link#to_schema