Article query view model

This PR implements part of #21.