2011-08-23 7 views
0

내 응용 프로그램을 작성하는 프레임 워크에는 노드 이름이별로 중요하지 않은 많은 xml 파일이 있습니다. 모든 중요한 정보는 속성에 배치됩니다. 노드 유형은 속성 중 하나를 통해 정의됩니다.속성 만 정의하는 XSD 스키마

이 파일에 간단한 스키마를 작성하고 싶습니다. 나는이 두 가지 조건을 충족해야한다고 생각 :

  • 정의 된 목록에서 속성 (예 : 이름, 값, 유형 [훨씬 더있을 것입니다!])
  • 모든 요소가 요소의 순서를 가질 수있을 수있는 모든 요소 정확한 정의

주어진 속성 (예 : 유형) 인수에 따라 속성 목록을 만들 가능성이 높으면 매우 유용 할 것입니다.

XSD 파일이이 xml 파일을 처리 할 수 ​​있습니까? 그러한 스키마를 작성할 수 있습니까? 모든 노드의 속성 목록을 정의하는 방법.

답변

0

xml 인스턴스에서 지원하려는 요소 및 특성의 가능한 조합 각각에 대해 XSD 유형을 정의해야합니다. 예를 들어,

<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:all> 
     <!-- declarations of any of the types you can use --> 
     <xs:element name="MyType1" type="MyType1Type" /> 
     <!-- etc.. --> 
     </xs:all> 
    </xs:complexType> 
    </xs:element> 
    <!-- Type definitions --> 
    <xs:complexType name="MyType1> 
    <xs:sequence> 
     <xs:element name="MyElement1" type="xs:string" /> 
     <xs:element name="MyElement2" type="xs:date" /> 
     <!-- etc.. --> 
    </xs:sequence> 
    <xs:attribute name="MyAttribute1" type="xs:string" /> 
    <!-- etc.. --> 
    </xs:complexType> 
    <xs:complexType name="MyType2> 
    <xs:sequence> 
     <xs:element name="MyElement3" type="xs:string" /> 
     <xs:element name="MyElement4" type="xs:date" /> 
     <!-- etc.. --> 
    </xs:sequence> 
    <xs:attribute name="MyAttribute3" type="xs:string" /> 
    <!-- etc.. --> 
    </xs:complexType> 
    <!-- etc.. --> 
</xs:schema> 

일단 모든 가능한 유형을 정의하면 모든 XML 파일을 지원할 수 있습니다.

희망이

편집을하는 데 도움이 : 또는 사용 XS : anyType에 유형.

+0

, 나는 노드 이름이 어떤 정보도 제공하지 않는다고 말했다. 개발자는 여기에 절대적으로 모든 것을 삽입 할 수 있으므로 요소 이름 목록을 정의하는 것은 불가능합니다. –

+0

그러면 xs : anyType 유형을 사용해야합니다. –

+0

내가 언급 한 조건에 대한 예를 제공해 줄 수 있습니까? –

0

모든 속성이있는 complexType 만 정의하는 스키마를 가질 수 있습니다. 그러면 API를 사용하여 지정된 입력 요소에 대해 해당 명명 된 유형에 대한 유효성 검사를 요청할 수있는 스키마 프로세서를 찾아야합니다. 이렇게하는 한 가지 방법은 스키마 인식 XSLT 프로세서입니다 : (. 당신이 버릴 수있는 출력을 많이 생산하는) 당신의 유형 선언에 대한 문서의 모든 요소의 타당성을 검증

<xsl:template match="*"> 
    <xsl:copy-of select="." type="my-complex-type"/> 
    <xsl:apply-templates/> 
</xsl:template> 

불행하게도

+0

내 가능성이 제한되어 있으므로 현재 xsd 만 처리하는 기존 클래스를 확장하고 있습니다. 너무 나쁨 :( –