XML-QL Follow up
Gerald Huck
huck at darmstadt.gmd.de
Wed Oct 28 09:59:05 GMT 1998
At GMD-IPSI, we have a tool called Jedi which is able to
perform SQL/OQL like queries based on internal
DOM representations of XML documents.
XML element constructors serve the construction of a new DOM
in the select-clause. Embedding the query result elements within one result
element and
XML document constructor, this is all what is needed to generate a
new XML document (which can be written to a file, stdout, ...).
The from part defines where the data needs to be fetched from and offers
join functionality. Join predicates or other selection predicates can be
given in the where clause.
Access to the queried XML document and its content is realized on top of
DOM methods.
These are either exposed directly or implement short hand operators,
e.g. 'element.attribute' to access element attributes
or 'element["name"]' to access the first child element named "name".
In the following i give a fairly complex query which constructs a new
XML document from three sources, combining local weather forecasts,
traveling information and golfclub information to provide an
'integrated' view on multiple sources.
The XML "records" of the original sources look like:
<golfclub id="platz0001"
href="http://www.golffuehrer.de/scripts/ab2.idc?CLUBNR=0001">
<address>
<club>Golf- und Land-Club Berlin Wannsee e.V.</club>
<street>Golfweg 22</strasse>
<zipcode>14109</zipcode>
<city>Berlin</city>
<telephone>030-8067060</telephone>
<fax>-80670610</fax>
</address>
<greenfee>
<normal>100</normal>
<weekend>120</weekend>
</greenfee>
<info>
<description>Die Anlage liegt in einer idyllischen markischen Landschaft
und bietet fur Golfer jeder Spielstarke aufgrund des machtigen
Baumbestandes und teilweise erheblichen Gelandeschwierigkeiten sowohl eine
hohe sportliche Herausforderung als auch ein landschaftliches Erlebnis.
Enge Bahnen erfordern einen prazisen geraden Drive.</description>
<holes>18</holes>
<length>6088</length>
</info>
<policy>Gaste sind willkommen. Clubausweis mit eingetragenem Hdc (34) ist
erforderlich. Gaste in Mitgliederbegleitung und nach Voranmeldung.</policy>
<handicap>
<normal>34</normal>
<weekend>34</weekend>
</handicap>
</golfclub>
------------------------------------------
<route>
<from>53757</from>
<to>93333</to>
<distance>481.9</distance>
<time>274</time>
<map>5375793333.gif</map>
</route>
------------------------------------------
<weather>
<zipcode>87724</zipcode>
<date>980922</date>
<temperature>15</temperature>
<rainprob>10</rainprob>
<wind>9</wind>
<forecast>11</forecast>
</weather>
------------------------------------------
QUERY:
XML.Document(
<queryresult> // constructor for result element
select
// generates XML-Elements containing information about golf-links,
// current weather information and travel information
<golfclub id=golfclub.id href=golfclub.href> // setting attributes from
original attributes
// inserting original golfclub record children as new children
golfclub.children(),
// inserting information from other documents
weather,
route
</golfclub>
from
route in (
// all routes which are less than 50km from start city
select r
from r in XML.Document("route.xml").descendants("route") // instantiates
DOM and gets route elements
where r["from"].text() == "50987" // Zipcode of city where travel starts
and route["distance"].double() < 50.0
),
golfclub in (
// all golfclubs with a normal greenfee < 80 DM
select g
from g in XML.Document("golf.xml").descendants("golfclub")
where g["address"]["zipcode"].text()==r["to"].text() // join with route
and g["greenfee"]["normal"].int() < 80
),
weather in (
select w
from w in XML.Document("weather.xml").descendants("weather")
where w["zipcode"].text()==r["to"].text()
)
</queryresult>
)
------------------------
USAGE
We use this query language within a XML broker architecture.
A Web demo will hopefully be available from our Web server soon
(It requires IE5beta currently to render XML results - not used by everyone
:-))
------------------------
IMPORTANT NOTE
The presented query facilities have NOT BEEN TAILORED to XML specifics.
Rather, the presented query facilities are part of Jedi's scripting
capabilities.
Jedi offers flexible means to generate wrappers for arbitrary textual
sources
(based on a failure tolerant parser), as well as to other sources, e.g.
accessible
via JDBC.
The query language is only a simple mean to provide (integrated) views.
Therefore, Jedi supports other application scenarios as well:
- extracting semi-structured data from text documents, modeling them in
XML
(used in a BIO-Informatics project)
- accessing XML docs, storing them in a relational DBMS
- converting relational data to XML documents
- accessing Java objects
- merging different modeling paradigms within one scripting language,
offering uniform syntactic access to all of them.
For further information, you can visit Jedi's homepage at:
http://www.darmstadt.gmd.de/oasys/projects/jedi/index.html
However, the available material concentrates on the built-in failure
tolerant parser
but detailed descriptions about the scripting facilities are still missing.
( The current language is simple, but proprietary - we try to adapt it to
ECMA-Script as much as possible, but will keep query extensions and
XML constructors for convenience. )
Gerald Huck
German National Research Center for Information Technology (GMD-IPSI)
xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)
More information about the Xml-dev
mailing list