Nếu thuộc tính này không được xác định, WFS sẽ cố gắng thông báo vị trí của biệt lệ tương ứng với lỗi trong request của Transaction dựa trên số dòng hoặc một cơ chế nào khác.. Giả sử WF
Trang 1</xsd:sequence>
<xsd:attribute name="handle" type="xsd:string"
use="optional"/>
<xsd:attribute name="typeName" type="xsd:QName"
use="required"/> </xsd:complexType>
<xsd:element name="Property" type="wfs:PropertyType"/>
<xsd:complexType name="PropertyType">
<xsd:sequence>
<xsd:element name="Name" type="xsd:QName"/>
<xsd:element name="Value"/>
</xsd:sequence>
</xsd:complexType>
3.7.2.2 Mô tả các thuộc tính
Thuộc tính hadle dùng để gán một tên dễ nhớ cho thành phần tương ứng với nó
Ngoài ra nó còn giúp cho việc báo lỗi đến ứng dụng client được dễ hiểu hơn Khi lỗi
xảy ra, WFS sẽ dùng thuộc tính handle để định vị lỗi nhằm phát sinh ra biệt lệ một
cách chính xác Nếu thuộc tính này không được xác định, WFS sẽ cố gắng thông
báo vị trí của biệt lệ tương ứng với lỗi trong request của Transaction dựa trên số
dòng hoặc một cơ chế nào khác
Giả sử WFS có hỗ trợ operation LockFeature và/hoặc operation
GetFeatureWithLock, thì thuộc tính releaseAction được dùng để điều khiển việc
giải phóng các feature đã khóa khi request của Transaction hoàn thành Nếu thuộc tính này có giá trị ALL thì chỉ ra rằng tất cả các khóa của các feature bị khóa với định danh khóa <LockID> sẽ được giải phóng khi giao tác chấm dứt, bất chấp
trong số các feature đang bị khóa vẫn còn có feature đang được truy cập Nếu thuộc
tính này có giá trị SOME thì chỉ ra rằng chỉ những khóa của các feature có trong request của Transaction sẽ được giải phóng, và khi đó, thuộc tính releaseAction của thành phần <LockFeature> hoặc <GetFeatureWithLock> sẽ được trả về giá trị “0” sau khi kết thúc giao tác Giá trị mặc định của releaseAction là ALL
Trang 23.7.2.3 Thành phần <Transaction>
Thành phần <Transaction> có thể không chứa hoặc chứa nhiều các thành phần
<Insert>, <Update>, <Delete>, chúng mô tả các thao tác thêm, cập nhật, xóa các
thể hiện của feature Một thành phần <Transaction> trống vẫn hợp lệ song sẽ
không có ích
Thành phần tùy chọn <LockID> chỉ ra rằng giao tác sẽ thực hiện trên các thể
hiện feature đã được khóa nào Nếu WFS không hỗ trợ khả năng khóa feature thì
thành phần <LockID> sẽ bị bỏ qua Nếu WFS có hỗ trợ khóa và có một định danh
khóa không hợp lệ thì WFS sẽ gửi ra một biệt lệ và giao tác sẽ chấm dứt
Thành phần <Native> đã được định nghĩa ở mục “Các thành phần mở rộng”
3.7.2.4 Thành phần <Insert>
Thành phần <Insert> được dùng để thêm mới các thể hiện của feature Trong một operation Transaction có thể có nhiều thành phần <Insert> và với mỗi thành phần <Insert> có thể được dùng để tạo mới nhiều thể hiện của feature
Trong response trả về cho giao tác <Insert>, WFS sẽ trả về một danh sách các
định danh feature mới được gán cho các thể hiện của feature được thêm mới Các định danh feature được hiển thị theo đúng trình tự được thực hiện trong thành phần
<Insert> của giao tác
Ví dụ: Giao tác sau sẽ tạo mới hai thể hiện của kiểu feature INWATERA_1M
<?xml version="1.0"?>
<wfs:Transaction
version="1.0.0"
service="WFS"
xmlns="http://www.someserver.com/myns"
xmlns:gml="http://www.opengis.net/gml"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.someserver.com/myns
Trang 3http://www.someserver.com/wfs/cwwfs.cgi?
request=describefeaturetype&typename=INWATERA_1M.xsd
http://www.opengis.net/wfs /wfs/1.0.0/WFS-transaction.xsd">
<wfs:Insert>
<INWATERA_1M>
<WKB_GEOM>
<gml:Polygon gid="1"
srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates>-98.54,24.26 </gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</WKB_GEOM>
<ID>150</ID>
<F_CODE>ABCDE</F_CODE>
<HYC>152</HYC>
<TILE_ID>250</TILE_ID>
<FAC_ID>111</FAC_ID>
</INWATERA_1M>
<INWATERA_1M>
<WKB_GEOM>
<gml:Polygon gid="1"
srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates>-99.99,22.22 </gml:coordinates>
gml:outerBoundaryIs>
</gml:Polygon>
</WKB_GEOM>
<ID>111</ID>
Trang 4<F_CODE>FGHIJ</F_CODE>
<HYC>222</HYC>
<TILE_ID>333</TILE_ID>
<FAC_ID>444</FAC_ID>
</INWATERA_1M>
</wfs:Insert>
</wfs:Transaction>
3.7.2.5 Thành phần <Update>
Thành phần <Update> được dùng để cập nhật các thể hiện của feature Trong một operation Transaction có thể có nhiều thành phần <Update> và với mỗi thành phần <Update> có thể được dùng để cập nhật nhiều thể hiện của feature
Thành phần <Update> chứa một hoặc nhiều thành phần <Property> cho biết
tên và giá trị cập nhật của thuộc tính của kiểu feature được định danh bằng thuộc
tính typeName Thành phần <Name> trong thành phần <Property> chỉ ra tên thuộc tính cần cập nhật Thành phần tùy chọn <Value> chỉ ra giá trị cập nhật cho
thuộc tính đó Nếu thành phần này không được định nghĩa thì giá trị NULL sẽ được gán cho thuộc tính này Nếu thuộc tính này không được phép có giá trị NULL thì WFS sẽ đưa ra môt biệt lệ
Phạm vi của thành phần <Update> được ràng buộc bởi thành phần <Filter> Nó
được dùng để giới hạn phạm vi của giao tác cập nhật
Ví dụ: Ví dụ sau cho thấy giao tác cập nhật thuộc tính POPULATION của định danh feature BUILTUPA_1M.1013
<?xml version="1.0" ?>
<wfs:Transaction
version="1.0.0"
service="WFS"
xmlns="http://www.someserver.com/myns"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
Trang 5xsi:schemaLocation="http://www.opengis.net/wfs
/wfs/1.0.0/WFS-transaction.xsd">
<wfs:Update typeName="BUILTUPA_1M">
<wfs:Property>
<wfs:Name>POPULATION</wfs:Name>
<wfs:Value>4070000</wfs:Value>
</wfs:Property>
<ogc:Filter>
<ogc:FeatureId fid="BUILTUPA_1M.10131"/>
</ogc:Filter>
</wfs:Update>
</wfs:Transaction>
Cập nhật thuộc tính POPULATION_TYPE của danh sách các feature sau với giá trị mới là “CITY” Các feature cần cập nhật có các định danh feature sau: BUILTUPA_1M.1013, BUILTUPA_1M.34, BUILTUPA_1M.24256
<?xml version="1.0" ?>
<wfs:Transaction
version="1.0.0"
service="WFS"
xmlns="http://www.someserver.com/myns"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs
/wfs/1.0.0/WFS-transaction.xsd">
<wfs:Update typeName="BUILTUPA_1M">
<wfs:Property>
<wfs:Name>POPULATION_TYPE</wfs:Name>
<wfs:Value>CITY</wfs:Value>
</wfs:Property>
<ogc:Filter>
Trang 6<ogc:FeatureId fid="BUILTUPA_1M.1013"/>
<ogc:FeatureId fid="BUILTUPA_1M.34"/>
<ogc:FeatureId fid="BUILTUPA_1M.24256"/>
</ogc:Filter>
</wfs:Update>
</wfs:Transaction>
3.7.2.6 Thành phần <Delete>
Thành phần <Delete> dùng để chỉ ra rằng một hoặc nhiều thể hiện feature sẽ bị xóa đi Phạm vi của giao tác xóa được giới hạn bởi thành phần <Filter>
Ví dụ: Xóa một feature đơn
<?xml version="1.0" ?>
<wfs:Transaction
version="1.0.0"
service="WFS"
xmlns="http://www.someserver.com/myns"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs
/wfs/1.0.0/WFS-transaction.xsd">
<wfs:Delete typeName="INWATERA_1M">
<ogc:Filter>
<ogc:FeatureId fid="INWATERA_1M.1013"/>
</ogc:Filter>
</wfs:Delete>
</wfs:Transaction>
Trang 7Xóa một tập các thể hiện feature
<?xml version="1.0" ?>
<wfs:Transaction
version="1.0.0"
service="WFS"
xmlns:myns="http://www.someserver.com/myns"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs
/wfs/1.0.0/WFS-transaction.xsd">
<wfs:Delete typeName="myns:INWATERA_1M">
<ogc:Filter>
<ogc:FeatureId fid="INWATERA_1M.1013"/>
<ogc:FeatureId fid="INWATERA_1M.10"/>
<ogc:FeatureId fid="INWATERA_1M.13"/>
<ogc:FeatureId fid="INWATERA_1M.140"/>
<ogc:FeatureId fid="INWATERA_1M.5001"/>
<ogc:FeatureId fid="INWATERA_1M.2001"/>
</ogc:Filter>
</wfs:Delete>
</wfs:Transaction>
Xóa một tập các thể hiện của feature INWATERA_1M nằm trong miền đa giác được chỉ định Thành phấn <Filter> được dùng để ràng buộc phạm vi của giao tác
va đa giác được biểu diễn bằng GML
<?xml version="1.0" ?>
<wfs:Transaction
version="1.0.0"
service="WFS"
xmlns="http://www.someserver.com/myns"
xmlns:wfs="http://www.opengis.net/wfs"
Trang 8xmlns:gml="http://www.opengis.net/gml"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs
/wfs/1.0.0/WFS-transaction.xsd">
<wfs:Delete typeName="INWATERA_1M">
<ogc:Filter>
<ogc:Within>
<ogc:PropertyName>WKB_GEOM</ogc:PropertyName>
<gml:Polygon gid="pp9"
srsName="http://www.opengis.net/gml/srs/epsg.xml#4326">
<gml:outerBoundaryIs>
<gml:LinearRing>
<gml:coordinates>-95.7,38.1 -97.8,38.2 </gml:coordinates>
</gml:LinearRing>
</gml:outerBoundaryIs>
</gml:Polygon>
</ogc:Within>
</ogc:Filter>
</wfs:Delete>
</wfs:Transaction>
3.7.3 Response
Trong response trả về cho request của Transaction, WFS trả về một tài liệu
XML mô tả trạng thái kết thúc của giao tác
Tài liệu XML mã hóa cho response được mô tả bằng đoạn lược đồ XML sau
<xsd:element name="WFS_TransactionResponse"
type="wfs:WFS_TransactionResponseType"/>
<xsd:complexType name="WFS_TransactionResponseType">
<xsd:sequence>
<xsd:element name="InsertResult"
type="wfs:InsertResultType"
Trang 9minOccurs="0" maxOccurs="unbounded"/>
<xsd:element name="TransactionResult"
type="wfs:TransactionResultType"/>
</xsd:sequence>
<xsd:attribute name="version"
type="xsd:string" use="required" fixed="1.0.0"/>
</xsd:complexType>
<xsd:complexType name="TransactionResultType">
<xsd:sequence>
<xsd:element name="Status" type="wfs:StatusType"/>
<xsd:element name="Locator" type="xsd:string" minOccurs="0"/>
<xsd:element name="Message" type="xsd:string" minOccurs="0"/>
</xsd:sequence>
<xsd:attribute name="handle" type="xsd:string"
use="optional"/>
</xsd:complexType>
<xsd:complexType name="InsertResultType">
<xsd:sequence>
<xsd:element ref="ogc:FeatureId" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="handle" type="xsd:string"
use="optional"/>
</xsd:complexType>
<xsd:complexType name="StatusType">
<xsd:choice>
<xsd:element ref="wfs:SUCCESS"/>
<xsd:element ref="wfs:FAILED"/>
<xsd:element ref="wfs:PARTIAL"/>
</xsd:choice> </xsd:complexType>
<xsd:element name="SUCCESS" type="wfs:EmptyType"/>
<xsd:element name="FAILED" type="wfs:EmptyType"/>
<xsd:element name="PARTIAL" type="wfs:EmptyType"/>
Trang 10Thành phần <WFS_TransactionResponse> có thể không chứa hoặc chứa nhiều thành phần <InsertResult> và chứa một thành phần <TransactionResult>
Thành phần <InsertResult> chứa một hoặc nhiều định danh feature mới được thêm vào Một thành phần <InsertResult> tương ứng với một thành phần <Result> trong câu request
Kết quả của toàn bộ giao tác được mô tả trong thành phần <TransactionResult> Thành phần này phải chứa một thành phần <Status> và có thể chứa thành phần
<Locator> và <Status> Trong đó, thành phần <Status> mô tả trạng thái hoàn thành của giao tác Còn thành phần <Locator> chỉ ra phần nào trong giao tác bị lỗi Ngoài
ra còn thành phần <Messeage> dùng để báo các thông điệp lỗi
Ví dụ: Giả sư có giao tác tạo mới các thể hiện của feature “STMT1”, “STMT2”,
“STMT3” Response cho giao tác này như sau:
<?xml version="1.0" ?>
<wfs:TransactionResponse
version="1.0.0"
xmlns:wfs="http://www.opengis.net/wfs"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.opengis.net/wfs
/wfs/1.0.0/WFS-transaction.xsd">
<wfs:InsertResult handle="STMT1">
<ogc:FeatureId fid="SOMEFEATURE.4567"/>
<ogc:FeatureId fid="SOMEFEATURE.4568"/>
<ogc:FeatureId fid="SOMEFEATURE.4569"/>
</wfs:InsertResult>
<wfs:InsertResult handle="STMT2">
<ogc:FeatureId fid="FEATURE1.4569"/>
</wfs:InsertResult>
<wfs:InsertResult handle="STMT3">
<ogc:FeatureId fid="FEATURE2.389345"/>
</wfs:InsertResult>
Trang 11<wfs:TransactionResult handle="TX01">
<wfs:Status>
<wfs:SUCCESS/>
</wfs:Status>
</wfs:TransactionResult>
</wfs:TransactionResponse>
3.7.4 Biệt lệ
Khi xảy ra một lỗi trong request của operation Transaction thì WFS sẽ gửi ra
một biệt lệ
3.8 GetCapabilities
3.8.1 Giới thiệu
Một WFS phải mô tả được khả năng của nó Cụ thể là WFS phải tạo được một tài liệu Capabilities XML để mô tả khả năng của nó
3.8.2 Request
Thành phần <GetCapabilities> dùng để yêu cầu WFS gửi tài liệu Capabilities XML của nó Request này được định nghĩa bằng đoạn lược đồ XML sau:
<xsd:element name="GetCapabilities"
type="wfs:GetCapabilitiesType"/>
<xsd:complexType name="GetCapabilitiesType">
<xsd:attribute name="version"
type="xsd:string" use="optional"/>
<xsd:attribute name="service"
type="xsd:string" use="required" fixed="WFS"/>
</xsd:complexType>
Trong đó thuộc tính service đã được định nghĩa trong mục “Các thành phần chung”