Chương 3. Web Feature Service (WFS)
44
Chương 3. Web Feature Service (WFS)
Chú ý là thuộc tính Address là 1 thuộc tính phức hợp thuộc loại AddressType.
Một Feature person có thể được mô tả như sau:
sin="111222333" xmlns:myns=http://www.opengis.net/myns xmlns:gml=http://www.opengis.net/gml xmlns:xlink=http://www.w3.org/1999/xlink xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://www.opengis.net/myns erson.xsd"> 45 Chương 3. Web Feature Service (WFS)
Sử dụng biếu thức XPath thì các thuộc tính của Feature Person có thể được tham
chiếu như dưới đây:
LastName
FirstName
Age
Sex
Source
Location
Address
Address/StreetNumber
Address/StreetName
Address/City
Address/Province
Address/Postal_Code
Address/Country
Phone[1]
Phone[2]
Chú ý là đối với Feature này thì mỗi đường dẫn được bắt đầu bằng thành phần
gốc của thuộc tính của Feature đang được tham chiếu, tương ứng với tên của thuộc
tính. Mỗi thuộc tính được tham chiếu tới bởi loại đường dẫn này có thể được bắt
đầu bởi thành phần gốc của Feature (chính là tên loại Feature). Do đó thuộc tính
LastName có thể được tham chiếu bằng đường dẫn Person/LastName. Thuộc tính
City có thể được tham chiếu tới bởi đường dẫn Person/Address/City.
46
Chương 3. Web Feature Service (WFS)
Thành phần Phone xuất hiện nhiều lần và vị từ [1], [2] được dùng để chỉ cụ thể
thành phần này là thành phần thứ mấy. Vị từ [1] dùng để chỉ lần xuất hiện thứ nhất
của thành phần Phone, vị từ [2] chỉ lần xuất hiện thứ 2 của thành phần Phone.
3.3.6. Thành phần
Mỗi nhà cung cấp chỉ có được một số khả năng nhất định nào đó.
Thành phần được dùng để truy xuất đến các khả năng riêng của từng
nhà cung cấp của một Web Feature Service nào đó.
Thành phần được định nghĩa như sau:
use="required"/> use="required"/> 47 Chương 3. Web Feature Service (WFS) ALTER SESSION ENABLE PARALLEL DML 48 Chương 3. Web Feature Service (WFS) version="1.2.0" xmlns=http://www.opengis.net/ogc xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://www.opengis.net/ogc ../wfs/1.0.0/OGC-exception.xsd"> parse error: missing closing tag for element WKB_GEOM 49 Chương 3. Web Feature Service (WFS) type="wfs:DescribeFeatureTypeType"/> minOccurs="0" maxOccurs="unbounded"/> use="required" fixed="1.0.0"/> ame="service" type="xsd:string" use="required" ixed="WFS"/> 50 Chương 3. Web Feature Service (WFS) use="optional" default="XMLSCHEMA"/> version="1.0.0" service="WFS" xmlns=http://www.opengis.net/wfs xmlns:ns01=http://www.server01.com/ns01 xmlns:ns02=http://www.server02.com/ns02 xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://www.opengis.net/wfs ../wfs/1.0.0/WFS-basic.xsd"> 51 Chương 3. Web Feature Service (WFS) xmlns=http://www.w3.org/2001/XMLSchema elementFormDefault="qualified" attributeFormDefault="unqualified"> schemaLocation="http://www.myserver.com/wfs.cgi? request=DescribeFeatureType&typeName=ns01:TREESA_1M"/> schemaLocation="http://www.yourserver.com/wfs.cgi? request=DescribeFeatureType&typeName=ns02:ROADL_1M"/> 52 Chương 3. Web Feature Service (WFS) type="xsd:string" use="required" fixed="1.0.0"/> type="xsd:string" use="required" fixed="WFS"/> type="xsd:string" use="optional"/> type="xsd:string" use="optional" default="GML2"/> type="xsd:positiveInteger" use="optional"/> maxOccurs="unbounded"/> maxOccurs="1"/> type="xsd:string" use="optional"/> 53 Chương 3. Web Feature Service (WFS) type="xsd:QName" use="required"/> type="xsd:string" use="optional"/> 54 Chương 3. Web Feature Service (WFS) xmlns=http://www.opengis.net/myns xmlns:myns=http://www.opengis.net/myns xmlns:gml=http://www.opengis.net/gml xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="http://www.opengis.net/myns http://www.someserver.com/wfs.cgi? request=DescribeFeatureType&typename=TREESA_1M,ROADL_1M"> … … 55 Chương 3. Web Feature Service (WFS) 56 Chương 3. Web Feature Service (WFS) type="wfs:LockType" maxOccurs="unbounded"/> type="xsd:string" use="required" fixed="1.0.0"/> type="xsd:string" use="required" fixed="WFS"/> type="xsd:positiveInteger" use="optional"/> type="wfs:AllSomeType" use="optional"/> maxOccurs="1"/> type="xsd:string" use="optional"/> type="xsd:QName" use="required"/> 57 Chương 3. Web Feature Service (WFS) type="wfs:WFS_LockFeatureResponseType"/> type="wfs:FeaturesLockedType" minOccurs="0"/> 58 Chương 3. Web Feature Service (WFS) type="wfs:FeaturesNotLockedType" minOccurs="0"/> 59 Chương 3. Web Feature Service (WFS) 60 Chương 3. Web Feature Service (WFS) type="xsd:string" use="required" fixed="1.0.0"/> type="xsd:string" use="required" fixed="WFS"/> type="xsd:string" use="optional"/> type="wfs:AllSomeType" use="optional"/> use="optional"/> use="optional"/> use="required"/> 61Thành phần này chỉ đơn giản chứa lệnh (command ) hoặc là thao tác (operation)
riêng biệt của nhà cung cấp.
Thuộc tính VendorId được dùng để chỉ nhà cung cấp hiểu lệnh và thao tác được
mô tả trong thành phần
Feature Service biết là nó có thể xử lí được một lệnh nào đó hay không.
Thuộc tình safeToIgnore chỉ cho Web Feature Service biết là nó nên làm gì nếu
như nó không nhận ra các lệnh hay các thao tác đó. Thuộc tính safeToIgnore có 2
giá trị là True và False, ý nghĩa của chúng như sau:
Nếu safeToIgnore=False thì Web Feature Service không thể bỏ qua thao tác
được yêu cầu, nếu như nó không thể giải quyết được thì coi như thao tác này thất
bại.
Nếu safeToIgnore=True thì Web Feature Service có thể bỏ qua thành phần
Ví dụ: mô tả cách dùng thành phần
một cơ sở dữ liệu quan hệ dựa trên SQL. Thành phần
là một lệnh Oracle và lệnh này có thể bỏ qua:
3.3.7. Filter
Một Filter định nghĩa một tập hợp Feature sẽ được thao tác. Tập hợp này có thể
bao gồm một hoặc nhiều Feature (có thể đếm được) hoặc một tập hợp các Feature
được định nghĩa bởi các ràng buộc không gian hoặc phi không gian (đây là các ràng
buộc trên các thuộc tính vô hướng hay các thuộc tính địa lý của các loại đối tượng).
Các Filter này được mô tả trong tài liệu OGC Filter Encoding Implementation
Specification.
3.3.8. Thông báo về các biệt lệ (Exception Reporting)
Nếu như Web Feature Service gặp phải lỗi khi xử lí một truy vấn nào đó hoặc là
khi nó không hiểu được một câu truy vấn nào đó, nó có thể phát sinh một tài liệu
XML để chỉ ra lỗi đã xảy ra. Định dạng của loại tài liệu dùng để thông báo lỗi này
được mô tả bởi lược đồ thông báo lỗi (định nghĩa trong phần A.2).
Một thành phần
Thuộc tính bắt buộc version được dùng để chỉ phiên bản của lược đồ thông báo lỗi.
Trong phiên bàn WFS này thì giá trị này cố định là 1.2.0.
Các thông báo lỗi cụ thể được chứa trong thành phần
Thuộc tính tùy chọn code dùng để chỉ mã lỗi của lỗi phát sinh. Thuộc tính tùy chọn
locator được dùng để chỉ nơi gây ra lỗi trong câu truy vấn. Một số thành phần trong
tài liệu này chứa thuộc tính handle, thuộc tính này liên kết một cái tên gợi nhớ với
mỗi thành phần. Nếu thuộc tính này tồn tại thì giá trị của nó có thể xuất hiện trong
thuộc tính Locator của thành phần
không tồn tại thì Web Feature Server có thể dùng các phương pháp khác để chỉ nơi
gây ra lỗi, chẳng hạn như dùng số thứ tự của dòng gây ra lỗi….
Ví dụ:
Ví dụ dưới đây dùng để chỉ ra một lỗi là: câu lệnh Insert đầu tiên bị lỗi vì nó
thiểu một dấu đóng tag XML trong câu truy vấn.
3.3.9. Các thuộc tính XML chung
3.3.9.1. Thuộc tính version
Tất cả các câu truy vấn gởi lên một WFS đều có chứa một thuộc tính là version.
Thuộc tính bắt buộc version dùng để chỉ ra phiên bản WFS của câu truy vấn này.
Giá trị mặc định của version là 1.0.0, đây cũng là phiên bản mà tài liệu này mô tả.
3.3.9.2. Thuộc tính service
Tất cả các câu truy vấn gởi lên một WFS đều chứa thuộc tính bắt buộc là
service. Thuộc tính này dùng để chỉ ra loại dịch vụ được gọi thực hiện. Khi truy vấn
đến một Web Feature Service thì service có giá trị là “WFS”.
3.3.9.3. Thuộc tính handle
Ưng dụng client sử dụng thuộc tính handle để gán cho mỗi câu truy vấn một tên
gợi nhớ. Nếu client có sử dụng thuộc tính này thì khi có lỗi xảy ra Web Feature
Service sẽ dùng handle để chỉ ra chỗ bị lỗi.
3.4. DescribeFeatureType
3.4.1. Giới thiệu
Chức năng của operation DescribeFeatureType là tạo ra một mô tả lược đồ của
các kiểu của feature được hỗ trợ bởi WFS. Các mô tả lược đồ định nghĩa làm thế
nào mà một WFS trông đợi các thể hiện của feature được mã hóa để đưa vào đầu
vào và làm thế nào mà các thể hiện của feature được xuất ra ở đầu ra.
3.4.2. Request
Một thành phần DescribeFeatureType có thể không chứa hoặc chứa nhiều
thành phần TypeName mã hóa cho tên của các kiểu feature được mô tả. Nếu nội
dung của thành phần DescribeFeatureType là rỗng, thì request sẽ được hiểu là yêu
cầu tất cả các kiểu của feature mà WFS hỗ trợ. Tài liệu XML mã hóa cho request
DescribeFeatureType được định nghĩa theo đọan lược đồ XML sau:
Thuộc tính outputFormat dùng để chỉ ngôn ngữ mô tả lược đồ. Định dạng xuất
bắt buộc cho operation DescribeFeatureType là một lược đồ XML, và giá trị của
tham số này là XLMSCHEMA. Các định dạng khác cũng có thể chấp nhận nếu
được đặc tả trong tài liệu Capabilities XML.
3.4.3. Response
Nếu thuộc tính outputFormat có giá trị là XLMSCHEMA thì trong response
của DescribeFeatureType request, WFS phải đưa ra lược đồ XML là một lược đồ
ứng dụng GML hợp lệ nó định nghĩa lược đồ của các kiểu feature được liệt kê trong
request.
Một tàl liệu lược đồ XML chỉ có thể mô tả các thành phần nằm trong cùng một
không gian tên. Điều này có nghĩa là WFS không thể có các feature trong nhiều
không gian tên trong cùng một lược đồ XML. Để vượt qua giới hạn này, WFS sẽ
tạo ra một lược đồ XML gọi là lược đồ “bao” nó chứa trong đó các lược đồ của các
feature từ nhiều không gian tên khác nhau trong câu request. Ví dụ: xem xét một
request sau:
WFS sẽ trả về một response cho request trên như sau:
Trong ví dụ trên, WFS dùng một request DescribeFeatureType để lấy về các
lược đồ cho các feature nằm trong các không gian tên khác nhau.
3.4.4. Biệt lệ
Nếu trong khi gọi request DescribeFeatureType mà xảy ra lỗi thì WFS sẽ gửi
đi một biệt lệ.
3.5. GetFeature
3.5.1. Giới thiệu
Operation GetFeature cho phép lấy các feature của một WFS. Sau khi xử lý
request của GetFeature, WFS sẽ gửi lại một tài liệu XML chứa các kết quả cho
client.
3.5.2. Request
Tài liệu XML mã hóa cho request của GetFeature được định nghĩa bởi đọan
lược đồ XML sau đây:
Thành phần
thành phần sẽ chứa trong đó một câu truy vấn. Kết quả của tất cả các câu truy vấn
trong request của GetFeature được nối lại thành một chuỗi kết quả duy nhất.
Thuộc tính outputFormat sẽ định nghĩa định dạng dùng để tạo chuỗi kết quả.
Giá trị mặc định là GML2. Các định dạng khác cũng có thể chấp nhận nếu được
đặc tả trong tài liệu Capabilities XML.
Thuộc tính tùy chọn maxFeatures được dùng để giới hạn số lượng các feature
mà một request có thể gọi. Một khi đạt tới giới hạn này thì chuỗi kết quả sẽ được
nối lại ngay tại điểm đó.
Mỗi một câu truy vấn trong một request GetFeature được định nghĩa bằng cách
sử dụng thành phần
vấn, thuộc tính cần lấy của nó và các ràng buộc áp dụng trên các thuộc tính đó.
Thuộc tính typeName dùng để chỉ ra tên của kiểu feature hoặc lớp feature được
truy vấn.
Thuộc tính featureVersion cung cấp việc định phiên bản cho các feature.
Thành phần
các thuộc tính này được chọn trong câu truy vấn và giá trị của chúng được xuất ra
trong response cho request GetFeature. Các ứng dụng client có thể xác định các
thuộc tính của feature bằng cách tạo ra câu request DescribeFeatureType trước khi
tạo ra câu request GetFeature. Nếu không có thành phần
được chỉ định thì tất cả các thuộc tính của feature sẽ được truy vấn.
Thành phần
ràng buộc không gian và phi không gian đều có thể được mô tả trong đặc tả bộ lọc.
Nếu thành phần
vấn này không có ràng buộc và tất cả mọi thể hiện của feature đều được truy vấn.
Thành phần
thêm ý nghĩa rằng WFS sẽ khóa các feature được chọn lại, thường là cho mục đích
cập nhật feature.
3.5.3. Response
Định dạng của response cho một request của GetFeature được quy định bởi
thuộc tính outputFormat. Giá trị mặc định cho thuộc tính này là GML2.
Đoạn lược đồ XML sau mô tả công dụng của thuộc tính schemaLocation trên
thành phần gốc:
Đối với lọai request
bao gồm cả định danh khóa. Định danh khóa này được mã hóa dựa trên thuộc tính
lockId được định nghĩa trong thành phần
XML sau mình họa làm thế nào để thêm thuộc tính lockID vào câu response của
operation.
3.5.4. Biệt lệ
Nếu trong khi gọi request GetFeature mà xảy ra lỗi thì WFS sẽ gửi đi một biệt
lệ.
3.6. LockFeature
3.6.1. Giới thiệu
Kết nối Internet vốn là không trạng thái. Điều đó dẫnn đến hậu quả là các giao
tác được thực hiện mà không có sự bảo đảm. Để hiểu rõ hơn, ta hãy xét một tác vụ
cập nhập. Client gọi cập nhật một feature. Feature được hiệu chỉnh ở client rồi được
gửi ngược lại cơ sở dữ liệu thông qua request yêu cầu cập nhật của operation
Transaction. Quá trình thực hiện sẽ xảy ra mất mát do ở đây không có gì bảo đảm
rằng trong lúc feature đang được cập nhật ở phía client thì không có một client khác
cũng đến và cập nhật feature này trên cơ sở dữ liệu.
Một cách duy nhất để đảm bảo quá trình thực hiện là yêu cầu quá trình truy xuất
dữ liệu được thực hiện hoàn toàn tách biệt, có nghĩa là khi có một giao tác truy cập
vào cơ sở dữ liệu thì không được có một giao tác khác cũng đồng thời truy cập vào
cơ sở dữ liệu đó. Điều này được thực hiện bằng cách sử dụng khóa để điều khiển sự
truy cập đến cơ sở dữ liệu.
Mục đích của operation LockFeature là để đưa ra một cơ chế khóa feature lâu
dài và được bảo đảm về sừ bền vững. LockFeature là tùy chọn và không cần được
hỗ trợ bởi các WFS. Nếu có hỗ trợ thì nó phải được đặc tả trong tài liệu Capabilities
XML.
3.6.2. Request
Tài liệu XML mã hóa cho request của LockFeature được định nghĩa bởi đoạn
lược đồ XML sau:
Thành phần
loại feature.
Thuộc tính expiry được dùng để chỉ ra giới hạn trong bao lâu mà WFS có thể
giữ được khóa trên các thể hiện của feature cho đến khi có sự kiện không có giao
tác nào được phát ra nữa thì sẽ giải phóng khóa. Giá trị của nó được tính theo phút.
Khi số phút này hết, thì WFS sẽ giải phóng khóa nếu nó kết thúc. Bất cứ giao tác
nào nhằm tác động đến khóa thông qua định danh khóa đều bị dịch vụ từ chối. Tuy
nhiên lại không có đặc tả cho biết khóa sẽ được giữ trong bao lâu nếu thuộc tính này
không được định nghĩa. Tuy nhiên, hầu hết các WFS sẽ có các phương thức để kiểm
tra và giải phóng khóa sau một khoảng thời gian không có giao tác nào tác động tới
nó.
Thuộc tính tùy chọn lockAction được dùng để điều khiển các khóa của feature.
Nếu có giá trị là ALL thì WFS sẽ cố gắng khóa trên tất cả các feature được yêu cầu
truy vấn trong request. Nếu tất cả các feature không được khóa thì operation sẽ báo
thất bại. Nếu có giá trị là SOME thì cố gắng khóa trên các feature nào trong câu
request mà nó khóa được mà thôi. Giá trị mặc định của thuộc tính lockAction là
ALL.
3.6.3. Response
Tài liệu XML mã hóa cho response của request của LockFeature được định
nghĩa bởi đoạn lược đồ XML sau:
Trong response của một LockFeature request, WFS sẽ tạo ra một tài liệu XML.
Tài liệu này chứa một định danh khóa mà ứng dụng client có thể dùng trong các
operation của WFS để giao tác đến một tập các thể hiện feature đã được khóa.
Trong response có thể có các thành phần tùy chọn
request. Nếu nó có giá trị là SOME thì thành phần
phải chứa các thành phần
phần
LockFeature. Thành phần
không thể khóa bởi WFS (có thể do nó được khóa bởi một ai khác).
Không có định dạng cho các định danh khóa. Chỉ có một yêu cầu duy nhất là tập
ký tự trong định danh khóa phải theo tập ký tự của request giao tác.
3.6.4. Biệt lệ
Nếu WFS không hỗ trợ LockFeature thì nó sẽ gửi một biệt lệ để báo rằng
operation này không được hỗ trợ khi có một yêu cầu về LockFeature được gởi đến.
Nếu WFS hỗ trợ LockFeature và khi xảy ra một lỗi trong request thì nó sẽ gửi
ra một biệt lệ.
3.7. Transaction
3.7.1. Giới thiệu
Operation Transaction được dùng để mô tả các giao tác làm thay đổi dữ liệu
của các feature cho phép truy xuất qua môi trường web. Một WFS có thể thực hiện
operation Transaction một cách trực tiếp hoặc được chuyển qua ngôn ngữ của kho
lưu trữ đích mà nó kết nối tới và để cho kho lưu trữ thực hiện giao tác này. Khi giao
tác chấm dứt, WFS sẽ gửi trả về một lài liệu XML mô tả trạng thái kết thúc của giao
tác.
Operation Transaction là tùy chọn cho các WFS, nó không cần thiết phải hỗ trợ
giao tác này. Nếu được hỗ trợ thì nó phải được đặc tả trong tài liệu Capabilities
XML.
3.7.2. Request
3.7.2.1. Định nghĩa lược đồ
Tài liệu XML của request cho Transaction được định nghĩa bởi đoạn lược đồ
XML sau: