我正在尝试验证以下XML文档:
<?xml version="1.0" encoding="UTF-8"?>
<xrm:plugin xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.moss.fr/2011/connecteur_xrm testplugin.xsd" xmlns:tech="http://www.moss.fr/2011/moteur-xrm" xmlns:SCCOAMCD="urn:SCCOA-schemaInfo" xmlns:attribut="http://www.moss.fr/2012/attribut" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mcd="urn:SCCOA-schemaInfo" xmlns:xrm="http://www.moss.fr/2011/connecteur_xrm" xmlns:variable="http://www.moss.fr/2012/variable" xmlns:doc="http://www.moss.fr/2011/documentation" xmlns:mtf2xsd="http://www.moss.fr/2010/mtf2xsd" xmlns:conv="http://www.moss.fr2010/conversion" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:SBEGestionZonesAeriennesSYSCA="urn:SBEGestionZonesAeriennesSYSCA-schema" xmlns:info="http://www.moss.fr/2011/information" xmlns="urn:SBEGestionZonesAeriennesSYSCA-schema">
<xrm:mapping occurs="xrm:mapping">
<SBEGestionZonesAeriennesSYSCA xmlns=""
info:obligatoire="true"
occurs="/grappe"
info:contexte="/grappe">
</SBEGestionZonesAeriennesSYSCA>
</xrm:mapping>
</xrm:plugin>
我正在使用主要模式 testplugin.xsd :
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xrm="http://www.moss.fr/2011/connecteur_xrm" xmlns:nr0="http://NamespaceTest.com/balisesXrm" xmlns:SCCOAMCD="urn:SCCOA-schemaInfo" xmlns:metier="urn:SBEGestionZonesAeriennesSYSCA-schema" targetNamespace="http://www.moss.fr/2011/connecteur_xrm" elementFormDefault="qualified" attributeFormDefault="unqualified" >
<xsd:import namespace="http://NamespaceTest.com/balisesXrm" schemaLocation="balisesXrm.xsd" />
<xsd:import namespace="urn:SBEGestionZonesAeriennesSYSCA-schema" schemaLocation="metier1.xsd"/>
<xsd:complexType name="mapping">
<xsd:sequence>
<xsd:element ref="metier:SBEGestionZonesAeriennesSYSCA"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="plugin">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="mapping" type="xrm:mapping"/>
</xsd:sequence>
</xsd:complexType>
使用导入的 metier1.xsd :
<?xml version="1.0" encoding="utf-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:nr0="http://NamespaceTest.com/balisesXrm" xmlns:xalan="http://xml.apache.org/xslt" xmlns:SCCOAMCD="urn:SCCOA-schemaInfo" xmlns="urn:SBEGestionZonesAeriennesSYSCA-schema" xmlns:SBEGestionZonesAeriennesSYSCA="urn:SBEGestionZonesAeriennesSYSCA-schema" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="urn:SBEGestionZonesAeriennesSYSCA-schema" version="3.2.1ec">
<xsd:element name="SBEGestionZonesAeriennesSYSCA" type="SBEGestionZonesAeriennesSYSCA:type_SBEGestionZonesAeriennesSYSCA"/>
<xsd:complexType name="type_SBEGestionZonesAeriennesSYSCA">
<xsd:sequence>
<xsd:element maxOccurs="unbounded" name="Entities" type="SBEGestionZonesAeriennesSYSCA:type_Data_SBEGestionZonesAeriennesSYSCA"/>
</xsd:sequence>
<xsd:attributeGroup ref="attributsXrm"/>
</xsd:complexType>
<xsd:attributeGroup name="attributsXrm">
<xsd:attribute name="group-by"/>
<xsd:attribute name="id"/>
<xsd:attribute name="occurs"/>
</xsd:attributeGroup>
</xsd:schema>
尝试验证XML时出现以下错误:
发现从元素'SBEGestionZonesAeriennesSYSCA'开始的无效内容。预计{“ urn:SBEGestionZonesAeriennesSYSCA-schema”:SBEGestionZonesAeriennesSYSCA之一。
我尝试在我的XML文档中将xmlns="urn:SBEGestionZonesAeriennesSYSCA-schema"
更改为xmlns:s="urn:SBEGestionZonesAeriennesSYSCA-schema"
,并在SBEGestionZonesAeriennesSYSCA
上添加前缀s:
,它可以正常工作。
但是我不明白为什么我必须在这种情况下加一个前缀。实际上,如果可能的话,我不想修改我的XML文档,而是我的XSD。
非常感谢。
答案 0 :(得分:1)
您应该在XML的xmlns=""
标记上删除SBEGestionZonesAeriennesSYSCA
属性,它将标记设置在空的命名空间中。
如果没有此设置,则xmlns
标签将正确考虑在xrm:plugin
标签上指定的urn:SBEGestionZonesAeriennesSYSCA-schema
,即预期的SBEGestionZonesAeriennesSYSCA
。
修改XSD而不是XML似乎是个坏主意,但如果确实需要,则需要让XSD在空名称空间中定义SBEGestionZonesAeriennesSYSCA
元素,您可以通过删除metier1.xsd根目录上的targetNamespace="urn:SBEGestionZonesAeriennesSYSCA-schema"
属性,并更新对testplugin.xsd中元素的引用。