Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why "Namespace 'http://www.w3.org/XML/1998/namespace' is not available to be referenced in this schema."?

Tags:

xml

xsd

In looking at the stanzaerror.xsd from http://xmpp.org/schemas/ in Visual Studio 2010, I'm getting a warning on the following line...

<xs:attribute ref='xml:lang' use='optional'/>

Warning:

Namespace 'http://www.w3.org/XML/1998/namespace' is not available to be referenced in this schema.

This seems like a very basic XML warning - any ideas?

<?xml version='1.0' encoding='UTF-8'?>    
<xs:schema
    xmlns:xs='http://www.w3.org/2001/XMLSchema'
    targetNamespace='urn:ietf:params:xml:ns:xmpp-stanzas'
    xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'
    elementFormDefault='qualified'>

  <xs:element name='bad-request' type='empty'/>
  <xs:element name='conflict' type='empty'/>
  <xs:element name='feature-not-implemented' type='empty'/>
  <xs:element name='forbidden' type='empty'/>
  <xs:element name='gone' type='xs:string'/>
  <xs:element name='internal-server-error' type='empty'/>
  <xs:element name='item-not-found' type='empty'/>
  <xs:element name='jid-malformed' type='empty'/>
  <xs:element name='not-acceptable' type='empty'/>
  <xs:element name='not-allowed' type='empty'/>
  <xs:element name='not-authorized' type='empty'/>
  <xs:element name='payment-required' type='empty'/>
  <xs:element name='policy-violation' type='empty'/>
  <xs:element name='recipient-unavailable' type='empty'/>
  <xs:element name='redirect' type='xs:string'/>
  <xs:element name='registration-required' type='empty'/>
  <xs:element name='remote-server-not-found' type='empty'/>
  <xs:element name='remote-server-timeout' type='empty'/>
  <xs:element name='resource-constraint' type='empty'/>
  <xs:element name='service-unavailable' type='empty'/>
  <xs:element name='subscription-required' type='empty'/>
  <xs:element name='undefined-condition' type='empty'/>
  <xs:element name='unexpected-request' type='empty'/>

  <xs:group name='stanzaErrorGroup'>
    <xs:choice>
      <xs:element ref='bad-request'/>
      <xs:element ref='conflict'/>
      <xs:element ref='feature-not-implemented'/>
      <xs:element ref='forbidden'/>
      <xs:element ref='gone'/>
      <xs:element ref='internal-server-error'/>
      <xs:element ref='item-not-found'/>
      <xs:element ref='jid-malformed'/>
      <xs:element ref='not-acceptable'/>
      <xs:element ref='not-authorized'/>
      <xs:element ref='not-allowed'/>
      <xs:element ref='payment-required'/>
      <xs:element ref='policy-violation'/>
      <xs:element ref='recipient-unavailable'/>
      <xs:element ref='redirect'/>
      <xs:element ref='registration-required'/>
      <xs:element ref='remote-server-not-found'/>
      <xs:element ref='remote-server-timeout'/>
      <xs:element ref='resource-constraint'/>
      <xs:element ref='service-unavailable'/>
      <xs:element ref='subscription-required'/>
      <xs:element ref='undefined-condition'/>
      <xs:element ref='unexpected-request'/>
    </xs:choice>
  </xs:group>

  <xs:element name='text'>
    <xs:complexType>
      <xs:simpleContent>
        <xs:extension base='xs:string'>
          <xs:attribute ref='xml:lang' use='optional'/>
        </xs:extension>
      </xs:simpleContent>
    </xs:complexType>
  </xs:element>    

  <xs:simpleType name='empty'>
    <xs:restriction base='xs:string'>
      <xs:enumeration value=''/>
    </xs:restriction>
  </xs:simpleType>    
</xs:schema>
like image 907
noctonura Avatar asked Dec 10 '10 02:12

noctonura


1 Answers

