首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyXB:无法实例化抽象类型

PyXB:无法实例化抽象类型
EN

Stack Overflow用户
提问于 2016-08-09 08:20:53
回答 1查看 194关注 0票数 0

我尝试使用PyXB完成我的第一步,但是有一个问题,就是我不能创建元素paket。我已经查过了样品,但是找不到关于如何处理这个问题的更多信息。如果抽象元素是一个更深层次的元素,那么似乎有一个解决方案,但在这里,它位于顶层。

有人能帮我吗?

创建类

代码语言:javascript
复制
pyxbgen -u arelda_v4.xsd -m all
WARNING:pyxb.binding.generate:Complex type {http://bar.admin.ch/arelda/v4}paket renamed to paket_
Python for http://bar.admin.ch/arelda/v4 requires 1 modules

尝试创建paket元素:

代码语言:javascript
复制
Python 2.7.5 (default, Oct 11 2015, 17:47:16)
[GCC 4.8.3 20140911 (Red Hat 4.8.3-9)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import all
>>> paket = all.paket()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/pyxb/binding/basis.py", line 1600, in __call__
    rv = self.typeDefinition().Factory(*args, **kw)
  File "/usr/lib/python2.7/site-packages/pyxb/binding/basis.py", line 305, in Factory
    rv = cls._DynamicCreate(*args, **kw)
  File "/usr/lib/python2.7/site-packages/pyxb/binding/basis.py", line 677, in _DynamicCreate
    return ctor(*args, **kw)
  File "/usr/lib/python2.7/site-packages/pyxb/binding/basis.py", line 2075, in __init__
    raise pyxb.AbstractInstantiationError(type(self), location, dom_node)
pyxb.exceptions_.AbstractInstantiationError: Cannot instantiate abstract type {http://bar.admin.ch/arelda/v4}paket directly

XSD

代码语言:javascript
复制
<xs:element name="paket" type="paket">
    <xs:key name="ordnungssystempositionIdKey">
        <xs:annotation>
            <xs:documentation>Das Element id in der Entität Ordnungssystemposition muss eindeutig sein.</xs:documentation>
        </xs:annotation>
        <xs:selector xpath=".//arelda:ordnungssystemposition"/>
        <xs:field xpath="@id"/>
    </xs:key>
    <xs:key name="dossierIdKey">
        <xs:annotation>
            <xs:documentation>Das Element id in der Entität Dossier muss eindeutig sein.</xs:documentation>
        </xs:annotation>
        <xs:selector xpath=".//arelda:dossier"/>
        <xs:field xpath="@id"/>
    </xs:key>
    <xs:key name="dokumentIdKey">
        <xs:annotation>
            <xs:documentation>Das Element id in der Entität Dokument muss eindeutig sein.</xs:documentation>
        </xs:annotation>
        <xs:selector xpath=".//arelda:dokument"/>
        <xs:field xpath="@id"/>
    </xs:key>
    <xs:key name="archivischeNotizIdKey">
        <xs:annotation>
            <xs:documentation>Das Element id in der Entität ArchivischeNotiz muss eindeutig sein.</xs:documentation>
        </xs:annotation>
        <xs:selector xpath=".//arelda:archivischeNotiz"/>
        <xs:field xpath="@id"/>
    </xs:key>
</xs:element>

<xs:complexType name="paket" abstract="true">

XML

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<v4:paket schemaVersion="4.0" xsi:type="v4:paketSIP" xmlns:v4="http://bar.admin.ch/arelda/v4" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <v4:paketTyp>SIP</v4:paketTyp>
</v4:paket>

谢谢曼纽尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-09 12:12:41

类型paket是抽象的,但此类型用于验证v4:paket元素的元素声明中。抽象类型不允许这样做。抽象类型只能导出,它们的具体派生类型用于验证。

如果您控制了XSD文档,那么将抽象设置为false,或者省略该属性,就会使错误消失。

代码语言:javascript
复制
<xs:complexType name="paket" abstract="false">
  ...
</xs:complexType>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38845528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档