- If this is your first visit, please see the Introduction to Microformats page.
So you wanna develop a new microformat?
There must be a problem to be solved. No problem, no microformat.
Once you've found your 'problem,' ask yourself: 'is there a simpler problem here?' If so, let's solve that problem first. We want to deal with the simplest problems first and only then build up to more complex problems.
Also, search around on the web. Chances are that someone else has encountered the same problem as you. If you still believe that you have an unsolved problem, post something to the microformats-discuss mailing list or any other public channel (see http://microformats.org/discuss/) We want to involve all interested parties in the discussion. Start the discussion BEFORE you start creating any pages on the wiki. We're not using the wiki as a general "scratch pad". If you can't summarize the problem you are trying to solve in a short email, and feel like you need a long document, you're probably trying to solve too big of a problem - see previous paragraph.
Document Current Behavior
Document current human behavior. Remember, we're paving the cowpaths- before you do that you have to find the cowpaths. Your Best Practices for Examples Pages should be a collection of real world sites and pages which are publishing the kind of data you wish to structure with a microformat. From those pages and sites, you should extract markup examples and the schemas implied therein, and provide analysis.
This collection of examples should be public, preferably on a wiki because there's no way you can do it by yourself (no matter how many of you there are). The reviews-formats page is a good example of research done before the creation of a microformat. Before developing hReview 0.4 (in progress), the collaborators went out, documented current practices around reviews on web sites, and provided some analysis of the schemas implied therein.
It's quite possible during this step that you'll find someone else who has dealt with the problem you're addressing. Perhaps even solved it. Do your best to open a dialog with others who have encountered the same problem. We don't want to build walls between competing communities - we want people to work together to develop a good solution which will cover the majority of cases.
Propose a Microformat
There are other things to try before developing a microformat. First, ask yourself these questions:
- Is there a standard element in XHTML that would work?
- Is there a compound of XHTML elements that would work?
- Ok, if the answer to the above two is 'no,' we can talk about a microformat.
For more details on semantic XHTML, examples of using XHTML elements, and constructing XHTML compounds, see The Elements of Meaningful XHTML.
First you should observe the microformats principles.
After you understand the principes, ask yourself: "are there any well established, interoperably implemented standards we can look at which address this problem?" For example, hCard and hCalendar were built on top of the IETF standards for vCard and iCal, respectively, both of which are widely interoperably implemented. The developers of those standards had already spent many years in standards committees arguing about and developing the schemas. Better to leverage all the hard work that others have done before you, than to go off as a solo cowboy inventor, and waste time repeating all their mistakes. It's also much easier to start from a well established schema, and map into into XHTML than to develop a new schema.
Remember, microformats should be designed for humans first and machines second. Here are few questions that may help you decide if you really need a microformat for the problem you are trying to solve:
- If I looked at this microformat in a browser that didn't support CSS or had CSS turned off, would it still be human-readable?
- Are this format's elements stylable with CSS?
If the proposed format doesn't pass these two things, it's not likely to gain much acceptance. Remember: humans first, machines second.
After proposing a microformat, you'll likely get a lot of feedback from others interested in microformats. The proposal needs to be iterated and adapted. Microformat development should be collaborative and community-based.
Here's an ASCII-art flow diagram:
DIAGRAM: problem statement---->research/discussion---->proposal/draft---->standard ^________________V ^___________________V ^______________V
Note that each stage involves iteration. That iteration consists of discussion and feedback and may result in major changes. Do not be afraid to make major changes and please don't get too attached to any particular solutions.
Pages to consider creating
A pattern has emerged from successful microformat development efforts of several specific kinds of wiki pages being created, in a particular order (though not always).
After a specific problem area (*) has been determined (principle 1), consider creating and filling out the following pages for it. If you're unable to come up with material for the pages, then you should probably reconsider whether or not the problem is worth (or ready for) solving.
- *-examples. Find examples on today's web of the the type of content you think needs a microformat. Document them with URLs. Document the implicit schemas that the content examples imply. This is the action that helps follow principle 3, design for humans first, machines second ... adapt to current behaviors and usage patterns.
- *-formats. Find widely adopted interoperable current data formats and standards that attempt to or have attempted to solve the problem previously. Document their explicit schemas. This is necessary prerequisite for following through with principle 4, "reuse building blocks from widely adopted standards".
- *-brainstorming. Use the current real-world web examples and their implicit schemas to determine an 80/20 as-simple-as-possible (principle 2) generic schema to represent their data. Yes, this means you will explicitly omit some features of some use cases, or perhaps entire use cases which are more edge-cases than representative of larger, aggregate/macro behaviors. See which existing microformats can be reused as building blocks (principle 5, modularity). Use those existing data formats and schemas as a source of names for the fields (principle 4). Consider how would you embed this microformat in other formats (also principle 5, embeddability).
- With an 80/20 schema, and a source of field names, write up one or more straw proposals for a microformat. Make sure the straw proposals encourage the decentralized distribution of data (principle 6). At this point, you may want to also consider a naming section, where various names for the microformat can be considered. Always keep close at hand the microformats naming principles when choosing names.
- **. When it seems like there is some amount of consensus around one of the straw proposals for a microformat(**), write it up as a separate wiki page as a draft specification.
- **-faq. There will likely be common questions about the new microformat which can/should be answered in an FAQ page.
- **-issues. Folks may also raise issues about the microformat which aren't immediately addressable. An issues document helps serves to capture these issues, who raised them, and when, so that folks working on the microformat can be sure to go through and thoroughly answer them.
- **-implementations. Eventually there may be too many implementations of a microformat to document them in an informative section at the end of the specification, thus the list deserves its own page.
Moving from Stage to Stage
These stages of development are mirrored on the main page where microformats are divided into "Exploratory Discussions", "Drafts", and "Specifications". How do microformats move from one stage to the other? To help answer this question, it's probably useful to write up a set of desiderata for each stage.
You need a problem, and you need to attempt to state it. You should do it on this wiki using current items under exploratory discussion as a guide. Then send a note to the microformats-discuss list to get the attention of others who are interested in microformats. This is probably a good chance to pull in people from outside the current microformats community who may also be experiencing the same issue.
Feedback will probably range the gamut. Others may challenge your problem statement, the need for a microformat, concur, or add. All constructive feedback is good.
As a result of feedback, you may decide to abort your microformat idea or substantially modify it. One thing you want to be sure to do at this stage is to avoid reinventing the wheel. Are there elemental microformats you can reuse as building blocks? Doing this will save you effort and help you get implemented later because implementers will have less work to do.
However, do not be cowed from moving forward just because some people object. If you can find a group of people you respect who feel your idea has merit and, perhaps most importantly, are willing to continue working with you on getting it in shape, proceed.
Here, you need to write what is essentially a specification, but with the idea that it could change a lot. Again, this needs to go in the wiki, and you should send a note to microformats-discuss to alert people that something new has happened. Don't hesitate to continue trying to pull in feedback from relevant resources outside the community. Drafts need to include at least the following:
- Statements regarding the fact that you will not patent and are adopting appropriate copyright as illustrated by current drafts.
- An XMDP stating attribute values. You may want to place this on a separate wiki page and link to it. In that case use the naming convention *-profile, e.g. hCard Profile.
- Examples from current practice that show how the microformat would be used. Keep an eye out for how the microformat is actually improving things. If it's not, that might be an indication that you either need to abandon or change a lot.
- References that back up your design decisions for the microformat. To the extent possible, you do not want to invent things from whole cloth.
- A list of implementations (if any).
- An issues section for people to feed back to you with detailed objections.
You will usually need at least one iteration to get past the draft stage. By the time something becomes a specification, it should be stable so that developers can pick it up and write to it. This in turn implies that there are at least a couple of implementations.
Before moving to the specifications section, drop a note to microformats-discuss and wait a day or two for major objections. If none are forthcoming, move the microformat to the specifications area. This move will wake up any sleeping editors, and they may raise an objection and move you back to draft. If you have followed the process, now is the time to pin them down. At this juncture, any remaining issues should be easy to resolve.
What about other types of pages on the wiki, like "patterns" (e.g. include-pattern)?
How do those get created?
The short explanation is this:
The patterns are not formats at all. They do not stand on their own. They are merely documentation of pieces of other formats that are expected to (or are) being reused by other formats. The real world examples for includes in particular were documented in the context of resume-examples, Resume Formats, and resume-brainstorming (as noted at the very top of the document) "Initially developed as part of resume-brainstorming..." Later, real world examples for reviews were found to need the include pattern as well.