编辑13/07/2020:
我试图实现的是验证XML中的三个元素。DocumentId元素将始终包含一个字符串,ID元素将始终包含一个字符串,而element01将始终包含一个字符串并具有属性xsi:type="ns11:creditNote"。元素文档和DocumentList可以具有来自任何名称空间的任何属性。
要验证的三个元素是:
属性为
/po:DocumentList/po:Document/po:DocumentId/po:DocumentList/po:Document/po:ID/po:DocumentList/po:Document/po:element01的xsi:type="ns11:creditNote"这是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文件(http://www.example.com/PO1):
<?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创建了另一个文件urn:oasis:names:specification:ubl:schema:xsd:Invoice-2:
<?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文件时,我会得到以下错误:
“‘or 11: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使我的验证工作,这就是我理解它的方式。
如何纠正此错误?
发布于 2020-07-11 20:10:03
我想验证我的XML中的两个特定元素,并允许添加任何其他属性和元素。
您需要非常具体地说明这些附加的标记/属性需要在哪里出现。最好的方法是编辑你的问题,并添加一些显示额外内容的示例消息。
当我试图验证
时,我有一个错误:“属性‘xsi:type’不允许值'ns11:creditNote‘”。
您断言标记'po:DocumentList‘匹配名称空间creditNote中的类型定义。但你还没有定义那种类型。实际上,您甚至还没有导入具有该targetNamespace的XSD。
你真的试图覆盖po:DocumentList的类型吗?还是你想让“creditNote”这一类型发挥别的作用?
总之,您的问题对于如何定义和使用XML扩展机制提出了一定程度的困惑。如果你能澄清一下这个问题,我很乐意帮忙。
https://stackoverflow.com/questions/62836808
复制相似问题