2012-07-18 6 views
1

xml이 단순히 요소를 필수가 아닌 기존의 이유로 알 수 없음을 지정하도록 허용하는 스키마를 제안하려고합니다.레거시 알 수없는 값에 대한 xsd 스키마 선택

예를 들어

:

<personName></personName> 

<personName>John</personName> 

이 유효하지만

가 유효하지 않습니다하지만

<personName><legacyUnknown /></personName> 

유효합니다.

그리고 이것은 personName 요소의 복잡성에 관계없이 작동해야합니다. 때로는 문자열 제한이있는 단순 유형 일 수도 있고 복잡한 요소 일 수도 있습니다.

<choice> 
    <element name="personName" type="name" /> 
    <element name="personName" type="legacyUnknown" /> 
</choice> 
<simpleType name="name"> 
<restriction base="string"> 
...enum values 
</restriction> 
</simpleType> 

나는 위와 같이 할 수 없다는 것을 알고 있습니다. 나는 그것이 대체 그룹을 가지고 행해질 수 있다는 것을 알고 있지만, 내가 이것을 적용하고자하는 모든 유형에 하위 그룹을 만들기위한 자세한 코드를 넣어야하는 것처럼 보인다.

이 문제에 대한 도움을 주시면 대단히 감사하겠습니다.

+0

스키마 제한을 적용에 관한 것입니다. personName을 보낼 사람을 누구에게 강요 하시겠습니까? 누가 그것을 보낼 필요가 없습니까? (이 솔루션은 클라이언트 및 서버 경우 내 솔루션을 참조하십시오) –

답변

1

"레거시 알 수없는"의미를 그렇지 않으면 쓸모없는 xsi : nil 구문에 첨부 할 수 있습니다. 그런 다음 스키마의 요소를 nillable로 정의하고 xsi : nil = "true"로 인스턴스에 레이블을 지정하여 "legacy unknown"으로 의도 한 의미를 캡처하십시오. 제한이 문서의 상황에 따라 적용 할 경우

0

는 (서버 응답 대 클라이언트 요청 등), 다음을 고려할 수 :

<xs:element name="request"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element name="personName" type="PersonName"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:element name="response"> 
    <xs:complexType> 
     <xs:sequence> 
      <xs:element minOccurs="0" name="personName" type="PersonName"/> 
     </xs:sequence> 
    </xs:complexType> 
</xs:element> 
<xs:simpleType name="PersonName"> 
    <xs:restriction base="xs:string"> 
     <xs:minLength value="1"/> 
    </xs:restriction> 
</xs:simpleType>