Revision 2014.1, Jan 2014
This specification defines a path expression language that enables navigation through an OGDL graph. The basic structure of a path is a list of elements separated by dots, where an element can be either a string, an index or a selector. For example:
config.network.ip
text.paragraph{2}
limits.range[1]
Indexes ( [n] ) select the nth-1 subnode, while selectors ( {n} ) select the nth-1 subnode with the same name as the token written before the selector. An empty selector ( {} ) selects all subnodes with the specified node name. Path character encoding is expected to be Unicode.
To clarify, given the following OGDL text:
a
b
x
b
y
1
z
the effect of applying different paths to it is as follows:
The following grammar rules or productions are written in a simplified EBNF format similar to the one used in the XML specification (see http://www.w3.org/TR/2004/REC-xml-20040204/#sec-notation), except that single quotes inclose single characters.
[1] path ::= element ( '.' element )*
[2] basic_element ::= token | quoted | index | selector
[3] element = basic_element (index|selector)?
[4] index ::= '[' number ']'
[5] selector ::= '{' number? '}'
[6] token := (unicode_letter | unicode_digit | '_')+
[7] quoted := '\'' string '\'' | '"' string '"'
[8] string := (unicode_letter | unicode_mark | unicode_number |
unicode_punctuation | unicode_symbol | unicode_separator_space )+
[9] number := (unicode_digit)+
Production 3 indicates that the dot that normally separates elements is optional before and index or selector.
Productions 7 and 8 state that any graphic character or inline space character can appear in a quoted string, but not line breaks.
Given the following OGDL text:
chapter title "Chapter 1" p "Some text" x "----------" p "More text" blank_page chapter title "Chapter 2"
the table bellow shows the outcome of applying some paths to it.
Path Outcome
---- ------------
chapter.title "Chapter 1"
chapter{0}.title "Chapter 1"
chapter{1}.title "Chapter 2"
chapter.p{} "Some text"
"More text"
chapter{}.title{} "Chapter 1"
"Chapter 2"
See the Change list