But after several years of lukewarm activity I have understood that the accent of "semantic markup" should shift from programming rather to broader context (though I had such thoughts even before, but at first I've thought that the accent on programming is more necessary). Of course, this idea is not new and can be traced back to ancient philosophers, but only now, we have appropriate possibilities to implement it. The most severe problem for such language in the past was a paper which allows mainly linear arrangement of information. Computer allows much more, though only in 1990s hypertext proved to be successful. But it was clear that it does not fit well for representing data, which led to the raise of XML and Semantic Web. But even they have shortcomings which made me to propose the alternative (to XML at that moment) "Universal Abstract Language" back in 1999, but honestly it was not mature enough. My attempts continued and I've supported my page at GeoCities but after that it was closed and I have not restored it (though I kept it locally). Finally, in 2009 I've started my new period of activity in "On meaning..." blog. Now, my personal shift in paradigm concerns any information in general and programming in particular (as it is only one kind of information representation).
But you may ask why we need new paradigm if we already have Semantic Web (and microformats)? Semantic Web claims to be "Web of data" (and you can consider at the development of XML standards). But data is great for machines, what's about human beings? Semantic Web can help some company to create application for data but personal information is often too unique to create applications (or even ontology) for each kind of such information. Actually, namely therefore, Semantic Web still has no good representation of own data for humans, which only underlines its machine-oriented nature. Moreover, it is not clear if usage of triples is expedient at all. Creators of Semantic Web claims that triples can represent any sort of semantic data, which proven in AI researches long before the era of Internet. In fact, a triple is not only abstraction which may claim this, the same may relate to object-oriented or relational model which may represent just any data. Why to put a lot of efforts in creating, for example, new triple based databases if relational ones may represent any data too?
Why we need to transform unary, binary, and other kind of relations to triples? Only because usual order of natural language sentence is "subject-predicate-object"? But it is not true in natural language too: we can have a phrase with one word or quite complex sentences with more than three elements. But why namely "subject-predicate-object"? Why natural language order usually includes "subject" and "predicate" at least? This order reflects space-time dualism of our reality. But because any action, in fact, is an interaction, therefore usually we also have "object" (to which some action is applied). But actions can be complex therefore we may have more than one "object": "I've send a letter to my friend by email". Are Semantic Web triples reflects time-space dualism? Obviously, no. The example from Semantic Web specification includes "sky" as "subject", "has color" as "predicate", and "blue" as "object". But "has color" is not action it is a verb, it does not occur (during some time period). A verb needed here only because we should comply a sentence with language rules, therefore we use "has color" (but, in fact, in some language, like Russian, a verb can be omitted at all, so literally such sentence would sound like "Sky blue"). Why "blue" is an object? True is such triple just a sort of abstraction, which can be applied to any entity even ignoring its real life features (similarly in object-oriented programming, everything is "object": objects, actions, attributes, etc). Theoretically, there is a lot of abstractions which may represent any kind of data, but why triple is preferred? Because of semblance with natural language rules? Why then triples ignore all richness of natural language, and ignores natural language rules ("blue" should be "attribute" not "object", which are different). In fact, Semantic Web specification states that "Much of this meaning will be inaccessible to machine processing and is mentioned here only to emphasize that the formal semantics described in this document is not intended to provide a full analysis of 'meaning' in this broad sense; that would be a large research topic." [RDF Semantics, Patrick Hayes, Editor, W3C Recommendation, 10 February 2004, http://www.w3.org/TR/2004/REC-rdf-mt-20040210] Why then triples were chosen without full analysis of meaning?
Moreover, Semantic Web uses URI for identification. And again, we see not expedient usage of abstractions. URI uniquely identifies computer resources, why to use it for real life objects too? Computer identifiers is quite different in several aspects from natural language identifiers, because computer ones aimed to identify things precisely, whereas natural language ones can identifiy things as brief as possible, and precision is attained with the help of composite identifiers. At last, Semantic Web does not accentuate on abstracting (generalizing and specifying) which at least looks strange.
Shortcomings of Semantic Web are shown to prove there is a sense to have alternative way of handling meaning. But the next question is: can semantic programming propose such alternative? To answer this question we will examine "Introduction to Semantic Programming", starting from motivation indicated in it:
* Currently programs are thought of as text we could write with pen and paper.
* Programs are complex graphs we should manage with computers.
* Currently programs manage data in the local memory of one computer.
* All data should be managed as if it's persistent, remote data.
* Currently we're tempted to think about ever larger buckets of data.
* We should think of data as a graph distributed across many systems.
* Currently we mostly think of programs and data separately.
* Programs and data are just different parts of the same distributed graph.
* Currently we're tempted to build one ontology for the world.
* We should always expect to have to handle multiple ontologies.
Of course, all these points are reasonable but do they relate only to programming? All or almost all motivation items applied not only to programs but to any information. Therefore, we should think of not only programs and data separately, but also of information and programs too. Which means, for example, requirements, use cases, help, and other information should be parts of distributed graph too.
To understand what is semantic programming, we need to understand what is meaning. And the introduction gives the answer that "Meaning arises from the relationships between things and the behaviours of things" Correctness of this answer depends on meaning of words which it consists of. For example, what is "thing"? Is it only real world thing or conceptions and ideas included? In fact, there is real space-time and many layers of abstract space-times, which refer to other space-times (inlcuding real one), so, "thing" of real space-time is a thing, but any "thing" of other space-times is always a reference. Also, the introduction mentions "agents" similarly to Semantic Web, but isn't it evident that semantics is needed for real life human beings too (though later "agents" applied for humans too, but only abstractly)? Finally, there is no apparent statement that "relationship" is a reference too.
Further the article considers meaning as a set of more specific postulates:
- A 'reference' has no atomic meaning in and of itself, but has meaning only in so far as an agent is able to manipulate, act upon or in some other way 'understand' the reference.
- An agent understands the meaning of a reference if it is able to use it effectively.
- The meaning of a given reference can depend on the context in which it's being used.
- An agent can come to understand the meaning of a given reference in a given context in one of three ways:
- Axiomatically, or in other words by having the meaning of the reference 'hard wired' for a given context.
- Deductively, through the reference's relationships to other known references within the given context (e.g. if the agent knows that 'X is the same as Y' and already understand the meaning of 'Y' then it can derive the meaning of 'X')
- Behaviourally, through the reference's behaviour in the given context (if we can probe the reference's referent and get responses back then we learn something new about the meaning of the reference)
- Axiomatically, or in other words by having the meaning of the reference 'hard wired' for a given context.
This definition is not full (though it seems the author does not pretend to give full definition and call such notion "naive") and have some inexactitude behind:
- Axiomatic understanding is, in fact, identifying, which is the quickest way of understanding, by mere comparing by reference equality.
- Not all references indicate the exact meaning, "bird" can refer to a generalized representation of a bird, to the entire class of birds, etc. This is the main cause why meaning can be ambiguous, therefore a notion of generalizing/specifying and similarity (as a partial equality) should be a part of any (even naive) semantic theory.
- Any sentence (like natural language ones) is a set of references, which represents a composite reference (or a graph of semantic relations).
- There is no definition of a context. In fact, a context is also a composite reference (or a graph of semantic relations) by itself. And any agent is an fact is a set of contexts.
You may notice that at least third point creates a contradiction between how meaning is handled in natural language and in programming. Programming prefers unambiguous identifiers (like GUIDs), whereas humans would prefer composite identifiers which consists of ambiguous identifiers (words). But, in fact, the purpose of constructing composite identifiers is uniqueness too, though there it is not hard "global uniqueness" but rather a balance between uniqueness and brevity. Speaking with the author terminology, the more coinciding context two agents have, the less references should be provided for communicating meaning. Or in other words: even a part of composite identifier has meaning by itself. URI is the example of some middle ground between GUID and composite identifier, because it consists of identifiers which can have and have not meaning, but which is globally unique. What should be preferred? At least, it is clear that applications are created for humans, so we can't avoid the topic of composite identifiers. On the other hand, nothing prevents us from having translation between GUID and composite identifiers.
Further the introduction talks about specific traits of semantic programming, but we will stop here, because it is not quite clear if it is worthy to raise the problem of integration between programming and information. On this, depends how we see semantic programming: either it is yet another paradigm in namely programming or it should be a part of one semantic infrastructure, which should have broader vision:
- it should be the bridge between natural language and machine-oriented and optimized for domain formats/languages/protocols;
- we should use not only formats/ontologies which encompass the entire domains, but also atomic formats, which can be restricted with even one word, which implies usage of underrated identification (which understood by humans easier than even simple language of advanced search);
- semantics should be available not only for experts and machines, but also for general audience (but it also implies it should be accessible enough and supported by interface to be used by an ordinary user);
- semantics can be applied to any information (a web page, programming code or data, a binary file, etc);
- semantics should be supported in such way, it would provide testability of semantics for any information (that is, information of a web page can be tested with some questions, and a search engine or programming code should be able to find this information with equivalent queries in corresponding languages).
Can semantic programming satisfy this broader vision? It seems like no, but possible it even had not to intend to. Can Semantic Web satisfy it? Unfortunately, no. For that, it should shift from "intelligent agents" to "intelligent humans", which is so far not envisaged even in theory. The problem of semantics concerns not only everything which starts from "semantic" word, but also problems of a search, which is still efficient only in cases of simple and straightforward queries. But even here, we still see only quite humble attempts to implement parts of broader approach.