Brian and I were chatting about which configuration options should be considered 'valid' for a SwitchYard application. This is more than just schema validation as there are certain things we don't support (either by design or because we've been lazy). Here are the rules that I can think of off the top of my head. I'll circle back with more if/when I think of them:
All component and service references require a single interface.
A component must have an implementation, but it's not required to be present when first created (abstract design use case).
Composite services and references may have a single interface. If they do not have one, then they inherit the promoted component interface.
Components can have zero or one service. Zero is a kind of edge case, but possible (e.g. CDI bean with @Reference invoked from a webapp). More than one service is technically valid, but we don't fully support it now, so treat it as invalid until we do.
Components can have zero to many references.
A component service can be promoted multiple times (each composite service name would have to be unique).
A component reference can be promoted once. Stritcly speaking, this should be multiple, but it's not super important so we don't support it at the moment.
A composite service can have zero to many bindings.
A composite reference can have zero or one binding. Stritcly speaking, this should be multiple, but it's not super important so we don't support it at the moment.
Let me know if I missed something or more explanation is required.