Just because you don't need to declare the xml namespace for instance documents, doesn't mean the same is true for schemas. I know that seems a bit odd but there it is. You need to define the xml:lang attribute and you need to declare the xml namespace. Generally, I use a simple schema that I import into my schemas. Use the one that the W3C has made available.

Import that, declare the namespace. All will be well

<xs:schema
    xmlns:xs='http://www.w3.org/2001/XMLSchema'
    xmlns:xml="http://www.w3.org/XML/1998/namespace" 
    targetNamespace='urn:ietf:params:xml:ns:xmpp-stanzas'
    xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'
    elementFormDefault='qualified'>

    <xs:import schemaLocation="http://www.w3.org/2001/xml.xsd" namespace="http://www.w3.org/XML/1998/namespace"/>

    <xs:element name='bad-request' type='empty'/>
    <xs:element name='conflict' type='empty'/>
    <xs:element name='feature-not-implemented' type='empty'/>
    <xs:element name='forbidden' type='empty'/>
    <xs:element name='gone' type='xs:string'/>
    <xs:element name='internal-server-error' type='empty'/>
    <xs:element name='item-not-found' type='empty'/>
    <xs:element name='jid-malformed' type='empty'/>
    <xs:element name='not-acceptable' type='empty'/>
    <xs:element name='not-allowed' type='empty'/>
    <xs:element name='not-authorized' type='empty'/>
    <xs:element name='payment-required' type='empty'/>
    <xs:element name='policy-violation' type='empty'/>
    <xs:element name='recipient-unavailable' type='empty'/>
    <xs:element name='redirect' type='xs:string'/>
    <xs:element name='registration-required' type='empty'/>
    <xs:element name='remote-server-not-found' type='empty'/>
    <xs:element name='remote-server-timeout' type='empty'/>
    <xs:element name='resource-constraint' type='empty'/>
    <xs:element name='service-unavailable' type='empty'/>
    <xs:element name='subscription-required' type='empty'/>
    <xs:element name='undefined-condition' type='empty'/>
    <xs:element name='unexpected-request' type='empty'/>

    <xs:group name='stanzaErrorGroup'>
        <xs:choice>
            <xs:element ref='bad-request'/>
            <xs:element ref='conflict'/>
            <xs:element ref='feature-not-implemented'/>
            <xs:element ref='forbidden'/>
            <xs:element ref='gone'/>
            <xs:element ref='internal-server-error'/>
            <xs:element ref='item-not-found'/>
            <xs:element ref='jid-malformed'/>
            <xs:element ref='not-acceptable'/>
            <xs:element ref='not-authorized'/>
            <xs:element ref='not-allowed'/>
            <xs:element ref='payment-required'/>
            <xs:element ref='policy-violation'/>
            <xs:element ref='recipient-unavailable'/>
            <xs:element ref='redirect'/>
            <xs:element ref='registration-required'/>
            <xs:element ref='remote-server-not-found'/>
            <xs:element ref='remote-server-timeout'/>
            <xs:element ref='resource-constraint'/>
            <xs:element ref='service-unavailable'/>
            <xs:element ref='subscription-required'/>
            <xs:element ref='undefined-condition'/>
            <xs:element ref='unexpected-request'/>
        </xs:choice>
    </xs:group>

    <xs:element name='text'>
        <xs:complexType>
            <xs:simpleContent>
                <xs:extension base='xs:string'>
                    <xs:attribute ref='xml:lang' use='optional'/>
                </xs:extension>
            </xs:simpleContent>
        </xs:complexType>
    </xs:element>

    <xs:simpleType name='empty'>
        <xs:restriction base='xs:string'>
            <xs:enumeration value=''/>
        </xs:restriction>
    </xs:simpleType>

</xs:schema>

I'm not that familiar with XMPP but I suspect that your schema is intended to be imported into another where the XML namespace will have already been declared.

like image 99
Nic Gibson Avatar answered Nov 08 '22 21:11

Nic Gibson