Mục đích của việc tổ chức thông tin là để con người có thểđọc và hiểu được những gì mà nó muốn truyền tải. Chúng ta xem một tập tin văn bản sau đây về cách tổ chức tập tin trên theo định dạng một tài liệu XML một cách đơn giản nhất :
<?xml version="1.0" encoding="utf-8" ?> <Persons>
<Person>
< Person ID>1</ PersonID>
< PersonName>Tran Cong Dai </ PersonName > <Age>27</ Age >
31
</ Person > <Person>
< Person ID>2</ PersonID>
< PersonName>Tran Dai Nghia </ PersonName > <Age>2</ Age >
</ Person > </ Persons>
Như vậy, bằng cách sử dụng định dạng XML, người dùng có thể hiểu và biết được tập tin trên đang muốn truyền tải nội dung gì.
2.2.2 Tạo lập một tập tin XML
Chúng ta có thể sử dụng trình soạn thảo đơn giản để soạn thảo tài liệu XML, nhưng phải tuân thủ theo qui tắc sau:
<root> <child>
<subchild>…..</subchild> </child>
</root>
Theo định dạng trên, chúng ta thấy tuy tài liệu XML rất đơn giản nhưng qui định cũng rất nghiêm ngặt, có nghĩa là các tài liệu XML đều xuất phát từ nút gốc (root), và mỗi phần tử phải có thẻđóng và thẻ mở “< …/>”.
32
2.2.3 Những thành phần của một tập tin XML
- Khai báo : Mỗi một tài liệu XML có một chỉ thị khai báo
<? xml version="1.0"? encoding="utf-8" >
Định nghĩa tài liệu XML tuân theo chuẩn của W3C và đây là phiên bản “1.0” và được mã hóa theo tiêu chuẩn UTF-8.
- Chú thích: được khai báo như sau:
<!-- note-- >
- Phần tử (Elements) : Một tài liệu XML được cấu thành từ những phần tử. Một phần tử có thẻ mở và thẻ đóng. Giữa thẻ mở và thẻ đóng là nội dung của phần tử đó. Phần tử có thể chứa dữ liệu hoặc có thể lồng vào một phần tử khác.
- Phần tử gốc (root): Trong tài liệu XML, chỉ có một phần tử gốc, và phần tử này sẽ chứa tất cả những phần tử của tài liệu XML do chúng ta tạo ra.
Theo ví dụ trên, ta thấy chỉ có một phần tử “Person” .
- Thuộc tính (Attributes) : Nhưđã trình bày ở trên, một phần tử có thể chứa dữ liệu hoặc chứa phần tử khác hoặc cả hai. Bên cạnh đó, phần tử có thể rỗng, khi đó nó có thể chứa thuộc tính. Một thuộc tính chỉ là một sự lựa chọn để gắn dữ liệu đến phần tử. Một thuộc tính đặt trong thẻ mở của phần tử và chỉ ra giá trị của nó bằng cách sử dụng cặp “name=value”.
<?xml version="1.0" encoding="utf-8" ?> <Persons>
<Person ID=”1”>
< City>Bac ninh</ City>
< PersonName>Tran Cong Dai </ PersonName > <Age>27</ Age >
33
<Person ID=”2”>
< City>Bac ninh</ City>
< PersonName>Tran Dai Nghia </ PersonName > <Age>2</ Age >
</ Person > </ Persons>
Tập tin Persons.xml 2.3 Truy vấn dữ liệu tập tin XML
Như vậy để xử lý một tài liệu XML, chương trình ứng dụng phải có cách di chuyển bên trong tài liệu để lấy ra giá trị của các phần tử hay thuộc tính. Do đó ngôn ngữ XML Path được ra đời, mà chúng ta gọi tắt là XPath. XPath đóng một vai trò quan trọng trong việc truy vấn dữ liệu cho các chương trình ứng dụng vì nó cho phép ta lựa chọn hay sàng lọc ra những phần tử nào mình muốn để trao đổi hay hiển thị.
Nếu khi làm việc với cơ sở dữ liệu ta dùng các phát biểu SQL như SELECT .. FROM table_name WHERE ... để trích ra một số mẩu tin từ một bảng, thì khi làm việc với tập tin XML, XPath cho ta những biểu thức về điều kiện giống như mệnh đề WHERE trong SQL. XPath là một ngôn ngữ dùng để xử lý truy vấn trên tài liệu XML, cũng giống như SQL là một chuẩn để làm việc với cơ sở dữ liệu. Một biểu thức XPath có thể chỉ ra vị trí và mẫu nào để kết hợp. Chúng ta có thể áp dụng toán tử boolean, hàm string, và toán tử số học trong biếu thức XPath để xây dựng câu truy vấn phức tạp trên tài liệu XML. XPath cũng cung cấp một số hàm về số như tính tổng, hàm làm tròn (round).
34
XPath cho ta cú pháp để diễn tả cách đi lại trong XML. Ta coi một tài liệu XML như được đại diện bằng một cây có nhiều nút. Mỗi phần tử hay thuộc tính là một nút. Ta có thể biểu diễn tập tin “Person.xml” ở trên bằng một cây như dưới đây, trong đó nút phần tử màu nâu, nút thuộc tính màu xanh:
Hình 2.1: Biểu diễn hình cây của tập tin XML
Ta có thể dùng biểu thức XPath để chỉ định Location Path (lối đi đến vị trí) đến nút nào hay trích ra một hay nhiều nút thỏa đúng điều kiện yêu cầu. Biểu thức XPath có thể là tuyệt đối, tức là lấy nút gốc làm chuẩn hay tương đối, tức là khởi đầu từ nút vừa mới được chọn. Có hai cách viết để diễn tả XPath Location, viết nguyên và viết tắt. Trong cả hai cách ta đều dùng dấu (/) để nói đến phần tử tài liệu, tức là nút gốc. Ta cũng sẽ dùng những ký hiệu như (/), một chấm (.) và hai chấm (..) cho cách viết tắt trong
35
XPath Location đểđi xuống các nút con, chỉ định nút được chọn, hay đi ngược lên các nút tổ tiên.
Chúng ta hãy tìm vài đường đi trong cây của tài liệu XML nói trên. Muốn chọn nút của phần tử Person (nó cũng là phần tử gốc) bằng cú pháp nguyên, ta sẽ dùng biểu thức XPath sau đây:
/child::Person
Dịch ra cú pháp tắt, biểu thức này như sau : /Person
Đi ra nhánh của cây, ta sẽ tìm được nút PersonName bằng cách dùng biểu thức sau: /child::Person/child:PersonName
Sau đây là biểu thức viết tắt tương đương: /Person/PersonName
Nếu muốn lấy ra một nút thuộc tính, ta phải nói rõ điều này bằng cách dùng từ khóa
attribute trong cách viết nguyên hay dùng ký tự @ trong cú pháp tắt. Do đó để lấy thuộc tính ID của phần tửPerson, ta sẽ dùng biểu thức XPath sau:
/child::Person/attribute::ID Cú pháp viết tắt tương đương :
/Person/@ID
Ta có thể giới hạn số nút lấy về bằng cách gắn thêm điều kiện sàng lọc vào đường đi. Điều kiện giới hạn một hay nhiều nút được chèn vào biểu thức bên trong một cặp ngoặc vuông ([]).
- Ví dụ 1 : để lấy ra mọi phần tửPerson có thuộc tính ID lớn hơn 1, bạn có thể dùng biểu thức sau đây:
/child::Person[attribute::ID > 1] Trong cú pháp tắt :
36 /child::Person[@ID > 1]
- Ví dụ 2 : Truy vấn tất cả phần tử trong tập tin. Biểu thức XPath như sau: /Person
- Ví dụ 3 : Truy vấn các phần tử có địa chỉở Bac Ninh. Biểu thức được viết như sau: /Person/[child::City = “Bac Ninh”]
37
2.4 Ứng dụng ngôn ngữ XML trong việc tích hợp các thiết bị
2.4.1 Lưu trữ thông tin vị trí thiết bị
Các phòng là một cách tự nhiên để phân vùng hành vi và hoạt động của con người, sử dụng trải nghiệm người dùng để tạo ra và cấu hình các thiết bị một cách đơn giản nhất, một vài thiết bị sẽ cần có khả năng thông báo vị trí của chúng. Vấn đềđáng quan tâm ở đây là làm thế nào để quảng bá thông tin đó. Ngoài ra, không phải thiết bị nào cũng luôn được đặt ở một vị trí cố định, một vài thiết bị có thể được dịch chuyển đến những chỗ khác. Do đó, vị trí của các thiết bị và các dịch vụ tương ứng có khả năng thay đổi và hệ thống cần phải được thông báo về những thay đổi đó.
Thông tin về vị trí của thiết bị có nhiều ý nghĩa trong việc quản lý các thiết bị trong nhà và tại các phòng. Dựa vào thông tin này hệ thống sẽ đề xuất các gợi ý tích hợp các thiết bị trong cùng phạm vi nhằm tạo ra các kịch bản điều khiển thông minh. Hơn nữa, việc thông báo về thay đổi vị trí thiết bị giúp người quản trị hệ thống có thể điều chuyển các thiết bị thay thế thiết bị khác khi xảy ra sự cố thiết bị như hỏng hóc hoặc không hoạt động.
Theo đặc tả kỹ thuật UPnP không có quy định về thiết bị hoặc dịch vụ thông báo về vị trí của nó trong quá trình thiết lập ban đầu và trong các thông tin quảng bá. Đặc tả kỹ thuật UPnP cũng không quy định về thông tin này trong các bản mô tả thiết bị dưới dạng XML. Do đó thông tin về vị trí sẽ cần được cung cấp bằng các dịch vụ riêng biệt trong thiết bị. Tuy nhiên không có dịch vụ vị trí UPnP tiêu chuẩn nào được đưa ra. Các thiết bị UPnP được sử dụng trong đồ án sẽ được tích hợp dịch vụ vị trí bao gồm thông tin cơ bản về thông tin vị trí và thông tin này sẽ tự động gửi sự kiện tới các điểm điều khiển khi có sự thay đổi giá trị dữ liệu.
38
Một vấn đề được đặt ra là việc cung cấp thông tin thiết bị thông qua dịch vụ sẽ gây khó khăn cho các điểm điều khiển xác định một cách nhanh chóng vị trí của thiết bị. Các điểm điều khiển này sẽ phải lặp qua tất cả các thiết bị sẵn có và gửi truy vấn tới các dịch vụ vị trí. Tuy nhiên phương pháp này sẽ tiêu tốn nhiều thời gian và tài nguyên mạng.
Kutter et al đã có đưa ra một giải pháp để giải quyết vấn đề này. Họ đề xuất mở rộng bản tin SSDP, bản tin này được gửi đi bởi thiết bị để quảng bá về thiết bị, bằng cách thêm các tiêu đề “Mobility” và “Locality” để quảng bá về thuộc tính động và vị trí thiết bị. Phương pháp này cung cấp điểm điều khiển với sự hiểu biết về thông tin vị trí thiết bị khi cần truy vấn tới thiết bị này thông qua vị trí. Dịch vụ vị trí UPnP vẫn được sử dụng để cung cấp để tương thích, cho phép các điểm điều khiển lấy được thông tin vị trí của các thiết bị. Trong trường hợp sử dụng các thiết bị di động, một bản tin SSDP mới có thể quảng bá bất cứ lúc nào khi vị trí thiết bị có sự thay đổi và giá trị biến số vị trí của dịch vụ vị trí được thông báo. Tuy nhiên các bản tin SSDP được tạo ra liên tục dưới dạng các gói thông tin theo thời gian, các gói thông tin này có thể là “NOTIFY” hoặc “M-SEARCH” bao gồm các thông tin về các dịch vụ. Việc quản lý các bản tin để lấy thông tin về vị trí thiết bị hoặc khi có sự thay đổi vị trí sẽ rất khó khăn.
39
Hình 2.2 : Danh sách các bản tin SSDP
Trong phạm vi đồ án, em đưa ra giải pháp sử dụng thêm dịch vụ vị trí với các hàm để thiết lập và lấy thông tin về vị trí của thiết bị thông qua biến số trạng thái. Biến số này có thể gửi sự kiện khi có thay đổi giá trị. Tất cả thông tin về vị trí của các thiết bị sẽ được lưu dưới dạng tập tin XML khi điểm điều khiển phát hiện thiết bị trong mạng. Cấu trúc tập tin này bao gồm các thông tin cần thiết để phân biệt các thiết bị như UDN (Unique Device Name), kiểu chính của thiết bị, thông tin về vị trí thiết bị.
40 <?xml version="1.0" encoding="utf-8"?> <Devices> <Device UDN="Switch-121-2bde-4ab4-a6e3-93ad6fe4562"> <Type>Switch</Type> <Location>Utility Room</Location> </Device> <Device UDN="Phone-647-4bde-4bb4-aee3-73ad6fe790ab"> <Type>Phone</Type> <Location>Landing</Location> </Device> <Device UDN="CDPlayer-f778-4511-b2fe-f51dd5932ed2"> <Type>CDPlayer</Type> <Location>Bedroom 1</Location> </Device> <Device UDN="Light2-f-72b7-4606-b2e2-293587f476bc"> <Type>Light</Type> <Location>Living Room</Location> </Device> <Device UDN="tv-767a-c767-47aa-bb9d-c5a2a0232cd8"> <Type>TV</Type> <Location>Living Room</Location> </Device> <Device UDN="Time-555-9832-4504-8de4-029f4a04ed98"> <Type>Time</Type> <Location>Utility Room</Location> </Device> <Device UDN="Sensor-226-2bde-4ab4-a6e3-93ad6fe4562">
41
<Type>MotionSensor</Type>
<Location>Living Room</Location> </Device>
</Devices>
Thông tin thiết bị lưu dưới dạng XML
Khi thiết bị có sự thay đổi về thông tin vị trí, giá trị của biến trạng thái “Locality” thay đổi, biến số trạng thái gửi thông báo sự kiện về sự thay đổi đó. Các điểm điều khiển hoặc các thiết bị khác theo dõi thiết bị sẽ dựa trên giá trị UDN của thiết bị đó để cập nhật lại thông tin vị trí trong tập tin XML. Quá trình lưu thông tin thiết bị và cập nhật thông tin vị trí được thực hiện thông qua việc sử dụng ngôn ngữ XML đã giới thiệu ở trên, chi tiết hơn sẽđược mô tảở phần tiếp theo. Dựa trên tập tin XML này, hệ thống sẽ truy vấn thông tin và đề xuất các thiết bị phù hợp để xây dựng các kịch bản điều khiển thiết bị.
42
2.4.2 Thiết lập mối quan hệ giữa các kiểu thiết bị
Trong phần trên, các thông tin cơ bản về thiết bị để điểm điều khiển có thể nhận biết, phân biệt và truy vấn đến thiết bị được lưu dưới tập tin định dạng XML. Dựa vào thông tin về UDN, thông tin về vị trí “location”, sử dụng ngôn ngữ truy vấn XPath ta chỉ có thể lấy được danh sách các thiết bị có cùng thông tin vị trí địa lý trong nhà. Ví dụ trong phòng khách có các thiết bị đèn chiếu sáng, tivi, công tắc bật tắt, cảm biến chuyển động. Khi hệ thống lấy thông tin vị trí của một trong các thiết bị trên, sử dụng truy vấn sẽ liệt kê ra các thiết bị khác đang hoạt động trong phòng khách.
Việc liệt kê một danh sách các thiết bị ở gần nhau giúp người sử dụng hệ thống lọc được nhiều thiết bị khác ở xa, ít có khả năng kết hợp với các thiết bị đó để tạo thành các kịch bản điều khiển. Tuy nhiên ngoài việc lọc danh sách các thiết bị gần nhau hay cùng trong một khu vực, hệ thống chưa thể đề xuất ra các thiết bị có khả năng tương thích cao với thiết bị khác. Để làm được điều đó ta cần xây dựng một tập hợp các mối quan hệ giữa các thiết bị dựa trên thông tin về kiểu tiêu chuẩn của các thiết bị đó. Khi ta thiết lập mối quan hệ về kiểu tiêu chuẩn giữa thiết bị A với kiểu tiêu chuẩn của thiết bị B, thì cũng đồng thời thiết lập mối quan hệ ngược lại giữa thiết bị B với thiết bị A. Việc thiết lập mối quan hệ giữa các thiết bị phải dựa trên tính năng của các thiết bị và có ý nghĩa trong thực tế.
Ví dụ về mối quan hệ giữa thiết bị đồng hồ đếm ngược thời gian và thiết bị đèn nhị phân. Người sử dụng bật đèn đọc sách trước khi đi ngủ và họ có thể ngủ quên trong khi đèn vẫn sáng, như vậy sẽ tiêu tốn điện năng lãng phí. Do đó họ thiết lập thiết bị đồng hồđếm ngược sau một khoảng thời gian nhất định thiết bị đèn sẽ tựđộng tắt. Như vậy sẽ hình thành một mối quan hệ giữa hai thiết bị có kiểu tiêu chuẩn là “Time” - “Light” và “Light” - “Time”.
43
Kiểu thiết bị : Time Kiểu thiết bị : Light
Hình 2.3 : Mối quan hệ giữa 2 thiết bị
Các thông tin về mối quan hệ giữa các thiết bị sau khi được thiết lập sẽ được lưu dưới dạng tập tin XML như bên dưới :
<?xml version="1.0" encoding="utf-8"?> <DeviceTypes> <DeviceType Id="713"> <Type>Switch</Type> <RelatedType>Light</RelatedType> </DeviceType> <DeviceType Id="508"> <Type>Light</Type> <RelatedType>Switch</RelatedType> </DeviceType> <DeviceType Id="602"> <Type>Switch</Type> <RelatedType>CDPlayer</RelatedType> </DeviceType> <DeviceType Id="454"> <Type>CDPlayer</Type> <RelatedType>Switch</RelatedType> </DeviceType> <DeviceType Id="525"> Time - Light Light - Time
44 <Type>Switch</Type> <RelatedType>TV</RelatedType> </DeviceType> <DeviceType Id="955"> <Type>TV</Type> <RelatedType>Switch</RelatedType> </DeviceType> <DeviceType Id="142"> <Type>Phone</Type> <RelatedType>CDPlayer</RelatedType> </DeviceType> <DeviceType Id="16"> <Type>CDPlayer</Type> <RelatedType>Phone</RelatedType> </DeviceType> <DeviceType Id="639"> <Type>Phone</Type> <RelatedType>TV</RelatedType> </DeviceType> <DeviceType Id="99"> <Type>TV</Type> <RelatedType>Phone</RelatedType> </DeviceType> </DeviceTypes>
45
Mỗi bản ghi có một trường “Id” để phân biệt với các bản ghi khác, trường “Type” lưu thông tin về kiểu của thiết bị chính, trường “RelatedType” lưu thông tin về kiểu của thiết bị liên quan. Dựa trên các thông tin này, khi hệ thống sẽ lọc các thiết bị có