2012-06-05 3 views
0

xsd에서이 스키마 유효성 검사를 시도하는 데 문제가 있습니다.부모가 없으면 자식 요소가 존재하지 않아야합니다. Xsd 사용

유효한 경우

<root> 
    <groups> 
     <group/> 
    </groups> 
</root> 

Valid case 
<root> 
<groups/> 
</root> 

잘못된 경우

<root> 
    <group/> 
</root> 

어떻게 특정 자식 요소는 XSD를 통해 XML에 혼자, 일부 부모 아래에 존재할 수 있음을 보장하기 위해?

예 : 그룹이 단독으로 존재할 수 있지만 그룹이 부모 인 경우 존재할 수 ...

누군가가 그룹 요소 글로벌 즉, 그룹 요소 내에서 그것을 포함하지 않는 대답 ...

을하지만 경우가있을 수있다, 여기서 그룹은 부모의 직접적인 자녀가 아닙니다. 예를 들어 유효한 경우 그 경우에 수행해야하는지

<groups> 
<class> 
    <group> 
</class> 
</groups> 

... 클래스를 사용하면 요소가 자체로 표시하지 않으려면 ... 너무 그룹에

+0

답장을 기다리고 있습니다. .. 이걸 붙잡아 두었습니다. –

답변

0

를 참조 할 필요가로서, 부모를 정의하는 복합 형 내부에서 선언되어야합니다.

다음은 도구로 생성 된 쉬운 "수정 사항"입니다. 학습 할 때 XSD를 뛰어 넘는 구문을 얻을 수있는 좋은 방법이 될 수 있습니다 ...

업데이트 : 콘텐츠를 계속 추가하는 경우 스키마를 업데이트해야합니다. 요소가 전역 변수가 아닌 경우 솔루션은 상위 요소 내에서 동일한 정의입니다. 내용 모델이 동일하면 전역 유형으로 정의하고 요소 정의에서 참조하십시오 (이 경우 anyType 대신에 사용됩니다).

<?xml version="1.0" encoding="utf-8"?> 
<!--XML Schema generated by QTAssistant/XML Schema Refactoring (XSR) Module (http://www.paschidev.com)--> 
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="root"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="groups"> 
      <xs:complexType> 
      <xs:sequence minOccurs="0"> 
       <xs:element name="group" type="xs:anyType" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
    <xs:element name="groups"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="class"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="group" type="xs:anyType" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:sequence> 
    </xs:complexType> 
    </xs:element> 
</xs:schema> 
+0

고마워요. 그래 ... 작동 할 것입니다. –

+0

하지만 한 가지 문제가 있습니다. 질문을 편집 한 것을 봅니다. –

1

귀하의 질문에 따르면, 그것은 당신이 클래스와 그룹을 교환 할 수 있기를 원하는 것처럼 들립니다. 이를 위해, 당신은

...과 같이, 재귀 스키마 요소를 사용하려면
<xsd:element name="Groups"> 
    <xsd:complexType> 
     <xsd:complexContent> 
      <xsd:extension base="BranchType"/> 
     </xsd:complexContent> 
    </xsd:complexType> 
</xsd:element> 

<xsd:complexType name="BranchType"> 
    <xsd:sequence> 
     <xsd:choice minOccurs="0" maxOccurs="unbounded"> 
      <xsd:element name="Class" type="BranchType" minOccurs="0" maxOccurs="1"/> 
      <xsd:element name="Group" minOccurs="0" maxOccurs="1"/> 
     </xsd:choice> 
    </xsd:sequence> 
</xsd:complexType> 

우리는 기본적으로 그룹 요소 또는 자체의 혼합을 포함 할 수있는 BranchType을 정의

(를 통해 Class 요소). 그런 다음 최상위 그룹을 유형 BranchType으로 정의합니다. 클래스 및 그룹 요소가 임의의 순서로 여러 번 중첩 수준에 나타날 수 있도록 선택 순서를 사용합니다.

관련 문제