It is a flexible markup language, and it defines rules for encoding documents in such a way that it can be read by both humans and machines. It describes how to write new languages (custom languages or meta languages). It also functions as a basic syntax that allows different applications to share data.