除非我将 elementFormDefault="qualified" 添加到 XSD,否则无法验证
Cannot validate unless I add elementFormDefault="qualified" to XSD
我无法验证 XML 外部 WSDL 服务提供的模式。
验证抛出此错误:
验证器在线 #1:
The element 'SolicitudEncuesta' in namespace
'htps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd' has invalid
child element 'CabeceraSolicitud' in namespace
'htps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd'. List of
possible elements expected: 'CabeceraSolicitud'. Line: 1 Column:204
验证者在线#2
Errors in the XML document: 1: 203 cvc-elt.1: Cannot find the
declaration of element 'SolicitudEncuesta'.
Errors in file xml-schema: 2: 196 TargetNamespace.2: Expecting no
namespace, but the schema document has a target namespace of
'https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd'.
如果我将 elementFormDefault="qualified" 添加到模式,XML 验证就可以了 。
但无法编辑架构,因为它是为外部服务提供的。
架构:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="ht*p://www.w3.org/2001/XMLSchema"
xmlns="ht*ps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd"
targetNamespace="ht*ps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd">
<xsd:element name="SolicitudEncuesta" type="SolicitudEncuesta"/>
<xsd:complexType name="SolicitudEncuesta">
<xsd:sequence>
<xsd:element name="CabeceraSolicitud" type="CabeceraSolicitud" nillable="true"/>
<xsd:element name="Encuesta" type="xsd:base64Binary" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="CabeceraSolicitud">
<xsd:sequence>
<xsd:element name="NumeroOrden" nillable="true">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:length value="11"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="CodigoControl" nillable="true">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:length value="5"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="CorreoElectronico" nillable="true">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="60"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
还有我的XML:
<SolicitudEncuesta xmlns:xsd="ht*p://www.w3.org/2001/XMLSchema"
xmlns="ht*ps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd"
targetNamespace="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd">
<CabeceraSolicitud>
<NumeroOrden>str12340000</NumeroOrden>
<CodigoControl>str12</CodigoControl>
<CorreoElectronico>str1234</CorreoElectronico>
</CabeceraSolicitud>
<Encuesta>1234</Encuesta>
</SolicitudEncuesta>
我认为这是命名空间问题。我在其他帖子中看到了类似的问题,但找不到解决方案。
更新:
最后,利用@kjhughes 的知识,我可以正确地验证 Schema。并添加 SOAP 信封我能够正确使用网络服务。
决赛XML
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sol="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd">
<soapenv:Header/>
<soapenv:Body>
<sol:SolicitudEncuesta>
<CabeceraSolicitud>
<NumeroOrden>XXXX</NumeroOrden>
<CodigoControl>XXXXX</CodigoControl>
<CorreoElectronico>test@gmail.com</CorreoElectronico>
</CabeceraSolicitud>
<Encuesta>XXXXX</Encuesta>
</sol:SolicitudEncuesta>
</soapenv:Body>
</soapenv:Envelope>
谢谢!!
假设您的 XSD 已更正 "intentional" (?) 错误,并且可以从 https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd
中检索到它,那么以下更正的 XML 将是对它有效:
<?xml version="1.0" encoding="UTF-8"?>
<se:SolicitudEncuesta
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd
https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd"
xmlns:se="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd" >
<CabeceraSolicitud>
<NumeroOrden>str12340000</NumeroOrden>
<CodigoControl>str12</CodigoControl>
<CorreoElectronico>str1234</CorreoElectronico>
</CabeceraSolicitud>
<Encuesta>1234</Encuesta>
</se:SolicitudEncuesta>
我无法验证 XML 外部 WSDL 服务提供的模式。 验证抛出此错误:
验证器在线 #1:
The element 'SolicitudEncuesta' in namespace 'htps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd' has invalid child element 'CabeceraSolicitud' in namespace 'htps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd'. List of possible elements expected: 'CabeceraSolicitud'. Line: 1 Column:204
验证者在线#2
Errors in the XML document: 1: 203 cvc-elt.1: Cannot find the declaration of element 'SolicitudEncuesta'.
Errors in file xml-schema: 2: 196 TargetNamespace.2: Expecting no namespace, but the schema document has a target namespace of 'https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd'.
如果我将 elementFormDefault="qualified" 添加到模式,XML 验证就可以了 。 但无法编辑架构,因为它是为外部服务提供的。
架构:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsd:schema xmlns:xsd="ht*p://www.w3.org/2001/XMLSchema"
xmlns="ht*ps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd"
targetNamespace="ht*ps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd">
<xsd:element name="SolicitudEncuesta" type="SolicitudEncuesta"/>
<xsd:complexType name="SolicitudEncuesta">
<xsd:sequence>
<xsd:element name="CabeceraSolicitud" type="CabeceraSolicitud" nillable="true"/>
<xsd:element name="Encuesta" type="xsd:base64Binary" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="CabeceraSolicitud">
<xsd:sequence>
<xsd:element name="NumeroOrden" nillable="true">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:length value="11"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="CodigoControl" nillable="true">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:length value="5"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
<xsd:element name="CorreoElectronico" nillable="true">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:maxLength value="60"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>
还有我的XML:
<SolicitudEncuesta xmlns:xsd="ht*p://www.w3.org/2001/XMLSchema"
xmlns="ht*ps://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd"
targetNamespace="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd">
<CabeceraSolicitud>
<NumeroOrden>str12340000</NumeroOrden>
<CodigoControl>str12</CodigoControl>
<CorreoElectronico>str1234</CorreoElectronico>
</CabeceraSolicitud>
<Encuesta>1234</Encuesta>
</SolicitudEncuesta>
我认为这是命名空间问题。我在其他帖子中看到了类似的问题,但找不到解决方案。
更新:
最后,利用@kjhughes 的知识,我可以正确地验证 Schema。并添加 SOAP 信封我能够正确使用网络服务。
决赛XML
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sol="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd">
<soapenv:Header/>
<soapenv:Body>
<sol:SolicitudEncuesta>
<CabeceraSolicitud>
<NumeroOrden>XXXX</NumeroOrden>
<CodigoControl>XXXXX</CodigoControl>
<CorreoElectronico>test@gmail.com</CorreoElectronico>
</CabeceraSolicitud>
<Encuesta>XXXXX</Encuesta>
</sol:SolicitudEncuesta>
</soapenv:Body>
</soapenv:Envelope>
谢谢!!
假设您的 XSD 已更正 "intentional" (?) 错误,并且可以从 https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd
中检索到它,那么以下更正的 XML 将是对它有效:
<?xml version="1.0" encoding="UTF-8"?>
<se:SolicitudEncuesta
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd
https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd"
xmlns:se="https://arce.ine.es/ARCE/ficheros/SolicitudEncuesta.xsd" >
<CabeceraSolicitud>
<NumeroOrden>str12340000</NumeroOrden>
<CodigoControl>str12</CodigoControl>
<CorreoElectronico>str1234</CorreoElectronico>
</CabeceraSolicitud>
<Encuesta>1234</Encuesta>
</se:SolicitudEncuesta>