2011-10-31 3 views
1

HTML과 같은 XML 용 스키마를 작성하려고합니다. <> <> <> < 글꼴> < img> 태그가 모두 < p> (aragraph) 태그 안에 있습니다.의사 HTML 용 XML 스키마 작성

<p> <u><b>test</u><b> </p> 

또는

<p> <b><u>test</u></b> </p>. 

나는 자기 참조 복잡한 유형을 작성하려고하지만 난 항상 "잘못된 스키마"오류를 얻을 : 문제는 그들이 어떤 순서에있을 수 있습니다. 누구든지이 일을 올바르게 수행하도록 안내 할 수 있다면 많은 도움이 될 것입니다.

스키마 :

<xs:element name="HTMLDocument"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 

<xs:complexType name="textElements" mixed="true"> 
    <xs:group> 
    <xs:element name="b" type="textElements"/> 
    <xs:element name="i" type="textElements"/> 
    <xs:element name="u" type="textElements"/> 
    <xs:element name="a" type="textElements"/> 
    <xs:element name="font" type="textElements"> 
     <xs:complexType> 
     <xs:attribute name="size" type="xs:string"/> 
     <xs:attribute name="face" type="xs:string"/> 
     <xs:attribute name="color" type="xs:string"/> 
     </xs:complexType> 
    </xs:element> 
    <xs:element name="img"> 
     <xs:complexType> 
     <xs:attribute name="src" type="xs:string"/> 
     <xs:attribute name="width" type="xs:decimal"/> 
     <xs:attribute name="height" type="xs:decimal"/> 
     </xs:complexType> 
    </xs:element> 
    </xs:group> 
</xs:complexType> 

</xs:schema> 

답변

1

Gaaah, 당신에게 XML 스키마를 저주!

죄송합니다. 가끔 그럴 필요가 있습니다. 나는 이것이 당신이 원하는 것을 생각하지만, 몇 가지 테스트는 나쁘지 않을 것입니다 : 순서 :

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 

    <xs:element name="HTMLDocument"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element name="p" type="textElements" minOccurs="0" maxOccurs="unbounded"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 

    <xs:complexType name="textElements" mixed="true"> 
      <xs:group ref="textElementGroup" minOccurs="0" maxOccurs="unbounded"/> 
    </xs:complexType> 

    <xs:group name="textElementGroup"> 
     <xs:choice> 
      <xs:element name="b" type="textElements" minOccurs="0" maxOccurs="1"/> 
      <xs:element name="i" type="textElements" minOccurs="0" maxOccurs="1"/> 
      <xs:element name="u" type="textElements" minOccurs="0" maxOccurs="1"/> 
      <xs:element name="a" type="textElements" minOccurs="0" maxOccurs="1"/> 
      <xs:element name="font" minOccurs="0" maxOccurs="1"> 
       <xs:complexType> 
        <xs:complexContent> 
         <xs:extension base="textElements"> 
          <xs:attribute name="size" type="xs:string"/> 
          <xs:attribute name="face" type="xs:string"/> 
          <xs:attribute name="color" type="xs:string"/> 
         </xs:extension> 
        </xs:complexContent> 
       </xs:complexType> 
      </xs:element> 
      <xs:element name="img" minOccurs="0" maxOccurs="1"> 
       <xs:complexType> 
        <xs:attribute name="src" type="xs:string"/> 
        <xs:attribute name="width" type="xs:decimal"/> 
        <xs:attribute name="height" type="xs:decimal"/> 
       </xs:complexType> 
      </xs:element> 
     </xs:choice> 
    </xs:group> 

</xs:schema> 

편집 : 당신이 여분의 XS 필요하지 않습니다 같은 오, 보인다. 나는 그것을 꺼내겠다. ...

+0

훌륭하게 훌륭하게 작동했습니다. 나는 XML 스키마에 익숙하지 않고 "gaaah"가 나와 공감한다 ... – shane

+1

@shane 나는 XML Schema에 익숙하지 않고 매번 광기에 가깝게 나를 몰아 넣는다. 나는 무언가가 그렇게 직관적으로 작용할 수있는 방법을 결코 이해하지 못할 것이다. 때로는 사무실에 혼자있는 저녁 시간에 사양을 인쇄 한 다음 즉시 종이 분쇄기를 통해 실행합니다. 어쨌든, 당신이 요점을 얻은 것 같아요. –

+1

RNG RNG RNG RNG RNG. – bmargulies

1

추상적 인 요소와 대체 그룹을 사용하는 것이 좋은 디자인 패턴이다. textElements의 콘텐츠 모델을 <xs:element ref="inline" maxOccurs="unbounded"/>으로 정의하십시오. inline을 추상 요소로 정의하십시오. 요소 b, i, u 등을 인라인의 대체 그룹에 정의합니다. 인라인의 컨텐츠 모델을 textElements로 정의하십시오.

이 접근법의 장점은 기존 정의에 아무런 영향을주지 않고 언제든지 대체 요소 그룹에 새 요소를 추가 할 수 있다는 것입니다.