2009-05-22 5 views
2

가 관련된 질문이 답 현재 2 위에서 What is the preferred Java XML binding framework?XML 직렬화는 XML 데이터 바인딩과 정말로 다른가요? 그렇다면 어떻게됩니까?

있다, 포스터는 XML 직렬화 구별을 끌었다 및 Java/XML 데이터 바인딩. XML 데이터 바인딩은 XML 문서에서 메모리 내 객체 그래프를 만드는 것을 의미합니다. 또한 XML 직렬화는 "메모리 내 개체 그래프에서 XML 문서 만들기"를 의미합니다.

나는 그것이 전혀 다르다는 것을 알지 못한다. 동일한 문제에 대해서만 다른 견해가있다.

데이터 바인딩의 강조는 개체 모델에 대한 것이지만 serialization의 강조는 문서 형식에 대한 것이 었습니다. 나는 전혀 보지 못한다. 객체 그래프를 XML로 직렬화하는 경우 형식에 대한 관심이있을 수 있습니다.이 속성은 읽기 쉽고 도구 가능하며 유효성이 있어야합니다. (형식이 관련이 없다면 왜 바이너리 직렬화를 사용하지 않고 완료해야합니까?) 반면에 "데이터 바인딩"(을 비 직렬화이라고 부름)을 수행 할 때 균형 잡힌 강조가 있어야합니다 문서 형식과 개체 모델 모두에서

그래서 당신에게 질문 :
는 및 XML 직렬화에 대한 걱정 가치가 바인딩 자바/XML 데이터 사이에 차이가 있나요?

답변

2

모든 입력에 감사드립니다. 이 모든 것을 고려해 볼 때, 나는 아직도 그 구별이 인공적인 것이라고 생각한다. 행성? 반성? 그것은 주관적이고, 퍼지며, 임의적이며, 인공적인 느낌을줍니다. 이것은 의미있는 구별이 없음을 나타냅니다.

2

XStream과 같은 라이브러리는 객체 그래프가 표준 Java 직렬화 의미를 사용하여 저장/복원 할 수 있도록 XML 직렬화 (XML 문서 처리가 아닌)를 제공합니다.

직렬화 된 양식은 별칭을 사용하여 변경할 수 있지만 Java 클래스 이름을 포함 할 수 있으므로 Java 환경 외부에서 사용하려는 문서가 아닐 수 있습니다.

3

많은 경우 구별이 작은 경우가 많습니다. 귀하의 질문에 대한 답변은 다음과 같습니다. 귀하의 유스 케이스에 따라 다릅니다. 바인딩은 컴퓨터 메모리의 개체로 XML 문서의 정보 을 대표하는 과정을 의미

XML 데이터 :보기는, 예를 들어, XML Data Binding에 대한 위키 백과의 항목으로 시작한다.

XStream을 XML로하고 다시 객체를 직렬화하는 간단한 라이브러리는 다음과 같습니다 비교하여

, 직렬화 프레임 워크 인 XStream의 페이지를 참조하십시오.

