m (collapsed *-brainstorming page related text into paragraphs into a single list item for clarity of scope, bolded page name indicators)
(50 intermediate revisions by 14 users not shown)
Line 1:
Line 1:
(削除) <div style="float:right;margin-left:1em">__TOC__</div> (削除ここまで)
(追記) If this is your first visit, please see the [[introduction]] page first. (追記ここまで)
(削除) If this is your first visit, please see (削除ここまで)the [[(削除) introduction (削除ここまで)]] (削除) page first. (削除ここまで)
(追記) {{DISPLAYTITLE:The microformats process}} (追記ここまで)
(追記) '''So you wanna develop a new microformat?''' (追記ここまで)
(追記) '''Or just a new vocabulary?''' (追記ここまで)
(追記) '''Or create a new standard based on empirical research and scientific methods?''' (追記ここまで)
(追記) This document will help guide you through (追記ここまで)the (追記) steps to take towards achieving these goals. (追記ここまで)
(追記) The microformats process has been cited as inspiration for other standards groups and efforts such as the WHATWG and ActivityStreams. (追記ここまで)
(追記) : (追記ここまで)[[(追記) User:Tantek|Tantek Çelik (追記ここまで)]]
(削除) <h1>So you wanna develop a new microformat?</h1> (削除ここまで)
(追記) {{TOC-right}} (追記ここまで)
== Get some experience first ==
== Get some experience first ==
Before even considering pursuing a new microformat, first:
Before even considering pursuing a new microformat, first:
# Make your site [[POSH]].
# Make (追記) sure (追記ここまで)your site (追記) uses (追記ここまで)[[POSH]].
# Add <em>existing</em> microformats to your sites like [[(削除) hcard|hCard (削除ここまで)]] for your contact info (削除) etc. (削除ここまで), [[(削除) hcalendar|hCalendar (削除ここまで)]] for your events, [[(削除) hatom|hAtom (削除ここまで)]] for your episodic content (e.g. blogs). See [[get-started]] for more specific examples of adding microformats to your sites.
# Add <em>existing</em> microformats to your sites like [[(追記) h-card (追記ここまで)]] for your contact info, [[(追記) h-event (追記ここまで)]] for your events, [[(追記) h-entry (追記ここまで)]] for your episodic content (e.g. blogs). See [[get-started]] for more specific examples of adding microformats to your sites(追記) . (追記ここまで)
(追記) #* In particular, start adding '''[[microformats2]]''' markup for all your microformats. Any new microformats must use [[microformats2]] - using it will help you become familiar with it (追記ここまで).
This will help familiarize you with how [[POSH]] and [[microformats]] currently work. Such "real world" experience will greatly help you with the development a new microformat.
This will help familiarize you with how [[POSH]] and [[microformats]] currently work. Such "real world" experience will greatly help you with the development (追記) of (追記ここまで)a new microformat(追記) . For more on this see [[why-using-existing-microformats-matters]] (追記ここまで).
Then, ask yourself:
Then, ask yourself:
There must be a problem to be solved. No problem, no 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.
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 [(削除) http://microformats.org/mailman/listinfo/microformats-new/ microformats-new (削除ここまで)] (削除) 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.
(追記) Perhaps someone else is pursuing (or has pursued) a similar problem. (追記ここまで)
(追記) Check the [[exploratory-discussion]] page (追記ここまで), (追記) and (追記ここまで)search around on the web. Chances are that someone else has encountered the same problem as you. (追記) There are very few truly new problems. (追記ここまで)
If you still believe that you have (追記) a new and (追記ここまで)unsolved problem, post (追記) a one sentence summary of the problem (追記ここまで)to the [(追記) [irc] (追記ここまで)] channel. (追記) If no one answers, perhaps start a page documenting the problem you're solving, then ask again. (追記ここまで)
(追記) It's better (追記ここまで)to (追記) get the community involved (追記ここまで)in the discussion (追記) as the community can help find previous attempts at describing or solving the problem (追記ここまで).
Start the discussion '''(追記) <span style="text-transform: uppercase;">before</span> (追記ここまで)''' 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 (追記) message on IRC (think tweetsized) (追記ここまで), and feel like you need a long document, you're probably trying to solve too big of a problem - see previous (追記) point about 'is there a simpler problem here?' and simplify until you describe your problem and real world use case in a short (追記ここまで)paragraph(追記) . (追記ここまで)
(追記) == What is the use case == (追記ここまで)
(追記) Once you've documented the problem, start exploring and documenting additional use-cases that would be addressed/enabled by a solution. (追記ここまで)
(追記) == Check Exploratory Discussions For Previous Work == (追記ここまで)
(追記) It may be possible that someone else has tried (or is trying to) solve the same real world problems as you. (追記ここまで)
(追記) Check the [[exploratory-discussions]] page ''before'' starting new pages for your effort to see if you can add to / iterate on an existing effort before creating a new one (追記ここまで).
==Document Current Behavior==
==Document Current Behavior==
Document examples of current human behavior(削除) . [[why (削除ここまで)-examples(削除) |Why examples first?]] (削除ここまで)
Document examples of current (追記) real world (追記ここまで)human (追記) publishing (追記ここまで)behavior (追記) of the type of content you want to mark up in a <kbd>* (追記ここまで)-examples(追記) </kbd> wiki page. (追記ここまで)
(削除) Remember, we're (削除ここまで)[(削除) http://ifindkarma.typepad.com/relax/2004/12/microformats.html paving the cowpaths] (削除ここまで)- (削除) before you do that you have to ''find'' the cowpaths. Your [[ (削除ここまで)examples]] (削除) 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 (削除ここまで).
[(追記) [why (追記ここまで)-examples(追記) |Why examples first? (追記ここまで)]] (追記) Read that. It's important (追記ここまで)and (追記) gets to (追記ここまで)the (追記) core (追記ここまで)of (追記) what makes microformats efforts different than many/most previous/other format development efforts (追記ここまで).
(削除) 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|hReview]], the collaborators went out, documented current practices around reviews on web sites, and provided some analysis of (削除ここまで)the (削除) schemas implied therein (削除ここまで).
(追記) We (追記ここまで)'(追記) re [http://ifindkarma.typepad.com/relax/2004/12/microformats.html paving the cowpaths]- before (追記ここまで)you do (追記) that (追記ここまで)you (追記) have to ''find'' (追記ここまで)the (追記) cowpaths (追記ここまで).
(削除) 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 (削除ここまで).
(追記) By (追記ここまで)''(追記) cowpaths'' here we mean ''real world publishing examples' (追記ここまで)'. (追記) Your [[examples]] 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 especially (追記ここまで)the (追記) schemas implied therein, and provide analysis (追記ここまで).
==(削除) Propose a Microformat (削除ここまで)==
(追記) This collection of examples should be public, preferably on the microformats wiki because it's unlikely you can do it by yourself (no matter how many of you there are), and having others even just check your work will help improve its quality. (追記ここまで)
(削除) Actually (削除ここまで), '''(削除) DON (削除ここまで)'(削除) T!!! (削除ここまで)'''
(追記) The [[review-examples]] page is a good example of research done before the creation of a microformat. Before developing [[hreview|hReview]], the collaborators went out, documented current practices around reviews on web sites, and provided some analysis of the schemas implied therein. (追記ここまで)
(追記) Note: these examples are about the ''content'' (and schemas ''implied'' therein) not about formats, class names, pre-existing standards etc. That comes next. (追記ここまで)
(追記) Study the examples and determine the ''implied'' (not explicit) schema of data that is being published (the conceptual properties about the data - not literal class names). Sort these by frequency and determine which appear in roughly 80% of cases (per the 80/20 rule, Pareto [[principle]]). (追記ここまで)
(追記) If you can't find real world publishing examples of the type of data you want to represent using a microformat, then stop here. It doesn't need a microformat. (追記ここまで)
== (追記) Document Previous Formats (追記ここまで)==
(追記) Document examples of previous formats related to the problem area in a <kbd>*-formats</kbd> wiki page. (追記ここまで)
(追記) Once you've documented real world publishing examples of the kinds of data you want to represent, the next step is to research efforts at developing formats for those kinds of data. (追記ここまで)
(追記) There are almost always previous efforts at formats for whatever kind of data you want to represent using microformats. (追記ここまで)
(追記) Documenting these [[previous-formats]] helps in a number of ways: (追記ここまで)
(追記) * explore why previous format(s) succeeded (or didn't) (追記ここまで)
(追記) * avoid (or at least minimize) repeating mistakes of previous formats (追記ここまで)
(追記) * use successful previous formats for interoperability (追記ここまで)
(追記) * provide a source of vocabulary to express a new microformat (追記ここまで)
(追記) In particular, 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, and dominant in their space (there were no competing formats with anywhere near the same levels of adoption). (追記ここまで)
(追記) The developers of those standards had already spent many years in standards committees arguing about and developing their 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 semantic HTML than to develop a new schema. (追記ここまで)
(追記) It (追記ここまで)'(追記) s quite possible during this step that you (追記ここまで)'(追記) ll find someone else who has dealt with the problem(s) you (追記ここまで)'(追記) re addressing. Perhaps even solved it/them. Do your best to open a dialog with others who have encountered the same problem(s). 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. (追記ここまで)
(追記) If you can't find previous efforts at formats for the data you want to microformat, ask in [[IRC]]. (追記ここまで)
(追記) ==Brainstorm Proposals== (追記ここまで)
(追記) By now you (追記ここまで)'(追記) ve researched previous examples and previous formats and you (追記ここまで)'(追記) re finally ready to write up brainstorms towards a new microformat in a <kbd>*-brainstorming</kbd> wiki page. (追記ここまで)
(追記) Actually, <strong style="text-transform:uppercase;">don (追記ここまで)'(追記) t!</strong> (追記ここまで)
There are other things to try before developing a microformat. First, ask yourself these questions:
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 standard element in (追記) HTML (追記ここまで)that would work?
# Is there a compound of (削除) XHTML (削除ここまで)elements that would work?
# Is there a compound of (追記) HTML (追記ここまで)elements that would work?
(削除) # Ok (削除ここまで), (削除) if (削除ここまで)the (削除) answer to the above two (削除ここまで)is (削除) ' (削除ここまで)no(削除) , (削除ここまで)' (削除) we (削除ここまで)can (削除) talk about a microformat (削除ここまで).
(追記) If so (追記ここまで), (追記) document these on (追記ここまで)the (追記) brainstorming page, and stop. There (追記ここまで)is no (追記) need for a microformat. (追記ここまで)
(追記) Let (追記ここまで)'(追記) s not unnecessarily reinvent what you (追記ここまで)can (追記) already do with HTML (追記ここまで).
For more details on semantic (削除) XHTML (削除ここまで), examples of using (削除) XHTML (削除ここまで)elements, and constructing XHTML compounds, see [http://tantek.com/presentations/2005/03/elementsofxhtml/ The Elements of Meaningful XHTML].
For more details on semantic (追記) HTML (追記ここまで), examples of using (追記) HTML (追記ここまで)elements, and constructing (追記) HTML (and (追記ここまで)XHTML(追記) ) (追記ここまで)compounds, see [http://tantek.com/presentations/2005/03/elementsofxhtml/ The Elements of Meaningful XHTML].
(削除) First (削除ここまで)you (削除) should observe [[microformats#the_microformats_principles| (削除ここまで)the (削除) microformats principles]] (削除ここまで).
(追記) Otherwise, if (追記ここまで)you (追記) can clearly and confidently answer "no" to (追記ここまで)the (追記) above two questions, we can talk about a microformat (追記ここまで).
(削除) 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 (削除ここまで), (削除) and dominant (削除ここまで)in (削除) their space (there were no competing (削除ここまで)formats with (削除) anywhere near the same levels (削除ここまで)of (削除) adoption) (削除ここまで). (削除) 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 (削除ここまで).
(追記) Before (追記ここまで)you (追記) start your act of creation (追記ここまで), (追記) familiarize (追記ここまで)yourself (追記) [[microformats#the_microformats_principles|the microformats principles]]. (追記ここまで)
(追記) There's basically two steps to writing up a brainstorm proposal (追記ここまで):
(追記) # Go back to that list of real world publishing examples that you researched (追記ここまで), and (追記) collect the 80/20 (追記ここまで)of the (追記) implied conceptual schema from the examples. (追記ここまで)
(追記) # Give each of those concepts a property name (追記ここまで), (追記) re-using from (追記ここまで), in (追記) order: (追記ここまで)
(追記) ## existing microformats (追記ここまで)
(追記) ## previous (追記ここまで)formats
(追記) ## simple but specific human readable English words and phrases (追記ここまで)
(追記) Congratulations, you've written up a brainstorm proposal (追記ここまで)with (追記) a list (追記ここまで)of (追記) class names for a possible microformat (追記ここまで).
(追記) You may notice that we completely skipped ''naming'' (追記ここまで)the (追記) potential new microformat itself (追記ここまで). (追記) This is not an accident (追記ここまで), (追記) this is deliberate. Naming is tempting (追記ここまで), and (追記) good naming is hard. Thus naming is discussed later (追記ここまで).
(追記) The key is, the explicit (追記ここまで)schema (追記) of the microformat (what properties (追記ここまで)and (追記) hence class names are in it) is '''more important''' (追記ここまで)than (追記) the name (追記ここまで).
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:
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:
Line 54:
Line 140:
== Iterate ==
== Iterate ==
In the process of developing a microformat, you'll likely get a lot of feedback from others interested in microformats. The effort needs to be iterated and adapted. Microformat development should be collaborative and community-based.
(追記) Now that you have a simple brainstorm proposal, what do you do? (追記ここまで)
(追記) Iterate. Iterate. Iterate. (追記ここまで)
In the process of developing a microformat, you'll likely get a lot of feedback from others interested in microformats. The effort needs to be iterated and adapted. Microformat development should be (追記) open, and preferably (追記ここまで)collaborative and community-based.
Here's an ASCII-art flow diagram(削除) : (削除ここまで)
Here's an ASCII-art flow diagram (追記) of where you're going (追記ここまで)
problem statement---->research/discussion---->proposal/draft---->(削除) standard (削除ここまで)
problem statement---->research/discussion---->proposal/draft---->(追記) specification (追記ここまで)
^________________V ^___________________V ^______________V
^________________V ^___________________V ^______________V
Line 65:
Line 155:
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.
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.
(削除) = (削除ここまで)== Naming considerations (削除) = (削除ここまで)==
(追記) Feel free to explore ''multiple'' proposals one after another on the brainstorming page. The goal here is to explore reasonable microformat solutions, including multiple possibilities, alternatives etc. (追記ここまで)
== Naming considerations ==
'''DO NOT''' start with even labeling your effort "hXYZ". This is a ''very'' common mistake.
'''DO NOT''' start with even labeling your effort "hXYZ". This is a ''very'' common mistake.
Line 74:
Line 166:
Good: '''[[product-examples]]'''. Bad: '''hProduct-examples'''.
Good: '''[[product-examples]]'''. Bad: '''hProduct-examples'''.
(削除) === Pages (削除ここまで)to (削除) create === (削除ここまで)
(追記) After you've iterated your research and brainstorming at least a bit, you've likely gained sufficient understanding of the problem-space that you're solving (追記ここまで)to (追記) start looking at naming considerations (追記ここまで).
(削除) 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.
(追記) == Pages to create == (追記ここまで)
# '''*-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. (削除) (削除ここまで)Start by cloning the [[examples]] page and filling it out.
After a specific problem area ('''*''') has been determined (principle 1), consider creating and filling out the following pages for it(追記) , and add the first to [[exploratory-discussions]] (追記ここまで). 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.
# '''*-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".
# '''*-examples''' Find examples on today's web of the the type of content you think needs a microformat. Document them with URLs. Document the schemas (追記) implied by (追記ここまで)the content examples. This is the action that helps follow principle 3, design for humans first, machines second ... adapt to current behaviors and usage patterns. Start by cloning the [[examples]] page and filling it out.
# '''*-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 [[existing-classes|source of names]] for the fields (principle 4). Consider how would you embed this microformat in other formats (also principle 5, embeddability). See the [[brainstorming]] page for a bit more info.<p> With an 80/20 schema, and a source of field names, write up one or more straw proposals for a microformat in the *-brainstorming page. Make sure the straw proposals encourage the decentralized distribution of data (principle 6). Postpone the choice of root class name as it often overlaps with the naming of the microformat itself. Always keep close at hand the [[naming-principles|microformats naming principles]] when choosing names.</p><p>Brainstorming about the substance of the microformat (its properties and values) should precede naming the microformat itself. Thus after proposals have been written up and are being discussed for the schema, create a naming section for the microformat itself and root class name, where various names can be considered.</p>
# (追記) <span id="formats"> (追記ここまで)'''*-formats'''(追記) </span> (追記ここまで) 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".
# '''**''' When it seems like there is (削除) some amount of (削除ここまで)consensus around one of the (削除) straw (削除ここまで)proposals for a microformat with a specific name('''**'''), write it up as a separate wiki page as a draft specification, and then start creating the following pages to track it.
# (追記) <span id="brainstorming"> (追記ここまで)'''*-brainstorming'''(追記) </span> (追記ここまで) 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 [[existing-classes|source of names]] for the fields (principle 4). Consider how would you embed this microformat in other formats (also principle 5, embeddability). See the [[brainstorming]] page for a bit more info.<p> With an 80/20 schema, and a source of field names, write up one or more straw proposals for a microformat in the *-brainstorming page. Make sure the straw proposals encourage the decentralized distribution of data (principle 6). Postpone the choice of root class name as it often overlaps with the naming of the microformat itself. Always keep close at hand the [[naming-principles|microformats naming principles]] when choosing names.</p><p>Brainstorming about the substance of the microformat (its properties and values) should precede naming the microformat itself. Thus after proposals have been written up and are being discussed for the schema, create a naming section for the microformat itself and root class name, where various names can be considered.</p>
# '''**''' When it seems like there is (追記) rough (追記ここまで)consensus around one of the (追記) brainstorm (追記ここまで)proposals for a microformat with a specific name('''**'''), write it up as a separate wiki page as a draft specification (追記) (see [[style-guide]]) (追記ここまで), and then start creating the following pages to track it.
# '''**-faq''' There will likely be common questions about the new microformat which can/should be answered in an FAQ page.
# '''**-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.
# '''**-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.
Line 88:
Line 180:
# '''**-brainstorming''' Eventually there will be non-trivial proposals/suggestions/clarifications for changes in the microformats as part of iteration. Create such a format specific [[brainstorming]] page for such suggestions.
# '''**-brainstorming''' Eventually there will be non-trivial proposals/suggestions/clarifications for changes in the microformats as part of iteration. Create such a format specific [[brainstorming]] page for such suggestions.
(削除) = (削除ここまで)== Moving from Stage to Stage ==(削除) = (削除ここまで)
== 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". Based on feedback we've added a new stage: "Standards". (追記ここまで)
(削除) 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. (削除ここまで)
How do microformats move from one stage to the other?
(削除) = (削除ここまで)=== Exploratory Discussions ===(削除) = (削除ここまで)
=== Exploratory Discussions ===
(追記) Document your problem area, existing research, and brainstorm proposals on the [[exploratory-discussions]] page. (追記ここまで)
(追記) You should do it on this wiki using current items under exploratory discussion as a guide. (追記ここまで)
(削除) 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-new 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.
Then send a note to (追記) [[irc]] (追記ここまで)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.
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 [[reinvented-wheels|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 (削除ここまで).
As a result of feedback, you may decide to (追記) abandon (追記ここまで)your microformat idea or substantially modify it (追記) or add more alternatives (追記ここまで)to (追記) brainstorm proposals (追記ここまで)to (追記) consider (追記ここまで).
(削除) 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. (削除ここまで)
(追記) One thing you want to be sure to (追記ここまで)do (追記) at this stage is to avoid [[reinvented-wheels|reinventing the wheel]] (追記ここまで).
(削除) ==== Drafts ==== (削除ここまで)
(追記) 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. (追記ここまで)
(削除) 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: (削除ここまで)
(追記) === Drafts === (追記ここまで)
(追記) Once there seems (追記ここまで)to (追記) be rough consensus around (追記ここまで)a (追記) particular brainstorm proposal (追記ここまで), (追記) including (追記ここまで)a (追記) specific schema and list or properties (追記ここまで), (追記) write that brainstorm proposal into (追記ここまで)a (追記) draft (追記ここまで).
* Statements regarding the fact that you will not patent and are adopting appropriate copyright as illustrated by current drafts.
(追記) Summary of what is a draft: (追記ここまで)
* 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]].
(追記) * '''draft''' - experimental new microformat (追記ここまで)
(追記) ** '''preconditions:''' (追記ここまで)
(追記) *** rough consensus has been reached among the various *-brainstorming proposals (追記ここまで)
(追記) ** '''actions:''' (追記ここまで)
(追記) *** determine a name for the new microformat (**) (追記ここまで)
(追記) *** write-up consensus brainstorm into a stand-alone draft (追記ここまで)
(追記) *** create **-issues page for collecting feedback (追記ここまで)
(追記) ** '''means:''' (追記ここまで)
(追記) *** ready for publishers to start experimenting with on their public pages (追記ここまで)
(追記) *** ready for consumers to start experimenting with consuming such publishers (追記ここまで)
(追記) *** and both providing feedback for draft iteration accordingly (追記ここまで)
(追記) ** '''stability:''' (追記ここまで)
(追記) *** major changes can still occur (追記ここまで)
(追記) *** e.g. add/drop/rename arbitrary features (per research/feedback from publishers/consumers) (追記ここまで)
(追記) Drafts are written up on the wiki using the draft template. Upon writing up a draft, send a note to IRC channel with URL to alert people that something new has happened. Continue encouraging feedback from relevant resources both inside and 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 (追記) (preferably PUBLIC DOMAIN) (追記ここまで)as illustrated by current drafts.
* An XMDP stating (追記) explicit property and value names (追記ここまで). 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.
* 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.
(追記) * Use of [[rfc-2119]] terms. (追記ここまで)
* References that back up your design decisions for the microformat. To the extent possible, you do not want to invent things from whole cloth(追記) . This should be relatively easy if you have followed the process so far with proper research (追記ここまで).
* A list of implementations (if any).
* A list of implementations (if any).
* An issues section for people to feed back to you with detailed objections.
* An issues section for people to feed back to you with detailed objections.
(削除) = (削除ここまで)=== Specifications ===(削除) = (削除ここまで)
=== Specifications ===
(追記) 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. (追記ここまで)
(追記) This in turn implies that there are at least a couple of sites/implementations that have shown interest beyond the creator/editors of the specification. (追記ここまで)
(追記) Summary of what is a specification: (追記ここまで)
(追記) * '''specification''' - a stable and mature draft (追記ここまで)
(追記) ** '''preconditions:''' (追記ここまで)
(追記) *** all outstanding **-issues resolved (hit zero issues for a few weeks) (追記ここまで)
(追記) *** 1+ solid real world publisher(s) that (追記ここまで)
(追記) **** are not the editor(s) of the spec (demonstrates some breadth of interest) (追記ここまで)
(追記) **** benefit end users (i.e. not just artificial data published for data's sake) (追記ここまで)
(追記) *** 1+ solid real world consumer(s) that (追記ここまで)
(追記) **** are not the editor(s) of the spec (demonstrates some breadth of interest) (追記ここまで)
(追記) **** successfully consume the microformats published by the publisher(s). (追記ここまで)
(追記) **** provide real world end user benefits / solve use-cases (追記ここまで)
(追記) **** (libraries/opensource are nice as enablers but insufficient for this) (追記ここまで)
(追記) ** '''actions:''' (追記ここまで)
(追記) *** update draft to use specification template (追記ここまで)
(追記) *** create **-examples-in-wild, **-implementations pages to collect them (追記ここまで)
(追記) ** '''means:''' (追記ここまで)
(追記) *** ready for publishers to start depending on (追記ここまで)
(追記) *** ready for consumers to start depending on (追記ここまで)
(追記) ** '''stability:''' (追記ここまで)
(追記) *** minor changes can still occur (追記ここまで)
(追記) *** e.g. dropping of properties and values (e.g. to reach "standard" - see below) (追記ここまで)
(追記) *** iteration based on real-world publisher/consumer experience (追記ここまで)
(追記) ** '''actions:''' (追記ここまで)
(追記) *** encourage widespread adoption by all publishers and consumers (追記ここまで)
(追記) *** evaluate properties published by <2 publishers (追記ここまで)
(追記) *** evaluate properties consumed by <2 consumers (追記ここまで)
(追記) **** such properties block advancement from specification to standard. (追記ここまで)
(追記) **** drop such under-supported property(ies) - insufficient market support to keep them. properties which fail in the real world should be and get dropped (per the simplify [[principle]]). features may be reconsidered for future versions. (追記ここまで)
(追記) **** or wait for more additional publisher(s)/consumer(s) to support them. up to editor's preference. (追記ここまで)
(追記) ** '''example microformats to advance:''' (追記ここまで)
(追記) *** [[hReview]] and [[hAtom]] can become "specifications" with a bit of work: (追記ここまで)
(追記) **** resolve issues, incorporate into spec updates (0.4, 0.2 respectively) (追記ここまで)
(追記) **** *-examples-in-wild *-implementations pages show publisher(s)/consumer(s) support (追記ここまで)
(削除) 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 (削除ここまで).
Before moving to the specifications section(追記) , you must have resolved all outstanding issues. (追記ここまで)
(追記) Then (追記ここまで), drop a note to microformats-(追記) new noting that all issues have been resolved, and encourage discussion (追記ここまで)and major objections. (追記) Since this may elicit additional feedback, allow some time (editor discretion, 3 weeks suggested), for more issues, resolutions, fixes. (追記ここまで)
If none are forthcoming, (追記) suggest moving (追記ここまで)the microformat to the specifications area. (追記) If there is sufficient explicit positive support from the community to do so, then do so. If not, then leave as draft. The absence of feedback is not approval and should be noted instead as a lack of interest. (追記ここまで)
(追記) === Standard === (追記ここまで)
This (追記) is a new document stage to represent not only stability, but market acceptance. (追記ここまで)
(追記) Summary of what is a standard: (追記ここまで)
(追記) * '''standard''' - market proven microformat (追記ここまで)
(追記) ** '''preconditions:''' (追記ここまで)
(追記) *** test suite with 1+ test per feature (e.g. property) (should be easy) (追記ここまで)
(追記) *** 2+ solid real world publishers as defined above for "specification" (追記ここまで)
(追記) *** 2+ solid real world consumers as defined above for "specification" that: (追記ここまで)
(追記) **** pass the test suite tests (追記ここまで)
(追記) **** interoperably consume microformats published by the publishers. (追記ここまで)
(追記) *** each property is published by 2+ of those publishers (追記ここまで)
(追記) *** each property is consumed by 2+ of those consumers (追記ここまで)
(追記) ** '''actions:''' (追記ここまで)
(追記) *** bump the version # to 1.0 (if it isn't there already) (追記ここまで)
(追記) ** '''means:''' (追記ここまで)
(追記) *** the market is interoperably publishing and consuming this microformat (追記ここまで)
(追記) ** '''stability:''' (追記ここまで)
(追記) *** the microformat is considered stable (追記ここまで)
(追記) *** minor errata expected per real world publishing/consuming experience (追記ここまで)
(追記) ** '''example microformats to advance:''' (追記ここまで)
(追記) *** [[hCard]] and [[hCalendar]] can become "standards" with a bit of work: (追記ここまで)
(追記) **** incorporate resolved issues into 1.0.1 releases (use 1.0.1 due to how long we left them a 1.0) (追記ここまで)
(追記) **** write (追記ここまで)up (追記) remaining missing test cases for a full property (not necessarily value) coverage test suite (追記ここまで)
(追記) **** drop insufficiently supported properties (e.g. "class", "key") (追記ここまで)
(追記) ==== documenting implementation support ==== (追記ここまで)
(追記) Ideally implementation support should be documented with '''test suite results''': (追記ここまで)
(追記) * '''implementation test suite report''': list all tests and whether an implementation passes them or not (追記ここまで)
(追記) ** these can be added to entries for each implementation in the '''**-implementations''' wiki page (追記ここまで)
(追記) * '''test suite implementation summary report''': list all tests and implementations that pass each one (追記ここまで)
(追記) ** see the [[value-class-date-time-tests#results|value class pattern date and time test results]] table for an example. (追記ここまで)
(追記) '''Claimed implementation''': it's also useful to document: (追記ここまで)
(追記) * '''what properties/values/features''' an implementation ''claims'' to support (追記ここまで)
(追記) ** with links to supporting documentation from the implementer's site (追記ここまで)
(追記) ** list properties/values an implementation claims to support on the implementation's entry in the '''**-implementations''' wiki page (追記ここまで)
(追記) === related issues questions regarding document stages === (追記ここまで)
(追記) <div class="discussion"> (追記ここまで)
(追記) * '''if/when does it make sense to demote a microformat spec to a lower level?''' (追記ここまで)
(追記) ** '''can a standard be undone?''' we haven't seen (追記ここまで)any (追記) examples of this, but it is certainly possible that a sufficient implementations/publishers of a ''standard'' could disappear until it no longer meets requirements (追記ここまで), (追記) should ( (追記ここまで)and (追記) when should) it be demoted to just a ''specification'' or perhaps even a ''draft''? (追記ここまで)
(追記) ** '''from spec back to draft''' it's possible that implementations or publishers (追記ここまで)may (追記) disappear, (追記ここまで)and (追記) thus what used to qualify as a ''specification'' no longer meets the requirements, when should it be demoted explicitly (追記ここまで)back to (追記) a ''draft''? (追記ここまで)
(追記) *** Can we just mark these as "specification" but also "deprecated"? Possibly with a note that says something along the lines of "this (追記ここまで)draft (追記) is deprecated because of X, Y, Z reasons (追記ここまで). (追記) Returning this specification to a standard requires A, B, C work". I imagine this situation is most likely to arise in the situation that a problem with the standard arose, preventing or reducing implementations, right? [[User:Phae|Phae]] 09:51, 21 September 2011 (UTC) (追記ここまで)
(追記) ** '''archived''' (was: '''undrafts''') e.g. there are plenty of drafts that never got any traction, should we (追記ここまで)have (追記) another category for "uninteresting-draft" that means no one other than (追記ここまで)the (追記) editor(s)/author(s) really cared for it (追記ここまで), (追記) and thus it isn't a priority for (追記ここまで)the (追記) community. maybe we could call these "undrafts" - where drafts go when they don't make it to spec after some amount of (追記ここまで)time(追記) . From there it's probably best (追記ここまで)to (追記) simply use (追記ここまで)them (追記) for more brainstorming, and not encumber any future microformat effort with their legacy. This is likely important to keep the list of drafts as accurate/recent, and will also likely be challenging case-by-case judgment calls. (追記ここまで)
(追記) *** Perhaps rather than ‘undraft’, which is a slightly horrendous word, or ‘uninteresting’ which carries a subjective judgement, we could instead approach this with a kind of archiving strategy. After some period of non-progress/non-involvement/instability a draft becomes ‘Archived’ (or ‘Archived Draft’) to indicate the stagnation. It could become a regular draft again if someone finds it an interesting base. --[[User:BenWard|BenWard]] 00:48, 20 September 2011 (UTC) (追記ここまで)
(追記) **** I know this is super unimportant in the scheme of things, but in my mind, "archive" also tends to suggest old, if not also uninteresting (追記ここまで). (追記) Couldn't they just be "Suggested draft" or something that suggests that they're not necessarily naff (追記ここまで), (追記) they just don't have (追記ここまで)any (追記) friends/evidence/solidified paths yet, but could do if you went and had a look and got on-board with the effort for that draft? Should we have "rejected drafts" for those we really do mean (追記ここまで)to (追記) put down because they've been identified as out of scope etc. [[User:Phae|Phae]] 09:51, 21 September 2011 (UTC) (追記ここまで)
(追記) **** I like the balance struck by "Archived" as suggested by Ben Ward. It's fairly neutral while accurately reflecting an apparent lack of interest (追記ここまで). (追記) "Suggested draft" seems like a stronger endorsement than is deserving, "suggested" that is, seems wrong for something that has clearly been rejected by the community/market. Let's go with "Archived", until/unless someone suggests something better. [[User:Tantek|Tantek]] 00:00, 4 August 2012 (UTC) (追記ここまで)
== Other Documents ==
== Other Documents ==
=== Patterns ===
=== Patterns ===
What about other types of pages on the wiki, like "patterns" (e.g. [[include-pattern]])?
What about other types of pages on the wiki, like "patterns" (e.g. [[include-pattern]])?
Line 129:
Line 339:
The short explanation is this:
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 [[include-pattern|the document]]) "Initially developed as part of resume-brainstorming..." Later, real world examples for reviews were found to need the include pattern as well.
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 [[include-pattern|the document]]) "Initially developed as part of resume-brainstorming..." Later, real world examples for reviews were found to need the include pattern as well.
(追記) When real world examples for ''multiple'' microformats require the solution of the same or a similar problem, then it is worth exploring the creation of a pattern that solves the problem across microformats. (追記ここまで)
(追記) == Other Groups == (追記ここまで)
(追記) Aspects of the microformats process have either inspired and/or been used in their entirety by other groups working on standards/stanardization of features and formats. (追記ここまで)
(追記) * W3C [[HTML]] WG (追記ここまで)
(追記) * [[WHATWG]] (追記ここまで)
(追記) * [https://www.wikidata.org/wiki/Wikidata_talk:Property_proposal#Point_to_existing_use_elsewhere Wikidata Property proposal(s)] (追記ここまで)
== Related ==
== Related ==
(追記) * [[free-specifications]] (追記ここまで)
(追記) * [[process-faq]] (追記ここまで)
(追記) * [[process-issues]] (追記ここまで)
* [[process-brainstorming]]
* [[process-brainstorming]]
Latest revision as of 19:10, 29 November 2022
If this is your first visit, please see the introduction page first.
So you wanna develop a new microformat?
Or just a new vocabulary?
Or create a new standard based on empirical research and scientific methods?
This document will help guide you through the steps to take towards achieving these goals.
The microformats process has been cited as inspiration for other standards groups and efforts such as the WHATWG and ActivityStreams.
- Editor
- Tantek Çelik
Get some experience first
Before even considering pursuing a new microformat, first:
- Make sure your site uses POSH.
- Add existing microformats to your sites like h-card for your contact info, h-event for your events, h-entry for your episodic content (e.g. blogs). See get-started for more specific examples of adding microformats to your sites.
- In particular, start adding microformats2 markup for all your microformats. Any new microformats must use microformats2 - using it will help you become familiar with it.
This will help familiarize you with how POSH and microformats currently work. Such "real world" experience will greatly help you with the development of a new microformat. For more on this see why-using-existing-microformats-matters.
Then, ask yourself:
Why?
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.
Perhaps someone else is pursuing (or has pursued) a similar problem.
Check the exploratory-discussion page, and search around on the web. Chances are that someone else has encountered the same problem as you. There are very few truly new problems.
If you still believe that you have a new and unsolved problem, post a one sentence summary of the problem to the irc channel. If no one answers, perhaps start a page documenting the problem you're solving, then ask again.
It's better to get the community involved in the discussion as the community can help find previous attempts at describing or solving the problem.
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 message on IRC (think tweetsized), and feel like you need a long document, you're probably trying to solve too big of a problem - see previous point about 'is there a simpler problem here?' and simplify until you describe your problem and real world use case in a short paragraph.
What is the use case
Once you've documented the problem, start exploring and documenting additional use-cases that would be addressed/enabled by a solution.
Check Exploratory Discussions For Previous Work
It may be possible that someone else has tried (or is trying to) solve the same real world problems as you.
Check the exploratory-discussions page before starting new pages for your effort to see if you can add to / iterate on an existing effort before creating a new one.
Document Current Behavior
Document examples of current real world human publishing behavior of the type of content you want to mark up in a *-examples wiki page.
Why examples first? Read that. It's important and gets to the core of what makes microformats efforts different than many/most previous/other format development efforts.
We're paving the cowpaths- before you do that you have to find the cowpaths.
By cowpaths here we mean real world publishing examples. Your examples 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 especially the schemas implied therein, and provide analysis.
This collection of examples should be public, preferably on the microformats wiki because it's unlikely you can do it by yourself (no matter how many of you there are), and having others even just check your work will help improve its quality.
The review-examples page is a good example of research done before the creation of a microformat. Before developing hReview, the collaborators went out, documented current practices around reviews on web sites, and provided some analysis of the schemas implied therein.
Note: these examples are about the content (and schemas implied therein) not about formats, class names, pre-existing standards etc. That comes next.
Study the examples and determine the implied (not explicit) schema of data that is being published (the conceptual properties about the data - not literal class names). Sort these by frequency and determine which appear in roughly 80% of cases (per the 80/20 rule, Pareto principle).
If you can't find real world publishing examples of the type of data you want to represent using a microformat, then stop here. It doesn't need a microformat.
Document Previous Formats
Document examples of previous formats related to the problem area in a *-formats wiki page.
Once you've documented real world publishing examples of the kinds of data you want to represent, the next step is to research efforts at developing formats for those kinds of data.
There are almost always previous efforts at formats for whatever kind of data you want to represent using microformats.
Documenting these previous-formats helps in a number of ways:
- explore why previous format(s) succeeded (or didn't)
- avoid (or at least minimize) repeating mistakes of previous formats
- use successful previous formats for interoperability
- provide a source of vocabulary to express a new microformat
In particular, 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, and dominant in their space (there were no competing formats with anywhere near the same levels of adoption).
The developers of those standards had already spent many years in standards committees arguing about and developing their 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 semantic HTML than to develop a new schema.
It's quite possible during this step that you'll find someone else who has dealt with the problem(s) you're addressing. Perhaps even solved it/them. Do your best to open a dialog with others who have encountered the same problem(s). 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.
If you can't find previous efforts at formats for the data you want to microformat, ask in IRC.
Brainstorm Proposals
By now you've researched previous examples and previous formats and you're finally ready to write up brainstorms towards a new microformat in a *-brainstorming wiki page.
Actually, don't!
There are other things to try before developing a microformat. First, ask yourself these questions:
- Is there a standard element in HTML that would work?
- Is there a compound of HTML elements that would work?
If so, document these on the brainstorming page, and stop. There is no need for a microformat.
Let's not unnecessarily reinvent what you can already do with HTML.
For more details on semantic HTML, examples of using HTML elements, and constructing HTML (and XHTML) compounds, see The Elements of Meaningful XHTML.
Otherwise, if you can clearly and confidently answer "no" to the above two questions, we can talk about a microformat.
Before you start your act of creation, familiarize yourself the microformats principles.
There's basically two steps to writing up a brainstorm proposal:
- Go back to that list of real world publishing examples that you researched, and collect the 80/20 of the implied conceptual schema from the examples.
- Give each of those concepts a property name, re-using from, in order:
- existing microformats
- previous formats
- simple but specific human readable English words and phrases
Congratulations, you've written up a brainstorm proposal with a list of class names for a possible microformat.
You may notice that we completely skipped naming the potential new microformat itself. This is not an accident, this is deliberate. Naming is tempting, and good naming is hard. Thus naming is discussed later.
The key is, the explicit schema of the microformat (what properties and hence class names are in it) is more important than the name.
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.
Iterate
Now that you have a simple brainstorm proposal, what do you do?
Iterate. Iterate. Iterate.
In the process of developing a microformat, you'll likely get a lot of feedback from others interested in microformats. The effort needs to be iterated and adapted. Microformat development should be open, and preferably collaborative and community-based.
Here's an ASCII-art flow diagram of where you're going
DIAGRAM:
problem statement---->research/discussion---->proposal/draft---->specification
^________________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.
Feel free to explore multiple proposals one after another on the brainstorming page. The goal here is to explore reasonable microformat solutions, including multiple possibilities, alternatives etc.
Naming considerations
DO NOT start with even labeling your effort "hXYZ". This is a very common mistake.
Always start with the general problem area.
Thus name the problem area (*- pages below) generically and specifically avoid starting with code name / brand name like hNewCoolFormat.
Good: product-examples . Bad: hProduct-examples.
After you've iterated your research and brainstorming at least a bit, you've likely gained sufficient understanding of the problem-space that you're solving to start looking at naming considerations.
Pages to create
After a specific problem area (*) has been determined (principle 1), consider creating and filling out the following pages for it, and add the first to exploratory-discussions. 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 schemas implied by the content examples. This is the action that helps follow principle 3, design for humans first, machines second ... adapt to current behaviors and usage patterns. Start by cloning the examples page and filling it out.
- *-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). See the brainstorming page for a bit more info.
With an 80/20 schema, and a source of field names, write up one or more straw proposals for a microformat in the *-brainstorming page. Make sure the straw proposals encourage the decentralized distribution of data (principle 6). Postpone the choice of root class name as it often overlaps with the naming of the microformat itself. Always keep close at hand the microformats naming principles when choosing names.
Brainstorming about the substance of the microformat (its properties and values) should precede naming the microformat itself. Thus after proposals have been written up and are being discussed for the schema, create a naming section for the microformat itself and root class name, where various names can be considered.
- ** When it seems like there is rough consensus around one of the brainstorm proposals for a microformat with a specific name(**), write it up as a separate wiki page as a draft specification (see style-guide), and then start creating the following pages to track it.
- **-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.
- **-examples Eventually there may be too many real world examples of a microformat to document them in an informative section at the end of the specification, thus the list deserves its own page.
- **-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.
- **-brainstorming Eventually there will be non-trivial proposals/suggestions/clarifications for changes in the microformats as part of iteration. Create such a format specific brainstorming page for such suggestions.
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". Based on feedback we've added a new stage: "Standards".
How do microformats move from one stage to the other?
Exploratory Discussions
Document your problem area, existing research, and brainstorm proposals on the exploratory-discussions page.
You should do it on this wiki using current items under exploratory discussion as a guide.
Then send a note to irc 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 abandon your microformat idea or substantially modify it or add more alternatives to brainstorm proposals to consider.
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.
Drafts
Once there seems to be rough consensus around a particular brainstorm proposal, including a specific schema and list or properties, write that brainstorm proposal into a draft.
Summary of what is a draft:
- draft - experimental new microformat
- preconditions:
- rough consensus has been reached among the various *-brainstorming proposals
- actions:
- determine a name for the new microformat (**)
- write-up consensus brainstorm into a stand-alone draft
- create **-issues page for collecting feedback
- means:
- ready for publishers to start experimenting with on their public pages
- ready for consumers to start experimenting with consuming such publishers
- and both providing feedback for draft iteration accordingly
- stability:
- major changes can still occur
- e.g. add/drop/rename arbitrary features (per research/feedback from publishers/consumers)
Drafts are written up on the wiki using the draft template. Upon writing up a draft, send a note to IRC channel with URL to alert people that something new has happened. Continue encouraging feedback from relevant resources both inside and 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 (preferably PUBLIC DOMAIN) as illustrated by current drafts.
- An XMDP stating explicit property and value names. 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.
- Use of rfc-2119 terms.
- References that back up your design decisions for the microformat. To the extent possible, you do not want to invent things from whole cloth. This should be relatively easy if you have followed the process so far with proper research.
- A list of implementations (if any).
- An issues section for people to feed back to you with detailed objections.
Specifications
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.
This in turn implies that there are at least a couple of sites/implementations that have shown interest beyond the creator/editors of the specification.
Summary of what is a specification:
- specification - a stable and mature draft
- preconditions:
- all outstanding **-issues resolved (hit zero issues for a few weeks)
- 1+ solid real world publisher(s) that
- are not the editor(s) of the spec (demonstrates some breadth of interest)
- benefit end users (i.e. not just artificial data published for data's sake)
- 1+ solid real world consumer(s) that
- are not the editor(s) of the spec (demonstrates some breadth of interest)
- successfully consume the microformats published by the publisher(s).
- provide real world end user benefits / solve use-cases
- (libraries/opensource are nice as enablers but insufficient for this)
- actions:
- update draft to use specification template
- create **-examples-in-wild, **-implementations pages to collect them
- means:
- ready for publishers to start depending on
- ready for consumers to start depending on
- stability:
- minor changes can still occur
- e.g. dropping of properties and values (e.g. to reach "standard" - see below)
- iteration based on real-world publisher/consumer experience
- actions:
- encourage widespread adoption by all publishers and consumers
- evaluate properties published by <2 publishers
- evaluate properties consumed by <2 consumers
- such properties block advancement from specification to standard.
- drop such under-supported property(ies) - insufficient market support to keep them. properties which fail in the real world should be and get dropped (per the simplify principle). features may be reconsidered for future versions.
- or wait for more additional publisher(s)/consumer(s) to support them. up to editor's preference.
- example microformats to advance:
- hReview and hAtom can become "specifications" with a bit of work:
- resolve issues, incorporate into spec updates (0.4, 0.2 respectively)
- *-examples-in-wild *-implementations pages show publisher(s)/consumer(s) support
Before moving to the specifications section, you must have resolved all outstanding issues.
Then, drop a note to microformats-new noting that all issues have been resolved, and encourage discussion and major objections. Since this may elicit additional feedback, allow some time (editor discretion, 3 weeks suggested), for more issues, resolutions, fixes.
If none are forthcoming, suggest moving the microformat to the specifications area. If there is sufficient explicit positive support from the community to do so, then do so. If not, then leave as draft. The absence of feedback is not approval and should be noted instead as a lack of interest.
Standard
This is a new document stage to represent not only stability, but market acceptance.
Summary of what is a standard:
- standard - market proven microformat
- preconditions:
- test suite with 1+ test per feature (e.g. property) (should be easy)
- 2+ solid real world publishers as defined above for "specification"
- 2+ solid real world consumers as defined above for "specification" that:
- pass the test suite tests
- interoperably consume microformats published by the publishers.
- each property is published by 2+ of those publishers
- each property is consumed by 2+ of those consumers
- actions:
- bump the version # to 1.0 (if it isn't there already)
- means:
- the market is interoperably publishing and consuming this microformat
- stability:
- the microformat is considered stable
- minor errata expected per real world publishing/consuming experience
- example microformats to advance:
- hCard and hCalendar can become "standards" with a bit of work:
- incorporate resolved issues into 1.0.1 releases (use 1.0.1 due to how long we left them a 1.0)
- write up remaining missing test cases for a full property (not necessarily value) coverage test suite
- drop insufficiently supported properties (e.g. "class", "key")
documenting implementation support
Ideally implementation support should be documented with test suite results:
- implementation test suite report: list all tests and whether an implementation passes them or not
- these can be added to entries for each implementation in the **-implementations wiki page
- test suite implementation summary report: list all tests and implementations that pass each one
Claimed implementation: it's also useful to document:
- what properties/values/features an implementation claims to support
- with links to supporting documentation from the implementer's site
- list properties/values an implementation claims to support on the implementation's entry in the **-implementations wiki page
related issues questions regarding document stages
- if/when does it make sense to demote a microformat spec to a lower level?
- can a standard be undone? we haven't seen any examples of this, but it is certainly possible that a sufficient implementations/publishers of a standard could disappear until it no longer meets requirements, should (and when should) it be demoted to just a specification or perhaps even a draft?
- from spec back to draft it's possible that implementations or publishers may disappear, and thus what used to qualify as a specification no longer meets the requirements, when should it be demoted explicitly back to a draft?
- Can we just mark these as "specification" but also "deprecated"? Possibly with a note that says something along the lines of "this draft is deprecated because of X, Y, Z reasons. Returning this specification to a standard requires A, B, C work". I imagine this situation is most likely to arise in the situation that a problem with the standard arose, preventing or reducing implementations, right? Phae 09:51, 21 September 2011 (UTC)
- archived (was: undrafts) e.g. there are plenty of drafts that never got any traction, should we have another category for "uninteresting-draft" that means no one other than the editor(s)/author(s) really cared for it, and thus it isn't a priority for the community. maybe we could call these "undrafts" - where drafts go when they don't make it to spec after some amount of time. From there it's probably best to simply use them for more brainstorming, and not encumber any future microformat effort with their legacy. This is likely important to keep the list of drafts as accurate/recent, and will also likely be challenging case-by-case judgment calls.
- Perhaps rather than ‘undraft’, which is a slightly horrendous word, or ‘uninteresting’ which carries a subjective judgement, we could instead approach this with a kind of archiving strategy. After some period of non-progress/non-involvement/instability a draft becomes ‘Archived’ (or ‘Archived Draft’) to indicate the stagnation. It could become a regular draft again if someone finds it an interesting base. --BenWard 00:48, 20 September 2011 (UTC)
- I know this is super unimportant in the scheme of things, but in my mind, "archive" also tends to suggest old, if not also uninteresting. Couldn't they just be "Suggested draft" or something that suggests that they're not necessarily naff, they just don't have any friends/evidence/solidified paths yet, but could do if you went and had a look and got on-board with the effort for that draft? Should we have "rejected drafts" for those we really do mean to put down because they've been identified as out of scope etc. Phae 09:51, 21 September 2011 (UTC)
- I like the balance struck by "Archived" as suggested by Ben Ward. It's fairly neutral while accurately reflecting an apparent lack of interest. "Suggested draft" seems like a stronger endorsement than is deserving, "suggested" that is, seems wrong for something that has clearly been rejected by the community/market. Let's go with "Archived", until/unless someone suggests something better. Tantek 00:00, 4 August 2012 (UTC)
Other Documents
Patterns
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.
When real world examples for multiple microformats require the solution of the same or a similar problem, then it is worth exploring the creation of a pattern that solves the problem across microformats.
Other Groups
Aspects of the microformats process have either inspired and/or been used in their entirety by other groups working on standards/stanardization of features and formats.
Related