Tôi đang xử lý EXI ngay bây giờ.
Không có công cụ phổ biến nào để xử lý EXI. Một khi bạn nhận được vào ruột của EXI, bạn nhận ra có một loạt các dấu phân cách không cần thiết trong luồng nhị phân hoàn toàn và hoàn toàn không cần thiết với một lược đồ. Một số của nó là hài hước.
Bạn nghĩ điều sau đây sẽ được mã hóa như thế nào trong EXI nếu cả hai giá trị được chỉ định?
<xs:complexType name="example">
<xs:sequence>
<xs:element name="bool1" type="xs:boolean" minOccurs="0" />
<xs:element name="bool2" type="xs:boolean" minOccurs="0" />
</xs:sequence>
</xs:complexType>
Bạn có nghĩ rằng nó có thể là tối đa 4 bit không? 1 bit để chỉ ra nếu bool1 được xác định, và rằng giá trị của bool1, theo sau là một bit khác để chỉ ra nếu bool2 được xác định, sau đó giá trị của bool2?
Tốt golly no!
Vâng, hãy để tôi nói cho bạn biết nam và nữ! Đây là cách nó thực sự được mã hóa
+---- A value of 0 means this element (bool1) is not specified,
| 1 indicates it is specified
|+--- A value of x means this element is undefined,
|| 0 means the bool is set to false, 1 is set to true
||+-- A value of 0 means this element (bool2) is not specified,
||| 1 indicates it is specified
|||+- A value of x means this element is undefined
|||| 0 means the bool is set to false, 1 is set to true
||||
0x0x 4 0100 # neither bools are specified
0x10 8 00100000 # bool1 is not specified, bool2 is set to false
0x11 8 00101000 # bool1 is not specified, bool2 is set to true
100x 9 000000010 # bool1 is set to false, bool2 is not specified
110x 9 000010010 # bool1 is set to true, bool2 is not specified
1010 13 0000000000000 # bool1 is set to false, bool2 is set to false
1011 13 0000000001000 # bool1 is set to false, bool2 is set to true
1110 13 0000100000000 # bool1 is set to true, bool2 is set to false
1111 13 0000100001000 # bool1 is set to true, bool2 is set to true
^ ^
+-encoding--+
Which can be represented with this tree
0-0-0-0-0-0-0-0-0-0-0-0-0 (1010)
\ \ \ \ \
| | | | 1-0-0-0 (1011)
| | | |
| | | 1-0 (100x)
| | |
| | 1-0-0-0-0-0-0-0-0 (1110)
| | \ \
| | | 1-0-0-0 (1111)
| | |
| | 1-0 (110x)
| |
| 1-0-0-0-0-0 (0x10)
| \
| 1-0-0-0 (0x11)
|
1-0-0 (0x0x)
Tối thiểu 4 bit, tối thiểu để không xác định. Bây giờ tôi là một chút không công bằng, bởi vì tôi bao gồm các dấu phân cách - dấu phân cách hoàn toàn không cần thiết.
Tôi hiểu cách hoạt động của tính năng này ngay bây giờ. Dưới đây là thông số kỹ thuật:
https://www.w3.org/TR/exi/
Vui vẻ đọc điều đó! Đó là một TUYỆT VỜI TUYỆT VỜI CHO TÔI !!!! @@ ##! @
Bây giờ đây chỉ là một lược đồ, và đặc tả EXI đặc biệt nói rằng bạn vẫn có thể mã hóa XML KHÔNG phù hợp với lược đồ . Đó là vui nhộn bởi vì đây là nghĩa vụ phải được cho các thiết bị web nhỏ nhỏ. Bạn làm gì với dữ liệu không mong muốn mà bạn không có quy định để xử lý trong một thiết bị nhúng?
Tại sao, bạn chỉ cần chết tất nhiên. Không có sự phục hồi cho một cái gì đó bạn không mong đợi. Nó không giống như những thứ này có một màn hình, tôi may mắn nếu tôi có thể đăng nhập vào nó thông qua một cổng nối tiếp.
Tôi đã sử dụng 4 trình tạo/trình phân tích cú pháp/trình tạo XML khác nhau XSD. 3 trong số họ bị nghẹt thở trên Schema tôi phải sử dụng. Dữ liệu marshaling cho C và C++ (nhớ điều này là dành cho hệ thống EMBEDDED với bộ nhớ rất ít và sức mạnh CPU) là khủng khiếp.
XSD mô tả về cơ bản cấu trúc hoặc kiến trúc lớp và không có một công cụ duy nhất tôi có thể tìm thấy sẽ chỉ tạo các lớp. Ví dụ XSD mà tôi đưa ra ở trên nên tạo một cấu trúc với 4 bool, 2 bools là các giá trị và 2 bool cho biết nếu chúng được xác định.
Nhưng điều đó có tồn tại không? Vâng heck không.
Tôi thích XML, để mô tả tài liệu. Thực sự tôi làm - nhưng đây là những gì tôi ghét về XML - cho một tiêu chuẩn được chấp nhận rộng rãi, các công cụ có sẵn cho nó là hoàn toàn khủng khiếp. Chỉ cần đọc một lược đồ là một việc khó làm khi nó trải rộng trên nhiều không gian tên và tài liệu.
rant Rant, hết sức giận dữ HUF
Lý do duy nhất chúng ta đang sử dụng đây là một số ủy ban tiêu chuẩn khẳng định sau khi nó. Những gì nó được thực hiện được tạo ra một độc quyền cho một nhóm nhỏ các công ty đã thực hiện điều này, đó là mục đích duy nhất.
EXI không phải là một tiêu chuẩn được chấp nhận rộng rãi, XML là một trình đóng gói kém cho dữ liệu số, và đó là một nỗi đau để thực hiện nó và không có công cụ phong nha cho nó. EXIP đang ở phiên bản 5.0 - bất cứ thứ gì hoạt động đó là mã nguồn mở đều có trong Java - ít nhất tôi có điều đó.
Đối với lĩnh vực hoạt động của mình, EXI chỉ là một quyết định thiết kế tồi. Tôi đã làm việc trên tấn giao thức truyền thông trên các hệ thống nhúng khác nhau. Tôi đã làm việc trên DOCSIS, tất cả các modem cáp hiện đại đều sử dụng - chúng sử dụng giao thức Type/Length/Value đơn giản và có thể mở rộng với các điều khoản để xử lý các loại không được công nhận - đó là lý do tại sao Độ dài luôn được bao gồm. Thật đơn giản, phải mất hàng ngày để thực hiện toàn bộ ngăn xếp.
EXI rất khó để viết mã, không có bộ vi xử lý phù hợp cho nó, và tất cả các bộ vi xử lý tôi thấy rằng thực sự hoạt động tốt với nó, chỉ cần chuyển đổi từ EXI < -> XML - hoàn toàn vô dụng.
Tôi đã sử dụng để viết trình phân tích cú pháp XSD của riêng mình, có nghĩa là tôi phải hiểu ít nhất toàn bộ đặc tả XML cho các phần của thiết kế này sử dụng nó - và đó là mở rộng. Tôi sẽ mất 2 tuần để làm với bất kỳ thông số hợp lý nào, đưa tôi đi 10. Không ai trong thế giới của tôi sẽ sử dụng nó trừ khi nó bị đẩy xuống cổ họng của họ và họ không nên, đó là một cái chốt hình vuông cho một lỗ tròn.
Đây không thực sự là nơi dành cho các câu hỏi "ý kiến", xin lỗi. –