dWAR is defensive value+positional adjustment, oWAR is hitting+baserunning+positional adjustment, which is why oWAR+dWAR does not equal WAR because you count the positional adjustment twice.
In the case of Schwarber we can see the breakdown as (from Baseball Reference)
+29 runs batting
-3 runs baserunning
0 runs of double play (this tends to be in the +/- 1 range)
0 runs of feilding
-12 runs of positional value (DH is -15 per 1350 innings, LF -7 per 1350 innings)
That then sums to
+14 runs above average
+14 runs above average on offense
-12 runs above average on defense
The runs to wins conversion is a bit more year and playing time adjusted, as is the translation from wins above average to wins above replacement, but the final results are.
WAR - 3.5
oWAR - 3.5
dWAR - -1.3
Which if we think about it, the dWAR is functionally just the positional adjustment, which is also included in the oWAR, so it checks out that for a full time DH their oWAR and their WAR would be the same result.