XML 스키마 : 텍스트 만 포함하는 특성을 가진 요소?


133

이것을 찾는 데 어려움이 있습니다. XML에 대한 XML 스키마 파일에서 다음과 같은 요소를 어떻게 정의합니까?

<option value="test">sometext</option>

유형 xs:string이 있고 속성을 가진 요소를 정의하는 방법을 알 수 없습니다 .

내가 지금까지 얻은 것입니다 :

<xs:element name="option">
    <xs:complexType>
        <xs:attribute name="value" type="xs:string" />
    </xs:complexType>
</xs:element>

답변:


168

시험

  <xs:element name="option" type="AttrElement" />

  <xs:complexType name="AttrElement">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="value" type="xs:string">
        </xs:attribute>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

코드를 시도 할 때 다음과 같은 예외가 발생합니다-org.xml.sax.SAXParseException : src-resolve : 'AttrElement'이름을 '(n)'type definition '구성 요소로 해결할 수 없습니다. 왜 이렇게이다?
Ashwin

1
그렇다면 스키마 문서에 대상 네임 스페이스가 있고 형식을 나타내려면 접두사 이름을 사용해야하기 때문일 수 있습니다. (접두사 tns가 스키마 문서의 대상 네임 스페이스에 바인딩 된 경우 type="tns:AttrElement"유형을 참조하는 데 사용 됩니다.)
CM Sperberg-McQueen

@Ashwin 당신은 타입 네임 스페이스를 가진 타입을 참조 할 필요가있다. ( type="tns:AtrElement"XSD의 기본 네임 스페이스가 xs가 문서의 targetNamespace가 아닌 xs라면, 일반적으로이 경우 tns정의되고 사용된다.)
eckes

75

... 또는 인라인 동등 물 :

<xs:element name="option">
  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="value" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>
</xs:element>

11
simpleContent내 에서 정의하는 것이 실제로 직관적이지 않다는 것을 알았 습니다 complexType. 그러나 다시 XSD는 실제로 직관적 인 것처럼 보이지 않습니다. 그럼에도 감사합니다! :-)
독감

IntelliJ ( V12.1.3 ) 에서 나에게 오류가 표시됩니다 . value 속성이 "허용되지 않습니다". simpleContent 대신 complexContent 를 사용하여 수정했습니다.
aZen

@CrBruno는 이에 대한 전용 SO 질문을 여는 것이 좋습니다. 의견에서 여기에 링크하여 주시기 바랍니다 (그리고이 속임수를 가리킴)
eckes

-2

나는 그것이 동일하지 않다는 것을 알고 있지만 그것은 나를 위해 작동합니다.

<xsd:element name="option">
    <xsd:complexType mixed="true">
        <xsd:attribute name="value" use="optional" type="xsd:string"/>
    </xsd:complexType>
</xsd:element>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.