What are Syntactic and Sementic Interoperability, and how do you achieve them?
Level 2 - Syntactic Interoperability
You move from Level 1 (technical interoperability) to Level 2 (syntactic interoperability) by specifying a common data format to be used.
Syntactic interoperability is achieved by integrating disparate systems via a combination of a common data format and a communications infrastructure. By leveraging a common data format to achieve interoperability, a system can syntactically interoperate with any other system that uses the same data format and communications infrastructure.
A standard for achieving syntactic interoperability allows you to specify a set of syntax rules to be obeyed in the language. Integration via a syntactic data standard allows you to generate a recognizer for the sentences (messages, expressions, etc.) in that language. This recognizer can then assess the validity of the expressions at the syntactic level.
Why would you want to achieve syntactic interoperability?
As a result of integration at the syntactic level, systems can syntactically interoperate -- they can exchange the structure of data in an unambiguous manner.
Syntactic specifications allow for the detection of syntactic errors but, as all of us language nerds are well aware, an expression can be syntactically valid without being grammatically correct. Therefore, a syntactic specification does not necessarily allow unambiguous communication (see the example, below).
What kind of information exchange can be achieved?
Syntactic interoperability is certainly a step up from technical interoperability. Now I know more about what was transmitted, instead of simply, "There are bits." I also know what I can infer/deduce from a shared understanding of the use of a certain structure/organization. While this isn't unambiguous, it is still an improvement in some ways, albeit with the potential for errors and miscommunications.
Example: Interfaces are syntactically matched.
When interfaces are syntactically matched, the two systems that you wish to have interoperate are compatible out-of-the-box at the syntactic level. This means no integration has to occur for syntactic interoperation to take place. Because the interoperation solution is designed into the system, there is no need for a mediation component. The interface’s technical and syntactic standards are matched. Syntactic interoperation can be achieved through straightforward integration (plug and play!), because the systems were designed to syntactically interoperate.
In this example, 2 doctors are having a conversation. These 2 individuals both communicate via spoken language and can hear what the other one is saying – they can encode and transmit, and understand the words the other person is saying. But syntactic interoperability only covers the exchange of words and the ability to determine if they’re well-formed formulas, or expressions.
A phrase can be syntactically valid, but its semantics (meaning) could be completely misinterpreted. This ambiguity can cause confusion and lead to unintended actions and consequences.
Because of the mismatch, the doctors can talk and be heard, and the components of the phrases will be understood. However, we can’t guarantee the conversation will be properly interpreted. We can't be sure that the appropriate/intended action will occur as a result of the conversation.
The doctors are syntactically interoperating, but their lack of common understanding limits their interoperation.
Why this works and where if falls short
No information is being conveyed, and subsequently interpreted, other than structural. The meaning of the content of the expressions, therefore, is left to be interpreted by the receiver.
Consider the data delimiter. A delimiter is simply a sequence of characters that are used to specify a boundary between data elements. In XML, < > is used as a delimiter, and the comma character serves the same role in CSV (comma-separated values). These data delimiters do not attribute any semantics to the expressions beyond the structure of the expressions. Because of this, without a secret decoder ring (or a data dictionary) to facilitate the translation the contents of the delimiters, the expression is ambiguous. In the case of XML, the following can be said:
There is a message and it has a beginning and an end
There are different types of data/content in the message
The syntax provided in the XML standard gives you the ability to have differentiated structuring of your information. Whereas many standards could specify only the beginning (which allows us to communicate that this thing is a message), now we can indicate that within that message there are different kinds of data. XML provides the syntax for building those messages with different types of data, but it doesn't give us the ability to specify what they mean.
The meaning of what is contained in the structures is captured in a common information model or data dictionary that domain participants all use (know of, comprehend, can access, etc.). This is the focus of the next level interoperability.
Level 3 - Semantic Interoperability
You move from Level 2 (syntactic interoperability) to Level 3 (semantic interoperability) by specifying a common information model to be used. The common information model contains the meaning of the information agreed upon and used by the interoperating systems.
Why would you want to achieve semantic interoperability?
When systems can semantically interoperate, they can exchange the meaning of data in an unambiguous manner.
Example: Semantics are matched.
In this example, because they share a common understanding, the doctors can detect when something may be off – and request clarification. If they did not share a semantic model, this could not have happened.