Pointer Methods in RDF: Open Issues & New Requirements

Internal DRAFT 18 July, 2007


About this document

This document recollects new requirements and unsolved issues with the purpose of serving to help advance the Pointer Methods in RDF Editors' Draft of February 2007 to a more stable and complete Working Draft. The Evaluation and Repair Tools Working Group (ERT WG) intends to reflect this new requirements and address the open issues in future updates of the working draft. This document is an on-going work in progress and is subject to change at any time without advance notice.

Table of Contents


1. Class Model Overview

There has been quite a long discussion since the last draft that lead to an ostensible increase of the planned variety of pointers and a more complex model based on subclassing. The following graph shows how the different current classes and subclasses relates with each other through the classes hierarchy.

Pointers Classes Model

2. Pointers

In this section we can find a brief description of the classes involved in the new model and some open issues that need a final decision.

2.1. Pointer Class

This is a generic Pointer that could be subclassed for extensibility.

ptr:Pointer

2.2 PointerGroup Class

Represents a generic group of Pointers and superseeds the PointerCollection class.

The dedicated properties for each class of Pointer (pointer:xpointer, pointer:htmlpointer, pointer:linecharlenght, etc.) are no more needed as we are currently using a more elaborated subclassing approach.

ptr:PointerGroup (rdfs:subClassOf ptr:Pointer)
    ptr:pointer (rfds:range ptr:Pointer)

2.2.1 RelatedPointers Class

Represents a group of related pointers you use together for some purpose (pointers that point to different "things" at different places, but that have some relationship because they have a meaning as a group)

ptr:RelatedPointers (rdfs:subClassOf ptr:PointerGroup)

2.2.2 EquivalentPointers Class

Represents a group of equivalent pointers (pointers that point to the same "thing" at the same place, so they can be considered equivalents)

ptr:EquivalentPointers (rdfs:subClassOf ptr:PointerGroup)

2.3 SinglePointer Class

This is a generic single pointer that could be subclassed for extensibility.

Represents a pointers that point to a single "thing".

prt:SinglePointer (rdfs:subClassOf ptr:Pointer)
    // the scope within which the pointer operates
    ptr:reference (rdfs:range rdf:Resource)

2.3.1 XPathPointer Class

ISSUE #1: We have a new brand XPath version (2.0).

Apparently it may be a superset of version 1.0, and so backwards compatible, but we need to check to be sure.

A new ptr:version or similar property may be necessary here, and we may want to have it also in other classes (e.g. XPointerPointer) to allow future versions.

ptr:XPathPointer (rdfs:subClassOf ptr:SinglePointer)
    // XPath expression
    ptr:expression
    // point to a Namespace class as defined in the current draft (2.4.1)
    ptr:namespace

2.3.2 XPointerPointer Class

ISSUE #2: It is not clear now how to handle namespaces

