There are three rounds left after the weekend. Mario Gotze scored the opening goal, and Axel Witsel pulled Dortmund to 3-2 behind after the red cards, but Breel Embolo bagged the insurance goal two minutes later for Schalke.
Jadon Sancho set up Gotze's opener in the action-packed Revierderby and, in the celebration, the England international was hit by a pocket lighter thrown from the crowd, but the winger was able to continue.
Daniel Caligiuri, with two, and Salif Sane scored Schalke's other goals. Third-placed Leipzig beat Freiburg 2-1 to secure Champions League soccer next season. Leipzig was 10 points ahead of Eintracht Frankfurt, which drew with Hertha Berlin 0-0 and occupied the fourth and last spot for Champions League qualification.
Also, Fortuna Duesseldorf beat Werder Bremen 4-1, last-placed Hannover defeated Mainz 1-0, and Stuttgart earned its first win in eight weeks when it beat Borussia Moenchengladbach 1-0. Bayer Leverkusen won 4-1 at Augsburg on Friday.
More AP German soccer coverage: https://apnews.com/Bundesliga and https://twitter.com/AP_Sports