<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vhhebbar</id>
	<title>Expertiza_Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.expertiza.ncsu.edu/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Vhhebbar"/>
	<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=Special:Contributions/Vhhebbar"/>
	<updated>2026-08-07T15:03:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=114208</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=114208"/>
		<updated>2017-12-02T07:37:57Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Pull Request Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Pull Request Status'''===&lt;br /&gt;
&lt;br /&gt;
[[File:PR_Update.PNG]]&lt;br /&gt;
&lt;br /&gt;
We have incorporated the review comments and the build was successful. We are waiting for approval from Josh.&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
==='''HTML Specification'''===&lt;br /&gt;
The WHATWG Microdata HTML specification allows web data to be enriched in that it allows machines to learn more about the data in a web page. &lt;br /&gt;
A typical example of real-world use of Microdata is illustrated below&lt;br /&gt;
&lt;br /&gt;
Here is a simple HTML block that has some information about a student. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span&amp;gt;student&amp;lt;/span&amp;gt; at &amp;lt;span&amp;gt;NC State&amp;lt;/span&amp;gt;&lt;br /&gt;
  I live in  &amp;lt;span&amp;gt;&amp;lt;span&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span&amp;gt;NC&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a machine (web parses etc) were to read this block as it is, it would not be able to directly interpret what part of the sentence is a Name or an Address. &lt;br /&gt;
&lt;br /&gt;
This is where Microdata shines. It defines attributes to different parts of the HTML block. Below is the same information with Microdata - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div itemscope itemtype=&amp;quot;http://data-vocabulary.org/Person&amp;quot;&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span itemprop=&amp;quot;name&amp;quot;&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span itemprop=&amp;quot;title&amp;quot;&amp;gt;student&amp;lt;/span&amp;gt; at&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://ncsu.edu&amp;quot; itemprop=&amp;quot;affliation&amp;quot;&amp;gt;NC State&amp;lt;/a&amp;gt;.&lt;br /&gt;
  I live in &amp;lt;span itemprop=&amp;quot;address&amp;quot; itemtype=&amp;quot;http://data-vocabulary.org/Address&amp;quot;&amp;gt;&amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As it is clear, the attributes itemprop and itemtype are used to enrich data: the value '''title''' has been assigned to the word '''student''', the value '''locality''' has been assigned to the state, '''NC'''. &lt;br /&gt;
This way any machine that accesses this HTML can understand the content better. More information about the Microdata specification is available [https://html.spec.whatwg.org/multipage/microdata.html here]. Some popular websites like Google, Skype and Microsoft use the Microdata from websites to provide additional insights. The number of websites that use Microdata is growing; currently about 13% of websites use Microdata (statistics courtesy w3techs.com).It should also be noted that the presence of Microdata does not change how the HTML block looks.&lt;br /&gt;
&lt;br /&gt;
==='''Servo'''===&lt;br /&gt;
Servo is a modern, high-performance browser engine designed for both application and embedded use and written in the Rust programming language.&lt;br /&gt;
It is currently developed on 64bit OS X, 64bit Linux, and Android.&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine. In other words, it is a browser user interface that uses Servo engine, and has different GUIs depending on the system platform. It is also written in the Rust programming language.&lt;br /&gt;
&lt;br /&gt;
==='''Rust'''===&lt;br /&gt;
Rust is a systems programming language, that focuses on safety, speed, and concurrency. Its design lets you create programs that have the performance and control of a low-level language like C, but with the powerful abstractions of a high-level language like Python. Rust performs the majority of its safety checks and memory management decisions at compile time, so that your program’s runtime performance isn’t impacted. This makes it useful in a number of use cases that other languages aren’t good at: programs with predictable space and time requirements, embedding in other languages, and writing low-level code, like device drivers and operating systems.&lt;br /&gt;
&lt;br /&gt;
More information about the Rust programming language is available [https://servo.org here]&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''== &lt;br /&gt;
&lt;br /&gt;
A typical flow for our project is as follows:&lt;br /&gt;
&lt;br /&gt;
1. Detect if microdata attributes are present on the webpage&lt;br /&gt;
&lt;br /&gt;
2. If microdata attributes are present, then extract the microdata attributes in servo engine&lt;br /&gt;
&lt;br /&gt;
3. Serialize the microdata attributes as per appropriate algorithm (vCard or JSON)&lt;br /&gt;
&lt;br /&gt;
4. Send the serialized microdata from servo to servoshell embedder&lt;br /&gt;
&lt;br /&gt;
5. Servoshell acts on the microdata received&lt;br /&gt;
&lt;br /&gt;
Steps 1 and 2 were implemented by us in the previous phase.&lt;br /&gt;
&lt;br /&gt;
The key steps in this project are steps 3 and 4. &lt;br /&gt;
In step 3, we have implemented algorithms to [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard serialize vCard] and [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json serialize JSON data], as per the WHATWG Microdata HTML specification linked&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In step 4, we augmented the communication channel between servo and servoshell to send the microdata attributes. Completion of this step verifies that servo browser now has the capability to extract microdata attributes from a webpage, and perform action based on the type of microdata attribute received.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Consider an HTML page that contains Microdata with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;My vCard&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
          &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Nirav&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;Jain&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
          &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
            &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The serialized vCard for this data should look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN:VCARD&lt;br /&gt;
PROFILE:VCARD&lt;br /&gt;
VERSION:4.0&lt;br /&gt;
SOURCE:http://jainchirag.com/assets/docs/sample.html&lt;br /&gt;
NAME:My Small vCard&lt;br /&gt;
N:Jain;Nirav&lt;br /&gt;
TEL:+1 (919) 000 8888&lt;br /&gt;
END:VCARD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Build'''==&lt;br /&gt;
We have opened our pull request and are working on getting it merged based on the reviews received. Please use our forked repository till the pull request is merged.&lt;br /&gt;
&lt;br /&gt;
Forked repositories: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;https://github.com/CJ8664/servo&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;https://github.com/vjhebbar/servoshell&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clone command using git:&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;git clone https://github.com/CJ8664/servo.git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;git clone https://github.com/vjhebbar/servoshell.git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have the forked repo, please follow steps [https://github.com/vjhebbar/servoshell/blob/master/README.md here] to do a build.&lt;br /&gt;
&lt;br /&gt;
Note that build may take up to 30 minutes, based on your system configuration. You can build on [https://janitor.technology/ Janitor] to reduce the build time.&lt;br /&gt;
&lt;br /&gt;
==='''Building on the cloud'''===&lt;br /&gt;
&lt;br /&gt;
This is the simplest and the fastest way to deploy and test an instance of servo and servoshell. No configuration is required on your machine. &lt;br /&gt;
&lt;br /&gt;
1. Go to &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;http://janitor.technology&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click on '''New Container''' for Servo&lt;br /&gt;
&lt;br /&gt;
3. Enter your email address to gain access to your container&lt;br /&gt;
&lt;br /&gt;
4. Once logged in, go '''Containers''' on the top right. &lt;br /&gt;
&lt;br /&gt;
5. You will now see a container - Click on the '''IDE''' button to open your online IDE environment.&lt;br /&gt;
&lt;br /&gt;
6. Change directory to '''/home/user''' and create a new directory, say '''servo_test'''&lt;br /&gt;
&lt;br /&gt;
7. Go to this new directory and clone our repository as mentioned above&lt;br /&gt;
&lt;br /&gt;
8. Upon cloning you should see a /servo directory within 'servo_test' &lt;br /&gt;
&lt;br /&gt;
9. Go to /servo&lt;br /&gt;
&lt;br /&gt;
10. It is now time to build - run the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach build --dev&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If all goes well you will see a success message - 'Build Completed'&lt;br /&gt;
&lt;br /&gt;
==='''Building locally'''===&lt;br /&gt;
&lt;br /&gt;
Local build instructions for Windows environments are given below - &lt;br /&gt;
&lt;br /&gt;
1. Install Python for Windows (https://www.python.org/downloads/release/python-2714/). &lt;br /&gt;
&lt;br /&gt;
The Windows x86-64 MSI installer is fine. You should change the installation to install the &amp;quot;Add python.exe to Path&amp;quot; feature.&lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv.&lt;br /&gt;
&lt;br /&gt;
In a normal Windows Shell (cmd.exe or &amp;quot;Command Prompt&amp;quot; from the start menu), do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;pip install virtualenv&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this does not work, you may need to reboot for the changed PATH settings (by the python installer) to take effect.&lt;br /&gt;
&lt;br /&gt;
3. Install Git for Windows (https://git-scm.com/download/win). DO allow it to add git.exe to the PATH (default settings for the installer are fine).&lt;br /&gt;
&lt;br /&gt;
4. Install Visual Studio Community 2017 (https://www.visualstudio.com/vs/community/). &lt;br /&gt;
&lt;br /&gt;
You MUST add &amp;quot;Visual C++&amp;quot; to the list of installed components. It is not on by default. Visual Studio 2017 MUST installed to the default location or mach.bat will not find it.&lt;br /&gt;
&lt;br /&gt;
If you encountered errors with the environment above, do the following for a workaround:&lt;br /&gt;
&lt;br /&gt;
Download and install Build Tools for Visual Studio 2017&lt;br /&gt;
&lt;br /&gt;
Install python2.7 x86-x64 and virtualenv&lt;br /&gt;
&lt;br /&gt;
5. Run &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;mach.bat build -d&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; to build&lt;br /&gt;
&lt;br /&gt;
If you have troubles with x64 type prompt as mach.bat set by default:&lt;br /&gt;
&lt;br /&gt;
you may need to choose and launch the type manually, such as x86_x64 Cross Tools Command Prompt for VS 2017 in the Windows menu.)&lt;br /&gt;
&lt;br /&gt;
cd to/the/path/servo&lt;br /&gt;
&lt;br /&gt;
python mach build -d&lt;br /&gt;
&lt;br /&gt;
Build instructions for all other environments are available [https://github.com/servo/servo here]&lt;br /&gt;
&lt;br /&gt;
==='''Verifying a build'''===&lt;br /&gt;
&lt;br /&gt;
We can quickly verify if the servo build is working by running the command &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;'./mach run http://www.google.com'&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will open a browser instance rendering the Google homepage. &lt;br /&gt;
&lt;br /&gt;
This should be straightforward on any environment that has rendering support - Linus, Windows, MacOS, Android&lt;br /&gt;
&lt;br /&gt;
If you are on Janitor environment, it's IDE will not provide rendering support. You might receive an error along the lines of 'No renderer found' upon executing the command.&lt;br /&gt;
&lt;br /&gt;
'''Workaround''': On the 'Container' page on janitor.technology click on '''VNC''' for your container. Click '''Connect''' on the new tab that opens up.&lt;br /&gt;
&lt;br /&gt;
You should now have remote access to a UI with a command line. Simply run the above command and the web page should render.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The design consists of the following procedures - &lt;br /&gt;
&lt;br /&gt;
1) The DOM parser parses the HTML page and adds the microdata elements, along with the other html elements, to the DOM tree.&lt;br /&gt;
&lt;br /&gt;
2) The JSON and vCard extraction algorithms are invoked on the Microdata present in the DOM. &lt;br /&gt;
&lt;br /&gt;
3) These algorithms are executed to convert the Microdata to the respective formats&lt;br /&gt;
&lt;br /&gt;
4) The notification algorithm sends a data structure to notify servoshell that microdata elements exist on the page. &lt;br /&gt;
&lt;br /&gt;
5) Servoshell changes the 'Title' of the page, demonstrating that servoshell has received the JSON/vCard microdata.&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow. &lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata (in a bottom-up manner) sent by servo&lt;br /&gt;
&lt;br /&gt;
[[File:microdata_flow_final_2.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation'''==&lt;br /&gt;
&lt;br /&gt;
The following steps are implemented- &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
===='''Files added'''==== &lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/script/microdata.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Majority of our changes are implemented here in this separate module itself. Functions like parse_json, parse_vcard, traverse are implemented here.&lt;br /&gt;
&lt;br /&gt;
===='''Files changed'''==== &lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/script/dom/document.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Serializing Microdata&lt;br /&gt;
| Calling Microdata::parse(self, htmlelement.unwrap().upcast::&amp;lt;Node&amp;gt;())&lt;br /&gt;
| Microdata::parse is a function implemented by us, that serializes the Microdata as per it's type&lt;br /&gt;
|-&lt;br /&gt;
| Sending microdata to servoshell&lt;br /&gt;
| Calling send_to_constellation(event)&lt;br /&gt;
| We create an event and send it to servoshell using this existing function&lt;br /&gt;
|-&lt;br /&gt;
| Changing 'Title' element in servoshell's UI&lt;br /&gt;
| &lt;br /&gt;
| We simply change the UI element by changing the page's title. Servoshell can basically perform any action as per it's requirement &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/compositing/compositor_thread.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Function definition added&lt;br /&gt;
| SendMicrodata(String, String)&lt;br /&gt;
| Added function to augment the communication channel between servo and servoshell&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/compositing/windowing.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Function declaration added&lt;br /&gt;
| print_microdata(&amp;amp;self, _data: String, _datatype: String) {}&lt;br /&gt;
| Added function declaration to augment the communication channel between servo and servoshell&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/script_traits/script_msg.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Event declaration added&lt;br /&gt;
| SendMicrodata(String, String)&lt;br /&gt;
| Event to send microdata to the embedder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/constellation/constellation.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Function added&lt;br /&gt;
| FromScriptMsg::SendMicrodata(data, datatype)&lt;br /&gt;
| Sends microdata to the embedder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servoshell/src/main.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Updated function&lt;br /&gt;
| Added ServoEvent::PrintMicrodata(data, datatype) to handle_servo_event() &lt;br /&gt;
| Servoshell can perform any action it wants, based on the type of microdata received from servo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servoshell/src/servo.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Implemented function for ServoCallbacks&lt;br /&gt;
| Added print_microdata(&amp;amp;self, data: String, datatype: String)&lt;br /&gt;
| Servo sends multiple events to servoshell which gets queued&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell is tested by populating the title element in servoshell UI with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) says 'Extracted vCard'&lt;br /&gt;
&lt;br /&gt;
[[File:vcard_title_changed.png]]&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we import it using Contacts app on MacOS, note that we can use any other tool that supports VCF and verify whether the individual fields are populated correctly. Some other tools we can use are - Outlook, Windows Contacts, Android Contacts&lt;br /&gt;
&lt;br /&gt;
[[File:vcard_jon_snow_saved.png]]&lt;br /&gt;
&lt;br /&gt;
We have also created automated test cases, to match the expected serialized vCard / JSON strings in test pages that we have created.&lt;br /&gt;
&lt;br /&gt;
[[File:microdata_automated_test.png]]&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample local html page containing variety of microdata is created.&lt;br /&gt;
&lt;br /&gt;
2) A live webpage containing microdata is used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Extracted vCard&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
4. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=114207</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=114207"/>
		<updated>2017-12-02T07:36:49Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==='''Pull Request Status'''===&lt;br /&gt;
&lt;br /&gt;
[[File:PR_Update.PNG]]&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''==&lt;br /&gt;
&lt;br /&gt;
==='''HTML Specification'''===&lt;br /&gt;
The WHATWG Microdata HTML specification allows web data to be enriched in that it allows machines to learn more about the data in a web page. &lt;br /&gt;
A typical example of real-world use of Microdata is illustrated below&lt;br /&gt;
&lt;br /&gt;
Here is a simple HTML block that has some information about a student. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span&amp;gt;student&amp;lt;/span&amp;gt; at &amp;lt;span&amp;gt;NC State&amp;lt;/span&amp;gt;&lt;br /&gt;
  I live in  &amp;lt;span&amp;gt;&amp;lt;span&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span&amp;gt;NC&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a machine (web parses etc) were to read this block as it is, it would not be able to directly interpret what part of the sentence is a Name or an Address. &lt;br /&gt;
&lt;br /&gt;
This is where Microdata shines. It defines attributes to different parts of the HTML block. Below is the same information with Microdata - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div itemscope itemtype=&amp;quot;http://data-vocabulary.org/Person&amp;quot;&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span itemprop=&amp;quot;name&amp;quot;&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span itemprop=&amp;quot;title&amp;quot;&amp;gt;student&amp;lt;/span&amp;gt; at&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://ncsu.edu&amp;quot; itemprop=&amp;quot;affliation&amp;quot;&amp;gt;NC State&amp;lt;/a&amp;gt;.&lt;br /&gt;
  I live in &amp;lt;span itemprop=&amp;quot;address&amp;quot; itemtype=&amp;quot;http://data-vocabulary.org/Address&amp;quot;&amp;gt;&amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As it is clear, the attributes itemprop and itemtype are used to enrich data: the value '''title''' has been assigned to the word '''student''', the value '''locality''' has been assigned to the state, '''NC'''. &lt;br /&gt;
This way any machine that accesses this HTML can understand the content better. More information about the Microdata specification is available [https://html.spec.whatwg.org/multipage/microdata.html here]. Some popular websites like Google, Skype and Microsoft use the Microdata from websites to provide additional insights. The number of websites that use Microdata is growing; currently about 13% of websites use Microdata (statistics courtesy w3techs.com).It should also be noted that the presence of Microdata does not change how the HTML block looks.&lt;br /&gt;
&lt;br /&gt;
==='''Servo'''===&lt;br /&gt;
Servo is a modern, high-performance browser engine designed for both application and embedded use and written in the Rust programming language.&lt;br /&gt;
It is currently developed on 64bit OS X, 64bit Linux, and Android.&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine. In other words, it is a browser user interface that uses Servo engine, and has different GUIs depending on the system platform. It is also written in the Rust programming language.&lt;br /&gt;
&lt;br /&gt;
==='''Rust'''===&lt;br /&gt;
Rust is a systems programming language, that focuses on safety, speed, and concurrency. Its design lets you create programs that have the performance and control of a low-level language like C, but with the powerful abstractions of a high-level language like Python. Rust performs the majority of its safety checks and memory management decisions at compile time, so that your program’s runtime performance isn’t impacted. This makes it useful in a number of use cases that other languages aren’t good at: programs with predictable space and time requirements, embedding in other languages, and writing low-level code, like device drivers and operating systems.&lt;br /&gt;
&lt;br /&gt;
More information about the Rust programming language is available [https://servo.org here]&lt;br /&gt;
&lt;br /&gt;
=='''Overview'''== &lt;br /&gt;
&lt;br /&gt;
A typical flow for our project is as follows:&lt;br /&gt;
&lt;br /&gt;
1. Detect if microdata attributes are present on the webpage&lt;br /&gt;
&lt;br /&gt;
2. If microdata attributes are present, then extract the microdata attributes in servo engine&lt;br /&gt;
&lt;br /&gt;
3. Serialize the microdata attributes as per appropriate algorithm (vCard or JSON)&lt;br /&gt;
&lt;br /&gt;
4. Send the serialized microdata from servo to servoshell embedder&lt;br /&gt;
&lt;br /&gt;
5. Servoshell acts on the microdata received&lt;br /&gt;
&lt;br /&gt;
Steps 1 and 2 were implemented by us in the previous phase.&lt;br /&gt;
&lt;br /&gt;
The key steps in this project are steps 3 and 4. &lt;br /&gt;
In step 3, we have implemented algorithms to [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard serialize vCard] and [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json serialize JSON data], as per the WHATWG Microdata HTML specification linked&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
In step 4, we augmented the communication channel between servo and servoshell to send the microdata attributes. Completion of this step verifies that servo browser now has the capability to extract microdata attributes from a webpage, and perform action based on the type of microdata attribute received.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
Consider an HTML page that contains Microdata with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
  &amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;My vCard&amp;lt;/title&amp;gt;&lt;br /&gt;
  &amp;lt;/head&amp;gt;&lt;br /&gt;
  &amp;lt;body&amp;gt;&lt;br /&gt;
    &amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
      &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
          &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Nirav&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;Jain&amp;lt;/span&amp;gt;&lt;br /&gt;
        &amp;lt;/span&amp;gt;&lt;br /&gt;
      &amp;lt;/h1&amp;gt;&lt;br /&gt;
      &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
      &amp;lt;div&amp;gt;&lt;br /&gt;
        &amp;lt;ul&amp;gt;&lt;br /&gt;
          &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
            &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt;&lt;br /&gt;
            &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
          &amp;lt;/li&amp;gt;&lt;br /&gt;
        &amp;lt;/ul&amp;gt;&lt;br /&gt;
      &amp;lt;/div&amp;gt;&lt;br /&gt;
    &amp;lt;/section&amp;gt;&lt;br /&gt;
  &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The serialized vCard for this data should look like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
BEGIN:VCARD&lt;br /&gt;
PROFILE:VCARD&lt;br /&gt;
VERSION:4.0&lt;br /&gt;
SOURCE:http://jainchirag.com/assets/docs/sample.html&lt;br /&gt;
NAME:My Small vCard&lt;br /&gt;
N:Jain;Nirav&lt;br /&gt;
TEL:+1 (919) 000 8888&lt;br /&gt;
END:VCARD&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Build'''==&lt;br /&gt;
We have opened our pull request and are working on getting it merged based on the reviews received. Please use our forked repository till the pull request is merged.&lt;br /&gt;
&lt;br /&gt;
Forked repositories: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;https://github.com/CJ8664/servo&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;https://github.com/vjhebbar/servoshell&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clone command using git:&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;git clone https://github.com/CJ8664/servo.git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;git clone https://github.com/vjhebbar/servoshell.git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have the forked repo, please follow steps [https://github.com/vjhebbar/servoshell/blob/master/README.md here] to do a build.&lt;br /&gt;
&lt;br /&gt;
Note that build may take up to 30 minutes, based on your system configuration. You can build on [https://janitor.technology/ Janitor] to reduce the build time.&lt;br /&gt;
&lt;br /&gt;
==='''Building on the cloud'''===&lt;br /&gt;
&lt;br /&gt;
This is the simplest and the fastest way to deploy and test an instance of servo and servoshell. No configuration is required on your machine. &lt;br /&gt;
&lt;br /&gt;
1. Go to &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;http://janitor.technology&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click on '''New Container''' for Servo&lt;br /&gt;
&lt;br /&gt;
3. Enter your email address to gain access to your container&lt;br /&gt;
&lt;br /&gt;
4. Once logged in, go '''Containers''' on the top right. &lt;br /&gt;
&lt;br /&gt;
5. You will now see a container - Click on the '''IDE''' button to open your online IDE environment.&lt;br /&gt;
&lt;br /&gt;
6. Change directory to '''/home/user''' and create a new directory, say '''servo_test'''&lt;br /&gt;
&lt;br /&gt;
7. Go to this new directory and clone our repository as mentioned above&lt;br /&gt;
&lt;br /&gt;
8. Upon cloning you should see a /servo directory within 'servo_test' &lt;br /&gt;
&lt;br /&gt;
9. Go to /servo&lt;br /&gt;
&lt;br /&gt;
10. It is now time to build - run the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach build --dev&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If all goes well you will see a success message - 'Build Completed'&lt;br /&gt;
&lt;br /&gt;
==='''Building locally'''===&lt;br /&gt;
&lt;br /&gt;
Local build instructions for Windows environments are given below - &lt;br /&gt;
&lt;br /&gt;
1. Install Python for Windows (https://www.python.org/downloads/release/python-2714/). &lt;br /&gt;
&lt;br /&gt;
The Windows x86-64 MSI installer is fine. You should change the installation to install the &amp;quot;Add python.exe to Path&amp;quot; feature.&lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv.&lt;br /&gt;
&lt;br /&gt;
In a normal Windows Shell (cmd.exe or &amp;quot;Command Prompt&amp;quot; from the start menu), do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;pip install virtualenv&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this does not work, you may need to reboot for the changed PATH settings (by the python installer) to take effect.&lt;br /&gt;
&lt;br /&gt;
3. Install Git for Windows (https://git-scm.com/download/win). DO allow it to add git.exe to the PATH (default settings for the installer are fine).&lt;br /&gt;
&lt;br /&gt;
4. Install Visual Studio Community 2017 (https://www.visualstudio.com/vs/community/). &lt;br /&gt;
&lt;br /&gt;
You MUST add &amp;quot;Visual C++&amp;quot; to the list of installed components. It is not on by default. Visual Studio 2017 MUST installed to the default location or mach.bat will not find it.&lt;br /&gt;
&lt;br /&gt;
If you encountered errors with the environment above, do the following for a workaround:&lt;br /&gt;
&lt;br /&gt;
Download and install Build Tools for Visual Studio 2017&lt;br /&gt;
&lt;br /&gt;
Install python2.7 x86-x64 and virtualenv&lt;br /&gt;
&lt;br /&gt;
5. Run &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;mach.bat build -d&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; to build&lt;br /&gt;
&lt;br /&gt;
If you have troubles with x64 type prompt as mach.bat set by default:&lt;br /&gt;
&lt;br /&gt;
you may need to choose and launch the type manually, such as x86_x64 Cross Tools Command Prompt for VS 2017 in the Windows menu.)&lt;br /&gt;
&lt;br /&gt;
cd to/the/path/servo&lt;br /&gt;
&lt;br /&gt;
python mach build -d&lt;br /&gt;
&lt;br /&gt;
Build instructions for all other environments are available [https://github.com/servo/servo here]&lt;br /&gt;
&lt;br /&gt;
==='''Verifying a build'''===&lt;br /&gt;
&lt;br /&gt;
We can quickly verify if the servo build is working by running the command &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;'./mach run http://www.google.com'&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will open a browser instance rendering the Google homepage. &lt;br /&gt;
&lt;br /&gt;
This should be straightforward on any environment that has rendering support - Linus, Windows, MacOS, Android&lt;br /&gt;
&lt;br /&gt;
If you are on Janitor environment, it's IDE will not provide rendering support. You might receive an error along the lines of 'No renderer found' upon executing the command.&lt;br /&gt;
&lt;br /&gt;
'''Workaround''': On the 'Container' page on janitor.technology click on '''VNC''' for your container. Click '''Connect''' on the new tab that opens up.&lt;br /&gt;
&lt;br /&gt;
You should now have remote access to a UI with a command line. Simply run the above command and the web page should render.&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The design consists of the following procedures - &lt;br /&gt;
&lt;br /&gt;
1) The DOM parser parses the HTML page and adds the microdata elements, along with the other html elements, to the DOM tree.&lt;br /&gt;
&lt;br /&gt;
2) The JSON and vCard extraction algorithms are invoked on the Microdata present in the DOM. &lt;br /&gt;
&lt;br /&gt;
3) These algorithms are executed to convert the Microdata to the respective formats&lt;br /&gt;
&lt;br /&gt;
4) The notification algorithm sends a data structure to notify servoshell that microdata elements exist on the page. &lt;br /&gt;
&lt;br /&gt;
5) Servoshell changes the 'Title' of the page, demonstrating that servoshell has received the JSON/vCard microdata.&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow. &lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata (in a bottom-up manner) sent by servo&lt;br /&gt;
&lt;br /&gt;
[[File:microdata_flow_final_2.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation'''==&lt;br /&gt;
&lt;br /&gt;
The following steps are implemented- &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
===='''Files added'''==== &lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/script/microdata.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Majority of our changes are implemented here in this separate module itself. Functions like parse_json, parse_vcard, traverse are implemented here.&lt;br /&gt;
&lt;br /&gt;
===='''Files changed'''==== &lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/script/dom/document.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Serializing Microdata&lt;br /&gt;
| Calling Microdata::parse(self, htmlelement.unwrap().upcast::&amp;lt;Node&amp;gt;())&lt;br /&gt;
| Microdata::parse is a function implemented by us, that serializes the Microdata as per it's type&lt;br /&gt;
|-&lt;br /&gt;
| Sending microdata to servoshell&lt;br /&gt;
| Calling send_to_constellation(event)&lt;br /&gt;
| We create an event and send it to servoshell using this existing function&lt;br /&gt;
|-&lt;br /&gt;
| Changing 'Title' element in servoshell's UI&lt;br /&gt;
| &lt;br /&gt;
| We simply change the UI element by changing the page's title. Servoshell can basically perform any action as per it's requirement &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/compositing/compositor_thread.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Function definition added&lt;br /&gt;
| SendMicrodata(String, String)&lt;br /&gt;
| Added function to augment the communication channel between servo and servoshell&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/compositing/windowing.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Function declaration added&lt;br /&gt;
| print_microdata(&amp;amp;self, _data: String, _datatype: String) {}&lt;br /&gt;
| Added function declaration to augment the communication channel between servo and servoshell&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/script_traits/script_msg.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Event declaration added&lt;br /&gt;
| SendMicrodata(String, String)&lt;br /&gt;
| Event to send microdata to the embedder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servo/components/constellation/constellation.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Function added&lt;br /&gt;
| FromScriptMsg::SendMicrodata(data, datatype)&lt;br /&gt;
| Sends microdata to the embedder&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servoshell/src/main.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Updated function&lt;br /&gt;
| Added ServoEvent::PrintMicrodata(data, datatype) to handle_servo_event() &lt;br /&gt;
| Servoshell can perform any action it wants, based on the type of microdata received from servo&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Filename: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;servoshell/src/servo.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Changes made&lt;br /&gt;
! Function&lt;br /&gt;
! Description &lt;br /&gt;
|-&lt;br /&gt;
| Implemented function for ServoCallbacks&lt;br /&gt;
| Added print_microdata(&amp;amp;self, data: String, datatype: String)&lt;br /&gt;
| Servo sends multiple events to servoshell which gets queued&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell is tested by populating the title element in servoshell UI with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) says 'Extracted vCard'&lt;br /&gt;
&lt;br /&gt;
[[File:vcard_title_changed.png]]&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we import it using Contacts app on MacOS, note that we can use any other tool that supports VCF and verify whether the individual fields are populated correctly. Some other tools we can use are - Outlook, Windows Contacts, Android Contacts&lt;br /&gt;
&lt;br /&gt;
[[File:vcard_jon_snow_saved.png]]&lt;br /&gt;
&lt;br /&gt;
We have also created automated test cases, to match the expected serialized vCard / JSON strings in test pages that we have created.&lt;br /&gt;
&lt;br /&gt;
[[File:microdata_automated_test.png]]&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample local html page containing variety of microdata is created.&lt;br /&gt;
&lt;br /&gt;
2) A live webpage containing microdata is used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Extracted vCard&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
4. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:PR_Update.PNG&amp;diff=114204</id>
		<title>File:PR Update.PNG</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:PR_Update.PNG&amp;diff=114204"/>
		<updated>2017-12-02T07:32:26Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113291</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113291"/>
		<updated>2017-11-14T21:43:03Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a mock up of data and the front end modifications that summarize what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
The mock sequence for the generation of the JSON file is similar: instead of saving as a VCF, a JSON file would be saved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The design consists of the following procedures - &lt;br /&gt;
&lt;br /&gt;
1) The DOM parser parses the HTML page and adds the microdata elements, along with the other html elements, to the DOM tree.&lt;br /&gt;
&lt;br /&gt;
2) The JSON and vCard extraction algorithms are invoked based on the type of Microdata present in the DOM. &lt;br /&gt;
&lt;br /&gt;
3) These algorithms are executed to convert the Microdata to the respective formats&lt;br /&gt;
&lt;br /&gt;
4) The notification algorithm sends a data structure to notify servoshell that microdata elements exist on the page. &lt;br /&gt;
&lt;br /&gt;
5) Servoshell activates certain UI elements based on the notification. These elements allow us to download the converted microdata as JSON/vCard&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow. &lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata (in a bottom-up manner)&lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell would be tested by populating certain servoshell UI elements with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) would say something along the lines of 'Microdata found'.&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we will import it using a tool that supports VCF and verify whether the individual fields are populated correctly. Some candidate VCF client applications include - Outlook, Windows Contacts, Android Contacts, Contacts app on MacOS. &lt;br /&gt;
&lt;br /&gt;
As for JSON, we plan to build test scripts that query the JSON object with each microdata key. The value returned from the JSON is compared with the expected microdata property value in the DOM.&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample html pages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Microdata detected&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113287</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113287"/>
		<updated>2017-11-14T21:41:16Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a mock up of data and the front end modifications that summarize what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
The mock sequence for the generation of the JSON file is similar: instead of saving as a VCF, a JSON file would be saved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow. &lt;br /&gt;
&lt;br /&gt;
The following steps are performed&lt;br /&gt;
&lt;br /&gt;
1) The DOM parser parses the HTML page and adds the microdata elements, along with the other html elements, to the DOM tree.&lt;br /&gt;
&lt;br /&gt;
2) The JSON and vCard extraction algorithms are invoked based on the type of Microdata present in the DOM. &lt;br /&gt;
&lt;br /&gt;
3) These algorithms are executed to convert the Microdata to the respective formats&lt;br /&gt;
&lt;br /&gt;
4) The notification algorithm sends a data structure to notify servoshell that microdata elements exist on the page. &lt;br /&gt;
&lt;br /&gt;
5) Servoshell activates certain UI elements based on the notification. These elements allow us to download the converted microdata as JSON/vCard&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata (in a bottom-up manner)&lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell would be tested by populating certain servoshell UI elements with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) would say something along the lines of 'Microdata found'.&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we will import it using a tool that supports VCF and verify whether the individual fields are populated correctly. Some candidate VCF client applications include - Outlook, Windows Contacts, Android Contacts, Contacts app on MacOS. &lt;br /&gt;
&lt;br /&gt;
As for JSON, we plan to build test scripts that query the JSON object with each microdata key. The value returned from the JSON is compared with the expected microdata property value in the DOM.&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample html pages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Microdata detected&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113280</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113280"/>
		<updated>2017-11-14T21:36:14Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a mock up of data and the front end modifications that summarize what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
The mock sequence for the generation of the JSON file is similar: instead of saving as a VCF, a JSON file would be saved.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell would be tested by populating certain servoshell UI elements with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) would say something along the lines of 'Microdata found'.&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we will import it using a tool that supports VCF and verify whether the individual fields are populated correctly. Some candidate VCF client applications include - Outlook, Windows Contacts, Android Contacts, Contacts app on MacOS. &lt;br /&gt;
&lt;br /&gt;
As for JSON, we plan to build test scripts that query the JSON object with each microdata key. The value returned from the JSON is compared with the expected microdata property value in the DOM.&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample html pages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Microdata detected&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113279</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113279"/>
		<updated>2017-11-14T21:35:52Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a mock up of data and the front end modifications that summarize what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell would be tested by populating certain servoshell UI elements with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) would say something along the lines of 'Microdata found'.&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we will import it using a tool that supports VCF and verify whether the individual fields are populated correctly. Some candidate VCF client applications include - Outlook, Windows Contacts, Android Contacts, Contacts app on MacOS. &lt;br /&gt;
&lt;br /&gt;
As for JSON, we plan to build test scripts that query the JSON object with each microdata key. The value returned from the JSON is compared with the expected microdata property value in the DOM.&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample html pages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Microdata detected&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113277</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113277"/>
		<updated>2017-11-14T21:32:59Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a mockup of sequence that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata, in this case vCard specific microdata, and allow us to save it as a vCard file. &lt;br /&gt;
For example, if a user browses a webpage with microdata that supports vCard download, a notification would be shown on the front end. The user would then be able to SAVE and VIEW the vCard file.&lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
The mock sequence for the generation of the JSON file is similar: instead of saving as a VCF, a JSON file would be saved.&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113276</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113276"/>
		<updated>2017-11-14T21:31:46Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a mockup of sequence that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata, in this case vCard specific microdata, and allow us to save it as a vCard file. &lt;br /&gt;
For example, if a user browses a webpage with microdata that supports vCard download, a notification would be shown on the front end. The user would then be able to SAVE and VIEW the vCard file.&lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113126</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113126"/>
		<updated>2017-11-13T22:30:19Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Testing Approach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell would be tested by populating certain servoshell UI elements with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) would say something along the lines of 'Microdata found'.&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we will import it using a tool that supports VCF and verify whether the individual fields are populated correctly. Some candidate VCF client applications include - Outlook, Windows Contacts, Android Contacts, Contacts app on MacOS. &lt;br /&gt;
&lt;br /&gt;
As for JSON, we plan to build test scripts that query the JSON object with each microdata key. The value returned from the JSON is compared with the expected microdata property value in the DOM.&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample html pages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Microdata detected&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113125</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113125"/>
		<updated>2017-11-13T22:28:25Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell would be tested by populating certain servoshell UI elements with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) would say something along the lines of 'Microdata found'.&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we will import it using a tool that supports VCF and verify whether the individual fields are populated correctly. Some candidate VCF client applications include - Outlook, Windows Contacts, Android Contacts, Contacts app on MacOS. &lt;br /&gt;
As for JSON, we plan to build test scripts that query the JSON object with each microdata key. The value returned from the JSON is compared with the expected microdata property value in the DOM.&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample html pages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Microdata detected&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113124</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113124"/>
		<updated>2017-11-13T22:27:35Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell would be tested by populating certain servoshell UI elements with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) would say something along the lines of 'Microdata found'.&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we will import it using a tool that supports VCF and verify whether the individual fields are populated correctly. Some candidate VCF client applications include - Outlook, Windows Contacts, Android Contacts, Contacts app on MacOS. &lt;br /&gt;
As for JSON, we plan to build test scripts that query the JSON object with each microdata key. The value returned from the JSON is compared with the expected microdata property value in the DOM.&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample html pages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Microdata detected&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113123</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113123"/>
		<updated>2017-11-13T22:26:25Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell would be tested by populating certain servoshell UI elements with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) would say something along the lines of 'Microdata found'.&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we will import it using a tool that supports VCF and verify whether the individual fields are populated correctly. Some candidate VCF client applications include - Outlook, Windows Contacts, Android Contacts, Contacts app on MacOS. &lt;br /&gt;
As for JSON, we plan to build test scripts that query the JSON object with each microdata key. The value returned from the JSON is compared with the expected microdata property value in the DOM.&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample html pages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Microdata detected&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113122</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113122"/>
		<updated>2017-11-13T22:25:43Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Test Scenarios */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell would be tested by populating certain servoshell UI elements with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) would say something along the lines of 'Microdata found'.&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we will import it using a tool that supports VCF and verify whether the individual fields are populated correctly. Some candidate VCF client applications include - Outlook, Windows Contacts, Android Contacts, Contacts app on MacOS. &lt;br /&gt;
As for JSON, we plan to build test scripts that query the JSON object with each microdata key. The value returned from the JSON is compared with the expected microdata property value in the DOM.&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample html pages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Microdata detected&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113121</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113121"/>
		<updated>2017-11-13T22:25:13Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell would be tested by populating certain servoshell UI elements with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title (Not the HTML title!) would say something along the lines of 'Microdata found'.&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we will import it using a tool that supports VCF and verify whether the individual fields are populated correctly. Some candidate VCF client applications include - Outlook, Windows Contacts, Android Contacts, Contacts app on MacOS. &lt;br /&gt;
As for JSON, we plan to build test scripts that query the JSON object with each microdata key. The value returned from the JSON is compared with the expected microdata property value in the DOM.&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample html pages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Microdata detected&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113120</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113120"/>
		<updated>2017-11-13T22:23:06Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The interaction between servo and servoshell would be tested by populating certain servoshell UI elements with values if microdata is detected. For example, if a webpage contains microdata, the servoshell tab title would say something along the lines of 'Microdata found'.&lt;br /&gt;
&lt;br /&gt;
For verifying the validity of the VCF file that is downloaded, we will import it using a tool that supports VCF and verify whether the individual fields are populated correctly. Some candidate VCF client applications include - Outlook, Windows Contacts, Android Contacts, Contacts app on MacOS. &lt;br /&gt;
As for JSON, we plan to build test scripts that query the JSON object with each microdata key. The value returned from the JSON is compared with the expected microdata property value in the DOM.&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample html pages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Verify if the servoshell tab title shows - Microdata detected&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing vCard related microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Import it using an external contacts application that supports VCF and note the results.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON file'''&lt;br /&gt;
&lt;br /&gt;
1. Open a webpage containing microdata&lt;br /&gt;
&lt;br /&gt;
2. Download it using the servoshell&lt;br /&gt;
&lt;br /&gt;
3. Verify using the test script&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113119</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113119"/>
		<updated>2017-11-13T22:12:16Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Testing Approach */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The testing approach is similar to the approach adopted in phase 1. testharness.js would be used as the testing framework. It allows us to query the DOM right from the HTML page. We would then look for the existence of certain&lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample webpages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a &lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard generation'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON generation algorithm'''&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113118</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113118"/>
		<updated>2017-11-13T22:06:39Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The testing approach is similar to the approach adopted in phase 1. &lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample webpages containing variety of microdata would be created.&lt;br /&gt;
&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Scenarios===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
1. Open a &lt;br /&gt;
&lt;br /&gt;
2.&lt;br /&gt;
&lt;br /&gt;
3.&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard generation'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON generation algorithm'''&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113117</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113117"/>
		<updated>2017-11-13T22:03:55Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Test Plan */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
===Testing Approach===&lt;br /&gt;
&lt;br /&gt;
The testing approach is similar to the approach adopted in phase 1. &lt;br /&gt;
&lt;br /&gt;
===Test Data===&lt;br /&gt;
&lt;br /&gt;
1) Sample webpages containing variety of microdata would be created.&lt;br /&gt;
2) Webpages across the internet containing microdata would also be used.&lt;br /&gt;
&lt;br /&gt;
===Test Cases===&lt;br /&gt;
&lt;br /&gt;
'''Testing the interaction between servo and servoshell'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testing the vCard generation'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testing JSON generation algorithm'''&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113115</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113115"/>
		<updated>2017-11-13T21:22:10Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113114</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113114"/>
		<updated>2017-11-13T21:21:26Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. The implementation will allow the front end to detect the presence of microdata. If vCard specific microdata is found, the user would be able to download this data as a vCard File (VCF), For any other microdata a JSON would be available for download.&lt;br /&gt;
The below mock diagram illustrates this process. &lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113113</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113113"/>
		<updated>2017-11-13T21:18:26Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Our implementation will allow the front end to detect the presence of microdata, in this case vCard specific microdata, and allow us to save it as a vCard file. &lt;br /&gt;
For example, if a user browses a webpage with microdata that supports vCard download, a notification would be shown on the front end. The user would then be able to download and view the vCard file.&lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113109</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113109"/>
		<updated>2017-11-13T21:09:32Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Our implementation will allow the front end to detect the presence of microdata, in this case vCard specific microdata, and allow us to save it as a vCard file. &lt;br /&gt;
For example, if a user browses a webpage with microdata that supports vCard download, a notification would be shown on the front end. The user would then be able to download(2) and view(3) the vCard file.&lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113108</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=113108"/>
		<updated>2017-11-13T21:09:17Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Our implementation will allow the front end to detect the presence of microdata, in this case vCard specific microdata, and allow us to save it as a vCard file. &lt;br /&gt;
For example, if a user browses a webpage with microdata that supports vCard download, a notification would be shown on the front end. The user would then be able to download(2) and view(3) the vCard file.&lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113107</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113107"/>
		<updated>2017-11-13T21:07:46Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Our implementation will allow the front end to detect the presence of microdata, in this case vCard specific microdata, and allow us to save it as a vCard file. &lt;br /&gt;
For example, if a user browses a webpage with microdata that supports vCard download, a notification would be shown on the front end. The user would then be able to download(2) and view(3) the vCard file.&lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:ContactSaved.jpg&amp;diff=113106</id>
		<title>File:ContactSaved.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:ContactSaved.jpg&amp;diff=113106"/>
		<updated>2017-11-13T21:07:08Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: uploaded a new version of &amp;amp;quot;File:ContactSaved.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113105</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113105"/>
		<updated>2017-11-13T21:06:10Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Our implementation will allow the front end to detect the presence of microdata, in this case vCard specific microdata, and allow us to save it as a vCard file. &lt;br /&gt;
For example, if a user browses a webpage with microdata that supports vCard download, a notification would be shown on the front end. The user would then be able to download(2) and view(3) the vCard file.&lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
[[File:ContactSaved.jpg]]&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Mock_final.jpg&amp;diff=113104</id>
		<title>File:Mock final.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Mock_final.jpg&amp;diff=113104"/>
		<updated>2017-11-13T21:05:12Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: uploaded a new version of &amp;amp;quot;File:Mock final.jpg&amp;amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113101</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113101"/>
		<updated>2017-11-13T20:58:47Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Our implementation will allow the front end to detect the presence of microdata, in this case vCard specific microdata, and allow us to save it as a vCard file. &lt;br /&gt;
For example, if a user browses a webpage with microdata that supports vCard download, a notification would be shown on the front end. The user would then be able to download(2) and view(3) the vCard file.&lt;br /&gt;
&lt;br /&gt;
[[File:Mock_final.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:ContactSaved.jpg&amp;diff=113099</id>
		<title>File:ContactSaved.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:ContactSaved.jpg&amp;diff=113099"/>
		<updated>2017-11-13T20:53:29Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=File:Mock_final.jpg&amp;diff=113098</id>
		<title>File:Mock final.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=File:Mock_final.jpg&amp;diff=113098"/>
		<updated>2017-11-13T20:53:15Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113096</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113096"/>
		<updated>2017-11-13T20:36:56Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
2. Our implementation will allow the front end to detect the presence of microdata, in this case vCard specific microdata, and allow us to save it as a vCard file. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113095</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113095"/>
		<updated>2017-11-13T20:36:33Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Consider an HTML page that contains MicroData with contact details.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Our implementation will allow the front end to detect the presence of microdata, in this case vCard specific microdata, and allow us to save it as a vCard file. &lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. The VCF (vCard File) can now be imported into the Contacts application in the operating system.&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113085</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113085"/>
		<updated>2017-11-13T20:26:53Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
1. Source of the HTML page that contains microdata &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;section id=&amp;quot;user&amp;quot; itemscope itemtype=&amp;quot;http://microformats.org/profile/hcard&amp;quot; &amp;gt;&lt;br /&gt;
 &amp;lt;h1 itemprop=&amp;quot;fn&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;n&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;given-name&amp;quot;&amp;gt;Servo&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;family-name&amp;quot;&amp;gt;User&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/h1&amp;gt;&lt;br /&gt;
 &amp;lt;img itemprop=&amp;quot;photo&amp;quot; alt=&amp;quot;&amp;quot; src=&amp;quot;jack-bauer.jpg&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p itemprop=&amp;quot;org&amp;quot; itemscope&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;organization-name&amp;quot;&amp;gt;NCSU&amp;lt;/span&amp;gt;&lt;br /&gt;
  (&amp;lt;span itemprop=&amp;quot;organization-unit&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;)&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;adr&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;street-address&amp;quot;&amp;gt;123 Some Street&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;postal-code&amp;quot;&amp;gt;27606&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;country-name&amp;quot;&amp;gt;United States&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;geo&amp;quot;&amp;gt;35.8436867;-78.7851416&amp;lt;/span&amp;gt;&lt;br /&gt;
 &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;h2&amp;gt;Assorted Contact Methods&amp;lt;/h2&amp;gt;&lt;br /&gt;
 &amp;lt;div&amp;gt;&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;work&amp;lt;/span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;voice&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;https://en.wikipedia.org/wiki/Servo&amp;quot;&amp;gt;Servo is on Wikipedia&amp;lt;/a&amp;gt;&lt;br /&gt;
  Get to know servo better!&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;&amp;lt;a itemprop=&amp;quot;url&amp;quot; href=&amp;quot;http://www.servo.org/&amp;quot;&amp;gt;Servo Official Page&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;email&amp;quot;&amp;gt;&amp;lt;a href=&amp;quot;mailto:servo_user@somedomain.com&amp;quot;&amp;gt;servo_user@somedomain.com&amp;lt;/a&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&lt;br /&gt;
   &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;+1 (919) 000 8888&amp;lt;/span&amp;gt; &amp;lt;span&amp;gt;&lt;br /&gt;
   &amp;lt;meta itemprop=&amp;quot;type&amp;quot; content=&amp;quot;cell&amp;quot;&amp;gt;mobile phone&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;/ul&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
 &amp;lt;ins datetime=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;meta itemprop=&amp;quot;rev&amp;quot; content=&amp;quot;2008-07-20 21:00:00+01:00&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;p itemprop=&amp;quot;tel&amp;quot; itemscope&amp;gt;&amp;lt;strong&amp;gt;Update!&amp;lt;/strong&amp;gt;&lt;br /&gt;
  My new &amp;lt;span itemprop=&amp;quot;type&amp;quot;&amp;gt;home&amp;lt;/span&amp;gt; phone number is&lt;br /&gt;
  &amp;lt;span itemprop=&amp;quot;value&amp;quot;&amp;gt;12345678&amp;lt;/span&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;/ins&amp;gt;&lt;br /&gt;
&amp;lt;/section&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113081</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113081"/>
		<updated>2017-11-13T20:19:32Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Mocksups */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mockups'''==&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113048</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113048"/>
		<updated>2017-11-13T18:55:06Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
Below is a sample mockup of servoshell that summarizes what we want to achieve in this project&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mocksups'''==&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113046</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113046"/>
		<updated>2017-11-13T18:51:26Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
The goal of this project is to use the microdata compatibility we built in the previous phase, to allow a front end - servoshell, to detect and act on the presence of microdata.&lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=='''Mocksups'''==&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113043</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API Phase 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API_Phase_2&amp;diff=113043"/>
		<updated>2017-11-13T18:43:17Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:Flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API&amp;diff=112261</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API&amp;diff=112261"/>
		<updated>2017-11-07T05:35:59Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Build */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''HTML Specification'''===&lt;br /&gt;
The WHATWG Microdata HTML specification allows web data to be enriched in that it allows machines to learn more about the data in a web page. &lt;br /&gt;
A typical example of real-world use of Microdata is illustrated below&lt;br /&gt;
&lt;br /&gt;
Here is a simple HTML block that has some information about a student. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span&amp;gt;student&amp;lt;/span&amp;gt; at &amp;lt;span&amp;gt;NC State&amp;lt;/span&amp;gt;&lt;br /&gt;
  I live in  &amp;lt;span&amp;gt;&amp;lt;span&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span&amp;gt;NC&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a machine (web parses etc) were to read this block as it is, it would not be able to directly interpret what part of the sentence is a Name or an Address. &lt;br /&gt;
&lt;br /&gt;
This is where Microdata shines. It defines attributes to different parts of the HTML block. Below is the same information with Microdata - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div itemscope itemtype=&amp;quot;http://data-vocabulary.org/Person&amp;quot;&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span itemprop=&amp;quot;name&amp;quot;&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span itemprop=&amp;quot;title&amp;quot;&amp;gt;student&amp;lt;/span&amp;gt; at&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://ncsu.edu&amp;quot; itemprop=&amp;quot;affliation&amp;quot;&amp;gt;NC State&amp;lt;/a&amp;gt;.&lt;br /&gt;
  I live in &amp;lt;span itemprop=&amp;quot;address&amp;quot; itemtype=&amp;quot;http://data-vocabulary.org/Address&amp;quot;&amp;gt;&amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As it is clear, the attributes itemprop and itemtype are used to enrich data: the value '''title''' has been assigned to the word '''student''', the value '''locality''' has been assigned to the state, '''NC'''. &lt;br /&gt;
This way any machine that accesses this HTML can understand the content better. More information about the Microdata specification is available [https://html.spec.whatwg.org/multipage/microdata.html here]. Some popular websites like Google, Skype and Microsoft use the Microdata from websites to provide additional insights. The number of websites that use Microdata is growing; currently about 13% of websites use Microdata (statistics courtesy w3techs.com).It should also be noted that the presence of Microdata does not change how the HTML block looks.&lt;br /&gt;
&lt;br /&gt;
==='''Servo'''===&lt;br /&gt;
Servo is a modern, high-performance browser engine designed for both application and embedded use and written in the Rust programming language.&lt;br /&gt;
It is currently developed on 64bit OS X, 64bit Linux, and Android.&lt;br /&gt;
&lt;br /&gt;
==='''Rust'''===&lt;br /&gt;
Rust is a systems programming language focuses on memory safety and concurrency. It is similar to C++ but ensures memory safetely and high performance. &lt;br /&gt;
&lt;br /&gt;
More information about the Rust programming language is available [https://servo.org here]&lt;br /&gt;
&lt;br /&gt;
=='''Scope'''==&lt;br /&gt;
The scope of this project is to implement initial support for Microdata API specification by allowing the Servo browser engine to read Microdata API tags from web pages and interpret them in the DOM. This should lay a groundwork for future improvements to implement features to created vCard and JSON data from Microdata on the ServoShell. &lt;br /&gt;
Additional project information is available [https://github.com/servo/servo/wiki/Microdata-project here]&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
As for the initial stage of this project, the scope did not require any major changes to the engine design. We implemented a DOM method to handle appropriate attributes in the Microdata API. The below diagram shows an overview of components involved in the design. The highlighted blocks have been modified.&lt;br /&gt;
&lt;br /&gt;
[[File:Design.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation'''==&lt;br /&gt;
The implementation involved updates to the Web Interface Definition Language (webidl) files and its Rust implementation.&lt;br /&gt;
 &lt;br /&gt;
===='''HTMLElement.WebIDL'''==== &lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;/servo/components/script/dom/webidls/HTMLElement.WebIDLs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method Name&lt;br /&gt;
! Return Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|  propertyNames()&lt;br /&gt;
| String&lt;br /&gt;
| Method definition only. The implementation is done in htmlelement.rs&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
===='''htmlelement.rs''' ==== &lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;/servo/components/script/dom/htmlelement.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method Name &lt;br /&gt;
! Return Type &lt;br /&gt;
! Description &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| parse_plain_attributes()  &lt;br /&gt;
| AttrValue &lt;br /&gt;
| This method returns a value of an attribute associated to an the HTML Element. &lt;br /&gt;
| '''traits''' Virtual_Methods&lt;br /&gt;
|-&lt;br /&gt;
|  propertyNames() &lt;br /&gt;
| Option&amp;lt;Vec&amp;lt;DOMString&amp;gt;&amp;gt;&lt;br /&gt;
| This method parses the space-separated values of the 'item-type' attributes' &lt;br /&gt;
| '''struct''' HTMLElement&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===='''Configuration'''====&lt;br /&gt;
The preference &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;[Pref=&amp;quot;dom.microdata.testing.enabled&amp;quot;]&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; was added to '''resources.pref''' preferences list to toggle the experimental microdata methods during development.&lt;br /&gt;
&lt;br /&gt;
=='''Build'''==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''6/11 - The [https://github.com/servo/servo/pull/19038 Pull Request] was closed and the changes were merged upstream.'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3/11 - Due to 3rd party service issue (Appveyor) our build is facing issues with the continuous integration. We are working with the Servo team to resolve this.&lt;br /&gt;
&lt;br /&gt;
3/11- Members of the servo project informed us that Appveyor build status does not determine the success of a pull request. We were advised to run a bors-servo build and this succeeded. Therefore all build checks necessary for PR to pass have been completed successfully. We are waiting changes to be merged to upstream.&lt;br /&gt;
&lt;br /&gt;
[[File:Issue.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have opened our pull request and are working on getting it merged based on the reviews received. Please use our forked repository till the pull request is merged.&lt;br /&gt;
&lt;br /&gt;
Forked repository: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;https://github.com/CJ8664/servo&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clone command using git:&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;git clone https://github.com/CJ8664/servo.git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have the forked repo, please follow steps [https://github.com/servo/servo/blob/master/README.md#building here] to do a build.&lt;br /&gt;
&lt;br /&gt;
Note that build may take up to 30 minutes, based on your system configuration. You can build on [https://janitor.technology/ Janitor] to reduce the build time.&lt;br /&gt;
&lt;br /&gt;
==='''Building on the cloud'''===&lt;br /&gt;
&lt;br /&gt;
This is the simplest and the fastest way to deploy and test an instance of servo. No configuration is required on your machine. &lt;br /&gt;
&lt;br /&gt;
1. Go to &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;http://janitor.technology&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click on '''New Container''' for Servo&lt;br /&gt;
&lt;br /&gt;
3. Enter your email address to gain access to your container&lt;br /&gt;
&lt;br /&gt;
4. Once logged in, go '''Containers''' on the top right. &lt;br /&gt;
&lt;br /&gt;
5. You will now see a container - Click on the '''IDE''' button to open your online IDE environment.&lt;br /&gt;
&lt;br /&gt;
6. Change directory to '''/home/user''' and create a new directory, say '''servo_test'''&lt;br /&gt;
&lt;br /&gt;
7. Go to this new directory and clone our repository as mentioned above&lt;br /&gt;
&lt;br /&gt;
8. Upon cloning you should see a /servo directory within 'servo_test' &lt;br /&gt;
&lt;br /&gt;
9. Go to /servo&lt;br /&gt;
&lt;br /&gt;
10. It is now time to build - run the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach build --dev&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If all goes well you will see a success message - 'Build Completed'&lt;br /&gt;
&lt;br /&gt;
==='''Building locally'''===&lt;br /&gt;
&lt;br /&gt;
Local build instructions for Windows environments are given below - &lt;br /&gt;
&lt;br /&gt;
1. Install Python for Windows (https://www.python.org/downloads/release/python-2714/). &lt;br /&gt;
&lt;br /&gt;
The Windows x86-64 MSI installer is fine. You should change the installation to install the &amp;quot;Add python.exe to Path&amp;quot; feature.&lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv.&lt;br /&gt;
&lt;br /&gt;
In a normal Windows Shell (cmd.exe or &amp;quot;Command Prompt&amp;quot; from the start menu), do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;pip install virtualenv&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this does not work, you may need to reboot for the changed PATH settings (by the python installer) to take effect.&lt;br /&gt;
&lt;br /&gt;
3. Install Git for Windows (https://git-scm.com/download/win). DO allow it to add git.exe to the PATH (default settings for the installer are fine).&lt;br /&gt;
&lt;br /&gt;
4. Install Visual Studio Community 2017 (https://www.visualstudio.com/vs/community/). &lt;br /&gt;
&lt;br /&gt;
You MUST add &amp;quot;Visual C++&amp;quot; to the list of installed components. It is not on by default. Visual Studio 2017 MUST installed to the default location or mach.bat will not find it.&lt;br /&gt;
&lt;br /&gt;
If you encountered errors with the environment above, do the following for a workaround:&lt;br /&gt;
&lt;br /&gt;
Download and install Build Tools for Visual Studio 2017&lt;br /&gt;
&lt;br /&gt;
Install python2.7 x86-x64 and virtualenv&lt;br /&gt;
&lt;br /&gt;
5. Run &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;mach.bat build -d&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; to build&lt;br /&gt;
&lt;br /&gt;
If you have troubles with x64 type prompt as mach.bat set by default:&lt;br /&gt;
&lt;br /&gt;
you may need to choose and launch the type manually, such as x86_x64 Cross Tools Command Prompt for VS 2017 in the Windows menu.)&lt;br /&gt;
&lt;br /&gt;
cd to/the/path/servo&lt;br /&gt;
&lt;br /&gt;
python mach build -d&lt;br /&gt;
&lt;br /&gt;
Build instructions for all other environments are available [https://github.com/servo/servo here]&lt;br /&gt;
&lt;br /&gt;
==='''Verifying a build'''===&lt;br /&gt;
&lt;br /&gt;
We can quickly verify if the servo build is working by running the command &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;'./mach run http://www.google.com'&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will open a browser instance rendering the Google homepage. &lt;br /&gt;
&lt;br /&gt;
This should be straightforward on any environment that has rendering support - Linus, Windows, MacOS, Android&lt;br /&gt;
&lt;br /&gt;
If you are on Janitor environment, it's IDE will not provide rendering support. You might receive an error along the lines of 'No renderer found' upon executing the command.&lt;br /&gt;
&lt;br /&gt;
'''Workaround''': On the 'Container' page on janitor.technology click on '''VNC''' for your container. Click '''Connect''' on the new tab that opens up.&lt;br /&gt;
&lt;br /&gt;
You should now have remote access to a UI with a command line. Simply run the above command and the web page should render.&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing Approach'''&lt;br /&gt;
&lt;br /&gt;
Since our implementation adds the Microdata tags into the DOM, the approach used for testing is to directly query the DOM tree using JavaScript to detect the presence of Microdata in an HTML tag within the DOM. This will confirm if the engine was able to parse these tags and add them to the DOM.&lt;br /&gt;
Also, as per the microdata specifications, the tags can be contained in any HTML tag. Therefore, the test data consists of several HTML tags like 'div', 'ul', 'li', 'span' etc.  each with a microdata ('itemprop' and 'itemtype') attribute. &lt;br /&gt;
&lt;br /&gt;
'''Test Framework'''&lt;br /&gt;
&lt;br /&gt;
We have used the 'web-platform-tests' (WPT) suite for testing. It is an existing test suite used in the Servo project. It generally consists of two test types: JavaScript tests (to test DOM features, for example) written using the testharness.js library and reference tests (to test rendered output with what's expected to ensure that the rendering is done properly) written using the W3C reftest format. Since the microdata tags do not render anything on the page, only DOM testing is in scope. &lt;br /&gt;
&lt;br /&gt;
testharness.js has been used to write the tests; it complements our testing approach as it can be called directly via JS within an HTML page. It provides a convenient API for making common assertions, and to work both for testing synchronous and asynchronous DOM features in a way that promotes clear, robust, tests. &lt;br /&gt;
&lt;br /&gt;
testharness.js returns the result of the test directly from the html page which is then used by WPT to interpret the result of the test.&lt;br /&gt;
&lt;br /&gt;
'''Test Cases'''&lt;br /&gt;
&lt;br /&gt;
In order to test our implementation, the following scenarios have been evaluated.&lt;br /&gt;
&lt;br /&gt;
'''Attribute with a single value should be stored properly''' &lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Space separated values in the attributes should be stored as different values'''&lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Duplicate occurrence of attributes should be ignored'''&lt;br /&gt;
&lt;br /&gt;
Input Data&lt;br /&gt;
&lt;br /&gt;
[[File:tc3.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e3.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Extra whitespace in the attribute list should be ignored'''&lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc4.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e4.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Attribute has not been set (null or empty)'''&lt;br /&gt;
&lt;br /&gt;
Input Data&lt;br /&gt;
&lt;br /&gt;
[[File:tc5.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e5.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testing Steps'''&lt;br /&gt;
&lt;br /&gt;
Please read and perform the actions on the Build and Verification sections properly before testing.&lt;br /&gt;
&lt;br /&gt;
1) Run the command &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach tests-wpt /tests/wpt/mozilla/tests/mozilla/microdata/&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) A webpage should render showing the status of the test.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is the output of test-wpt after the tests have been run successfully.&lt;br /&gt;
&lt;br /&gt;
[[File:Tests.PNG]]&lt;br /&gt;
&lt;br /&gt;
==='''Dependencies'''===&lt;br /&gt;
'''html5ever''' - HTML attribute names are fetched in Servo from a lookup file in the html5ever module. The html5ever module was augmented with the 'itemprop' and 'itemtype' attributes for use in Servo. &lt;br /&gt;
&lt;br /&gt;
==='''Pull Request'''===&lt;br /&gt;
&lt;br /&gt;
The pull request used to incorporate our changes upstream is available [https://github.com/servo/servo/pull/19038 here]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API&amp;diff=112260</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API&amp;diff=112260"/>
		<updated>2017-11-07T05:35:43Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Build */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''HTML Specification'''===&lt;br /&gt;
The WHATWG Microdata HTML specification allows web data to be enriched in that it allows machines to learn more about the data in a web page. &lt;br /&gt;
A typical example of real-world use of Microdata is illustrated below&lt;br /&gt;
&lt;br /&gt;
Here is a simple HTML block that has some information about a student. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span&amp;gt;student&amp;lt;/span&amp;gt; at &amp;lt;span&amp;gt;NC State&amp;lt;/span&amp;gt;&lt;br /&gt;
  I live in  &amp;lt;span&amp;gt;&amp;lt;span&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span&amp;gt;NC&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a machine (web parses etc) were to read this block as it is, it would not be able to directly interpret what part of the sentence is a Name or an Address. &lt;br /&gt;
&lt;br /&gt;
This is where Microdata shines. It defines attributes to different parts of the HTML block. Below is the same information with Microdata - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div itemscope itemtype=&amp;quot;http://data-vocabulary.org/Person&amp;quot;&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span itemprop=&amp;quot;name&amp;quot;&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span itemprop=&amp;quot;title&amp;quot;&amp;gt;student&amp;lt;/span&amp;gt; at&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://ncsu.edu&amp;quot; itemprop=&amp;quot;affliation&amp;quot;&amp;gt;NC State&amp;lt;/a&amp;gt;.&lt;br /&gt;
  I live in &amp;lt;span itemprop=&amp;quot;address&amp;quot; itemtype=&amp;quot;http://data-vocabulary.org/Address&amp;quot;&amp;gt;&amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As it is clear, the attributes itemprop and itemtype are used to enrich data: the value '''title''' has been assigned to the word '''student''', the value '''locality''' has been assigned to the state, '''NC'''. &lt;br /&gt;
This way any machine that accesses this HTML can understand the content better. More information about the Microdata specification is available [https://html.spec.whatwg.org/multipage/microdata.html here]. Some popular websites like Google, Skype and Microsoft use the Microdata from websites to provide additional insights. The number of websites that use Microdata is growing; currently about 13% of websites use Microdata (statistics courtesy w3techs.com).It should also be noted that the presence of Microdata does not change how the HTML block looks.&lt;br /&gt;
&lt;br /&gt;
==='''Servo'''===&lt;br /&gt;
Servo is a modern, high-performance browser engine designed for both application and embedded use and written in the Rust programming language.&lt;br /&gt;
It is currently developed on 64bit OS X, 64bit Linux, and Android.&lt;br /&gt;
&lt;br /&gt;
==='''Rust'''===&lt;br /&gt;
Rust is a systems programming language focuses on memory safety and concurrency. It is similar to C++ but ensures memory safetely and high performance. &lt;br /&gt;
&lt;br /&gt;
More information about the Rust programming language is available [https://servo.org here]&lt;br /&gt;
&lt;br /&gt;
=='''Scope'''==&lt;br /&gt;
The scope of this project is to implement initial support for Microdata API specification by allowing the Servo browser engine to read Microdata API tags from web pages and interpret them in the DOM. This should lay a groundwork for future improvements to implement features to created vCard and JSON data from Microdata on the ServoShell. &lt;br /&gt;
Additional project information is available [https://github.com/servo/servo/wiki/Microdata-project here]&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
As for the initial stage of this project, the scope did not require any major changes to the engine design. We implemented a DOM method to handle appropriate attributes in the Microdata API. The below diagram shows an overview of components involved in the design. The highlighted blocks have been modified.&lt;br /&gt;
&lt;br /&gt;
[[File:Design.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation'''==&lt;br /&gt;
The implementation involved updates to the Web Interface Definition Language (webidl) files and its Rust implementation.&lt;br /&gt;
 &lt;br /&gt;
===='''HTMLElement.WebIDL'''==== &lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;/servo/components/script/dom/webidls/HTMLElement.WebIDLs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method Name&lt;br /&gt;
! Return Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|  propertyNames()&lt;br /&gt;
| String&lt;br /&gt;
| Method definition only. The implementation is done in htmlelement.rs&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
===='''htmlelement.rs''' ==== &lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;/servo/components/script/dom/htmlelement.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method Name &lt;br /&gt;
! Return Type &lt;br /&gt;
! Description &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| parse_plain_attributes()  &lt;br /&gt;
| AttrValue &lt;br /&gt;
| This method returns a value of an attribute associated to an the HTML Element. &lt;br /&gt;
| '''traits''' Virtual_Methods&lt;br /&gt;
|-&lt;br /&gt;
|  propertyNames() &lt;br /&gt;
| Option&amp;lt;Vec&amp;lt;DOMString&amp;gt;&amp;gt;&lt;br /&gt;
| This method parses the space-separated values of the 'item-type' attributes' &lt;br /&gt;
| '''struct''' HTMLElement&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===='''Configuration'''====&lt;br /&gt;
The preference &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;[Pref=&amp;quot;dom.microdata.testing.enabled&amp;quot;]&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; was added to '''resources.pref''' preferences list to toggle the experimental microdata methods during development.&lt;br /&gt;
&lt;br /&gt;
=='''Build'''==&lt;br /&gt;
Updates -&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;'''6/11 - The [https://github.com/servo/servo/pull/19038 Pull Request] was closed and the changes were merged upstream.'''&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3/11 - Due to 3rd party service issue (Appveyor) our build is facing issues with the continuous integration. We are working with the Servo team to resolve this.&lt;br /&gt;
&lt;br /&gt;
3/11- Members of the servo project informed us that Appveyor build status does not determine the success of a pull request. We were advised to run a bors-servo build and this succeeded. Therefore all build checks necessary for PR to pass have been completed successfully. We are waiting changes to be merged to upstream.&lt;br /&gt;
&lt;br /&gt;
[[File:Issue.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have opened our pull request and are working on getting it merged based on the reviews received. Please use our forked repository till the pull request is merged.&lt;br /&gt;
&lt;br /&gt;
Forked repository: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;https://github.com/CJ8664/servo&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clone command using git:&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;git clone https://github.com/CJ8664/servo.git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have the forked repo, please follow steps [https://github.com/servo/servo/blob/master/README.md#building here] to do a build.&lt;br /&gt;
&lt;br /&gt;
Note that build may take up to 30 minutes, based on your system configuration. You can build on [https://janitor.technology/ Janitor] to reduce the build time.&lt;br /&gt;
&lt;br /&gt;
==='''Building on the cloud'''===&lt;br /&gt;
&lt;br /&gt;
This is the simplest and the fastest way to deploy and test an instance of servo. No configuration is required on your machine. &lt;br /&gt;
&lt;br /&gt;
1. Go to &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;http://janitor.technology&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click on '''New Container''' for Servo&lt;br /&gt;
&lt;br /&gt;
3. Enter your email address to gain access to your container&lt;br /&gt;
&lt;br /&gt;
4. Once logged in, go '''Containers''' on the top right. &lt;br /&gt;
&lt;br /&gt;
5. You will now see a container - Click on the '''IDE''' button to open your online IDE environment.&lt;br /&gt;
&lt;br /&gt;
6. Change directory to '''/home/user''' and create a new directory, say '''servo_test'''&lt;br /&gt;
&lt;br /&gt;
7. Go to this new directory and clone our repository as mentioned above&lt;br /&gt;
&lt;br /&gt;
8. Upon cloning you should see a /servo directory within 'servo_test' &lt;br /&gt;
&lt;br /&gt;
9. Go to /servo&lt;br /&gt;
&lt;br /&gt;
10. It is now time to build - run the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach build --dev&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If all goes well you will see a success message - 'Build Completed'&lt;br /&gt;
&lt;br /&gt;
==='''Building locally'''===&lt;br /&gt;
&lt;br /&gt;
Local build instructions for Windows environments are given below - &lt;br /&gt;
&lt;br /&gt;
1. Install Python for Windows (https://www.python.org/downloads/release/python-2714/). &lt;br /&gt;
&lt;br /&gt;
The Windows x86-64 MSI installer is fine. You should change the installation to install the &amp;quot;Add python.exe to Path&amp;quot; feature.&lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv.&lt;br /&gt;
&lt;br /&gt;
In a normal Windows Shell (cmd.exe or &amp;quot;Command Prompt&amp;quot; from the start menu), do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;pip install virtualenv&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this does not work, you may need to reboot for the changed PATH settings (by the python installer) to take effect.&lt;br /&gt;
&lt;br /&gt;
3. Install Git for Windows (https://git-scm.com/download/win). DO allow it to add git.exe to the PATH (default settings for the installer are fine).&lt;br /&gt;
&lt;br /&gt;
4. Install Visual Studio Community 2017 (https://www.visualstudio.com/vs/community/). &lt;br /&gt;
&lt;br /&gt;
You MUST add &amp;quot;Visual C++&amp;quot; to the list of installed components. It is not on by default. Visual Studio 2017 MUST installed to the default location or mach.bat will not find it.&lt;br /&gt;
&lt;br /&gt;
If you encountered errors with the environment above, do the following for a workaround:&lt;br /&gt;
&lt;br /&gt;
Download and install Build Tools for Visual Studio 2017&lt;br /&gt;
&lt;br /&gt;
Install python2.7 x86-x64 and virtualenv&lt;br /&gt;
&lt;br /&gt;
5. Run &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;mach.bat build -d&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; to build&lt;br /&gt;
&lt;br /&gt;
If you have troubles with x64 type prompt as mach.bat set by default:&lt;br /&gt;
&lt;br /&gt;
you may need to choose and launch the type manually, such as x86_x64 Cross Tools Command Prompt for VS 2017 in the Windows menu.)&lt;br /&gt;
&lt;br /&gt;
cd to/the/path/servo&lt;br /&gt;
&lt;br /&gt;
python mach build -d&lt;br /&gt;
&lt;br /&gt;
Build instructions for all other environments are available [https://github.com/servo/servo here]&lt;br /&gt;
&lt;br /&gt;
==='''Verifying a build'''===&lt;br /&gt;
&lt;br /&gt;
We can quickly verify if the servo build is working by running the command &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;'./mach run http://www.google.com'&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will open a browser instance rendering the Google homepage. &lt;br /&gt;
&lt;br /&gt;
This should be straightforward on any environment that has rendering support - Linus, Windows, MacOS, Android&lt;br /&gt;
&lt;br /&gt;
If you are on Janitor environment, it's IDE will not provide rendering support. You might receive an error along the lines of 'No renderer found' upon executing the command.&lt;br /&gt;
&lt;br /&gt;
'''Workaround''': On the 'Container' page on janitor.technology click on '''VNC''' for your container. Click '''Connect''' on the new tab that opens up.&lt;br /&gt;
&lt;br /&gt;
You should now have remote access to a UI with a command line. Simply run the above command and the web page should render.&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing Approach'''&lt;br /&gt;
&lt;br /&gt;
Since our implementation adds the Microdata tags into the DOM, the approach used for testing is to directly query the DOM tree using JavaScript to detect the presence of Microdata in an HTML tag within the DOM. This will confirm if the engine was able to parse these tags and add them to the DOM.&lt;br /&gt;
Also, as per the microdata specifications, the tags can be contained in any HTML tag. Therefore, the test data consists of several HTML tags like 'div', 'ul', 'li', 'span' etc.  each with a microdata ('itemprop' and 'itemtype') attribute. &lt;br /&gt;
&lt;br /&gt;
'''Test Framework'''&lt;br /&gt;
&lt;br /&gt;
We have used the 'web-platform-tests' (WPT) suite for testing. It is an existing test suite used in the Servo project. It generally consists of two test types: JavaScript tests (to test DOM features, for example) written using the testharness.js library and reference tests (to test rendered output with what's expected to ensure that the rendering is done properly) written using the W3C reftest format. Since the microdata tags do not render anything on the page, only DOM testing is in scope. &lt;br /&gt;
&lt;br /&gt;
testharness.js has been used to write the tests; it complements our testing approach as it can be called directly via JS within an HTML page. It provides a convenient API for making common assertions, and to work both for testing synchronous and asynchronous DOM features in a way that promotes clear, robust, tests. &lt;br /&gt;
&lt;br /&gt;
testharness.js returns the result of the test directly from the html page which is then used by WPT to interpret the result of the test.&lt;br /&gt;
&lt;br /&gt;
'''Test Cases'''&lt;br /&gt;
&lt;br /&gt;
In order to test our implementation, the following scenarios have been evaluated.&lt;br /&gt;
&lt;br /&gt;
'''Attribute with a single value should be stored properly''' &lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Space separated values in the attributes should be stored as different values'''&lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Duplicate occurrence of attributes should be ignored'''&lt;br /&gt;
&lt;br /&gt;
Input Data&lt;br /&gt;
&lt;br /&gt;
[[File:tc3.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e3.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Extra whitespace in the attribute list should be ignored'''&lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc4.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e4.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Attribute has not been set (null or empty)'''&lt;br /&gt;
&lt;br /&gt;
Input Data&lt;br /&gt;
&lt;br /&gt;
[[File:tc5.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e5.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testing Steps'''&lt;br /&gt;
&lt;br /&gt;
Please read and perform the actions on the Build and Verification sections properly before testing.&lt;br /&gt;
&lt;br /&gt;
1) Run the command &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach tests-wpt /tests/wpt/mozilla/tests/mozilla/microdata/&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) A webpage should render showing the status of the test.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is the output of test-wpt after the tests have been run successfully.&lt;br /&gt;
&lt;br /&gt;
[[File:Tests.PNG]]&lt;br /&gt;
&lt;br /&gt;
==='''Dependencies'''===&lt;br /&gt;
'''html5ever''' - HTML attribute names are fetched in Servo from a lookup file in the html5ever module. The html5ever module was augmented with the 'itemprop' and 'itemtype' attributes for use in Servo. &lt;br /&gt;
&lt;br /&gt;
==='''Pull Request'''===&lt;br /&gt;
&lt;br /&gt;
The pull request used to incorporate our changes upstream is available [https://github.com/servo/servo/pull/19038 here]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API&amp;diff=112258</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API&amp;diff=112258"/>
		<updated>2017-11-07T05:35:16Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Build */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''HTML Specification'''===&lt;br /&gt;
The WHATWG Microdata HTML specification allows web data to be enriched in that it allows machines to learn more about the data in a web page. &lt;br /&gt;
A typical example of real-world use of Microdata is illustrated below&lt;br /&gt;
&lt;br /&gt;
Here is a simple HTML block that has some information about a student. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span&amp;gt;student&amp;lt;/span&amp;gt; at &amp;lt;span&amp;gt;NC State&amp;lt;/span&amp;gt;&lt;br /&gt;
  I live in  &amp;lt;span&amp;gt;&amp;lt;span&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span&amp;gt;NC&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a machine (web parses etc) were to read this block as it is, it would not be able to directly interpret what part of the sentence is a Name or an Address. &lt;br /&gt;
&lt;br /&gt;
This is where Microdata shines. It defines attributes to different parts of the HTML block. Below is the same information with Microdata - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div itemscope itemtype=&amp;quot;http://data-vocabulary.org/Person&amp;quot;&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span itemprop=&amp;quot;name&amp;quot;&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span itemprop=&amp;quot;title&amp;quot;&amp;gt;student&amp;lt;/span&amp;gt; at&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://ncsu.edu&amp;quot; itemprop=&amp;quot;affliation&amp;quot;&amp;gt;NC State&amp;lt;/a&amp;gt;.&lt;br /&gt;
  I live in &amp;lt;span itemprop=&amp;quot;address&amp;quot; itemtype=&amp;quot;http://data-vocabulary.org/Address&amp;quot;&amp;gt;&amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As it is clear, the attributes itemprop and itemtype are used to enrich data: the value '''title''' has been assigned to the word '''student''', the value '''locality''' has been assigned to the state, '''NC'''. &lt;br /&gt;
This way any machine that accesses this HTML can understand the content better. More information about the Microdata specification is available [https://html.spec.whatwg.org/multipage/microdata.html here]. Some popular websites like Google, Skype and Microsoft use the Microdata from websites to provide additional insights. The number of websites that use Microdata is growing; currently about 13% of websites use Microdata (statistics courtesy w3techs.com).It should also be noted that the presence of Microdata does not change how the HTML block looks.&lt;br /&gt;
&lt;br /&gt;
==='''Servo'''===&lt;br /&gt;
Servo is a modern, high-performance browser engine designed for both application and embedded use and written in the Rust programming language.&lt;br /&gt;
It is currently developed on 64bit OS X, 64bit Linux, and Android.&lt;br /&gt;
&lt;br /&gt;
==='''Rust'''===&lt;br /&gt;
Rust is a systems programming language focuses on memory safety and concurrency. It is similar to C++ but ensures memory safetely and high performance. &lt;br /&gt;
&lt;br /&gt;
More information about the Rust programming language is available [https://servo.org here]&lt;br /&gt;
&lt;br /&gt;
=='''Scope'''==&lt;br /&gt;
The scope of this project is to implement initial support for Microdata API specification by allowing the Servo browser engine to read Microdata API tags from web pages and interpret them in the DOM. This should lay a groundwork for future improvements to implement features to created vCard and JSON data from Microdata on the ServoShell. &lt;br /&gt;
Additional project information is available [https://github.com/servo/servo/wiki/Microdata-project here]&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
As for the initial stage of this project, the scope did not require any major changes to the engine design. We implemented a DOM method to handle appropriate attributes in the Microdata API. The below diagram shows an overview of components involved in the design. The highlighted blocks have been modified.&lt;br /&gt;
&lt;br /&gt;
[[File:Design.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation'''==&lt;br /&gt;
The implementation involved updates to the Web Interface Definition Language (webidl) files and its Rust implementation.&lt;br /&gt;
 &lt;br /&gt;
===='''HTMLElement.WebIDL'''==== &lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;/servo/components/script/dom/webidls/HTMLElement.WebIDLs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method Name&lt;br /&gt;
! Return Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|  propertyNames()&lt;br /&gt;
| String&lt;br /&gt;
| Method definition only. The implementation is done in htmlelement.rs&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
===='''htmlelement.rs''' ==== &lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;/servo/components/script/dom/htmlelement.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method Name &lt;br /&gt;
! Return Type &lt;br /&gt;
! Description &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| parse_plain_attributes()  &lt;br /&gt;
| AttrValue &lt;br /&gt;
| This method returns a value of an attribute associated to an the HTML Element. &lt;br /&gt;
| '''traits''' Virtual_Methods&lt;br /&gt;
|-&lt;br /&gt;
|  propertyNames() &lt;br /&gt;
| Option&amp;lt;Vec&amp;lt;DOMString&amp;gt;&amp;gt;&lt;br /&gt;
| This method parses the space-separated values of the 'item-type' attributes' &lt;br /&gt;
| '''struct''' HTMLElement&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===='''Configuration'''====&lt;br /&gt;
The preference &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;[Pref=&amp;quot;dom.microdata.testing.enabled&amp;quot;]&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; was added to '''resources.pref''' preferences list to toggle the experimental microdata methods during development.&lt;br /&gt;
&lt;br /&gt;
=='''Build'''==&lt;br /&gt;
Updates -&lt;br /&gt;
'''6/11 - The [https://github.com/servo/servo/pull/19038 Pull Request] was closed and the changes were merged upstream.'''&lt;br /&gt;
&lt;br /&gt;
3/11 - Due to 3rd party service issue (Appveyor) our build is facing issues with the continuous integration. We are working with the Servo team to resolve this.&lt;br /&gt;
&lt;br /&gt;
3/11- Members of the servo project informed us that Appveyor build status does not determine the success of a pull request. We were advised to run a bors-servo build and this succeeded. Therefore all build checks necessary for PR to pass have been completed successfully. We are waiting changes to be merged to upstream.&lt;br /&gt;
&lt;br /&gt;
[[File:Issue.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have opened our pull request and are working on getting it merged based on the reviews received. Please use our forked repository till the pull request is merged.&lt;br /&gt;
&lt;br /&gt;
Forked repository: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;https://github.com/CJ8664/servo&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clone command using git:&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;git clone https://github.com/CJ8664/servo.git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have the forked repo, please follow steps [https://github.com/servo/servo/blob/master/README.md#building here] to do a build.&lt;br /&gt;
&lt;br /&gt;
Note that build may take up to 30 minutes, based on your system configuration. You can build on [https://janitor.technology/ Janitor] to reduce the build time.&lt;br /&gt;
&lt;br /&gt;
==='''Building on the cloud'''===&lt;br /&gt;
&lt;br /&gt;
This is the simplest and the fastest way to deploy and test an instance of servo. No configuration is required on your machine. &lt;br /&gt;
&lt;br /&gt;
1. Go to &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;http://janitor.technology&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click on '''New Container''' for Servo&lt;br /&gt;
&lt;br /&gt;
3. Enter your email address to gain access to your container&lt;br /&gt;
&lt;br /&gt;
4. Once logged in, go '''Containers''' on the top right. &lt;br /&gt;
&lt;br /&gt;
5. You will now see a container - Click on the '''IDE''' button to open your online IDE environment.&lt;br /&gt;
&lt;br /&gt;
6. Change directory to '''/home/user''' and create a new directory, say '''servo_test'''&lt;br /&gt;
&lt;br /&gt;
7. Go to this new directory and clone our repository as mentioned above&lt;br /&gt;
&lt;br /&gt;
8. Upon cloning you should see a /servo directory within 'servo_test' &lt;br /&gt;
&lt;br /&gt;
9. Go to /servo&lt;br /&gt;
&lt;br /&gt;
10. It is now time to build - run the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach build --dev&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If all goes well you will see a success message - 'Build Completed'&lt;br /&gt;
&lt;br /&gt;
==='''Building locally'''===&lt;br /&gt;
&lt;br /&gt;
Local build instructions for Windows environments are given below - &lt;br /&gt;
&lt;br /&gt;
1. Install Python for Windows (https://www.python.org/downloads/release/python-2714/). &lt;br /&gt;
&lt;br /&gt;
The Windows x86-64 MSI installer is fine. You should change the installation to install the &amp;quot;Add python.exe to Path&amp;quot; feature.&lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv.&lt;br /&gt;
&lt;br /&gt;
In a normal Windows Shell (cmd.exe or &amp;quot;Command Prompt&amp;quot; from the start menu), do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;pip install virtualenv&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this does not work, you may need to reboot for the changed PATH settings (by the python installer) to take effect.&lt;br /&gt;
&lt;br /&gt;
3. Install Git for Windows (https://git-scm.com/download/win). DO allow it to add git.exe to the PATH (default settings for the installer are fine).&lt;br /&gt;
&lt;br /&gt;
4. Install Visual Studio Community 2017 (https://www.visualstudio.com/vs/community/). &lt;br /&gt;
&lt;br /&gt;
You MUST add &amp;quot;Visual C++&amp;quot; to the list of installed components. It is not on by default. Visual Studio 2017 MUST installed to the default location or mach.bat will not find it.&lt;br /&gt;
&lt;br /&gt;
If you encountered errors with the environment above, do the following for a workaround:&lt;br /&gt;
&lt;br /&gt;
Download and install Build Tools for Visual Studio 2017&lt;br /&gt;
&lt;br /&gt;
Install python2.7 x86-x64 and virtualenv&lt;br /&gt;
&lt;br /&gt;
5. Run &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;mach.bat build -d&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; to build&lt;br /&gt;
&lt;br /&gt;
If you have troubles with x64 type prompt as mach.bat set by default:&lt;br /&gt;
&lt;br /&gt;
you may need to choose and launch the type manually, such as x86_x64 Cross Tools Command Prompt for VS 2017 in the Windows menu.)&lt;br /&gt;
&lt;br /&gt;
cd to/the/path/servo&lt;br /&gt;
&lt;br /&gt;
python mach build -d&lt;br /&gt;
&lt;br /&gt;
Build instructions for all other environments are available [https://github.com/servo/servo here]&lt;br /&gt;
&lt;br /&gt;
==='''Verifying a build'''===&lt;br /&gt;
&lt;br /&gt;
We can quickly verify if the servo build is working by running the command &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;'./mach run http://www.google.com'&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will open a browser instance rendering the Google homepage. &lt;br /&gt;
&lt;br /&gt;
This should be straightforward on any environment that has rendering support - Linus, Windows, MacOS, Android&lt;br /&gt;
&lt;br /&gt;
If you are on Janitor environment, it's IDE will not provide rendering support. You might receive an error along the lines of 'No renderer found' upon executing the command.&lt;br /&gt;
&lt;br /&gt;
'''Workaround''': On the 'Container' page on janitor.technology click on '''VNC''' for your container. Click '''Connect''' on the new tab that opens up.&lt;br /&gt;
&lt;br /&gt;
You should now have remote access to a UI with a command line. Simply run the above command and the web page should render.&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing Approach'''&lt;br /&gt;
&lt;br /&gt;
Since our implementation adds the Microdata tags into the DOM, the approach used for testing is to directly query the DOM tree using JavaScript to detect the presence of Microdata in an HTML tag within the DOM. This will confirm if the engine was able to parse these tags and add them to the DOM.&lt;br /&gt;
Also, as per the microdata specifications, the tags can be contained in any HTML tag. Therefore, the test data consists of several HTML tags like 'div', 'ul', 'li', 'span' etc.  each with a microdata ('itemprop' and 'itemtype') attribute. &lt;br /&gt;
&lt;br /&gt;
'''Test Framework'''&lt;br /&gt;
&lt;br /&gt;
We have used the 'web-platform-tests' (WPT) suite for testing. It is an existing test suite used in the Servo project. It generally consists of two test types: JavaScript tests (to test DOM features, for example) written using the testharness.js library and reference tests (to test rendered output with what's expected to ensure that the rendering is done properly) written using the W3C reftest format. Since the microdata tags do not render anything on the page, only DOM testing is in scope. &lt;br /&gt;
&lt;br /&gt;
testharness.js has been used to write the tests; it complements our testing approach as it can be called directly via JS within an HTML page. It provides a convenient API for making common assertions, and to work both for testing synchronous and asynchronous DOM features in a way that promotes clear, robust, tests. &lt;br /&gt;
&lt;br /&gt;
testharness.js returns the result of the test directly from the html page which is then used by WPT to interpret the result of the test.&lt;br /&gt;
&lt;br /&gt;
'''Test Cases'''&lt;br /&gt;
&lt;br /&gt;
In order to test our implementation, the following scenarios have been evaluated.&lt;br /&gt;
&lt;br /&gt;
'''Attribute with a single value should be stored properly''' &lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Space separated values in the attributes should be stored as different values'''&lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Duplicate occurrence of attributes should be ignored'''&lt;br /&gt;
&lt;br /&gt;
Input Data&lt;br /&gt;
&lt;br /&gt;
[[File:tc3.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e3.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Extra whitespace in the attribute list should be ignored'''&lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc4.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e4.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Attribute has not been set (null or empty)'''&lt;br /&gt;
&lt;br /&gt;
Input Data&lt;br /&gt;
&lt;br /&gt;
[[File:tc5.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e5.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testing Steps'''&lt;br /&gt;
&lt;br /&gt;
Please read and perform the actions on the Build and Verification sections properly before testing.&lt;br /&gt;
&lt;br /&gt;
1) Run the command &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach tests-wpt /tests/wpt/mozilla/tests/mozilla/microdata/&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) A webpage should render showing the status of the test.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is the output of test-wpt after the tests have been run successfully.&lt;br /&gt;
&lt;br /&gt;
[[File:Tests.PNG]]&lt;br /&gt;
&lt;br /&gt;
==='''Dependencies'''===&lt;br /&gt;
'''html5ever''' - HTML attribute names are fetched in Servo from a lookup file in the html5ever module. The html5ever module was augmented with the 'itemprop' and 'itemtype' attributes for use in Servo. &lt;br /&gt;
&lt;br /&gt;
==='''Pull Request'''===&lt;br /&gt;
&lt;br /&gt;
The pull request used to incorporate our changes upstream is available [https://github.com/servo/servo/pull/19038 here]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API&amp;diff=112256</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API&amp;diff=112256"/>
		<updated>2017-11-07T05:35:04Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Build */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''HTML Specification'''===&lt;br /&gt;
The WHATWG Microdata HTML specification allows web data to be enriched in that it allows machines to learn more about the data in a web page. &lt;br /&gt;
A typical example of real-world use of Microdata is illustrated below&lt;br /&gt;
&lt;br /&gt;
Here is a simple HTML block that has some information about a student. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span&amp;gt;student&amp;lt;/span&amp;gt; at &amp;lt;span&amp;gt;NC State&amp;lt;/span&amp;gt;&lt;br /&gt;
  I live in  &amp;lt;span&amp;gt;&amp;lt;span&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span&amp;gt;NC&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a machine (web parses etc) were to read this block as it is, it would not be able to directly interpret what part of the sentence is a Name or an Address. &lt;br /&gt;
&lt;br /&gt;
This is where Microdata shines. It defines attributes to different parts of the HTML block. Below is the same information with Microdata - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div itemscope itemtype=&amp;quot;http://data-vocabulary.org/Person&amp;quot;&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span itemprop=&amp;quot;name&amp;quot;&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span itemprop=&amp;quot;title&amp;quot;&amp;gt;student&amp;lt;/span&amp;gt; at&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://ncsu.edu&amp;quot; itemprop=&amp;quot;affliation&amp;quot;&amp;gt;NC State&amp;lt;/a&amp;gt;.&lt;br /&gt;
  I live in &amp;lt;span itemprop=&amp;quot;address&amp;quot; itemtype=&amp;quot;http://data-vocabulary.org/Address&amp;quot;&amp;gt;&amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As it is clear, the attributes itemprop and itemtype are used to enrich data: the value '''title''' has been assigned to the word '''student''', the value '''locality''' has been assigned to the state, '''NC'''. &lt;br /&gt;
This way any machine that accesses this HTML can understand the content better. More information about the Microdata specification is available [https://html.spec.whatwg.org/multipage/microdata.html here]. Some popular websites like Google, Skype and Microsoft use the Microdata from websites to provide additional insights. The number of websites that use Microdata is growing; currently about 13% of websites use Microdata (statistics courtesy w3techs.com).It should also be noted that the presence of Microdata does not change how the HTML block looks.&lt;br /&gt;
&lt;br /&gt;
==='''Servo'''===&lt;br /&gt;
Servo is a modern, high-performance browser engine designed for both application and embedded use and written in the Rust programming language.&lt;br /&gt;
It is currently developed on 64bit OS X, 64bit Linux, and Android.&lt;br /&gt;
&lt;br /&gt;
==='''Rust'''===&lt;br /&gt;
Rust is a systems programming language focuses on memory safety and concurrency. It is similar to C++ but ensures memory safetely and high performance. &lt;br /&gt;
&lt;br /&gt;
More information about the Rust programming language is available [https://servo.org here]&lt;br /&gt;
&lt;br /&gt;
=='''Scope'''==&lt;br /&gt;
The scope of this project is to implement initial support for Microdata API specification by allowing the Servo browser engine to read Microdata API tags from web pages and interpret them in the DOM. This should lay a groundwork for future improvements to implement features to created vCard and JSON data from Microdata on the ServoShell. &lt;br /&gt;
Additional project information is available [https://github.com/servo/servo/wiki/Microdata-project here]&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
As for the initial stage of this project, the scope did not require any major changes to the engine design. We implemented a DOM method to handle appropriate attributes in the Microdata API. The below diagram shows an overview of components involved in the design. The highlighted blocks have been modified.&lt;br /&gt;
&lt;br /&gt;
[[File:Design.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation'''==&lt;br /&gt;
The implementation involved updates to the Web Interface Definition Language (webidl) files and its Rust implementation.&lt;br /&gt;
 &lt;br /&gt;
===='''HTMLElement.WebIDL'''==== &lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;/servo/components/script/dom/webidls/HTMLElement.WebIDLs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method Name&lt;br /&gt;
! Return Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|  propertyNames()&lt;br /&gt;
| String&lt;br /&gt;
| Method definition only. The implementation is done in htmlelement.rs&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
===='''htmlelement.rs''' ==== &lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;/servo/components/script/dom/htmlelement.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method Name &lt;br /&gt;
! Return Type &lt;br /&gt;
! Description &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| parse_plain_attributes()  &lt;br /&gt;
| AttrValue &lt;br /&gt;
| This method returns a value of an attribute associated to an the HTML Element. &lt;br /&gt;
| '''traits''' Virtual_Methods&lt;br /&gt;
|-&lt;br /&gt;
|  propertyNames() &lt;br /&gt;
| Option&amp;lt;Vec&amp;lt;DOMString&amp;gt;&amp;gt;&lt;br /&gt;
| This method parses the space-separated values of the 'item-type' attributes' &lt;br /&gt;
| '''struct''' HTMLElement&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===='''Configuration'''====&lt;br /&gt;
The preference &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;[Pref=&amp;quot;dom.microdata.testing.enabled&amp;quot;]&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; was added to '''resources.pref''' preferences list to toggle the experimental microdata methods during development.&lt;br /&gt;
&lt;br /&gt;
=='''Build'''==&lt;br /&gt;
Updates -&lt;br /&gt;
'''6/11 - The [https://github.com/servo/servo/pull/19038 Pull Request] was closed and the changes were merged into the upstream.'''&lt;br /&gt;
&lt;br /&gt;
3/11 - Due to 3rd party service issue (Appveyor) our build is facing issues with the continuous integration. We are working with the Servo team to resolve this.&lt;br /&gt;
&lt;br /&gt;
3/11- Members of the servo project informed us that Appveyor build status does not determine the success of a pull request. We were advised to run a bors-servo build and this succeeded. Therefore all build checks necessary for PR to pass have been completed successfully. We are waiting changes to be merged to upstream.&lt;br /&gt;
&lt;br /&gt;
[[File:Issue.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have opened our pull request and are working on getting it merged based on the reviews received. Please use our forked repository till the pull request is merged.&lt;br /&gt;
&lt;br /&gt;
Forked repository: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;https://github.com/CJ8664/servo&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clone command using git:&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;git clone https://github.com/CJ8664/servo.git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have the forked repo, please follow steps [https://github.com/servo/servo/blob/master/README.md#building here] to do a build.&lt;br /&gt;
&lt;br /&gt;
Note that build may take up to 30 minutes, based on your system configuration. You can build on [https://janitor.technology/ Janitor] to reduce the build time.&lt;br /&gt;
&lt;br /&gt;
==='''Building on the cloud'''===&lt;br /&gt;
&lt;br /&gt;
This is the simplest and the fastest way to deploy and test an instance of servo. No configuration is required on your machine. &lt;br /&gt;
&lt;br /&gt;
1. Go to &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;http://janitor.technology&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click on '''New Container''' for Servo&lt;br /&gt;
&lt;br /&gt;
3. Enter your email address to gain access to your container&lt;br /&gt;
&lt;br /&gt;
4. Once logged in, go '''Containers''' on the top right. &lt;br /&gt;
&lt;br /&gt;
5. You will now see a container - Click on the '''IDE''' button to open your online IDE environment.&lt;br /&gt;
&lt;br /&gt;
6. Change directory to '''/home/user''' and create a new directory, say '''servo_test'''&lt;br /&gt;
&lt;br /&gt;
7. Go to this new directory and clone our repository as mentioned above&lt;br /&gt;
&lt;br /&gt;
8. Upon cloning you should see a /servo directory within 'servo_test' &lt;br /&gt;
&lt;br /&gt;
9. Go to /servo&lt;br /&gt;
&lt;br /&gt;
10. It is now time to build - run the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach build --dev&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If all goes well you will see a success message - 'Build Completed'&lt;br /&gt;
&lt;br /&gt;
==='''Building locally'''===&lt;br /&gt;
&lt;br /&gt;
Local build instructions for Windows environments are given below - &lt;br /&gt;
&lt;br /&gt;
1. Install Python for Windows (https://www.python.org/downloads/release/python-2714/). &lt;br /&gt;
&lt;br /&gt;
The Windows x86-64 MSI installer is fine. You should change the installation to install the &amp;quot;Add python.exe to Path&amp;quot; feature.&lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv.&lt;br /&gt;
&lt;br /&gt;
In a normal Windows Shell (cmd.exe or &amp;quot;Command Prompt&amp;quot; from the start menu), do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;pip install virtualenv&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this does not work, you may need to reboot for the changed PATH settings (by the python installer) to take effect.&lt;br /&gt;
&lt;br /&gt;
3. Install Git for Windows (https://git-scm.com/download/win). DO allow it to add git.exe to the PATH (default settings for the installer are fine).&lt;br /&gt;
&lt;br /&gt;
4. Install Visual Studio Community 2017 (https://www.visualstudio.com/vs/community/). &lt;br /&gt;
&lt;br /&gt;
You MUST add &amp;quot;Visual C++&amp;quot; to the list of installed components. It is not on by default. Visual Studio 2017 MUST installed to the default location or mach.bat will not find it.&lt;br /&gt;
&lt;br /&gt;
If you encountered errors with the environment above, do the following for a workaround:&lt;br /&gt;
&lt;br /&gt;
Download and install Build Tools for Visual Studio 2017&lt;br /&gt;
&lt;br /&gt;
Install python2.7 x86-x64 and virtualenv&lt;br /&gt;
&lt;br /&gt;
5. Run &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;mach.bat build -d&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; to build&lt;br /&gt;
&lt;br /&gt;
If you have troubles with x64 type prompt as mach.bat set by default:&lt;br /&gt;
&lt;br /&gt;
you may need to choose and launch the type manually, such as x86_x64 Cross Tools Command Prompt for VS 2017 in the Windows menu.)&lt;br /&gt;
&lt;br /&gt;
cd to/the/path/servo&lt;br /&gt;
&lt;br /&gt;
python mach build -d&lt;br /&gt;
&lt;br /&gt;
Build instructions for all other environments are available [https://github.com/servo/servo here]&lt;br /&gt;
&lt;br /&gt;
==='''Verifying a build'''===&lt;br /&gt;
&lt;br /&gt;
We can quickly verify if the servo build is working by running the command &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;'./mach run http://www.google.com'&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will open a browser instance rendering the Google homepage. &lt;br /&gt;
&lt;br /&gt;
This should be straightforward on any environment that has rendering support - Linus, Windows, MacOS, Android&lt;br /&gt;
&lt;br /&gt;
If you are on Janitor environment, it's IDE will not provide rendering support. You might receive an error along the lines of 'No renderer found' upon executing the command.&lt;br /&gt;
&lt;br /&gt;
'''Workaround''': On the 'Container' page on janitor.technology click on '''VNC''' for your container. Click '''Connect''' on the new tab that opens up.&lt;br /&gt;
&lt;br /&gt;
You should now have remote access to a UI with a command line. Simply run the above command and the web page should render.&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing Approach'''&lt;br /&gt;
&lt;br /&gt;
Since our implementation adds the Microdata tags into the DOM, the approach used for testing is to directly query the DOM tree using JavaScript to detect the presence of Microdata in an HTML tag within the DOM. This will confirm if the engine was able to parse these tags and add them to the DOM.&lt;br /&gt;
Also, as per the microdata specifications, the tags can be contained in any HTML tag. Therefore, the test data consists of several HTML tags like 'div', 'ul', 'li', 'span' etc.  each with a microdata ('itemprop' and 'itemtype') attribute. &lt;br /&gt;
&lt;br /&gt;
'''Test Framework'''&lt;br /&gt;
&lt;br /&gt;
We have used the 'web-platform-tests' (WPT) suite for testing. It is an existing test suite used in the Servo project. It generally consists of two test types: JavaScript tests (to test DOM features, for example) written using the testharness.js library and reference tests (to test rendered output with what's expected to ensure that the rendering is done properly) written using the W3C reftest format. Since the microdata tags do not render anything on the page, only DOM testing is in scope. &lt;br /&gt;
&lt;br /&gt;
testharness.js has been used to write the tests; it complements our testing approach as it can be called directly via JS within an HTML page. It provides a convenient API for making common assertions, and to work both for testing synchronous and asynchronous DOM features in a way that promotes clear, robust, tests. &lt;br /&gt;
&lt;br /&gt;
testharness.js returns the result of the test directly from the html page which is then used by WPT to interpret the result of the test.&lt;br /&gt;
&lt;br /&gt;
'''Test Cases'''&lt;br /&gt;
&lt;br /&gt;
In order to test our implementation, the following scenarios have been evaluated.&lt;br /&gt;
&lt;br /&gt;
'''Attribute with a single value should be stored properly''' &lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Space separated values in the attributes should be stored as different values'''&lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Duplicate occurrence of attributes should be ignored'''&lt;br /&gt;
&lt;br /&gt;
Input Data&lt;br /&gt;
&lt;br /&gt;
[[File:tc3.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e3.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Extra whitespace in the attribute list should be ignored'''&lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc4.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e4.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Attribute has not been set (null or empty)'''&lt;br /&gt;
&lt;br /&gt;
Input Data&lt;br /&gt;
&lt;br /&gt;
[[File:tc5.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e5.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testing Steps'''&lt;br /&gt;
&lt;br /&gt;
Please read and perform the actions on the Build and Verification sections properly before testing.&lt;br /&gt;
&lt;br /&gt;
1) Run the command &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach tests-wpt /tests/wpt/mozilla/tests/mozilla/microdata/&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) A webpage should render showing the status of the test.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is the output of test-wpt after the tests have been run successfully.&lt;br /&gt;
&lt;br /&gt;
[[File:Tests.PNG]]&lt;br /&gt;
&lt;br /&gt;
==='''Dependencies'''===&lt;br /&gt;
'''html5ever''' - HTML attribute names are fetched in Servo from a lookup file in the html5ever module. The html5ever module was augmented with the 'itemprop' and 'itemtype' attributes for use in Servo. &lt;br /&gt;
&lt;br /&gt;
==='''Pull Request'''===&lt;br /&gt;
&lt;br /&gt;
The pull request used to incorporate our changes upstream is available [https://github.com/servo/servo/pull/19038 here]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API&amp;diff=112255</id>
		<title>CSC/ECE 517 Fall 2017/M1752 Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API&amp;diff=112255"/>
		<updated>2017-11-07T05:34:30Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Build */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''HTML Specification'''===&lt;br /&gt;
The WHATWG Microdata HTML specification allows web data to be enriched in that it allows machines to learn more about the data in a web page. &lt;br /&gt;
A typical example of real-world use of Microdata is illustrated below&lt;br /&gt;
&lt;br /&gt;
Here is a simple HTML block that has some information about a student. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span&amp;gt;student&amp;lt;/span&amp;gt; at &amp;lt;span&amp;gt;NC State&amp;lt;/span&amp;gt;&lt;br /&gt;
  I live in  &amp;lt;span&amp;gt;&amp;lt;span&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span&amp;gt;NC&amp;lt;/span&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If a machine (web parses etc) were to read this block as it is, it would not be able to directly interpret what part of the sentence is a Name or an Address. &lt;br /&gt;
&lt;br /&gt;
This is where Microdata shines. It defines attributes to different parts of the HTML block. Below is the same information with Microdata - &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;div itemscope itemtype=&amp;quot;http://data-vocabulary.org/Person&amp;quot;&amp;gt;&lt;br /&gt;
  My name is &amp;lt;span itemprop=&amp;quot;name&amp;quot;&amp;gt;Grad Student&amp;lt;/span&amp;gt;, and I am a &amp;lt;span itemprop=&amp;quot;title&amp;quot;&amp;gt;student&amp;lt;/span&amp;gt; at&lt;br /&gt;
  &amp;lt;a href=&amp;quot;http://ncsu.edu&amp;quot; itemprop=&amp;quot;affliation&amp;quot;&amp;gt;NC State&amp;lt;/a&amp;gt;.&lt;br /&gt;
  I live in &amp;lt;span itemprop=&amp;quot;address&amp;quot; itemtype=&amp;quot;http://data-vocabulary.org/Address&amp;quot;&amp;gt;&amp;lt;span itemprop=&amp;quot;locality&amp;quot;&amp;gt;Raleigh&amp;lt;/span&amp;gt;,&amp;lt;span itemprop=&amp;quot;region&amp;quot;&amp;gt;NC&amp;lt;/span&amp;gt;&lt;br /&gt;
  &amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
As it is clear, the attributes itemprop and itemtype are used to enrich data: the value '''title''' has been assigned to the word '''student''', the value '''locality''' has been assigned to the state, '''NC'''. &lt;br /&gt;
This way any machine that accesses this HTML can understand the content better. More information about the Microdata specification is available [https://html.spec.whatwg.org/multipage/microdata.html here]. Some popular websites like Google, Skype and Microsoft use the Microdata from websites to provide additional insights. The number of websites that use Microdata is growing; currently about 13% of websites use Microdata (statistics courtesy w3techs.com).It should also be noted that the presence of Microdata does not change how the HTML block looks.&lt;br /&gt;
&lt;br /&gt;
==='''Servo'''===&lt;br /&gt;
Servo is a modern, high-performance browser engine designed for both application and embedded use and written in the Rust programming language.&lt;br /&gt;
It is currently developed on 64bit OS X, 64bit Linux, and Android.&lt;br /&gt;
&lt;br /&gt;
==='''Rust'''===&lt;br /&gt;
Rust is a systems programming language focuses on memory safety and concurrency. It is similar to C++ but ensures memory safetely and high performance. &lt;br /&gt;
&lt;br /&gt;
More information about the Rust programming language is available [https://servo.org here]&lt;br /&gt;
&lt;br /&gt;
=='''Scope'''==&lt;br /&gt;
The scope of this project is to implement initial support for Microdata API specification by allowing the Servo browser engine to read Microdata API tags from web pages and interpret them in the DOM. This should lay a groundwork for future improvements to implement features to created vCard and JSON data from Microdata on the ServoShell. &lt;br /&gt;
Additional project information is available [https://github.com/servo/servo/wiki/Microdata-project here]&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
As for the initial stage of this project, the scope did not require any major changes to the engine design. We implemented a DOM method to handle appropriate attributes in the Microdata API. The below diagram shows an overview of components involved in the design. The highlighted blocks have been modified.&lt;br /&gt;
&lt;br /&gt;
[[File:Design.png]]&lt;br /&gt;
&lt;br /&gt;
=='''Implementation'''==&lt;br /&gt;
The implementation involved updates to the Web Interface Definition Language (webidl) files and its Rust implementation.&lt;br /&gt;
 &lt;br /&gt;
===='''HTMLElement.WebIDL'''==== &lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;/servo/components/script/dom/webidls/HTMLElement.WebIDLs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method Name&lt;br /&gt;
! Return Type&lt;br /&gt;
! Description&lt;br /&gt;
|-&lt;br /&gt;
|  propertyNames()&lt;br /&gt;
| String&lt;br /&gt;
| Method definition only. The implementation is done in htmlelement.rs&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
 &lt;br /&gt;
===='''htmlelement.rs''' ==== &lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;/servo/components/script/dom/htmlelement.rs&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! Method Name &lt;br /&gt;
! Return Type &lt;br /&gt;
! Description &lt;br /&gt;
! Location&lt;br /&gt;
|-&lt;br /&gt;
| parse_plain_attributes()  &lt;br /&gt;
| AttrValue &lt;br /&gt;
| This method returns a value of an attribute associated to an the HTML Element. &lt;br /&gt;
| '''traits''' Virtual_Methods&lt;br /&gt;
|-&lt;br /&gt;
|  propertyNames() &lt;br /&gt;
| Option&amp;lt;Vec&amp;lt;DOMString&amp;gt;&amp;gt;&lt;br /&gt;
| This method parses the space-separated values of the 'item-type' attributes' &lt;br /&gt;
| '''struct''' HTMLElement&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===='''Configuration'''====&lt;br /&gt;
The preference &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;[Pref=&amp;quot;dom.microdata.testing.enabled&amp;quot;]&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; was added to '''resources.pref''' preferences list to toggle the experimental microdata methods during development.&lt;br /&gt;
&lt;br /&gt;
=='''Build'''==&lt;br /&gt;
Updates -&lt;br /&gt;
'''6/11 - The PR was closed and the changes were merged into the upstream.'''&lt;br /&gt;
&lt;br /&gt;
3/11 - Due to 3rd party service issue (Appveyor) our build is facing issues with the continuous integration. We are working with the Servo team to resolve this.&lt;br /&gt;
&lt;br /&gt;
3/11- Members of the servo project informed us that Appveyor build status does not determine the success of a pull request. We were advised to run a bors-servo build and this succeeded. Therefore all build checks necessary for PR to pass have been completed successfully. We are waiting changes to be merged to upstream.&lt;br /&gt;
&lt;br /&gt;
[[File:Issue.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We have opened our pull request and are working on getting it merged based on the reviews received. Please use our forked repository till the pull request is merged.&lt;br /&gt;
&lt;br /&gt;
Forked repository: &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;https://github.com/CJ8664/servo&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Clone command using git:&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;git clone https://github.com/CJ8664/servo.git&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Once you have the forked repo, please follow steps [https://github.com/servo/servo/blob/master/README.md#building here] to do a build.&lt;br /&gt;
&lt;br /&gt;
Note that build may take up to 30 minutes, based on your system configuration. You can build on [https://janitor.technology/ Janitor] to reduce the build time.&lt;br /&gt;
&lt;br /&gt;
==='''Building on the cloud'''===&lt;br /&gt;
&lt;br /&gt;
This is the simplest and the fastest way to deploy and test an instance of servo. No configuration is required on your machine. &lt;br /&gt;
&lt;br /&gt;
1. Go to &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;http://janitor.technology&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Click on '''New Container''' for Servo&lt;br /&gt;
&lt;br /&gt;
3. Enter your email address to gain access to your container&lt;br /&gt;
&lt;br /&gt;
4. Once logged in, go '''Containers''' on the top right. &lt;br /&gt;
&lt;br /&gt;
5. You will now see a container - Click on the '''IDE''' button to open your online IDE environment.&lt;br /&gt;
&lt;br /&gt;
6. Change directory to '''/home/user''' and create a new directory, say '''servo_test'''&lt;br /&gt;
&lt;br /&gt;
7. Go to this new directory and clone our repository as mentioned above&lt;br /&gt;
&lt;br /&gt;
8. Upon cloning you should see a /servo directory within 'servo_test' &lt;br /&gt;
&lt;br /&gt;
9. Go to /servo&lt;br /&gt;
&lt;br /&gt;
10. It is now time to build - run the following command: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach build --dev&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If all goes well you will see a success message - 'Build Completed'&lt;br /&gt;
&lt;br /&gt;
==='''Building locally'''===&lt;br /&gt;
&lt;br /&gt;
Local build instructions for Windows environments are given below - &lt;br /&gt;
&lt;br /&gt;
1. Install Python for Windows (https://www.python.org/downloads/release/python-2714/). &lt;br /&gt;
&lt;br /&gt;
The Windows x86-64 MSI installer is fine. You should change the installation to install the &amp;quot;Add python.exe to Path&amp;quot; feature.&lt;br /&gt;
&lt;br /&gt;
2. Install virtualenv.&lt;br /&gt;
&lt;br /&gt;
In a normal Windows Shell (cmd.exe or &amp;quot;Command Prompt&amp;quot; from the start menu), do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;pip install virtualenv&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If this does not work, you may need to reboot for the changed PATH settings (by the python installer) to take effect.&lt;br /&gt;
&lt;br /&gt;
3. Install Git for Windows (https://git-scm.com/download/win). DO allow it to add git.exe to the PATH (default settings for the installer are fine).&lt;br /&gt;
&lt;br /&gt;
4. Install Visual Studio Community 2017 (https://www.visualstudio.com/vs/community/). &lt;br /&gt;
&lt;br /&gt;
You MUST add &amp;quot;Visual C++&amp;quot; to the list of installed components. It is not on by default. Visual Studio 2017 MUST installed to the default location or mach.bat will not find it.&lt;br /&gt;
&lt;br /&gt;
If you encountered errors with the environment above, do the following for a workaround:&lt;br /&gt;
&lt;br /&gt;
Download and install Build Tools for Visual Studio 2017&lt;br /&gt;
&lt;br /&gt;
Install python2.7 x86-x64 and virtualenv&lt;br /&gt;
&lt;br /&gt;
5. Run &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;mach.bat build -d&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt; to build&lt;br /&gt;
&lt;br /&gt;
If you have troubles with x64 type prompt as mach.bat set by default:&lt;br /&gt;
&lt;br /&gt;
you may need to choose and launch the type manually, such as x86_x64 Cross Tools Command Prompt for VS 2017 in the Windows menu.)&lt;br /&gt;
&lt;br /&gt;
cd to/the/path/servo&lt;br /&gt;
&lt;br /&gt;
python mach build -d&lt;br /&gt;
&lt;br /&gt;
Build instructions for all other environments are available [https://github.com/servo/servo here]&lt;br /&gt;
&lt;br /&gt;
==='''Verifying a build'''===&lt;br /&gt;
&lt;br /&gt;
We can quickly verify if the servo build is working by running the command &lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;code&amp;gt;'./mach run http://www.google.com'&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will open a browser instance rendering the Google homepage. &lt;br /&gt;
&lt;br /&gt;
This should be straightforward on any environment that has rendering support - Linus, Windows, MacOS, Android&lt;br /&gt;
&lt;br /&gt;
If you are on Janitor environment, it's IDE will not provide rendering support. You might receive an error along the lines of 'No renderer found' upon executing the command.&lt;br /&gt;
&lt;br /&gt;
'''Workaround''': On the 'Container' page on janitor.technology click on '''VNC''' for your container. Click '''Connect''' on the new tab that opens up.&lt;br /&gt;
&lt;br /&gt;
You should now have remote access to a UI with a command line. Simply run the above command and the web page should render.&lt;br /&gt;
&lt;br /&gt;
=='''Test Plan'''==&lt;br /&gt;
&lt;br /&gt;
'''Testing Approach'''&lt;br /&gt;
&lt;br /&gt;
Since our implementation adds the Microdata tags into the DOM, the approach used for testing is to directly query the DOM tree using JavaScript to detect the presence of Microdata in an HTML tag within the DOM. This will confirm if the engine was able to parse these tags and add them to the DOM.&lt;br /&gt;
Also, as per the microdata specifications, the tags can be contained in any HTML tag. Therefore, the test data consists of several HTML tags like 'div', 'ul', 'li', 'span' etc.  each with a microdata ('itemprop' and 'itemtype') attribute. &lt;br /&gt;
&lt;br /&gt;
'''Test Framework'''&lt;br /&gt;
&lt;br /&gt;
We have used the 'web-platform-tests' (WPT) suite for testing. It is an existing test suite used in the Servo project. It generally consists of two test types: JavaScript tests (to test DOM features, for example) written using the testharness.js library and reference tests (to test rendered output with what's expected to ensure that the rendering is done properly) written using the W3C reftest format. Since the microdata tags do not render anything on the page, only DOM testing is in scope. &lt;br /&gt;
&lt;br /&gt;
testharness.js has been used to write the tests; it complements our testing approach as it can be called directly via JS within an HTML page. It provides a convenient API for making common assertions, and to work both for testing synchronous and asynchronous DOM features in a way that promotes clear, robust, tests. &lt;br /&gt;
&lt;br /&gt;
testharness.js returns the result of the test directly from the html page which is then used by WPT to interpret the result of the test.&lt;br /&gt;
&lt;br /&gt;
'''Test Cases'''&lt;br /&gt;
&lt;br /&gt;
In order to test our implementation, the following scenarios have been evaluated.&lt;br /&gt;
&lt;br /&gt;
'''Attribute with a single value should be stored properly''' &lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e1.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Space separated values in the attributes should be stored as different values'''&lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc2.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e2.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Duplicate occurrence of attributes should be ignored'''&lt;br /&gt;
&lt;br /&gt;
Input Data&lt;br /&gt;
&lt;br /&gt;
[[File:tc3.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e3.PNG]]&lt;br /&gt;
&lt;br /&gt;
'''Extra whitespace in the attribute list should be ignored'''&lt;br /&gt;
&lt;br /&gt;
Input Data &lt;br /&gt;
&lt;br /&gt;
[[File:tc4.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e4.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Attribute has not been set (null or empty)'''&lt;br /&gt;
&lt;br /&gt;
Input Data&lt;br /&gt;
&lt;br /&gt;
[[File:tc5.PNG]]&lt;br /&gt;
&lt;br /&gt;
Test Script&lt;br /&gt;
&lt;br /&gt;
[[File:e5.PNG]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Testing Steps'''&lt;br /&gt;
&lt;br /&gt;
Please read and perform the actions on the Build and Verification sections properly before testing.&lt;br /&gt;
&lt;br /&gt;
1) Run the command &amp;lt;big&amp;gt;&amp;lt;code&amp;gt;./mach tests-wpt /tests/wpt/mozilla/tests/mozilla/microdata/&amp;lt;/code&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) A webpage should render showing the status of the test.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Here is the output of test-wpt after the tests have been run successfully.&lt;br /&gt;
&lt;br /&gt;
[[File:Tests.PNG]]&lt;br /&gt;
&lt;br /&gt;
==='''Dependencies'''===&lt;br /&gt;
'''html5ever''' - HTML attribute names are fetched in Servo from a lookup file in the html5ever module. The html5ever module was augmented with the 'itemprop' and 'itemtype' attributes for use in Servo. &lt;br /&gt;
&lt;br /&gt;
==='''Pull Request'''===&lt;br /&gt;
&lt;br /&gt;
The pull request used to incorporate our changes upstream is available [https://github.com/servo/servo/pull/19038 here]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112253</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112253"/>
		<updated>2017-11-07T05:33:17Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Sample outcomes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Requirements &amp;amp; Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
==='''Sample Outcomes'''===&lt;br /&gt;
&lt;br /&gt;
Sample outputs of the extraction algorithms are given below&lt;br /&gt;
&lt;br /&gt;
[https://html.spec.whatwg.org/multipage/microdata.html#extracting-json  JSON conversion output]&lt;br /&gt;
&lt;br /&gt;
[https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard  vCard conversion output]&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The algorithms for converting microdata to JSON and vCard formats would be implemented in the Rust implementation of the Document Object Model - '''document.rs'''. The WHATWG specification provides the details for the necessary checks that have to be performed on the microdata before conversion. &lt;br /&gt;
&lt;br /&gt;
Once the vCard and JSON files have been created, a notification would be sent to servoshell, via a lightweight data-structure, so that it can detect the presence of microdata. As per our design, the servoshell would be modified to be able to make the vCard file available for the user to download.&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112252</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112252"/>
		<updated>2017-11-07T05:32:14Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Sample outcomes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Requirements &amp;amp; Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
==='''Sample outcomes'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Sample JSON conversion output]&lt;br /&gt;
&lt;br /&gt;
[https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Sample vCard conversion output]&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The algorithms for converting microdata to JSON and vCard formats would be implemented in the Rust implementation of the Document Object Model - '''document.rs'''. The WHATWG specification provides the details for the necessary checks that have to be performed on the microdata before conversion. &lt;br /&gt;
&lt;br /&gt;
Once the vCard and JSON files have been created, a notification would be sent to servoshell, via a lightweight data-structure, so that it can detect the presence of microdata. As per our design, the servoshell would be modified to be able to make the vCard file available for the user to download.&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112251</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112251"/>
		<updated>2017-11-07T05:31:58Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Sample outcomes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Requirements &amp;amp; Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
==='''Sample outcomes'''===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[ https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Sample JSON conversion output]&lt;br /&gt;
&lt;br /&gt;
[ https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Sample vCard conversion output]&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The algorithms for converting microdata to JSON and vCard formats would be implemented in the Rust implementation of the Document Object Model - '''document.rs'''. The WHATWG specification provides the details for the necessary checks that have to be performed on the microdata before conversion. &lt;br /&gt;
&lt;br /&gt;
Once the vCard and JSON files have been created, a notification would be sent to servoshell, via a lightweight data-structure, so that it can detect the presence of microdata. As per our design, the servoshell would be modified to be able to make the vCard file available for the user to download.&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112250</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112250"/>
		<updated>2017-11-07T05:31:27Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Requirements &amp;amp; Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
==='''Sample outcomes'''===&lt;br /&gt;
&lt;br /&gt;
[Sample JSON conversion output https://html.spec.whatwg.org/multipage/microdata.html#extracting-json]&lt;br /&gt;
&lt;br /&gt;
[Sample vCard conversion output https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard]&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The algorithms for converting microdata to JSON and vCard formats would be implemented in the Rust implementation of the Document Object Model - '''document.rs'''. The WHATWG specification provides the details for the necessary checks that have to be performed on the microdata before conversion. &lt;br /&gt;
&lt;br /&gt;
Once the vCard and JSON files have been created, a notification would be sent to servoshell, via a lightweight data-structure, so that it can detect the presence of microdata. As per our design, the servoshell would be modified to be able to make the vCard file available for the user to download.&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112248</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112248"/>
		<updated>2017-11-07T05:28:31Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Scope */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Requirements &amp;amp; Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The algorithms for converting microdata to JSON and vCard formats would be implemented in the Rust implementation of the Document Object Model - '''document.rs'''. The WHATWG specification provides the details for the necessary checks that have to be performed on the microdata before conversion. &lt;br /&gt;
&lt;br /&gt;
Once the vCard and JSON files have been created, a notification would be sent to servoshell, via a lightweight data-structure, so that it can detect the presence of microdata. As per our design, the servoshell would be modified to be able to make the vCard file available for the user to download.&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112247</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112247"/>
		<updated>2017-11-07T05:28:07Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The algorithms for converting microdata to JSON and vCard formats would be implemented in the Rust implementation of the Document Object Model - '''document.rs'''. The WHATWG specification provides the details for the necessary checks that have to be performed on the microdata before conversion. &lt;br /&gt;
&lt;br /&gt;
Once the vCard and JSON files have been created, a notification would be sent to servoshell, via a lightweight data-structure, so that it can detect the presence of microdata. As per our design, the servoshell would be modified to be able to make the vCard file available for the user to download.&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
	<entry>
		<id>https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112246</id>
		<title>CSC/ECE 517 Fall 2017/Semester Project - Implement the Microdata API</title>
		<link rel="alternate" type="text/html" href="https://wiki.expertiza.ncsu.edu/index.php?title=CSC/ECE_517_Fall_2017/Semester_Project_-_Implement_the_Microdata_API&amp;diff=112246"/>
		<updated>2017-11-07T05:26:11Z</updated>

		<summary type="html">&lt;p&gt;Vhhebbar: /* Design */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=='''Background'''==&lt;br /&gt;
&lt;br /&gt;
This project is the second phase of the OSS project - M1752 Implement the Microdata API. Please refer to the phase 1 documentation on the [http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Wiki] prior to going through this document to gain familiarity with the components involved and '''build instructions'''&lt;br /&gt;
&lt;br /&gt;
=='''Introduction'''== &lt;br /&gt;
&lt;br /&gt;
==='''Servoshell'''===&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell] is a work-in-progress front-end for the servo browser engine.&lt;br /&gt;
&lt;br /&gt;
==='''Scope'''===&lt;br /&gt;
The scope of this project is to implement algorithms to interpret JSON and vCard data present in the form of microdata, in a webpage and to notify the embedder, in this case servoshell. This would allow the embedder to display this data as required.&lt;br /&gt;
&lt;br /&gt;
The following steps are to be performed - &lt;br /&gt;
&lt;br /&gt;
1) Implement and test the algorithm to extract JSON from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-a-vcard Specification Details]&lt;br /&gt;
&lt;br /&gt;
2) Implement and test the algorithm to extract a vCard from microdata. [https://html.spec.whatwg.org/multipage/microdata.html#extracting-json Specification Details]&lt;br /&gt;
&lt;br /&gt;
3) Use these algorithms to extract metadata from each page after it finishes loading and send it to the compositor&lt;br /&gt;
&lt;br /&gt;
4) Notify any embedding code of the newly-extracted metadata&lt;br /&gt;
&lt;br /&gt;
5) Modify the servoshell embedding to use the new notification and create a vCard file if available&lt;br /&gt;
&lt;br /&gt;
=='''Design'''==&lt;br /&gt;
&lt;br /&gt;
The algorithms for converting microdata to JSON and vCard formats would be implemented in the Rust implementation of the Document Object Model - '''document.rs'''. The WHATWG specification provides the details for the necessary checks that have to be performed on the microdata before conversion. &lt;br /&gt;
&lt;br /&gt;
Once the vCard and JSON files have been created, a notification would be sent to servoshell, via a lightweight data-structure, so that it can detect the presence of microdata. As per our design, the servoshell would be modified to be able to send the vCard as a file back to the user.&lt;br /&gt;
&lt;br /&gt;
The below diagram provides details on the components involved in the process flow for the changes in scope&lt;br /&gt;
&lt;br /&gt;
[[File:Design2.png]]&lt;br /&gt;
&lt;br /&gt;
The diagram below outlines the sequence of operations that take place in order for servoshell to interpret the microdata. &lt;br /&gt;
&lt;br /&gt;
[[File:flow.png]]&lt;br /&gt;
&lt;br /&gt;
=='''References'''==&lt;br /&gt;
&lt;br /&gt;
[https://github.com/servo/servo/wiki/Microdata-project Microdata Project]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.expertiza.ncsu.edu/index.php/CSC/ECE_517_Fall_2017/M1752_Implement_the_Microdata_API Phase 1 Wiki Page]&lt;br /&gt;
&lt;br /&gt;
[https://github.com/paulrouget/servoshell Servoshell]&lt;br /&gt;
&lt;br /&gt;
http://html5doctor.com/microdata/  &lt;br /&gt;
&lt;br /&gt;
http://web-platform-tests.org/writing-tests/testharness-api.html&lt;br /&gt;
&lt;br /&gt;
https://html.spec.whatwg.org/multipage/microdata.html  &lt;br /&gt;
&lt;br /&gt;
https://code.tutsplus.com/tutorials/html5-microdata-welcome-to-the-machine--net-12356  &lt;br /&gt;
&lt;br /&gt;
http://www.servo.org&lt;/div&gt;</summary>
		<author><name>Vhhebbar</name></author>
	</entry>
</feed>