Chuyển đổi XML thành dữ liệu quan hệ sử dụng trong DB2
Ngu
ồn : quantrimang.com
Băm nhỏ với XML Schema chú thích
Trong phần tiếp theo này chúng tôi sẽ giới thiệu cho các bạn một phương pháp
khác để băm nhỏ các tài liệu XML thành các bảng quan hệ. Phương pháp này
được gọi là băm nhỏ giản đồ chú thích hay phân tách lược đồ chú thích vì nó
dựa trên các chú thích trong XML Schema. Các chú thích này sẽ định nghĩa
cách các thành phần XML và các thuộc tính trong dữ liệu XML của bạn để bản
đồ hóa vào các cột trong các bảng quan h
ệ như thế nào.
Để thực hiện quá trình băm nhỏ giản đồ có chú thích, bạn hãy thực hiện theo các
cách sau:
•
Nhận dạng và tạo các bảng mục tiêu quan hệ sẽ giữ dữ liệu được băm
nhỏ.
•
Chú thích XML Schema của bạn để định nghĩa việc bản đồ hóa từ XML
thành các bảng quan hệ.
•
Đăng ký XML Schema trong DB2 XML Schema Repository.
•
Băm nhỏ các tài liệu XML với các lệnh của bộ xử lý lệnh Command Line
Processor hoặc các thủ tục.
Giả dụ bạn đã định nghĩa các bảng quan hệ mà bạn muốn băm nhỏ, sau đây
chúng ta sẽ quan sát việc chú thích một XML Schema.
Việc chú thích XML Schema
Các chú thích của giản đồ, là các thành phần và các thuộc tính bổ sung trong
một XML Schema, nhằm cung cấp các thông tin bản đồ hóa. BD2 có thể sử
dụng các thông tin này để băm nhỏ
các tài liệu XML vào các bảng quan hệ. Cần
biết rằng các chú thích sẽ không thay đổi ngữ nghĩa học của XML Schema. Nếu
một tài liệu hợp lệ với giản đồ có chú thích thì nó cũng hợp lệ hóa với giản đồ
gốc và ngược lại. Bạn có thể sử dụng giản đồ có chú thích để hợp lệ hóa các tài
liệu XML giống như XML Schema gốc.
Dưới đây là một dòng từ một XML Schema:
<xs:element name="street" type="xs:string" minOccurs="1"/>
Dòng trên định nghĩa một thành phần XML có tên gọi street, và tuyên bố rằng dữ
liệu của nó là xs:string, thành phần này phải xuất hiện tối thiểu một lần. Bạn có
thể bổ sung một chú thích vào định nghĩa của thành phần này để chỉ thị nó là
thành phần sẽ được băm nhỏ vào cột STREET của bảng ADDRESS. Chú thích
gồm có hai thuộc tính bổ sung trong định nghĩa của thành phần:
<xs:element name="street" type="xs:string" minOccurs="1"
db2-xdb:rowSet="ADDRESS" db2-xdb:column="STREET"/>
Chú thích như vậy cũng có thể được cung cấp cho các thành phần giản đồ thay
vì các thuộc tính, xem thể hiện bên dưới. Bạn sẽ thấy trong hình 8 rằng tại sao
điều này lại h
ữu dụng.
<xs:element name="street" type="xs:string" minOccurs="1">
<xs:annotation>
<xs:appinfo>
<db2-xdb:rowSetMapping>
<db2-xdb:rowSet>ADDRESS</db2-xdb:rowSet>
<db2-xdb:column>STREET</db2-xdb:column>
</db2-xdb:rowSetMapping>
</xs:appinfo>
</xs:annotation>
<xs:element/>
Tiền tố xs được sử dụng cho tất cả các cấu trúc thuộc về ngôn ngữ XML
Schema, tiền tố db2-xdb được sử dụng cho tất cả các chú thích giản đồ DB2.
Các tiền tố này giúp bạn có thể phân biệt một cách rõ ràng và bảo đảm rằng giản
đồ có chú thích hợp lệ hóa với các tài li
ệu XML như giản đồ gốc.
Có 14 kiểu chú thích khác nhau. Chúng cho phép bạn chỉ định những gì băm
nhỏ, nơi băm, cách lọc hoặc biến đổi dữ liệu được băm nhỏ và thứ tự nào để
chèn vào các bảng mục tiêu. Bảng 4 cung cấp cho các bạn một cái nhìn tổng
quan về các chú thích có sẵn, chúng được chia thành các nhóm logic theo nhiệm
vụ của người dùng. Các chú thích riêng lẻ sẽ được miêu tả kỹ hơn trong bảng 5.
Nếu bạn muốn Sử dụng chú thích
Chỉ định các bảng mục tiêu để
băm
db2-xdb:rowSet
db2-xdb:column
db2-xdb:SQLSchema
db2-xdb:defaultSQLSchema
Chỉ định những gì cần băm db2-xdb:contentHandling
Chuyển đổi các giá trị dữ liệu
trong khi băm
db2-xdb:expression
db2-xdb:normalization
db2-xdb:truncate
Lọc dữ liệu
db2-xdb:condition
db2-xdb:locationPath
Bản đồ hóa một thành phần
hoặc thuộc tính vào nhiều cột.
db2-xdb:rowSetMapping
Bản đồ hóa một số thành phần
hoặc thuộc tính vào cùng cột
db2-xdb:table
Định nghĩa thứ tự trong các
hàng được chèn vào bảng mục
tiêu, tránh các phá vỡ tính toàn
vẹn.
db2-
xdb:rowSetOperationOrder
db2-xdb:order
Bảng 4. Tổng quan và việc nhóm các chú thích của giản đồ
Chú thích Mô tả
db2-
xdb:defaultSQLSchema
Giản đồ quan hệ mặc định cho các bảng mục tiêu
db2-xdb:SQLSchema Ghi đè giản đồ mặc định cho các bảng riêng rẽ.
db2-xdb:rowSet Tên bảng mà thành phần hoặc thuộc tính được bản
đồ hóa vào
db2-xdb:column Tên cột và thành phần hoặc thuộc tính được bản đồ
hóa
db2-xdb:contentHandling Với một thành phần XML, chú thích này sẽ định
nghĩa cách lấy giá trị được chèn vào cột mục tiêu.
db2-xdb:truncate Chỉ định giá trị sẽ được cắt hay không nếu chiều dài
của nó lớn hơn chiều dài của cột mục tiêu.
db2-xdb:normalization Chỉ thị cách xử lý không gian trắng (whitespace) –
các giá trị hợp lệ là whitespaceStrip, canonical, và
original
db2-xdb:expression Chỉ định biểu thức sẽ được áp dụng cho dữ liệu
trước khi chèn vào bảng mục tiêu.
db2-xdb:locationPath Các bộ lọc dựa trên nội dung XML. Cho ví dụ, sẽ
được băm nhỏ vào bảng cust nếu đó là một địa chỉ
khách hàng; còn sẽ được băm nhỏ vào bảng
employee nếu đó là địa chỉ nhân viên.
db2-xdb:condition Chỉ định các điều kiện của giá trị để dữ liệu được
chèn vào bảng mục tiêu chỉ khi tất cả các điều kiện
thỏa mãn.
db2-xdb:rowSetMapping Cho phép người dùng chỉ định nhiều bản đồ hóa,
đối với cùng hoặc các bảng khác nhau, cho một
thành phần hoặc thuộc tính.
db2-xdb:table Bản đồ hóa nhiều thành phần hoặc thuộc tính vào
một cột
db2-xdb:order Chỉ định thứ tự chèn của các hàng giữa nhiều bảng
db2-
xdb:rowSetOperationOrder
Nhóm nhiều chú thích db2-xdb:order vào với nhau.
Bảng 5. Các chú thích XML Schema
Để minh chứng cho quá trình phân tách giản đồ có chú thích, chúng ta hãy sử
dụng kịch bản băm nhỏ trong hình 1 làm ví dụ. Giả dụ rằng các bảng mục tiêu
đều được định nghĩa như thể hiện trong hình 1. Giản đồ chú thích định nghĩa
việc bản đồ hóa theo mong muốn được cung cấp trong hình 8. Hãy quan sát các
dòng được bôi đậm. Dòng bôi đậm đầu tiên tuyên bố tiền tố tên db2-xdb, tiền tố
này đượ
c sử dụng xuyên suốt giản đồ để phân biệt các chú thích BD2 với các
tab XML Schema thông thường. Trường hợp đầu tiên sử dụng tiền tố này nằm
trong chú thích db2-xdb:defaultSQLSchema, đây là chú thích định nghĩa giản đồ
quan hệ của các bảng mục tiêu. Chú thích tiếp theo xuất hiện trong định nghĩa
của thành phần name. Hai thuộc tính của chú thích này db2-
xdb:rowSet="ADDRESS" và db2-xdb:column="NAME" định nghĩa bảng và cột
mục tiêu cho thành phần name. Tương tự như vậy, các thành phần street và city
cũng được bản đồ hóa vào các cột tương ứng của bảng ADDRESS. Hai chú
thích tiếp theo bản đồ hóa số điện thoại phone và thuộc tính kiểu type vào các
cột trong bảng PHONES. Khối các chú thích cuối cùng thuộc về định nghĩa thuộc
tính Cid. Do thuộc tính Cid sẽ trở thành khóa join giữa bảng ADDRESS và
PHONE, nên nó phải được bản đồ hóa vào cả hai bảng. Phải cần đến hai bản đồ
thiết lập hàng, yêu cầu sử dụ
ng thành phần chú thích - annotation elements thay
vì thuộc tính chú thích - annotation attributes. Đầu tiên db2-xdb:rowSetMapping
sẽ bản đồ hóa thuộc tính Cid vào cột CID trong bảng ADDRESS. Sau đó db2-
xdb:rowSetMapping sẽ gán thuộc tính Cid vào cột CID trong bảng PHONES.
<xs:schema xmlns:xs="
elementFormDefault="qualified"
xmlns:db2-xdb=" >
<xs:annotation>
<xs:appinfo>
<db2-xdb:defaultSQLSchema>db2admin</db2-
xdb:defaultSQLSchema>
</xs:appinfo>
</xs:annotation>
<xs:element name="customerinfo">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"
minOccurs="1"
db2-xdb:rowSet="ADDRESS" db2-xdb:column="NAME"/>
<xs:element name="addr" minOccurs="1"
maxOccurs="unbounded">
<xs:complexType>
<xs:sequence>
<xs:element name="street" type="xs:string"
minOccurs="1" db2-xdb:rowSet="ADDRESS"
db2-xdb:column="STREET"/>
<xs:element name="city" type="xs:string"
minOccurs="1" db2-xdb:rowSet="ADDRESS"
db2-xdb:column="CITY"/>
<xs:element name="prov-state"
type="xs:string"
minOccurs="1" />
<xs:element name="pcode-zip" type="xs:string"
minOccurs="1" />
</xs:sequence>
<xs:attribute name="country" type="xs:string"
/>
</xs:complexType>
</xs:element>
<xs:element name="phone" minOccurs="0"
maxOccurs="unbounded" db2-xdb:rowSet="PHONES"
db2-xdb:column="PHONENUM">
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="type"
form="unqualified"
type="xs:string" db2-xdb:rowSet="PHONES"
db2-xdb:column="PHONETYPE"/>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Cid" type="xs:integer">
<xs:annotation>
<xs:appinfo>
<db2-xdb:rowSetMapping>
<db2-xdb:rowSet>ADDRESS</db2-xdb:rowSet>
<db2-xdb:column>CID</db2-xdb:column>
</db2-xdb:rowSetMapping>
<db2-xdb:rowSetMapping>