Changes to the EARL Schema of December 2002

This pages captures the proposed changes to the current EARL Schema of December 2002, as well as the status of these changes. This page is an on-going work in progress and is subject to change at any time without advance notice. The changes captured in this page should assist the ERT WG in tracking some of the on-going discussions; only changes that are formally accepted by the group (through voting by the WG participants) will become part of the next draft schema.

Table of Contents:

XML Header

Current Schema:

<?xml version='1.0' encoding='ISO-8859-1'?>

Proposed Schema:

<?xml version='1.0' encoding='UTF-8'?>

Description:

Changed to UTF-8 for internationalization purposes.

Status:

Not reviewed.

Document Type Definition

Current Schema:

<!DOCTYPE rdf:RDF [
<!ENTITY earl 'http://www.w3.org/WAI/ER/EARL/nmg-strawman#'> 
     <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'> 
     <!ENTITY rdfs 'http://www.w3.org/TR/1999/PR-rdf-schema-19990303#'>
]> 

Proposed Schema:

<!DOCTYPE rdf:RDF [
<!ENTITY earl 'http://www.w3.org/WAI/ER/EARL/nmg-strawman#'> 
     <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'> 
     <!ENTITY rdfs 'http://www.w3.org/TR/1999/PR-rdf-schema-19990303#'>
     <!ENTITY dc 'http://purl.org/dc/elements/1.1/'>
     <!ENTITY foaf 'http://xmlns.com/foaf/0.1/'>
]> 

Description:

Added DC and FOAF entities.

Status:

Not reviewed.

Root Element

Current Schema:

<rdf:RDF xmlns:earl="&earl;"  
         xmlns:rdf="&rdf;" 
         xmlns:rdfs="&rdfs;"> 

Proposed Schema:

<rdf:RDF xmlns:earl="&earl;"  
         xmlns:rdf="&rdf;" 
         xmlns:rdfs="&rdfs;"
         xlmns:dc="&dc;"
         xlmns:foaf="&foaf;"> 

Description:

Added DC and FOAF namespaces.

Status:

Not reviewed.

Core Classes

Current Schema:

<rdfs:Class rdf:about="&earl;Assertion" rdfs:label="Assertion">
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> 
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;Assertor" rdfs:label="Assertor">
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> 
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;ConfidenceLevel" rdfs:label="ConfidenceLevel">
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/>
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;TestCase" rdfs:label="TestCase"> 
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> 
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;TestMode" rdfs:label="TestMode">
   <rdfs:subClassOf rdf:resource="&rdf;Resource">
</rdfs:Class>
<rdfs:Class rdf:about="&earl;TestResult" rdfs:label="TestResult">
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/>
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;TestSubject" rdfs:label="TestSubject"> 
   <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> 
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;ValidityLevel" rdfs:label="ValidityLevel"> 
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> 
</rdfs:Class> 

Proposed Schema:

<rdfs:Class rdf:about="&earl;Assertion" rdfs:label="Assertion">
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> 
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;Assertor" rdfs:label="Assertor">
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> 
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;ConfidenceLevel" rdfs:label="ConfidenceLevel">
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/>
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;TestCase" rdfs:label="TestCase"> 
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> 
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;TestMode" rdfs:label="TestMode">
   <rdfs:subClassOf rdf:resource="&rdf;Resource">
</rdfs:Class>
<rdfs:Class rdf:about="&earl;TestResult" rdfs:label="TestResult">
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/>
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;TestSubject" rdfs:label="TestSubject"> 
   <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> 
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;ValidityLevel" rdfs:label="ValidityLevel"> 
     <rdfs:subClassOf rdf:resource="&rdfs;Resource"/> 
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;Location" rdfs:label="Location"> 
     <rdfs:subClassOf rdf:resource="&rdfs;Container"/> 
</rdfs:Class> 

Description:

Added "Location" class to identify the location of the assertion within the subject.

Status:

Not reviewed.

Sub-Classes of TestSubject

Current Schema:

<rdfs:Class rdf:about="&earl;Tool" rdfs:label="Tool"> 
     <rdfs:subClassOf rdf:resource="&earl;TestSubject"/> 
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;UserAgent" rdfs:label="UserAgent">
     <rdfs:subClassOf rdf:resource="&earl;TestSubject"/>
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;WebContent" rdfs:label="WebContent">
     <rdfs:subClassOf rdf:resource="&earl;TestSubject"/>
