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
Trang 1<simpleType>
<restriction base="string">
<maxLength value="10"/>
</restriction>
</simpleType>
</element>
<element name="City" nillable="true">
<simpleType>
<restriction base="string">
<maxLength value="30"/>
</restriction>
</simpleType>
</element>
<element name="Province" nillable="true">
<simpleType>
<restriction base="string">
<maxLength value="30"/>
</restriction>
</simpleType>
</element>
<element name="PostalCode" nillable="true">
<simpleType>
<restriction base="string">
<maxLength value="15"/>
</restriction>
</simpleType>
</element>
<element name="Country" nillable="true">
<simpleType>
<restriction base="string">
<maxLength value="30"/>
</restriction>
Trang 2</simpleType>
</element>
</sequence>
</complexType>
</schema>
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:
<?xml version="1.0" ?>
<myns:Person
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">
<myns:LastName>Smith</myns:LastName>
<myns:FirstName>Fred</myns:FirstName>
<myns:Age>35</myns:Age>
<myns:Sex>Male</myns:Sex>
<myns:Spouse sin="444555666" />
<myns:Location>
<gml:Point>
<gml:coordinates>15,15</gml:coordinates>
</gml:Point>
</myns:Location>
<myns:Address>
<myns:StreetName>Main St.</myns:StreetName>
<myns:StreetNumber>5</myns:StreetNumber>
Trang 3<myns:Province>SomeProvince</myns:Province>
<myns:PostalCode>X1X 1X1</myns:PostalCode>
<myns:Country>Canada</myns:Country>
</myns:Address>
<myns:Phone>416-123-4567</myns:Phone>
<myns:Phone>416-890-1234</myns:Phone>
</myns:Person>
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
Trang 4Thà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 <Native>
Mỗi nhà cung cấp chỉ có được một số khả năng nhất định nào đó
Thành phần <Native> đượ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 <Native> được định nghĩa như sau:
<xsd:element name="Native" type="wfs:NativeType"/>
<xsd:complexType name="NativeType">
<xsd:any />
<xsd:attribute name="vendorId" type="xsd:string"
use="required"/>
<xsd:attribute name="safeToIgnore" type="xsd:boolean" use="required"/>
</xsd:complexType>
Thà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 <Native> Thuộc tính này được đưa ra để cho một Web 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
<Native> này
Trang 5Ví dụ: mô tả cách dùng thành phần <Native> để kích hoạt một chức năng của một cơ sở dữ liệu quan hệ dựa trên SQL Thành phần <Native> này chỉ ra rằng đây
là một lệnh Oracle và lệnh này có thể bỏ qua:
<Native vendorId="Oracle" safeToIgnore="True">
ALTER SESSION ENABLE PARALLEL DML
</Native>
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 <ServiceExceptionReport> có thể chứa một hoặc nhiều lỗi 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 <ServiceException> 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 <ServiceException> Nếu như thuộc tính này
Trang 6khô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
<?xml version="1.0" ?>
<ServiceExceptionReport
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">
<ServiceException code="999" locator="INSERT STMT 01"> parse error: missing closing tag for element WKB_GEOM
</ServiceException>
</ServiceExceptionReport>
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”
Trang 73.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:
<xsd:element name="DescribeFeatureType"
type="wfs:DescribeFeatureTypeType"/>
<xsd:complexType name="DescribeFeatureTypeType">
<xsd:sequence>
<xsd:element name="TypeName" type="xsd:QName"
minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="version" type="xsd:string"
use="required" fixed="1.0.0"/> <xsd:attribute
ame="service" type="xsd:string" use="required"
ixed="WFS"/>
<xsd:attribute name="outputFormat" type="xsd:string"
Trang 8use="optional" default="XMLSCHEMA"/>
</xsd:complexType>
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:
<?xml version="1.0" ?>
<DescribeFeatureType
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">
<TypeName>ns01:TREESA_1M</TypeName>
<TypeName>ns02:ROADL_1M</TypeName>
Trang 9</DescribeFeatureType>
WFS sẽ trả về một response cho request trên như sau:
<?xml version="1.0" ?>
<schema
xmlns=http://www.w3.org/2001/XMLSchema
elementFormDefault="qualified"
attributeFormDefault="unqualified">
<import namespace=http://www.server01.com/ns01
schemaLocation="http://www.myserver.com/wfs.cgi?
request=DescribeFeatureType&typeName=ns01:TREESA_1M"/>
<import namespace=http://www.server02.com/ns02
schemaLocation="http://www.yourserver.com/wfs.cgi?
request=DescribeFeatureType&typeName=ns02:ROADL_1M"/>
</schema>
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
Trang 103.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:
<xsd:element name="GetFeature" type="wfs:GetFeatureType"/>
<xsd:complexType name="GetFeatureType">
<xsd:sequence>
<xsd:element ref="wfs:Query" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="version"
type="xsd:string" use="required" fixed="1.0.0"/>
<xsd:attribute name="service"
type="xsd:string" use="required" fixed="WFS"/>
<xsd:attribute name="handle"
type="xsd:string" use="optional"/>
<xsd:attribute name="outputFormat"
type="xsd:string" use="optional" default="GML2"/>
</xsd:attribute>
<xsd:attribute name="maxFeatures"
type="xsd:positiveInteger"
use="optional"/>
</xsd:complexType>
<xsd:element name="Query" type="wfs:QueryType"/>
<xsd:complexType name="QueryType">
<xsd:sequence>
<xsd:element ref="ogc:PropertyName" minOccurs="0"
maxOccurs="unbounded"/>
<xsd:element ref="ogc:Filter" minOccurs="0"
maxOccurs="1"/>
</xsd:sequence>
<xsd:attribute name="handle"
type="xsd:string" use="optional"/>
Trang 11<xsd:attribute name="typeName"
type="xsd:QName" use="required"/>
<xsd:attribute name="featureVersion"
type="xsd:string" use="optional"/>
</xsd:complexType>
Thành phần <GetFeature> chứa một hoặc nhiều thành phần <Query> mà mỗi
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 <Query> Thành phần này định nghĩa kiểu feature cần truy
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 <PropertyName> dùng để kiệt kê các thuộc tính của feature mà
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 <PropertyName> nào
đượ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 <Filter> dùng để định nghĩa các ràng buộc trên câu truy vấn Kể cả
ràng buộc không gian và phi không gian đều có thể được mô tả trong đặc tả bộ lọc