Skip to toolbar

Community & Business Groups

Proposal: .cv2 syntax

This post is a proposal on parts of the .cv2 syntax for the CV 2.0. Things will still be missing and we need to discuss more in order to create a specification, so feel free to join in on the discussion via the mailing list.

Syntax Signs

\\ 2 backslashes for section start

\\ Personal

\\ Professional

\\ Education

\\ Skills

\\ Personal

Additional information for a section can be added anywhere into the .cv2. The parser will recognize everything from a beginning \\ to the next \\ as one section. If two sections are the same, the properties will be recognized as belonging to the same section. Newer (i.e. further down in the file) values will replace older values if they address the same tag, much like cascading stylesheets.

/* comments */
As usual in many programming languages, comments can be added in between a slash, asterisk – asterisk, slash combination. Example:

/* comments optional - filename: john_doe_timestamp.cv2 */


\{} Special Characters and Escaping Characters

/* a name with umlaut as an example of how to escape characters */
fullname: John D\{"o}e

The above example syntax is borrowed from LaTeX, although Umlauts and other symbols should be recognized since .cv2 will have UTF-8 encoding as requirement in our specification, so there should only be the need to escape, for example, company names with two backslashes in them or other names that interfere with our .cv2 syntax which should happen rarely if at all. Anything that is input via a form needs to be sanitized and escaped correctly. This is a main security point in our specification.

“Values spanning

several lines”
As newline is our ending character, we need a sign to tell the parser that a value spans several lines. Example:

j1.description: "this text spans several lines and is rendered similar
to the pre tag in HTML - preserving line breaks"

[] Enumerations and Value Ranges
Enumerations and value ranges are important for custom tags that are defined by the user and have no defined meaning as well as value ranges for skills in order to create visualizations and charts. Example:

\\ Skills
CSS AS css
Java AS java
Project Managemenet AS pm
scale1: [0-100]
scale2: [Beginner, Intermediate, Expert]
css.level: \{scale1:67}
css.category: markup languages
java.level: \{scale1:85}
java.category: programming languages
pm.level: \{scale2:Expert}
pm.category: organizational

Enumerations and value ranges are created using name: [x-y] for value ranges or name: [a, b, c, d, …] for enumerations and must be created before their first reference. They can be addressed via the usual escaping/referencing syntax: \{name:value}

Tag Names

We will still have to define most tag names. Some tag names are suggested in the Notes post, such as:
fullname, faoname, email, birthDate, birthLocation, citizenship, name, dateStart, dateEnd, role, description, degree, level, category, …

faoname stands for “For Attention Of” as used in letters and is used to designate the proper salutation. We cannot use first and last name since many cultures around the world use a different concept and people need their full name on their resume as well as some option to tell how they would prefer to be addressed.

Multi-Tag Properties

Some properties have multiple tags, such as jobs and education. The choice is to either group them in parentheses, making them harder to separate or concatenate anywhere else in the document and also harder to read eventually. So the approach is to treat them similarly to objects in a programming language, addressing the property followed by a dot and the tag. Example: Some Company Name


The Alias concept has been borrowed from SQL and can be used for any multi-tag properties. Aliases must be created for user-defined properties such as skills or custom tags. Example:

job1 AS j1 Some Company Name
j1.dateStart: date in format


Cross-referencing is very important for the visualizations so additional links can be clearly shown and visualized in various ways, for examples skills can be linked to jobs or jobs to education, etc. Example:

j2.description: "created blah, e-mail me: \{email}"
j2.additionalInfo: some more blah, had a contract for \{j1} while doing this

The syntax for cross-references is \{tagname} including the cross-referenced tag name in the curly brackets.

URLs and External Files

URLs and external files like pictures and logos can be added to a .cv2 using \{externaltag} where “externaltag” for now only has the options of url:, mailto:, and file:. Example:

j2.description: "created \{url:} in this job,
email to \{} for questions"


According to the charter (section Decision Process), we need a group consensus or at least a 2/3 majority vote on this proposal where agreement as well as silence implies consensus.

If no objections arrive by October 11th 2015, this proposal is regarded as accepted. A small reminder: if you agree, please reply to the public mailing list – if all participants agree or disagree before the 11th of October, we can already move forward with our work. Thank you!

Leave a Reply

Your email address will not be published. Required fields are marked *

Before you comment here, note that this forum is moderated and your IP address is sent to Akismet, the plugin we use to mitigate spam comments.