2014-10-19 3 views
2

내가 잘못 만들었습니까? XLS :xsd : 속성 그룹 선택

<note> 
    <element action="SomeAction" id="1" /> 
</note> 

의 xsd :

내가 note 캔은 어떤 속성없이 목록에서 값 또는 element이 될 것입니다 속성 actionid와 요소 <element>를 포함하는 요소를 배제 만들려고
<xs:element name="note"> 
     <xs:complexType> 
      <xs:choice minOccurs ="0"> 
      <xs:group ref="with_attr" /> 
      <xs:group ref ="without_attr" /> 
      </xs:choice> 
     </xs:complexType> 
     </xs:element> 
     <xs:group name="with_attr"> 
     <xs:sequence > 
      <xs:element name="element"> 
      <xs:complexType> 
       <xs:attributeGroup ref="actionattrib" /> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:group> 
     <xs:group name="without_attr"> 
     <xs:sequence > 
      <xs:element name="element"> 
      <xs:complexType> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
     </xs:group> 
    <xs:attributeGroup name ="actionattrib"> 
    <xs:attribute name="action" type="action_value" use="required"/> 
    <xs:attribute name="parameter" type="id_value" use="required"/> 
    </xs:attributeGroup> 
     <xs:simpleType name="action_value" > 
     <xs:restriction base="xs:token"> 
      <xs:enumeration value="SomeAction"/> 
     </xs:restriction> 
     </xs:simpleType> 
     <xs:simpleType name="id_value" > 
     <xs:restriction base="xs:token">" 
      <xs:enumeration value="1"/> 
     </xs:restriction> 
     </xs:simpleType> 

것 또한 정확해야하지만 element 캔트는 다른 속성 또는 id 또는 action 속성 중 하나만 포함 할 수 없습니다. 오류는 다음과 같습니다 특성 action 여기

답변

1

올바른 XML은 허용되지 않는다 ... 나는 당신이 당신의 XML을 사용하려는 경우에 XSD를 변경해야 XMLSpear

<note> 
    <element action="SomeAction" parameter="1"/> 
</note> 

에 의해 XML 아래 validatied ..

<xs:attributeGroup name ="actionattrib"> 
    <xs:attribute name="action" type="action_value" use="required"/> 
    <xs:attribute name="id" type="id_value" use="required"/> 
</xs:attributeGroup> 

나는 XML을 검증하기 위해이 XSD를 사용했다. 당신은 매개 변수로 선언했기 때문에

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" > 
    <xs:element name="note"> 
     <xs:complexType> 
      <xs:choice minOccurs="0"> 
       <xs:group ref="with_attr"/> 
       <xs:group ref="without_attr"/> 
      </xs:choice> 
     </xs:complexType> 
    </xs:element> 
    <xs:group name="with_attr"> 
     <xs:sequence> 
      <xs:element name="element"> 
       <xs:complexType> 
        <xs:attributeGroup ref="actionattrib"/> 
       </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:group> 
    <xs:group name="without_attr"> 
     <xs:sequence> 
      <xs:element name="element"> 
       <xs:complexType> 
      </xs:complexType> 
      </xs:element> 
     </xs:sequence> 
    </xs:group> 
    <xs:attributeGroup name="actionattrib"> 
     <xs:attribute name="action" type="action_value" use="required"/> 
     <xs:attribute name="parameter" type="id_value" use="required"/> 
    </xs:attributeGroup> 
    <xs:simpleType name="action_value"> 
     <xs:restriction base="xs:token"> 
      <xs:enumeration value="SomeAction"/> 
     </xs:restriction> 
    </xs:simpleType> 
    <xs:simpleType name="id_value"> 
     <xs:restriction base="xs:token"> 
      <xs:enumeration value="1"/> 
     </xs:restriction> 
    </xs:simpleType> 
</xs:schema> 

귀하의 문제는 태그 <element>의 속성 id에 있습니다.

+0

네임 스페이스에 문제가 있습니까? – user3546748

+0

id는 괜찮습니다. 여기에 글을 쓸 때 실수를하지만 문제는 xml 파일 만 변경할 수 있습니다. 나는 오류를보기 위해 루비 (rubymine)를 사용하는데, 여전히 나에게 그것을 보여줄 수 있으며, 아마도 전체 xsd (헤더 포함)가 문제가 될 수있다 .. – user3546748

+0

나는 내가 사용한 전체 XSD로 나의 대답을 업데이트했다. – Xstian