</rdfs:Class> 

Proposed Schema:

<rdfs:Class rdf:about="&earl;Software" rdfs:label="Software">
     <rdfs:subClassOf rdf:resource="&earl;TestSubject"/>
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;WebContent" rdfs:label="WebContent">
     <rdfs:subClassOf rdf:resource="&earl;TestSubject"/>
</rdfs:Class> 

Description:

These are built-in subclasses of TestSubject. Developers can add other domain specific subclasses. It seems both "Tool" and "UserAgent" describe software. These can be tested against applicable standards and guidelines such as ATAG or UAAG. Unless these two classes will have different properties, it makes sense to summarize them into the more abstract class of "Software".

Status:

Not reviewed.

Sub-Classes of Assertor

Current Schema:

None.

Proposed Schema:

<rdfs:Class rdf:about="&foaf;Person" rdfs:label="Person">
     <rdfs:subClassOf rdf:resource="&earl;Assertor"/>
</rdfs:Class> 
<rdfs:Class rdf:about="&earl;Tool" rdfs:label="Tool">
     <rdfs:subClassOf rdf:resource="&earl;Assertor"/>
</rdfs:Class> 

Description:

Even though a "Person" evaluator may use tools to assist carrying out the test and generating EARL, it is different than automated (or semi-automated) evaluations which are more tools-centric. Also describing a "Person" evaluator is different from describing a "Tool". More about the properties of these in section "Properties of Assertor" below.

Status:

Not reviewed.

Properties of Assertion

Current Schema:

<rdf:Property rdf:about="&earl;mode" rdfs:label="mode">
     <rdfs:domain rdf:resource="&earl;Assertion"/>
     <rdfs:range rdf:resource="&earl;TestMode"/>
</rdf:Property>
<rdf:Property rdf:about="&earl;result" rdfs:label="result">
     <rdfs:domain rdf:resource="&earl;Assertion"/> 
     <rdfs:range rdf:resource="&earl;TestResult"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;subject" rdfs:label="subject">
     <rdfs:domain rdf:resource="&earl;Assertion"/> 
     <rdfs:range rdf:resource="&earl;TestSubject"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;testcase" rdfs:label="testcase">
     <rdfs:domain rdf:resource="&earl;Assertion"/> 
     <rdfs:range rdf:resource="&earl;TestCase"/> 
</rdf:Property> 
<rdf:Property rdf:about="&earl;assertedBy" rdfs:label="assertedBy">
     <rdfs:domain rdf:resource="&earl;Assertion"/> 
     <rdfs:range rdf:resource="&earl;Assertor"/> 
</rdf:Property> 

Proposed Schema:

<rdf:Property rdf:about="&rdf;ID" rdfs:label="ID">
     <rdfs:domain rdf:resource="&earl;Assertion"/>
     <rdfs:range rdf:resource="&rdf;Literal"/>
</rdf:Property>
<rdf:Property rdf:about="&earl;mode" rdfs:label="mode">
     <rdfs:domain rdf:resource="&earl;Assertion"/>
     <rdfs:range rdf:resource="&earl;TestMode"/>
</rdf:Property>
<rdf:Property rdf:about="&earl;result" rdfs:label="result">
     <rdfs:domain rdf:resource="&earl;Assertion"/> 
     <rdfs:range rdf:resource="&earl;TestResult"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;subject" rdfs:label="subject">
     <rdfs:domain rdf:resource="&earl;Assertion"/> 
     <rdfs:range rdf:resource="&earl;TestSubject"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;testcase" rdfs:label="testcase">
     <rdfs:domain rdf:resource="&earl;Assertion"/> 
     <rdfs:range rdf:resource="&earl;TestCase"/> 
</rdf:Property> 
<rdf:Property rdf:about="&earl;assertedBy" rdfs:label="assertedBy">
     <rdfs:domain rdf:resource="&earl;Assertion"/> 
     <rdfs:range rdf:resource="&earl;Assertor"/> 
</rdf:Property> 
<rdf:Property rdf:about="&earl;location" rdfs:label="location">
     <rdfs:subClassOf rdf:resource="&rdfs;Container"/> 
     <rdfs:domain rdf:resource="&earl;Assertion"/> 
     <rdfs:range rdf:resource="&earl;Location"/> 
