Recall that with XML Schema you can create a complexType that restricts another complexType. That “derive-by-restriction” capability is useful when you have two levels of syntax, one level restricting
the other.

Lisp provides a neat example of multiple levels of syntactic rules. The Lisp language specification has a syntactic rule which says that lists can contain anything. The specification then layers
on top a second syntactic rule which requires that lists specifically start with a symbol.

Here is a list that is valid according to the first level of syntax:

(“Hello, world” 10)

but it is invalid per the second level of syntax (i.e., the list does not start with a symbol – a string is not a symbol).

Terminology: A list that conforms to the first level of syntax is called a symbolic-expression (s-expression). A list that conforms to the second level of syntax is called a Lisp form.

A Lisp form is a restricted s-expression:

I converted these concepts over to XML and XML Schema. The result is a beautiful example of restriction. Here is the complexType for the first level of syntax (s-expression):