Hacker News new | ask | show | jobs
by lenkite 1173 days ago
Maven is an excellent example where the original author forgot that XML attributes exist. Or rather he chose to use a use a terrible parser than didn't support them. And overly verbose names.

With a nice XSD, the below could be typed with full autocomplete and tab-next-placeholder support for element and attribute names in both neovim/vscode/ intellij.

    <proj name="My Biz CLI" url="http://github.com/mybiz/mybizctl" modelVersion="4.0.0">  
      <coord groupId="com.mybiz" artifactId="mybizctl" version="1.0.0" packaging="jar" />
       OR
      <coord>com.mybiz:mybizctl:jar:1.0.0</coord> <!-- alt form -->
      <deps>  
        <dep groupId="junit" artifactId="junit" version="5.0.1" scope="test" />  
        <dep>info.picocli:picocli:4.7.1</dep>  <!-- alt form -->
      </deps>  
    </proj>
The above declares a project CLI tool with proj metadata and a defined coordinate producing a jar file with 1 compile time dependency and 1 test dependency.
1 comments

The S-expression version looks so much more pleasant:

    (proj (name "My Biz CLI")
          (url "http://github.com/mybiz/mybizctl")
          (model-version "4.0.0")
          (group-id com.mybiz)
          (artifact-id mybizctl)
          (version "1.0.0")
          (packaging jar)
          (deps
           (dep (group-id junit)
                (artifact-id junit)
                (version "5.0.1")
                (scope test))))
I probably should have omitted alternatives and comments in my example - would have come to the same length then and just as easy to read. Did so below and even more pleasant to read - esp for folks already used to HTML.

Do S-expressions have a schema standard ?

    <proj 
      name="My Biz CLI" 
      url="http://github.com/mybiz/mybizctl" 
      groupId="com.mybiz" 
      artifactId="mybizctl"
      version="1.0.0"
      modelVersion="4.0.0">  
      <deps>  
        <dep groupId="junit" artifactId="junit" version="5.0.1" scope="test" />  
      </deps>  
    </proj>