</rdf:Property> 
<rdf:Property rdf:about="&earl;evidence" rdfs:label="evidence">
     <rdfs:subClassOf rdf:resource="&rdfs;Container"/> 
     <rdfs:domain rdf:resource="&earl;Assertion"/> 
     <rdfs:range rdf:resource="&earl;Assertion"/> 
</rdf:Property> 

Description:

Added "ID" to ensure each "assertion" is unique throughout a report. Added "location" property to identify the location of the assertion within the subject. Added "evidence" container to allow pointing to other assertions as reasons for the current assertion claim.

Status:

Not reviewed.

Properties of Assertor

Current Schema:

<rdf:Property rdf:about="&earl;contactInfo" rdfs:label="contactInfo">
     <rdfs:domain rdf:resource="&earl;Assertor"/> 
     <rdfs:range rdf:resource="&rdfs;Resource"/> 
</rdf:Property> 
<rdf:Property rdf:about="&earl;email" rdfs:label="email"> 
     <rdfs:domain rdf:resource="&earl;Assertor"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
     <rdfs:subPropertyOf rdf:resource="&earl;contactInfo"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;name" rdfs:label="name">
     <rdfs:domain rdf:resource="&earl;Assertor"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property> 
<rdf:Property rdf:about="&earl;platform" rdfs:label="platform"> 
     <rdfs:domain rdf:resource="&earl;Assertor"/> 
     <rdfs:range rdf:resource="&rdfs;Resource"/> 
</rdf:Property> 

Proposed Schema:

<rdf:Property rdf:about="&dc;title" rdfs:label="title">
     <rdfs:domain rdf:resource="&earl;Tool"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property> 
<rdf:Property rdf:about="&dc;hasVersion" rdfs:label="hasVersion"> 
     <rdfs:domain rdf:resource="&earl;Tool"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>
<rdf:Property rdf:about="&foaf;name" rdfs:label="name">
     <rdfs:domain rdf:resource="&foaf;Person"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property> 
<rdf:Property rdf:about="&foaf;mbox" rdfs:label="email"> 
     <rdfs:domain rdf:resource="&foaf;Person"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;usingTool" rdfs:label="usingTool"> 
     <rdfs:domain rdf:resource="&foaf;Person"/> 
     <rdfs:range rdf:resource="&earl;Tool"/> 
</rdf:Property> 

Description:

Changed identification properties to be more "Tool" or "Person" specific while reusing as much existing vocabulary as possible. Also added a "usingTool" property to indicate which tool(s) an evaluator used during the evaluation. Dropped "platform" property which is not defined beyond being a resource.

Status:

Not reviewed.

Properties of TestSubject

Current Schema:

<rdf:Property rdf:about="&earl;format" rdfs:label="format">
     <rdfs:domain rdf:resource="&earl;WebContent"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;reprOf" rdfs:label="reprOf"> 
     <rdfs:domain rdf:resource="&earl;WebContent"/> 
     <rdfs:range rdf:resource="&rdfs;Resource"/> 
</rdf:Property>

Proposed Schema:

<rdf:Property rdf:about="&dc;hasPart" rdfs:label="hasPart"> 
     <rdfs:domain rdf:resource="&earl;TestSubject"/> 
     <rdfs:range rdf:resource="&rdfs;TestSubject"/> 
</rdf:Property>
<rdf:Property rdf:about="&dc;isPartOf" rdfs:label="isPartOf"> 
     <rdfs:domain rdf:resource="&earl;TestSubject"/> 
     <rdfs:range rdf:resource="&rdfs;TestSubject"/> 
</rdf:Property>
<rdf:Property rdf:about="&dc;date" rdfs:label="date"> 
     <rdfs:domain rdf:resource="&earl;TestSubject"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;reprOf" rdfs:label="reprOf"> 
     <rdfs:domain rdf:resource="&earl;TestSubject"/> 
     <rdfs:range rdf:resource="&rdfs;Resource"/> 
</rdf:Property>
<rdf:Property rdf:about="&dc;format" rdfs:label="format">
     <rdfs:domain rdf:resource="&earl;TestSubject"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;http-header" rdfs:label="http-header">
     <rdfs:domain rdf:resource="&earl;WebContent"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>

Description:

Both "reprOf" and "format" should apply to any "TestSubject", while "http-header" is specific to "WebContent" subjects. Added "date" to allow time stamping of the subject. Added "hasPart" and "isPartOf" properties to allow relating subjects to each other. Changed "format" to DC.

Status:

Not reviewed.

Properties of TestResult

