blob: 647b8d11b14dfb6f621d7524383270d4badc6967 [file] [log] [blame]
~~ Licensed to the Apache Software Foundation (ASF) under one or more
~~ contributor license agreements. See the NOTICE file distributed with
~~ this work for additional information regarding copyright ownership.
~~ The ASF licenses this file to You under the Apache License, Version 2.0
~~ (the "License"); you may not use this file except in compliance with
~~ the License. You may obtain a copy of the License at
~~
~~ http://www.apache.org/licenses/LICENSE-2.0
~~
~~ Unless required by applicable law or agreed to in writing, software
~~ distributed under the License is distributed on an "AS IS" BASIS,
~~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~~ See the License for the specific language governing permissions and
~~ limitations under the License.
Data XML and Node Types
XML is used as the data source for XQuery and must be parsed into Hyracks data. Each
node type defined in XPath and XQuery can be mapped into pointable defined in Apache
VXQuery\x99.
* XPath Node Types
*--------------------------------+----------------------+---------------+
| <<Data Type>> | <<Pointable Name>> | <<Data Size>> |
*--------------------------------+----------------------+---------------:
| Attribute Nodes | {{{https://git-wip-us.apache.org/repos/asf?p=vxquery.git;a=blob;f=vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/AttributeNodePointable.java}AttributeNodePointable}} | 1 + length |
*--------------------------------+----------------------+---------------:
| Document Nodes | {{{https://git-wip-us.apache.org/repos/asf?p=vxquery.git;a=blob;f=vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/DocumentNodePointable.java}DocumentNodePointable}} | 1 + length |
*--------------------------------+----------------------+---------------:
| Element Nodes | {{{https://git-wip-us.apache.org/repos/asf?p=vxquery.git;a=blob;f=vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/ElementNodePointable.java}ElementNodePointable}} | 1 + length |
*--------------------------------+----------------------+---------------:
| Node Tree Nodes | {{{https://git-wip-us.apache.org/repos/asf?p=vxquery.git;a=blob;f=vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/NodeTreePointable.java}NodeTreePointable}} | 1 + length |
*--------------------------------+----------------------+---------------:
| Processing Instruction Nodes | {{{https://git-wip-us.apache.org/repos/asf?p=vxquery.git;a=blob;f=vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/PINodePointable.java}PINodePointable}} | 1 + length |
*--------------------------------+----------------------+---------------:
| Comment Nodes | {{{https://git-wip-us.apache.org/repos/asf?p=vxquery.git;a=blob;f=vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/TextOrCommentNodePointable.java}TextOrCommentNodePointable}} | 1 + length |
*--------------------------------+----------------------+---------------:
| Text Nodes | {{{https://git-wip-us.apache.org/repos/asf?p=vxquery.git;a=blob;f=vxquery-core/src/main/java/org/apache/vxquery/datamodel/accessors/nodes/TextOrCommentNodePointable.java}TextOrCommentNodePointable}} | 1 + length |
*--------------------------------+----------------------+---------------:
* XML Mapping
The XML mapping to Hyracks pointables is fairly straight forward. The following example
shows how each node is mapped and saved into a byte array used by Hyracks.
** Example XML File
The example XML file comes from W3School XQuery tutorial.
----------------------------------------
<?xml version="1.0" encoding="ISO-8859-1"?>
<!-- Edited by XMLSpyÆ -->
<bookstore>
<book category="COOKING">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="CHILDREN">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="WEB">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<author>Per Bothner</author>
<author>Kurt Cagle</author>
<author>James Linn</author>
<author>Vaidyanathan Nagarajan</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="WEB">
<title lang="en">Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
----------------------------------------
** Example Hyracks Mapping
The mapping is explained through using some short hand for the above example XML file.
Realize the direct bytes will not be explained although the pointable names are used for
each piece of information.
----------------------------------------
NodeTree {
DocumentNode {bookstore}
sequence (children) {
ElementNode {book}
sequence (attributes) {
AttributeNode {category}
}
sequence (children) {
ElementNode {title:Everyday Italian}
sequence (attributes) {
AttributeNode {lang}
}
ElementNode {author}
ElementNode {year}
ElementNode {price}
}
ElementNode {book}
sequence (attributes) {
AttributeNode {category}
}
sequence (children) {
ElementNode {title:Harry Potter}
sequence (attributes) {
AttributeNode {lang}
}
ElementNode {author}
ElementNode {year}
ElementNode {price}
}
ElementNode {book}
sequence (attributes) {
AttributeNode {category}
}
sequence (children) {
ElementNode {title:XQuery Kick Start}
sequence (attributes) {
AttributeNode {lang}
}
ElementNode {author}
ElementNode {author}
ElementNode {author}
ElementNode {author}
ElementNode {author}
ElementNode {year}
ElementNode {price}
}
ElementNode {book}
sequence (attributes) {
AttributeNode {category}
}
sequence (children) {
ElementNode {title:Learning XML}
sequence (attributes) {
AttributeNode {lang}
}
ElementNode {author}
ElementNode {year}
ElementNode {price}
}
}
}
----------------------------------------