2011-09-06 5 views
2

xsd : any 요소에 속성을 어떻게 추가합니까? 예를 들어, 주어진 다음xsd : any 요소에 속성을 추가하는 방법

<xsd:element name="requests"> 
    <xsd:complexType> 
     <xsd:sequence> 
      <xsd:any namespace="http://xxx.yyy.com" /> 
     </xsd:sequence> 
    </xsd:complexType> 
</xsd:element> 

어떻게 당신은 어떤을 속성으로 추가하려면 다음과 같은 XML이 오류없이 스키마에 대해 유효성을 검사 할 수 있도록 :

<requests> 
    <operation count="1"> 
<requests> 

답변

0

는 XSD : 어떤 하나를 포함 할 수 없습니다 기본적으로 네임 스페이스 "http://xxx.yyy.com"내에 정의 된 모든 요소를 ​​시퀀스 내에서 선언 할 수 있으므로이 속성 선언을 사용하십시오. 어떤 : 해당 네임 스페이스를 확인하기 위해 별도의 XSD를 사용하지 않는 경우에, 당신은 단순히 XSD 대신 다음을 사용할 수 있습니다

<xsd:element name="operation"> 
    <xsd:complexType> 
     <xsd:attribute name="count" type="nonNegativeInteger" use="required"/> 
    </xsd:complexType> 
</xsd:element> 

그렇지 않으면, 당신은 HTTP "에 대한 네임 스페이스 접두사를 선언 할 것입니다 : // xxx.yyy.com "을 XSD 상단에 놓고 xsd : any 대신 해당 스키마 내의 요소를 참조하십시오. "http://xxx.yyy.com"에 대한 스키마는 다음과 같은 선언을 포함한다면, :

<xsd:complexType name="operationType"> 
    <xsd:attribute name="count" type="nonNegativeInteger" use="required"/> 
</xsd:complexType> 

그런 다음 당신은 당신의 XSD에서이 유형을 참조 할 수 있습니다 :

<xsd:element name="requests">   
    <xsd:complexType>   
     <xsd:sequence>   
     <xsd:element type="optype:operationType"/>   
     </xsd:sequence>   
    </xsd:complexType>   
</xsd:element> 
+0

사실,이 엔드 포인트에 대한 모든 작업 수를 포함하는 하트 비트 WSDL 작업을 만드는거야. 하트 비트 작업은 모든 웹 서비스에서 사용되며 본질적으로 일반화되어야하므로 매번 조정할 필요가 없습니다. – Ketch

+0

예에서 <작업 수 = "1"> 작업이 하나 이상의 웹 서비스 작업이 종료됩니다. 그래서, 그 요소에 대한 정의를 사용할 것이기 때문에 네임 스페이스를 네임 스페이스의 일부로 지정해야하는 것 같지 않습니다. 그리고 그것은 내가 성취하려는 것이 아닙니다. 그리고 어떤 엘리먼트에 애트리뷰트를 추가 할 방법이 없다면 그 애트리뷰트가 어떤 애들이 될 필요가있을 것입니다. – Ketch

+0

안타깝게도 중첩 된 xsd : any 요소를 가질 수 없으므로 count에 child 요소를 사용하면 작동하지 않습니다. xsd : any 아래에 배치 할 수있는 유일한 하위 요소는 xsd : annotation입니다. –

0

당신이 경우 count 요소가있는 한 요소를 자식 요소로 허용하려는 경우 XSD 1.0에서는 그 요소를 사용할 수 없습니다. 당신은 주장과 XSD 1.1 (현재 색슨와 Xerces에 지원)에서 작업을 수행 할 수 있습니다

<xs:assert test="every $x in * satisfies (exists($x/@count) and $x/@count castable to xs:integer)"/> 
관련 문제