Current Schema:

<rdf:Property rdf:about="&earl;validity" rdfs:label="validity">   
     <rdfs:domain rdf:resource="&earl;TestResult"/> 
     <rdfs:range rdf:resource="&earl;ValidityLevel"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;message" rdfs:label="message">
     <rdfs:domain rdf:resource="&earl;TestResult"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;confidence" rdfs:label="confidence">
     <rdfs:domain rdf:resource="&earl;TestResult"/> 
     <rdfs:range rdf:resource="&earl;ConfidenceLevel"/> 
</rdf:Property>

Proposed Schema:

<rdf:Property rdf:about="&earl;validity" rdfs:label="validity">   
     <rdfs:domain rdf:resource="&earl;TestResult"/> 
     <rdfs:range rdf:resource="&earl;ValidityLevel"/> 
</rdf:Property>
<rdf:Property rdf:about="&dc;description" rdfs:label="description">
     <rdfs:domain rdf:resource="&earl;TestResult"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;confidence" rdfs:label="confidence">
     <rdfs:domain rdf:resource="&earl;TestResult"/> 
     <rdfs:range rdf:resource="&earl;ConfidenceLevel"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;precision" rdfs:label="presicion">   
     <rdfs:domain rdf:resource="&earl;TestResult"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>

Description:

Added "precision" property for heuristic evaluations that have certainity factors. Changed "earl:message" to "dc:description".

Status:

Not reviewed.

Properties of TestCase

Current Schema:

None.

Proposed Schema:

<rdf:Property rdf:about="&dc;hasPart" rdfs:label="hasPart"> 
     <rdfs:domain rdf:resource="&earl;TestCase"/> 
     <rdfs:range rdf:resource="&rdfs;TestCase"/> 
</rdf:Property>
<rdf:Property rdf:about="&dc;isPartOf" rdfs:label="isPartOf"> 
     <rdfs:domain rdf:resource="&earl;TestCase"/> 
     <rdfs:range rdf:resource="&rdfs;TestCase"/> 
</rdf:Property>

Description:

Added "hasPart" and "isPartOf" properties to allow relating test cases to each other.

Status:

Not reviewed.

Properties of Location

Current Schema:

None.

Proposed Schema:

<rdf:Property rdf:about="&earl;line" rdfs:label="line">
     <rdfs:domain rdf:resource="&earl;Location"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;xpath" rdfs:label="xpath">
     <rdfs:domain rdf:resource="&earl;Location"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>
<rdf:Property rdf:about="&earl;element-id" rdfs:label="element-id">
     <rdfs:domain rdf:resource="&earl;Location"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>
<rdf:Property rdf:about="&dc;description" rdfs:label="description">
     <rdfs:domain rdf:resource="&earl;Location"/> 
     <rdfs:range rdf:resource="&rdfs;Literal"/> 
</rdf:Property>

Description:

Added some possible location pointers. This section needs heavy refinement work.

Status:

Not reviewed.

Instances of Classes

Current Schema:

<earl:TestMode rdf:about="&earl;manual" rdfs:label="manual">
   <rdfs:comment>The test was performed by a human.</rdfs:comment>
</earl:TestMode>
<earl:TestMode rdf:about="&earl;automatic" rdfs:label="automatic">
    <rdfs:comment>The test was performed by a tool or machine.</rdfs:comment>
</earl:TestMode>
<earl:TestMode rdf:about="&earl;heuristic" rdfs:label="heuristic">
    <rdfs:comment>The test is derived from other test results.</rdfs:comment>
</earl:TestMode>

<earl:ValidityLevel rdf:about="&earl;pass" rdfs:label="pass"/> 
<earl:ValidityLevel rdf:about="&earl;fail" rdfs:label="fail"/>
<earl:ValidityLevel rdf:about="&earl;cannotTell" rdfs:label="cannotTell"/>
<earl:ValidityLevel rdf:about="&earl;notApplicable" rdfs:label="notApplicable"/>
<earl:ValidityLevel rdf:about="&earl;notTested" rdfs:label="notTested"/>

<earl:ConfidenceLevel rdf:about="&earl;low" rdfs:label="low"/>
<earl:ConfidenceLevel rdf:about="&earl;medium" rdfs:label="medium"/>
<earl:ConfidenceLevel rdf:about="&earl;high" rdfs:label="high"/>

Proposed Schema:

Same.

Status:

Not reviewed.