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”.
Chương 3. Web Feature Service (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: <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"/>
Chương 3. Web Feature Service (WFS)
use="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>
Chương 3. Web Feature Service (WFS)
</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.
Chương 3. Web Feature Service (WFS)
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:
<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"
Chương 3. Web Feature Service (WFS) <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.
Chương 3. Web Feature Service (WFS)
Nếu thành phần <Filter> không được dùng trong thành phần <Query> thì câu truy 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 <GetFeatureWithLock> tương tự như thành phần <GetFeature> và 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: <?xml version="1.0" ?> <wfs:FeatureCollection 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"> …
Đối với lọai request <GetFeatureWithLock>, WFS cần phải tạo ra chuỗi kết quả 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 <wfs:FeatureCollection>. Đoạn lược đồ 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.
<wfs:FeatureCollection lockId="00A01"… > …
Chương 3. Web Feature Service (WFS)
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.
Chương 3. Web Feature Service (WFS)
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:
<xsd:element name="LockFeature" type="wfs:LockFeatureType"/> <xsd:complexType name="LockFeatureType"> <xsd:sequence> <xsd:element name="Lock" type="wfs:LockType" 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="expiry" type="xsd:positiveInteger" use="optional"/> <xsd:attribute name="lockAction" type="wfs:AllSomeType" use="optional"/> </xsd:complexType> <xsd:complexType name="LockType"> <xsd:sequence>
<xsd:element ref="ogc:Filter" minOccurs="0" maxOccurs="1"/> </xsd:sequence> <xsd:attribute name="handle" type="xsd:string" use="optional"/> <xsd:attribute name="typeName" type="xsd:QName" use="required"/> </xsd:complexType>
Chương 3. Web Feature Service (WFS)
Thành phần <LockFeature> có thể chứa trong nó một hay nhiều thành phần <Lock> định nghĩa cho các giao tác khóa trên nhiều thể hiện của feature của cùng 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: <xsd:element name="WFS_LockFeatureResponse" type="wfs:WFS_LockFeatureResponseType"/> <!-- RESPONSE TYPES --> <xsd:complexType name="WFS_LockFeatureResponseType"> <xsd:sequence> <xsd:element ref="wfs:LockId"/> <xsd:element name="FeaturesLocked" type="wfs:FeaturesLockedType" minOccurs="0"/>
Chương 3. Web Feature Service (WFS) <xsd:element name="FeaturesNotLocked" type="wfs:FeaturesNotLockedType" minOccurs="0"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="FeaturesLockedType"> <xsd:sequence maxOccurs="unbounded"> <xsd:element ref="ogc:FeatureId"/> </xsd:sequence> </xsd:complexType> <xsd:complexType name="FeaturesNotLockedType"> <xsd:sequence maxOccurs="unbounded"> <xsd:element ref="ogc:FeatureId"/> </xsd:sequence> </xsd:complexType>
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 <FeaturesLocked> và
<FeaturesNotLocked> tùy thuộc vào giá trị của thuộc tính lockAction trong câu request. Nếu nó có giá trị là SOME thì thành phần <WFS_LockFeatureResponse> phải chứa các thành phần <FeaturesLocked> và <FeaturesNotLocked>. Thành phần <FeaturesLocked> liệt kê các định danh feature đã được khóa bởi request
LockFeature. Thành phần <FeaturesNotLocked> liệt kê các định danh feature 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.