In SBML L3, we generally allow empty lists if the list itself is optional. This is to allow people to annotate the list itself, even if there are no elements in it. Another reason is that another package may extend the class of the contained elements, so to the base package, it might look like it has no children at all, as they are all defined in the derived class.
This isn't a hard rule, but it is what I would call a 'goal' of L3 packages. As such, I would recommend that ListOfUserDefniedConstraints and ListOfKeyValuePairs be allowed to be empty.
(Since ListOfUserDefinedConstraintComponents it itself required, it is reasonable for that to require at least one child.)
In SBML L3, we generally allow empty lists if the list itself is optional. This is to allow people to annotate the list itself, even if there are no elements in it. Another reason is that another package may extend the class of the contained elements, so to the base package, it might look like it has no children at all, as they are all defined in the derived class.
This isn't a hard rule, but it is what I would call a 'goal' of L3 packages. As such, I would recommend that ListOfUserDefniedConstraints and ListOfKeyValuePairs be allowed to be empty.
(Since ListOfUserDefinedConstraintComponents it itself required, it is reasonable for that to require at least one child.)