                                    ------
                                    Apache Any23 - Microdata Extractor
                                    ------
                              The Apache Software Foundation
                                    ------
                                     2011-2012

~~  Licensed to the Apache Software Foundation (ASF) under one or more
~~  contributor license agreements.  See the NOTICE file distributed with
~~  this work for additional information regarding copyright ownership.
~~  The ASF licenses this file to You under the Apache License, Version 2.0
~~  (the "License"); you may not use this file except in compliance with
~~  the License.  You may obtain a copy of the License at
~~
~~     http://www.apache.org/licenses/LICENSE-2.0
~~
~~  Unless required by applicable law or agreed to in writing, software
~~  distributed under the License is distributed on an "AS IS" BASIS,
~~  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~~  See the License for the specific language governing permissions and
~~  limitations under the License.

Microdata Extractor

  The <<Microdata>> extractor is compliant with the <<W3C>> draft specification at
  {{{http://www.w3.org/TR/microdata/}http://www.w3.org/TR/microdata/}}.

  Such extractor produces an RDF representation of the detected Microdata 
  within an <<XHTML5>> document, following the algorithm at section
  {{{http://www.w3.org/TR/microdata/#rdf}http://www.w3.org/TR/microdata/#rdf}}.

  It is possible to retrieve the <<JSON>> representation of the same Microdata as defined
  at section {{{http://www.w3.org/TR/microdata/#json}http://www.w3.org/TR/microdata/#json}}
  by using the Microdata commandline tool,
  see {{{./getting-started.html#any23tools_script}Getting Started - Apache Any23 Tools}}.
