parsing-microformats: Difference between revisions
BrettZamir (talk | contribs) (clarification on XQuery and XSL cross-link) |
BrettZamir (talk | contribs) m (→XQuery example: grammar) |
||
Line 52: | Line 52: | ||
For example, this could be used against http://technorati.com/about/contact.html. See [[firefox-extensions#XqUSEme|Firefox extensions]] for getting XQuery in Firefox. | For example, this could be used against http://technorati.com/about/contact.html. See [[firefox-extensions#XqUSEme|Firefox extensions]] for getting XQuery in Firefox. | ||
Note that the 'class' | Note that the 'class' tests above should really use the more complicated XPath expression used within the XSLT example (in order to allow for other classes to be used on the element, variations in whitespace, etc.), but it is simplified above for demonstration purposes. | ||
Simple XPath expressions can also be used, as these are considered to be valid XQueries. | Simple XPath expressions can also be used, as these are considered to be valid XQueries. |
Revision as of 02:03, 21 August 2008
Parsing Microformats
Microformat parsing mechanisms that depend on documents having even minimal xml properties like well-formedness may fail when consuming non-well-formed content. Tidy or even better CyberNeko may be a useful work around. In particular X2V uses XSLT, and tidy to clean any non-well-formed input before processing it.
Parsing class values
When parsing class values care must be taken:
- Class attributes may contain multiple class names, e.g:
class="foo vcard bar"
- Class attributes may contain class names which contain the class name used by a microformat, e.g:
class="foovcardbar"
class="foovcard"
,class="vcardbar"
. - Multiple class names are seperated by one or more whitespace charchters.
- Class names are case sensitive.
See http://www.w3.org/TR/html401/struct/global.html#h-7.5.2.
JavaScript example
The Ultimate getElementsByClassName JavaScript function may be useful. Then you can do:
var adrs = document.getElementsByClassName(document, "*", "adr");
or even:
var cities = document.getElementsByClassName(document, "*", "locality");
XSLT example
<xsl:if test="contains(
concat (' ', normalize-space(@class),' '),
' vcard '
)" > ...
See Firefox extensions for getting XSL transformations in Firefox.
XQuery example
Also using XPath...
<div style="background-color:yellow;"> { for $a in doc()//div[@class='vcard'] let $b := $a/div[@class='fn org' or @class='org fn'] let $c := $a/div[@class='adr'] return ($b, $c, <br />) } </div>
For example, this could be used against http://technorati.com/about/contact.html. See Firefox extensions for getting XQuery in Firefox.
Note that the 'class' tests above should really use the more complicated XPath expression used within the XSLT example (in order to allow for other classes to be used on the element, variations in whitespace, etc.), but it is simplified above for demonstration purposes.
Simple XPath expressions can also be used, as these are considered to be valid XQueries.
Parsing rel/rev values
Parsing rel and rev values is similar to parsing class values except for the following differences:
- rel and rev values should be separated by one space.
- rel and rev values are case insensitive.
See http://www.w3.org/TR/html401/types.html#type-links.