xml 스키마에서 vector3 표현하기

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
attack51
Posts: 118
Joined: 2004-07-20 17:56
Location: 군바리
Contact:

xml 스키마에서 vector3 표현하기

Post by attack51 »

xml문서에서

Code: Select all

<vector3>10.2  20.5   1</vector3>
<vector3>10.2, 20.5,  1</vector3>
<vector3>[10.2, 20.5, 1]</vector3>
<vector3>(10.2, 20.5, 1)</vector3>
이중 한가지 표현을 하고 싶습니다.
xml스키마를 어떤식으로 작성해야 될까요.
데이타 부분을 통채로 string하는것 빼고, 각 숫자를 float으로 하고 싶고요...
정 string으로 한다면 regex표현식으로 제약을 주고 싶습니다.

저는 현재 attribute를 사용해서
xml문서에서

Code: Select all

<vector3 x=4 y=2 z=3/>
위와같이 표현하고 있습니다.

스키마 문서에서는

Code: Select all

<xsd:complexType name="v3">
  <xsd:attribute name="x" type="xsd:float"/>
  <xsd:attribute name="y" type="xsd:float"/>
  <xsd:attribute name="z" type="xsd:float"/>
</xsd:complexType>

<xsd:element name="vector3" type="v3"/>
이런식으로 쓰고있습니다.

우쨔야 되는지 알켜주세요~~
생선 샌드위치 프로그램을 만들자!!
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

XSD 구문에 대한 질문이라면 다음 분이 알려주시겠습니다.... :)

구조 자체라면
<vector3>
<val>1</val>
<val>2</val>
<val>3</val>
</vector3>

같은 방식은 어떨까요...
attack51
Posts: 118
Joined: 2004-07-20 17:56
Location: 군바리
Contact:

Post by attack51 »

그게참 보기가 뭣해서 말입니다...

vector3하나에 5줄을 써야 하고, 만약에 한줄에 표현하면
<vector3> <val>1</val> <val>2</val> <val>3</val> </vector3>
이렇게 가독성이 떨어져서 고민중입니다 ^^;;
생선 샌드위치 프로그램을 만들자!!
류광
Posts: 3805
Joined: 2001-07-25 09:00
Location: GPGstudy
Contact:

Post by 류광 »

일단 가독성이 가장 좋은 <vector3>10.2, 20.5, 1</vector3> 같은 형태는 애초에 XML을 사용하는 의도와 좀 안 맞는 것 같고요.(또 다른 파싱이 필요하니까요)

결국 특성 아니면 자식 요소인데 가독성 면에서는 위에 제시한 것 같은 특성 방식이 좋겠네요. 그러나 구조 면에서 볼 때 "하나의 3차원 벡터는 세 개의 값들을 '가진다'"는 개념을 표현하기에는 요소 방식이 좋다고 봅니다.

궁극적으로.... XML의 가독성 자체를 포기할 수도 있습니다 :) 항상 하는 이야기이지만 XML 태그들을 사람이 직접 작성하고 직접 읽어야 하는 일 자체를 줄이는 게 속이 편하다.. 입니다. 편집기의 도움을 받을 수도 있고 전처리기 같은 걸 만들 수도 있구요...
attack51
Posts: 118
Joined: 2004-07-20 17:56
Location: 군바리
Contact:

Post by attack51 »

attribute와 element의 이용목적을 생각안하고 있었네요...
감사합니다^^
생선 샌드위치 프로그램을 만들자!!
haje01
Posts: 27
Joined: 2005-12-04 17:46
Location: NPLUTO

아래와 같은 방식은 어떨지요?

Post by haje01 »

1. 일단 실수형의 리스트를 만듭니다.
<xs:simpleType name="FloatList">
<xs:list itemType="xs:float"/>
</xs:simpleType>

2. 그 다음 리스트에 대해 제한을 거는 방식입니다.
<xs:simpleType name="Vector3">
<xs:restriction base="FloatList">
<xs:length value="3"/>
</xs:restriction>
</xs:simpleType>
비회원

Post by 비회원 »

위에서도 언급되었지만 해결책은 element 또는 attribute 중에서 하나를 선택하는 것입니다.

관습적으로 둘 중 어떤 것이 선호된다는 이야기는 없습니다만, 저는

클래스 -> element
단순 데이터멤버 -> attribute
복합 데이터멤버 -> sub element

를 사용하고 있습니다. 파싱할 때도 제법 직관적인 접근이 가능하고, 타이핑 양도 비교적 적습니다.

단점이라면 데이터 멤버가 많아질 경우 가독성이 떨어지는데 보통은 Visual Studio 의 그리드뷰를 이용하면 별 문제는 안됩니다.
Locked