문제

XML,그것은 다시 사용 가능 하니까?

특히,문제는 나를 해결하기 위해 노력하는 것은 다음과 같습니다.내가 원하는 요소를 정의하 table 는 요소를 포함 tableSchema 그리고 성분 dataSource.내가 하고 싶은 이 방법으로는 tables 기를 참조하십시오 tableSchema 정의된다.음처럼,나는 여러 개 있을 수 있습 보고서 정의 tables 에 따라 동일한 tableSchema.

을 명확히,나는 할 수 있 다음과 같다:

<report name="Report1">
  <page>
    <table>
      <!--reference to tableSchema named "foo"-->
      <dataSource>fooData</dataSource>
    </table>
  </page>
  <page>
    <table> 
      <!--reference to tableSchema named "bar"-->
      <dataSource>barData</dataSource>
    </table>
  </page>
</report>

<report name="Report2">
  <page>
    <table>
      <!--reference to tableSchema named "foo" (same as above!)-->
      <dataSource>anotherFooData</dataSource>
    </table>
  </page>
</report>

tableSchemas barfoo 정의된 다른 곳에서,아마도 동일한 XML 문서입니다.

편집을 추가합니다:여기에,tableSchema,내가 의미하지 않는 다른 Xml 스키마.말의 정의 필드에서 table.예를 들어,내가 할 수 있 다음과 같다:

<tableSchema name="bar">
    <field>
      <displayName>bar1</displayName>
      <sourceName>bar1Source</sourceName>
      <format>Currency</format>
    </field>
    <field>
      <displayName>bar2</displayName>
      <sourceName>bar2Source</sourceName>
      <format>Text</format>
    </field>
</tableSchema>

<tableSchema name="foo">
    <field>
      <displayName>foo1</displayName>
      <sourceName>foo1Source</sourceName>
      <format>Percent</format>
    </field>
</tableSchema>

그런 다음에서 위 Report1 을 정의합 보고서를 포함하는 두 개의 tables 의 하나에 따라 형식 tableSchema foo, 고,두번째 형식에 따라 tableSchema bar, 고 Report2 을 정의합 보고서를 포함하는 중 table 는가에 따라 형식 tableSchema foo 는 스키마와 동일 Report1.

도움이 되었습니까?

해결책

이 XML을 생성/파싱 할 내용에 대한 컨텍스트를 제공하지는 않았지만이를 통제한다고 가정하면 다음에 대한 자신의 협약을 정의 할 수 있습니다.

<tableSchema ref="foo">

Parser가 TablesChema 정보를 검색하기 위해 "FOO"의 ID가있는 요소를 찾는 경우.

다른 팁

왜 그냥 포함한 정?당신은 그것을 정의 중 하나에서는 XML 스키마 다음 그것이 원하는 어디든지 당신은 그것을 사용하는 다른 XML 스키마 다음과 같다:

<include schemaLocation="http://www.example.com/schemas/barDef.xsd"/>
<include schemaLocation="http://www.example.com/schemas/fooDef.xsd"/>

두번째 부분의 질문:에 대한 XML 문서를 지정할 수 있는 종류의 tableSchema 그것입니다.

여기에 비유한 객체 지향 프로그래밍:(1)정의하는 수퍼 클래스(2)정의 foo 고 바로 서브 클래스의습니다.그런 다음,(3)정의 필드의 유형을 자신의 공통 수퍼 클래스;지금(4).런타임 개체할 수 있는 하나의 서브 클래스.그 의미가 있습니까?나는 그것이 당신이 무슨 생각하는 측면에서 어쨌든.

유를 완료하기 위해:XML 에서는 클래스 complexType;서브 클래스입니다 extension it;필드이 고 그것의 클래스가 해당 유형 특성과 클래스의 런타임이 차질:유형XML 문서.중요한 것은 마지막 부분, 차질:유형.

(1)입니다.의 공통 수퍼 클래스-XML complexType:

<complexType name="MySuperType">
  ...
</complexType>

(2).정의 서브 클래스-의 확장을 위 complexType:

<complexType name="Foo">
  <complexContent>
    <extension base="MySuperType">
      ...
    </extension>
  </complexContent>
</complexType>

<complexType name="Bar">
  <complexContent>
    <extension base="MySuperType">
      ...
    </extension>
  </complexContent>
</complexType>

(3).을 정의 필드의 수퍼 클래스-요소의 complexType 확장에서:

<element name="tableSchema" type="mySuperType"/>

(4)입니다.지금 XML 을 지정할 수 있는 요소의 특정 complexType XML 체:

<report xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <page>
    <table>
      <tableSchema xsi:type="foo"/>
      <dataSource>fooData</dataSource>
    </table>
  </page>
  <page>
    <table> 
      <tableSchema xsi:type="bar"/>
      <dataSource>barData</dataSource>
    </table>
  </page>
</report>

Note 유형 특별 정의 네임스페이스에서 주어집니다.사실,거기에 몇 가지 문제는 네임스페이스는 복잡할 수 있습,그러나 중요한 것은 그것이 이 가능하이 무엇을 원합니다.

에 대해 보다 완전한 예제 참조하십시 XML 스키마 프라이머.

원하는 작업을 수행하려면 XSL 스타일 시트 변환을 사용해야 할 수도 있습니다. 결국 그것은 완전하고 해결 된 XML을 초래할 것입니다.

(아직 질문을 이해하지 못할 수도 있지만 ...) 문자 그대로 테이블 스키마의 텍스트 값을 사용한다고 가정하면 실제로 처리 코드에 달려 있습니다. XML은 데이터의 표현 일뿐입니다. 그래서 당신은 다음과 같이 자신의 형식을 구성 할 수 있습니다.

<tableSchema ref="foo"/>

그런 다음 도구는 전체 문서를 읽고 FOO와 막대의 정의를 기억합니다 (테이블). 그런 다음 보고서를 처리하기 시작합니다. Report1을 사용하려고 할 때 위의 참조를 FOO로 볼 때 해시 테이블에서 foo를보고 사용합니다. 그게 당신이 의미하는 것입니까?

그렇다면 ID 및 IDREF 태그를 사용하면 이에 대한 지원이 조금 더 있으므로 다음과 같습니다.

<tableSchema myidref="foo"/>

<tableSchema myid="foo">
    <field>
      <displayName>foo1</displayName>
      <sourceName>foo1Source</sourceName>
      <format>Percent</format>
    </field>
</tableSchema>

그런 다음, 구문 분석 도구가 테이블을 채우고 조회 할 것입니다. Schema/DTD에서 IDREF 및 ID 유형의 MyIdRef와 MyID를 정의해야하므로 파서는 특별히 처리하는 것을 알고 있습니다. (MyIdref를 보여주는 것만) :

<element name="tableSchema">
  <complexType>
    <xsd:attribute name="myidref" type="xsd:IDREF" use="required"/>
  </complexType>
</element>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top