SXML

SXML

Infobox file format
name = SXML
icon =
extension = .sxml, .scm
mime = text/sxml
type code = TEXT
uniform type =
owner =
genre = markup language
container for =
contained by =
extended from =
extended to =
standard =

SXML is a way to write and process XML data in the form of S-expressions.

Textual correspondence between SXML and XML for a sample XML snippet is shown below:

XML SXML
Text node
(tag (@ (attr1 "value1") (attr2 "value2")) (nested "Text node") (empty))

The following two observation can be drawn from the above example:
# Textual notations for XML and SXML are much alike; informally, SXML textually differs from XML in relying on round brackets instead of angular braces.
# Additionally, SXML is not only a straightforward textual notation for XML data, but also a primary data structure for a family of functional programming languages, thus providing an illustrative approach for processing XML data with a general-purpose programming language.

Similarity between XML and S-expressions reified in SXML allows achieving close integration between XML data and programming language expressions, resulting in illustrativeness and simplicity of XML data processing for an application programmer.

Motivation

XML data processing languages suggested by the W3 Consortium, such as XPath, XSLT, XQuery etc., are not general-purpose programming languages and are thus not sufficient for implementing complete applications.For this reason, most XML applications are implemented by means of traditional programming languages, such as C and Java; or scripting languages, for example, Perl, JavaScript and Python.

An attempt to combine two different languages (for example, XPath and Java) leads to a problem known as impedance mismatch. Impedance mismatch problem consists of two aspects:
* Different data models. E.g. XPath models an XML document as a tree, while most general purpose programming languages have no native data types for a tree.
* Different programming paradigms. Say, XSLT is a functional language, while Java is object-oriented, and Perl is a procedural one.Impedance mismatch requires complicated converters and APIs (for example, DOM) to be used for combining such two languages.

Impedance mismatch problem can be reduced and even eliminated using the Scheme functional programming language for XML data processingKirill Lisovskiy, Dmitry Lizorkin. "SXML: an XML document as an S-expression" // Russian Digital Libraries Journal. – Moscow: IIS, 2003. – Vol. 6, No 2. – ISSN 1562-5419. - http://modis.ispras.ru/Lizorkin/Publications/sxml-eng.pdf] :
* Nested lists (S-expressions in Scheme) provide a natural representation for nested XML documents. Scheme represents its code and data as nested lists of dynamically typed elements. XML document, being a hierarchical structure of nested XML elements, can be thought of as a hierarchical nested Scheme list (so-called S-expression).
* Scheme is a functional language, as most XML-languages are (e.g. XSLT and XQuery). Scheme processes (nested) lists in a recursive manner which can be thought of as traversing/transforming the document tree.

Scheme, being a Lisp dialect, is a widely recognized scripting language.It is one of the most elegant and compact programming languages practically used: the description of Scheme standard consistsof 40 pages only.Scheme is a high-level programming language, suitable for fast prototyping.Moreover, Scheme programs are generally several times more compact than the equivalent C programs.

XML and SXML textual notations are much alike: informally, SXML replaces XML start/end tags with opening/closing brackets.On the other hand, SXML is an S-expression and is thus the main data structure for Scheme programming language, and consequently SXML can be easily and naturally processed via Scheme.

XML, XML Information Set and SXML

An XML document is essentially a tree structure.The start and the end tags of the root element enclose the whole content of the document, which may include other elements or arbitrary character data.Text with familiar angular brackets is an external representation of an XML document.Applications ought to deal with an internalized form: an XML Information Set, or its specializations (such as the DOM).This internalized form lets an application locate specific data or transform an XML tree into another tree.

The W3 Consortium defines the XML Information Set (Infoset) as an abstract data set that describes information available in a well-formed XML document.An XML document's information set consists of a number of "information items", which denote elements, attributes, character data, processing instructions, and other components of the document.Each information item has a number of associated "properties", e.g., name, namespace URI.Some properties -- for example, "children" and "attributes" -- are collections of other information items.Although technically Infoset is specified for XML, it largely applies to other semi-structured data formats, in particular, HTML.

XML document parsing is just one of possible ways to create an instance of XML Infoset.

It is worth a note that XML Information Set recommendation does not attempt to be exhaustive, nor does it constitute a minimum set of information items and properties.Its purpose is to provide a consistent set of definitions for use in other specifications that need to refer to the information in a well-formed XML document.

The abstract data model defined in the XML Information Set Recommendation is applicable to every XML-related specification of the W3 Consortium.Namely, the Document Object Model can be considered the application programming interface (API) for dealing with information items; the XPath data model uses the concept of nodes which can be derived from information items, etc.The DOM and the XPath data model are thus two instances of XMLInformation Set.

