Hi Sameer,
1. Either or both, whichever is easier for you. Data Elements can be used to hold values of DOM elements that already exist on your pages, or for values that you instantiate, manage, and manipulate entirely in DTM. If you already have metadata in meta tags, in custom data attributes, or elsewhere in your markup or the DOM, feel free to use Data Elements in DTM (with those values) as part of your overall data layer.
2. In terms of 'where': specific values for different elements of your data layer will be available at different points in time - like DOM ready, or on the load event, or after a particular user action. When you're building rules in DTM for data collection, you can control when and where those rules are triggered using Conditions. As long as your Conditions are triggered when your data layer values are available, your data collection should function as expected.