지금 EXI를 다루고 있습니다.
EXI를 처리하기위한 훌륭한 보편적 도구는 없습니다. 일단 당신이 EXI의 배짱에 들어갔다면, 당신은 절대적으로 그리고 완전히 스키마와 함께 불필요한 바이너리 스트림에 불필요한 구분 기호가 잔뜩 있다는 것을 깨닫게됩니다. 그것 중 일부는 유머입니다.
두 값을 모두 지정하면 다음 코드가 EXI로 인코딩된다고 어떻게 생각하십니까?
<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>
최대 4 비트라고 생각하십니까? 1 비트는 bool1이 정의되어 있는지 나타내며, bool1의 값 다음에 bool2가 정의되어 있는지 나타내는 또 다른 비트가오고 bool2의 값은?
Good golly no!
남녀별로 알려주세요. 이것이 실제로 인코딩되는 방법입니다.
+---- 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)
최소한 정의하지 않으려면 MINIMUM 이상이어야합니다. 이제 나는 조금 불공평합니다. 구분 기호를 포함하고 있기 때문입니다. 구분 기호는 완전히 불필요합니다.
나는 어떻게 작동하는지 이해합니다. 여기 사양입니다 :
https://www.w3.org/TR/exi/
재밌게가 읽기! 그것은 나를 위해 좋은 거래 !!!! @@ #! @
지금 이것은 단지 스키마와 EXI 사양은 구체적으로 당신이 여전히 스키마를 준수하지 않는 XML을 인코딩 할 수 있다고 말합니다 . 이것이 작은 웹 장치 용으로되어 있기 때문에 재미 있습니다. 임베디드 장치에서 처리 할 수있는 조항이없는 예기치 않은 데이터로 무엇을합니까?
왜, 당신은 물론 죽을 수 있습니다. 기대하지 않는 것에 대한 회복은 없습니다. 이런 것들이 화면을 가지고있는 것과는 다르다. 직렬 포트를 통해 로그인 할 수 있다면 나는 운이 좋다.
저는 4 개의 다른 XSD 생성기/파서/XML 생성기를 사용했습니다. 그들 중 3 명은 사용해야하는 스키마에 질식합니다. C 및 C++ 용 데이터 마샬링 (메모리와 CPU 성능이 거의없는 임베디드 시스템을 기억하십시오)은 끔찍합니다.
XSD는 기본적으로 구조 또는 클래스 아키텍처를 설명하며 클래스를 만드는 데 사용할 수있는 단일 도구가 없습니다. 위에 주어진 XSD 예제는 4 개의 bool, 2 개의 bool이 값이고 2 개의 bool이 정의되어 있는지 나타내는 구조를 생성해야합니다.
하지만 그게 존재합니까? 잘 됐네.
문서를 설명하기 위해 XML을 좋아합니다. 실제로 저는 XML에 대해 싫어합니다. 널리 채택 된 표준에서 사용 가능한 도구는 절대적으로 끔찍합니다. 스키마를 읽는 것은 여러 네임 스페이스와 문서에 퍼져있을 때 수행하기가 어렵습니다.
호언 장담 호언 장담, 발끈 HUF
우리는이를 사용하는 유일한 이유는 몇 가지 표준위원회는 고집이다. 이 작업은 이미이 기능을 구현 한 소규모 그룹의 회사에 독점을 제공하는 것입니다. 이것이 유일한 목적입니다.
EXI는 널리 채택 된 표준은 아니지만 XML은 수치 데이터의 캡슐화 도구로서 빈약 한 요소이며이를 구현하는 데는 어려움이 있으며 적절한 도구가 없습니다. EXIP은 5.0 버전입니다 - 오픈 소스로 작동하는 모든 것은 Java에 있습니다 - 적어도 가지고 있습니다.
내 작업 분야에서 EXI는 잘못된 설계 결정 일뿐입니다. 다양한 임베디드 시스템에서 수많은 통신 프로토콜을 연구했습니다. 저는 현대의 모든 케이블 모뎀에서 사용하는 DOCSIS를 연구했습니다. 인식 할 수없는 유형을 처리하기위한 규정과 함께 간단하고 확장 가능한 유형/길이/값 프로토콜을 사용하므로 길이가 항상 포함됩니다. 간단합니다. 전체 스택을 구현하는 데는 문자 그대로 며칠이 걸립니다.
EXI는 코드를 작성하기가 매우 어렵고, 괜찮은 프로세서가없고, 최악의 경우 모든 프로세서가 실제로 잘 작동한다는 것을 알게되었습니다. 단지 EXI < -> XML로 변환합니다. 전혀 쓸모 없어.
나는 내 자신의 XSD 파서를 작성했다. 이는 적어도이 디자인을 사용하는 부분에 대해 전체 XML 사양을 이해해야 함을 의미한다. 합리적인 사양으로 2 주간 걸렸을 때 나를 데려 갔을 것입니다. 내 세계의 어느 누구도 목구멍에 쑤셔 넣지 않고 둥근 구멍을위한 사각형의 못을 사용하지 않는 한 이걸 사용하려고하지 않습니다.
이것은 "의견"질문을위한 장소가 아닙니다. 미안합니다. –