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.
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.
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.
This is a generic Pointer that could be subclassed for extensibility.
ptr:Pointer
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)
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)
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)
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)
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
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
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)
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)
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)
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
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
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)
ptr:RangePointer (rdfs:subClassOf ptr:CompoundPointer) // inherits ptr:startPointer // pointer to the end of the range ptr:endPointer (rdfs:range ptr:SinglePointer)
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)
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)
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)
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)