Правильно ли это использование пространств имен XML? - PullRequest
0 голосов
/ 30 марта 2012

Я нашел эту очень полезную статью о WSDL на http://msdn.microsoft.com/en-us/library/ms996486.aspx,, как это было рекомендовано для SO, в другом посте где-то.

Однако мне было интересно, если в этом примере не было ошибки.

Вот (упрощенная) схема:

<xs:schema 
      targetNamespace="http://example.org/math/types/" 
      xmlns="http://example.org/math/types/" 
    >
    <xs:complexType name="MathInput">
        <xs:sequence>
            <xs:element name="x" type="xs:double"/>
            <xs:element name="y" type="xs:double"/>
        </xs:sequence>
    </xs:complexType>
    <xs:element name="Add" type="MathInput"/>
</xs:schema>

Вот пример (описан в SOAP):

<SOAP-ENV:Envelope 
  xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
>
    <SOAP-ENV:Body>
        <m:Add xmlns:m="http://example.org/math/types/">
            <x>3.14159265358979</x>
            <y>3.14159265358979</y>
        </m:Add>
    </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Моя неопределенность касается и элементы.Это нормально для них, чтобы быть неквалифицированным?

[Обновить] Будет ли экземпляр XML проверяться на соответствие данной схеме?

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

Это нетрадиционный XML-дизайн, и мне он не очень нравится, но он совершенно действителен. В схеме не указано elementFormDefault = "Qualified", поэтому локальные элементы x и y не находятся в пространстве имен.

0 голосов
/ 30 марта 2012

Это зависит от того, что вы хотите. Если я выполню следующий Xpath для вашего XML:

//*[namespace-uri()='http://example.org/math/types/' and local-name()='x']

Элементы не будут возвращены.

Если я изменю ваш XML следующим образом: -

<m:x>3.14159265358979</m:x>

Элемент будет возвращен.

Если вы хотите оставить X и Y без оговорок, такой путь Xpath выкопает их: -

//*[namespace-uri()='http://example.org/math/types/' and local-name()='Add']/x
...