属性xsi:type不允许使用值



编辑2020年7月13日:

我试图实现的是验证XML中的3个元素。DocumentId元素将始终包含一个字符串,ID元素将始终含有一个字符串。element01将始终含有字符串并具有属性xsi:type="ns11:creditNote"。元素Document和DocumentList可以具有任何命名空间中的任何属性。

要验证的3个要素是:

  • /po:DocumentList/po:Document/po:DocumentId
  • /po:DocumentList/po:Document/po:ID
  • 属性为xsi:type="ns11:creditNote"/po:DocumentList/po:Document/po:element01

这是XML:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<po:DocumentList xmlns:po="http://www.example.com/PO1" 
xmlns:ns11="urn:oasis:names:specification:ubl:schema:xsd:Invoice-1" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.example.com/PO1 Main.xsd" indexing="false" numPages="2" pageId="0" itemsPerPage="2" itemCount="3">
<po:Document>
<po:DocumentId>b6f066ea-1d48-566c-967a-f81a2d935d59</po:DocumentId>
<po:ID>documents/b6f066ea-1d48-566c-967a-f81a2d935d59</po:ID>       
<po:element01 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="ns11:creditNote">documents/b6f066ea-1d48-566c-967a-f81a2d935d59</po:element01>
</po:Document>
</po:DocumentList>

我为名称空间http://www.example.com/PO1:创建了一个主XSD文件(Main.xsd(

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:vc="XMLSchema-versioning" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:po="http://www.example.com/PO1" xmlns:ns11="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" targetNamespace="http://www.example.com/PO1" elementFormDefault="qualified" attributeFormDefault="unqualified" vc:minVersion="1.1">
<xs:import namespace="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" schemaLocation="Main_Sub_1.xsd"/>
<xs:element name="DocumentList">
<xs:complexType>
<xs:sequence>
<xs:element name="Document">
<xs:complexType>
<xs:sequence>
<xs:element name="DocumentId" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="ID" type="xs:string" minOccurs="1" maxOccurs="1"/>
<xs:element name="element01" type="ns11:creditNote"/>
</xs:sequence>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:anyAttribute processContents="skip"/>
</xs:complexType>
</xs:element>
</xs:schema>

我为名称空间urn:oasis:names:specification:ubl:schema:xsd:Invoice-2:创建了另一个文件Main_Sub_1.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2" attributeFormDefault="qualified" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns11="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<xs:simpleType name="creditNote">
<xs:restriction base="xs:string">
</xs:restriction>
</xs:simpleType>
</xs:schema>

然而,当我尝试验证主XSD文件时,我得到了以下错误:

"'ns11:creditNote必须引用现有的简单或复杂类型">

我做了一些实验,并尝试将名称空间urn:oasis:names:specification:ubl:schema:xsd:Invoice-2更改为";test01";它是有效的,但一旦我使用这个特定的urn,它就会抛出一个错误。

我看到urn指向一个xsd模式,可以在这里查看:https://schemas.liquid-technologies.com/oasis/ubl/2.0/?page=ubl-invoice-2_0_xsd.html

因此,我猜验证器在看到这个名称空间时,并没有使用我创建的creditNote类型导入我的文件,而是查看远程服务器中没有定义creditNote类型的文件。我在XML和XSD方面没有太多经验,但由于用其他任何东西替换urn可以使我的验证工作正常,所以我就是这样理解它的

如何修复此错误?

我想验证XML中的两个特定元素,并允许添加任何其他属性和元素。

您需要非常具体地了解这些附加标记/属性需要出现在哪里。最好的方法是编辑你的问题,并添加一些显示额外内容的示例消息。

当我尝试验证XML时,我有一个错误:";属性"xsi:type"不允许使用值"ns11:creditNote">

您正在断言标记"po:DocumentList"与命名空间urn:oasis:names:specification:ubl:schema:xsd:Invoice-2中名称为creditNote的类型定义匹配。但您尚未定义该类型。事实上,您甚至还没有导入具有该targetNamespace的XSD。

你真的试图覆盖po:DocumentList的类型吗?或者你是想把"creditNote"类型用于其他目的?

总之,您的问题表明在如何定义和使用XMLSchema扩展机制方面存在一定的困惑。如果你能稍微澄清一下问题,我很乐意帮忙。

相关内容

最新更新