Why did Salesforce use markup tags for VisualForce?

(written by lawrence krubner, however indented passages are often quotes). You can contact lawrence at: lawrence@krubner.com, or follow me on Twitter.

By now, I think we can agree, using HTML for the web was a mistake. But Sir Tim Berners-Lee could not have known that back in 1989. He was thinking that he could create a Semantic Web, and for that, the use of a markup language was defensible. Only in retrospect do we see that HTML was mostly used as a GUI for TCP/IP. Eventually Sir Tim Berners-Lee conceded the point, and so he went off and created RDF.

But if the use of markup language was a mistake, why did Salesforce imitate the mistake when creating VisualForce? Look at this code:

<apex:page standardController="Account">
    <apex:form>
        <apex:pageBlock title="Edit Account for {!$User.FirstName}">
            <apex:pageMessages/>
            <apex:pageBlockButtons>
                <apex:commandButton value="Save" action="{!save}"/>
            </apex:pageBlockButtons>
            <apex:pageBlockSection>
                <apex:inputField value="{!account.name}"/>
            </apex:pageBlockSection>
        </apex:pageBlock>
    </apex:form>
</apex:page>


What a disaster! I would have preferred:

{ 
:id "page"
:standardController "Account"
}

{
:id "messages"
:parent "page"
:behavior [ :showMessages ]
}

{
:id "button"
:parent "page"
:trigger :onClick
:action :save
:target "input"
:style "pageBlockButtons"
}

{
:id "input"
:parent "page"
:style "pageBlockSection"
:behavior [ :render-account-name ]
}

This kind of configuration DSL is much easier for specifying a GUI.

But for some reason Salesforce went with a paradigm whose failure was already well-known.

Oh, and if you want to argue “VisualForce communicates important semantic information” then why didn’t they use RDF?

Source