XML Information Set Recommendation itself imposes no restrictions on data structures or interfaces for accessing information items.Different interpretations are thus possible for the XML Information Set abstract data model.For example, it is convenient to consider an XML Information Set a tree structure, and the terms "information set" and "information item" are then similar in meaning to the generic terms "tree" and "node" respectively.

An information item may be also considered as a container for its properties, either text strings (e.g. name, namespace URI) or containers themselves (e.g. child elements for an XML element).The information set is thus a hierarchy of nested containers.Such a hierarchy of containers comprised of text strings and other containers greatly lends itself to be described by an S-expression, because the latter is recursively defined as a list whose members are either atomic values or S-expressions themselves.S-expressions are easy to parse into an internal representation suitable for traversal; they also have a simple external notation, which is relatively easy to compose even by hand.

SXML is a concrete instance of the XML Infoset in the form of S-expressions.Infoset's goal is to present in some form all relevant pieces of data and their abstract, container-slot relationships with each other.SXML gives the nest of containers a concrete realization as S-expressions, and provides means of accessing items and their properties.SXML is a "relative" of XPath and the DOM, whose data models are two other instances of the XML Infoset.SXML is particularly suitable for Scheme-based XML/HTML authoring, XPath queries, and tree transformations.

XML and SXML can thus be considered two syntactically different representations for the XML Information Set.

XML Specification

As noted in the previous section, SXML is the concrete instance of the XML Infoset in the form of S-expressions.Further discussion on SXML in this section is based on the SXML specification.

A simplified SXML grammar in EBNF notation is presented below.An SXML "" is a single Scheme symbol.

[1] ::= ( *TOP* * ) [2] ::= ( ? * ) [3] ::= ( @ * ) [4] ::= ( "value"? ) [5] ::= | "character data" | [6] ::= ( *PI* pi-target "processing instruction content string" )

Since an information item in the XML Infoset is a sum of its properties, a list is a particularly suitable data structure to represent an item.The head of the list, a Scheme identifier, names the item.For many items this is their (expanded) item name.For an information item that denotes an XML element, the corresponding list starts with element name, optionally followed by a collection of attributes.The rest of the element item list is an ordered sequence of element children, character data, processing instructions, and other elements in turn.Every child is unique; items never share their children even if the latter have the identical content.

The following example illustrates an XML element and its SXMLform (which satisfies the "" production in SXML grammar).

67 95
(WEIGHT (@ (unit "pound")) (NET (@ (certified)) "67") (GROSS "95"))

The value of an attribute is normally a string; it may be omitted (in case of HTML) for a boolean attribute, e.g., a "certified" attribute in the above example.

A collection of attributes is considered an information item in its own right, tagged with a special name "@".The character "@" may not occur in a well-formed XML name; therefore an "" cannot be mistaken for a list that represents an element.An XML document renders attributes, processing instructions and other meta-data differently fromthe element markup.In contrast, SXML represents element content and meta-data uniformly -- as tagged lists.
RELAX NG -- a schema language for XML -- also aims to treat attributes as uniformly as possible with elements.This uniform treatment, argues James Clark, is a significant factor in simplifying the language.SXML takes advantage of the fact that every XML name is also a valid Scheme identifier, but not every Scheme identifier is avalid XML name.This observation lets us introduce administrative names such as "@", "*PI*", "*TOP*" without worrying about potential name clashes.The observation also makes the relationship between XML andSXML well-defined.An XML document converted to SXML can be reconstructed into an equivalent XML document (in terms of the Infoset).Moreover, due to the implementation freedom given by the Infoset specification, SXML itself is an instance of the Infoset.

The XML Recommendation specifies that processing instructions (PI) are distinct from elements and character data; processing instructions must be passed through to applications.In SXML, PIs are therefore represented by nodes of a dedicated type "*PI*".
XPath and the DOM Level 2 treat processing instructions in a similar way.

A sample XML document and its SXML representation are both shown below, thus providing an illustrative comparison between nested XML tags and nested SXML lists.Note that the SXML document is a bit more compact than its XML counterpart.

783
(*TOP* (*PI* xml "version='1.0'") (di (@ (contract "728g")) (wt (@ (refnum "345")) (delivery (date (@ (month "6") (day "1") (year "2001"))) (weight "783"))

(vehicle (@ (type "lorry") (number "A567TP99"))))

(wt (@ (refnum "459")) (vehicle (@ (type "car") (number "25676043"))))))

