[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

XLink implementation on Scheme



Hello!

I'm working on implementation of XLink on Scheme. 
I have currently made a prototype of an extension to 
a SSAX parser which understands XLink markup. The
source code for Gambit, PLT, Chicken and Guile is
available at
http://www196.pair.com/lisovsky/download/contrib/xlink/

The xlink-parser is a specialized SSAX parser. In
fact, it uses Oleg Kiselyov's SSAX:XML->SXML function
as a ptototype, adding some extra features to it. The
xlink-parser function has the same arguments as a 
SSAX:XML->SXML function, i.e.
 port - an input port for an XML document
 namespace-prefix-assig - namespace prefixes

The result is presented as a list of two elements:
 (sxml-tree  remote-resources-participating-in-links)
where
 sxml-tree is an SXML presentation of a document (the
   result is equal to the result of SSAX:XML->SXML 
   function, if applyed to the same document) 
 remote-resources-participating-in-links is itself a
   list, it contains all remote resources which are
   declared by XLink markup presented in a document
   (it is a null list if there are no XLink elements
   in a document):

remote-resources-participating-in-links = 
  (remote-resource remote-resource ...)
remote-resource = (URI role? linkbase? XPointer-path
  position element)
URI - URI of a remote resource
role? - a boolean value: whether the URI denotates a
  role
linkbase? - a boolean value: whether the URI is a
  linkbase
XPointer-path - a path within a remote document (a
  string in a current version)
position - a position in a parsed file where this
  resource was encountered (for error messages)
element - an SXML list representing the element where
  this URI was declared

xlink-parser also has a side effect. It checks XLink
constraints and reports of an error if some constraint
is not fulfilled (the parsing is not terminated,
i.e. it can report of multiple errors). The current
version of the program is able to check the following
XLink constraints:

 Constraint: Attributes on Locator Element
 The locator-type element must have the locator
 attribute (see 5.4 Locator Attribute (href)). The
 locator attribute (href) must have a value supplied.

 Constraint: No Arc Duplication
 Each arc-type element must have a pair of from and to
 values that does not repeat the from and to values
 (respectively) for any other arc-type element in
 the same extended link; that is, each pair in a link
 must be unique.

 Constraint: type Value
 The value of the type attribute must be supplied. The
 value must be one of "simple", "extended", "locator",
 "arc", "resource", "title", or "none".

 Constraint: show Value
 If a value is supplied for a show attribute, it must
 be one of the values "new", "replace", "embed", 
 "other", and "none".

 Constraint: actuate Value
 If a value is supplied for an actuate attribute, it
 must be be one of the values "onLoad", "onRequest",
 "other", and "none".

 Constraint: label, from, and to Values
 The value of a label, from, or to attribute must be
 an NCName. If a value is supplied for a from or to
 attribute, it must correspond to the same value for 
 some label attribute on a locator- or resource-type
 element that appears as a direct child inside the
 same extended-type element as does the arc-type
 element.

The xlink-parser is unable to read any DTD yet.
I would be extremely grateful for your suggestions
and considerations.   

Dmitry Lizorkin