(Ref. from the spec: http://www.w3.org/TR/2003/REC-xptr-framework-20030325/#nsContext)

ptr:XPointerPointer (rdfs:subClassOf ptr:SinglePointer)
    // XPointer expression
    ptr:expression    

2.3.3 LineCharPointer Class

ISSUE #3: We need to finally define the start values for counting: zero or one (and probably coordinate to use the same criterion for the rest of start values (issues #5, #7, #12, #14).

There is some preference for starting at one from the Test Sample Development Task Force (TSD TF):

(Ref: http://lists.w3.org/Archives/Public/public-wai-ert-tsdtf/2006Sep/0008.html)

ISSUE #4: We have to decide between rename the current properties as ptr:lineNumber and ptr:charNumber, or just clarify in the text of the document.

ptr:LineCharPointer (rdfs:subClassOf ptr:SinglePointer)
    // line number within reference
    ptr:line or ptr:lineNumber (rdfs:range rdf:Literal)
    // character number within line given by ptr:line
    ptr:char or ptr:charNumber (rdfs:range rdf:Literal)

2.3.4 CharOffsetPointer Class

ISSUE #5: We need to define the start value for the offset: zero or one, and check for coordination with the rest of start values (issues #3, #7, #12, #14) .

ISSUE #6: We can think about merging this one and the following ByteOffsetPointer Class into a single OffsetPointer Class.

ptr:CharOffsetPointer (rdfs:subClassOf ptr:SinglePointer)
    // number of characters from the start of the reference
    ptr:charOffset (rdfs:range rdf:Literal)

2.3.5 ByteOffsetPointer Class

ISSUE #7: We need to define the start value for the offset: zero or one, and check for coordination with the rest of start values (issues #3, #5, #12, #14)

ISSUE #8: We can think about merging this one and the previous CharOffsetPointer into a single OffsetPointer Class.

ptr:ByteOffsetPointer (rdfs:subClassOf ptr:SinglePointer)
    // number of bytes from the start of the reference
    ptr:byteOffset (rdfs:range rdf:Literal)

2.3.6 CSSSelectorPointer Class

ISSUE #9: We need to define if they are applicable to HTML, CSS or both.

Note that there may be certain level of ambiguity using this selector with HTML (multiple selections with one rule, e.g. H2) or CSS (multiple rules with the same selectors). We should avoid this ambiguity if we want to use them as single selectors.

We could avoid CSS ambiguity using a rule number (e.g. ptr:ruleNumber optional property that will be always the 1st if the property is omitted). A similar idea could be used for HTML with a ptr:ocurrence property for instance.

ISSUE #10: We may need to distinguish between selectors from different CSS versions (CSS1, CSS2, CSS2.1, CSS3) using a ptr:version property for example.

ptr:CSSSelectorPointer (rdfs:subClassOf ptr:SinglePointer)
    // CSS selector
    ptr:selector

2.3.7 HTMLPointer Class

A sort of "fuzzy" pointer specially intended for not well-formed (x)html.

ISSUE #11: We don't have a formal definition for this yet. There were several discussions before but not definitive conclusions until now:

We need to advance in one of the following directions:

ptr:HTMLPointer (rdfs:subClassOf ptr:SinglePointer)
    // HtmlPointer expression
    ptr:expression

2.4 CompoundPointer Class

This is a generic (abstract) compound Pointer to a range that could be subclassed for extensibility.

The start point is defined here and the end will depend on the kind of Pointer

ptr:CompoundPointer (rdfs:subClassOf ptr:Pointer)
    // pointer to the start of the range 
    ptr:startPointer (rdfs:range ptr:SinglePointer)

2.4.1 RangePointer Class

ptr:RangePointer (rdfs:subClassOf ptr:CompoundPointer)
    // inherits ptr:startPointer
    // pointer to the end of the range
    ptr:endPointer (rdfs:range ptr:SinglePointer)

2.4.2 CharSnippetRangePointer Class

The first character in the snippet will be defined by the inherited startPointer.

It includes the snippet itself.

ptr:CharSnippetPointer (rdfs:subClassOf ptr:CompoundPointer)
    ptr:charSnippet (rdfs:range rdf:Literal)

2.4.3 CharOffsetRangePointer Class

ISSUE #12: We need to define the start value for the offset: zero or one and check for coordination with the rest of start values (issues #3 #5 #7 #14)

ISSUE #13: We can think about replacing the Literal value with a CharOffsetPointer single Pointer (or a new generic OffsetPointer as seen at issues #6 and #8)

ptr:CharOffsetRangePointer (rdfs:subClassOf ptr:CompoundPointer)
    // number of characters from the inherited ptr:startPointer
    ptr:charOffset (rdfs:range rdf:Literal)

2.4.4 ByteSnippetRangePointer Class

The fist byte in the snippet will be defined by the inherited startPointer.

It includes the snippet itself.

ptr:ByteSnippetPointer (rdfs:subClassOf ptr:CompoundPointer)
    ptr:byteSnippet (rdfs:range rdf:Literal)

2.4.5 ByteOffsetRangePointer Class

ISSUE: #14: We need to define the start value for the offset: zero or one and check for coordination with the rest of start values (issues #3 #5 #7 #12)

ISSUE: #15: We can think about replacing the Literal value with a ByteOffsetPointer single Pointer (or a new generic OffsetPointer as seen at issues #6 and #8)

ptr:ByteOffsetRangePointer (rdfs:subClassOf ptr:CompoundPointer)
    // number of bytes from the inherited ptr:startPointer
    ptr:byteOffset (rdfs:range rdf:Literal)