SXML can also be considered an abstract syntax tree for a parsed XML document.An XML document or a well-formed part of it can automatically be converted into the corresponding SXML form via a functional Scheme XML parsing framework SSAX.

It is worth a note that SXML represents all the information contained in XML documents, including comments, namespaces and external entities.These are omitted in this section for the sake of simplicity,but they are considered in the SXML specification.

Example

For example, a simple XHTML page which looks like this: An example page

Hi, there!

This is just an >>example<< to show XHTML & SXML.

When translated to SXML it looks like this:

(*TOP* (@ (*NAMESPACES* (x "http://www.w3.org/1999/xhtml"))) (x:html (@ (xml:lang "en") (lang "en")) (x:head (x:title "An example page")) (x:body (x:h1 (@ (id "greeting")) "Hi, there") (x:p "This is just an >>example<< to show XHTML & SXML."))))

Each element's tag pair is replaced by a set of parentheses. The tag's name is not repeated at the end, it is simply the first symbol in the list. The element's contents follow, which are either elements themselves or strings. There is no special syntax required for XML attributes. In SXML they are simply represented as just another node, which has the special name of @. This can't cause a name clash with an actual "@" tag, because @ is not allowed as a tag name in XML. This is a common pattern in SXML: Anytime a tag is used to indicate a special status or something that is not possible in XML, a name is used that does not constitute a valid XML identifier.

We can also see that there's no need to "escape" otherwise meaningful characters like &amp; and &gt; as &amp;amp; and &amp;gt; entities. All string content is automatically escaped because it is considered to be pure content, and has no tags or entities in it. This also means it is much easier to insert autogenerated content and there is no danger that we might forget to escape user input when we display it to other users (which could lead to all kinds of nasty cross-site scripting attacks or other annoyances).

XML features

This section considers some important features of SXML, deductable from SXML grammar and properties of S-expressions.

XML elements and attributes

The uniformity of the SXML representation for elements, attributes, and processing instructions simplifies queries and transformations.For the SXML data model, attributes and processing instructions look like regular elements with a distinguished name.Therefore, query and transformation functions dedicated to attributes become redundant, because ordinary functions with distinguished names can be used.

The uniform representation for SXML elements and attributes is especially convenient for practical tasks.Differences between elements and attributes in XML are blurred.Choosing either an element or an attribute for representing concrete practical information is often a question of style, andsuch a choice can later be changed.Such a change in a data structure is expressed in SXML as simply an addition/removal of one hierarchy level, namely anattribute-list.This requires the minimal modification of an SXML application.For the SXML notation, the only difference between an attribute and an element is that the former is contained within the attribute-list (which is a special SXML node) and cannot have nested elements.

For example, if data restructuring requires that the weight of the delivered load, initially represented as a nested element, to be represented as an attribute, the SXML element

(delivery ... (weight "789")))
will be changed to
(delivery (@ (weight "789")) ...)

Such a notation for elements and attributes simplifies SXML data restructuring and allows uniform queries to be used for data processing.

XML document as a tree of uniform nodes

Since an SXML document is essentially a tree structure, it can be described in a more uniform way by introducing the term of an SXML "node" for nodes of this tree.

An SXML node can be defined on the basis of SXML grammar as a single production [N] given below.Alternatively, an SXML node can be defined as a set of two mutually-recursive datatypes: [N1] , [N2] and [N3] .In the latter case, a "Node" is constructed by adding a name to the "Nodelist" as its leftmost member; a Nodelist is itself a (sorted) list of Nodes.

[N] ::= | | | "character data: text string" | | [N1] ::= ( . ) | "text string" [N2] ::= ( * ) [N3] ::= | @ | *TOP* | *PI*

Such a consideration emphasizes SXML tree structure and the uniform representation for information items as S-expressions.

XML as a Scheme program

The syntax of LISP family programming languages, in particular, Scheme, is based on S-expressions used for both data and code representation.This makes it possible and convenient for Scheme programs to be treated as a semi-structured data and vice versa.

Since an SXML document and its nodes are S-expressions, they can be used for representing aScheme program. For making this possible, it is necessary (and sufficient) that the first member of every list contained in the SXML tree is a function.The rest members of the list are then the arguments, which are passed to that function.In accordance with SXML grammar, attribute and element names and special names must be bound to functions.

An SXML document or an SXML node that fulfils these requirements may be considered a Scheme program which can be evaluated, for example, by means of "eval" function.

For example, if "para" and "bold" are defined as functions as follows:

