Как добавить атрибут в элемент xsd: any - PullRequest
2 голосов
/ 06 сентября 2011

Как добавить атрибут в элемент 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>

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

Если вы говорите, что хотите разрешить любой элемент как дочерний, если он имеет атрибут count, то вы не можете сделать это в XSD 1.0.Вы можете сделать это в XSD 1.1 (в настоящее время поддерживается в Saxon и Xerces) с утверждением:

<xs:assert test="every $x in * satisfies (exists($x/@count) and $x/@count castable to xs:integer)"/> 
0 голосов
/ 06 сентября 2011

xsd: any не может включать в себя какие-либо объявления атрибутов, потому что по существу позволяет объявить любой элемент, определенный в пространстве имен "http://xxx.yyy.com", внутри последовательности. Если вы не используете отдельный XSD для проверки этого пространства имен, то вы вместо xsd можно просто использовать следующее: any:

<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>  
...