따라서 XML 데이터 바인딩의 경우 XML 형식은 명시적인 정의가있는 데이터의 "기본"형식입니다. (종종 XSD입니다.) Java (또는 C# 또는 ...) 객체는 XML을 나타냅니다. 그러나 직렬화의 경우 개체는 정의, "기본"형식이며 XML 표현은 보조입니다.

기본적으로 동일한 데이터의 두 가지 형식 (선택한 언어로 된 개체와 다른 XML 표현)이있는 경우 대부분의 용도에 대해 두 가지 형식 중 하나는 기본 형식이되고 다른 형식은 기본 형식이됩니다. 반성. XML 형식이 기본 XML 데이터 바인딩에 대해 이야기하고 있습니다. 객체가 primary 일 때 직렬화에 대해 이야기하고 있습니다.

직렬화의 경우 왜 바이너리 형식 대신 XML을 사용합니까? 데이터에 대한 XML 형식은 사람이 읽을 수있는 가능성이 높으며 객체에 대한 변경 사항 (예 : 새 필드 추가)을 처리 할 가능성이 높으며 직렬화 된 객체를 이동할 때 인코딩 문제가 발생할 가능성이 적습니다. 서로 다른 바이트 순서를 갖는 머신 들간에, 등등. XML은 잘 알려져 있고 잘 알려진 방식으로 구성되어 있으며 XML은 새로운 필드와 새로운 요소를 처리 할 때 매우 유연합니다. 바이너리 형식은 자생적 인 경우가 많으며 이후의 직렬화 형식 변경과 관련하여 취약하거나 그렇지 않을 수도 있습니다.

+0

입력 해 주셔서 감사합니다. 이 글을 읽은 후에도, 나는 여전히 그 구별이 인공적인 것임을 느낀다. 행성? 반성? 그것은 주관적이고, 퍼지며, 임의적이며, 인공적인 느낌을줍니다. 이것은 의미있는 구별이 없음을 나타냅니다. ps : "왜 XML 사용"에 대한 제 질문은 수사적이었습니다. – Cheeso

+0

XML 데이터 바인딩의 경우 XML 스키마를 만들 가능성이 크며 특정 XML 표현에 관심이있을 것입니다. 직렬화의 경우 특정 XML 표현에 신경 쓰지 않을 것입니다. XML 데이터 바인딩의 경우 XML에서 객체로 XML로 이동합니다. 직렬화의 경우 객체에서 XML, 객체로 이동합니다. 그것은 주관적이거나 애매한 것이 아닙니다. XML은 일시적 (또는 무한정)으로 객체를 저장하거나 전송하는 방법입니까? 다음은 직렬화입니다. 객체를 사용하여 XML에 편리하게 액세스 할 수 있습니까? 그런 다음 데이터 바인딩입니다. – Eddie

5

아니요, 여기서 언급 한 것처럼 개념적으로 매우 중요합니다. 개념적 차이점이 있습니다. 구현이 강한 유사점을 가지고있을 수 있으며, 혼동을 일으킬 수도 있지만 개념적으로는 명확하지 않습니다.

데이터 바인딩이란 Java 객체를 객체가 아닌 콘텐츠 (ORM, XML 또는 JSON 문서 등의 관계형 데이터)에 바인딩하는 것을 의미합니다. 서로 다른 표현 (POJO, 관계형/계층 적 데이터)도 똑같이 중요합니다. 데이터 바인딩은 지원하는 데이터 형식의 특성에 대해 스스로를 고려해야합니다. 일부 기능에는 Java POJO (예 : XML 혼합 컨텐츠, 주석, 처리 명령, 속성과 요소의 차이)와 같은 구조가 없습니다. 데이터 바인딩은 임피던스를 연결하는 데 중점을 둡니다. 가능한 한 표현간에 원활한 변환을 허용합니다.

개체 직렬화를 사용하면 (Java) 개체로 시작하고 끝낼 수 있습니다. 다른 형식은 두 번째로 중요하며 개체 전달의 목적으로 만 사용할 수 있습니다. 이들은 사용 된 데이터 형식으로 정확한 구조를 하드 코딩 할 수 있습니다. 하지만 그렇지 않더라도 사용할 수있는 구조의 종류는 제한됩니다. 객체 직렬화는 객체와 관련된 사물 (식별자, 참조, 사이클 처리)을 처리해야합니다. 데이터 바인더가 무시할 수있는 것들.

하지만 문제는 혼란 스러울 수 있습니다. 일반적으로 객체 직렬화 라이브러리 (예 : XStream)는 외부 형식을 맞춤 설정할 수있는 많은 유연성을 제공합니다 (객체보다 중요성은 낮음에도 불구하고). 그리고 데이터 바인딩 도구를 순수 개체 직렬화 도구의 대안으로 사용할 수 있습니다. 대부분/대부분의 경우 꽤 잘 작동합니다. "보조 목적"을 위해 실제로 도구를 사용할 수 있습니다. 그러나 필요한 기능에 따라 제한이 있습니다. 많은 데이터 바인딩 도구가 순환 참조를 처리 할 수 ​​없습니다. 객체 직렬자는 xml 등을 지원할 수 없지만 부분 집합을 지원할 수는 없습니다. 보조 도구를 사용할 수있는 곳이라 할지라도 사용의 편의성이나 성능면에서 다르게 선택하는 것이 좋습니다.