(define (para . x) (cons 'p x))(define (bold . x) (cons 'b x))
then the following SXML element
(para "plain" (bold "highlighted") "plain")
can be treated as a program, and the result of its evaluation is the SXML element:
(p "plain" (b "highlighted") "plain")
Note that the result of evaluating such a program is not necessarily an SXML element.Namely, a program may return a textual representation for the source data in XML or HTML; or even have a side effect, such as saving the SXML data in a relational database.

XML shortcomings

Because the underlying list representation is singly linked, the nodes have no access to either their previous siblings or the parent. As such, not all DOM and XPath traversal operations are possible with SXML unless you keep a stack, where each position has the parent nodes and the index of the traversed child node, for the traversed path of the current node.

Arbitrary position query like in DOM's NodeList.item or XPath's [] accessor is not optimal, because the list must be traversed until the nth node which is O(n), vesus a vector or array where the access is o(1).

In fact, the use of this and similar s-expression formats to represents XML is better suited for sequencial processing, like starting SAX events, inserting attributes or serializing to XML. The possible transformations are limited by the requirement of not needing either previous siblings or parents, or sacrificing simplicity and use a stack.

Citations

External links

[http://modis.ispras.ru/Lizorkin/sxml-tutorial.html SXML Tools Tutorial by Dmitry Lizorkin]

[http://pobox.com/~oleg/ftp/Scheme/xml.html Main SSAX/SXML page]

[http://www-106.ibm.com/developerworks/library/x-matters31.html XML Matters] : Investigating SXML and SSAX: Manipulating XML in the Scheme programming language by David Mertz, Ph.D. IBM developerWorks article

Detailed introduction, motivation and real-life case-studies of SSAX, SXML, SXPath and SXSLT. The paper and the complementary talk presented at the International Lisp Conference 2002. [http://pobox.com/~oleg/ftp/papers/SXs.pdf] [http://pobox.com/~oleg/ftp/papers/SXs-talk.pdf]

[http://www.neilvandyke.org/htmlprag/ HtmlPrag: Pragmatic Parsing and Emitting of HTML using SXML and SHTML]


Wikimedia Foundation. 2010.

Игры ⚽ Нужно сделать НИР?

Look at other dictionaries:

  • SISCWeb (web framework) — Infobox Software name = SISCWeb logo = caption = Second Interpreter of Scheme Code developer = Alessandro Colomba latest release version = 0.5 latest release date = April 27, 2007 operating system = Cross platform via JVM genre = Web application… …   Wikipedia

  • FJAX — Saltar a navegación, búsqueda FJAX es un código de programación informática similar a AJAX resultante de la fusión de varias tecnologías ya existentes tales como XML con HTML, Javascript con el objeto ActiveX XMLHttpRequest y otros usando… …   Wikipedia Español

  • Sedna — Эта статья  о системе управления базами данных. О карликовой планете см. (90377) Седна. Sedna Логотип Sedna Тип XML СУБД Разработчик ИСП РАН …   Википедия

  • Document Object Model — Not to be confused with Domain Object Model. HTML HTML and HTML5 Dynamic HTML XHTML XHTML Mobile Profile and C HTML Canvas element Character encodings Document Object Model Font family HTML editor HTML element HTML Fr …   Wikipedia

  • Gauche (Scheme implementation) — Infobox Software name = Gauche logo = caption = developer = Shiro Kawai latest release version = 0.8.13 latest release date = February 13, 2008 operating system = Cross platform genre = Programming language license = BSD License website =… …   Wikipedia

  • Perkins Restaurant and Bakery — Infobox Company | company name = Perkins Restaurant Bakery company company type = Franchising company slogan = Quality Forever For Everyone foundation = 1958 location = Memphis, Tennessee key people = Joseph Trungale, Chief Executive Officer |.… …   Wikipedia

  • GNU Guile — Infobox Software name = GNU Guile developer = Free Software Foundation latest release version = 1.8.5 Guile project site, [http://www.gnu.org/software/guile/ What s the latest news?] ] latest release date = Release date and age|2008|05|07… …   Wikipedia

  • XML Information Set — (XML Infoset) is a W3C specification describing an abstract data model of an XML document in terms of a set of information items . The definitions in the XML Information Set specification are meant to be used in other specifications that need to… …   Wikipedia

  • SoftQuad Software — is best known for its HoTMetaL HTML editing software. HoTMetaL was one of a series of applications created by SoftQuad for editing, viewing and publishing structured (SGML and XML) content. HoTMetaL was based upon a popular SGML Editor called… …   Wikipedia

  • CTAX — GNU Guile Entwickler: Free Software Foundation Aktuelle Version: 1.8.6 [1] …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”