Source: https://www.issco.unige.ch/en/staff/andrei/xml/cours6-2005.pdf