提问人:Anonyme mein Name geht Dich n 提问时间:10/3/2023 最后编辑:Anonyme mein Name geht Dich n 更新时间:10/4/2023 访问量:66
complexType set abstract=“true” 的 XSD 问题
XSD problem with complexType set abstract="true"
问:
谢谢!@Yitzhak哈宾斯基,我复制了一个小例子,如下所示:
在定义为吹气的 XSD 文件中:
<?xml version="1.0"?>
<xs:schema
attributeFormDefault="unqualified"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:vc="http://www.w3.org/2007/XMLSchema-versioning"
vc:minVersion="1.1"
>
<xs:element name="CalculationProcess">
<xs:complexType>
<xs:sequence>
<xs:element name="CalculationStep" type="CalculationStepType" minOccurs="1" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:unique name="UniqueId">
<xs:selector xpath="CalculationStep"/>
<xs:field xpath="@Id" />
</xs:unique>
</xs:element>
<xs:complexType name="CalculationStepType">
<xs:sequence>
<xs:element name="Parameter">
<xs:complexType>
<xs:all>
<xs:element name="AdditionalData" type="AddData" minOccurs="0">
<xs:alternative test="@Type = 'Woodham'" type="AddDataWoodham"/>
</xs:element>
</xs:all>
</xs:complexType>
</xs:element>
</xs:sequence>
<xs:attribute name="Id" use="required" inheritable="true">
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"></xs:minInclusive>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
<xs:attribute name="Name" type="xs:string" use="required" inheritable="true" />
<xs:attribute name="Type" type="TCalculationStepType" use="required" />
<xs:attribute name="InputCount" type="xs:integer" use="required" />
<xs:attribute name="OutputCount" type="xs:integer" use="required" />
<!-- StreamId must > 0 -->
<xs:attribute name="StreamId" use="required" >
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:minInclusive value="1"></xs:minInclusive>
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:complexType>
<!-- CalculationStep@Type must match one of the enumerations -->
<xs:simpleType name="TCalculationStepType">
<xs:restriction base="xs:string">
<xs:enumeration value="Woodham" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="AddData" abstract="true"/>
<xs:complexType name="AddDataWoodham">
<xs:complexContent>
<xs:extension base="AddData">
<!--PhotostereoWoodham-->
<xs:all>
<xs:element name="FilePath" type="xs:string" minOccurs="1" />
<xs:element name="ScaleFactorP" type="xs:decimal" minOccurs="1" />
<xs:element name="ScaleFactorQ" type="xs:decimal" minOccurs="1" />
<xs:element name="CalculationMethod" type="xs:integer" minOccurs="1" />
<xs:element name="SlantLookupSize" type="xs:integer" minOccurs="1" />
<xs:element name="TiltLookupSize" type="xs:integer" minOccurs="1" />
</xs:all>
</xs:extension >
</xs:complexContent>
</xs:complexType>
</xs:schema>
XML 文件:
<?xml version='1.0'?>
<CalculationProcess xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="ObjCalcConfig.xsd">
<CalculationStep Id='0' Name='Woodham' Type='Woodham' InputCount='4' OutputCount='3' StreamId='1'>
<Parameter>
<AdditionalData>
<FilePath>files\matrix.xml</FilePath>
<ScaleFactorP>1.5</ScaleFactorP>
<ScaleFactorQ>1.5</ScaleFactorQ>
<CalculationMethod>2</CalculationMethod>
<SlantLookupSize>25</SlantLookupSize>
<TiltLookupSize>72</TiltLookupSize>
</AdditionalData>
</Parameter>
</CalculationStep>
</CalculationProcess>
但是我收到一个错误:在此处输入图像描述
我不知道问题出在哪里,有人可以帮我解决这个错误吗?谢谢!!!
我试过做abstract=“false”,这不起作用,因为基本元素是空的......
答:
0赞
Michael Kay
10/4/2023
#1
我不确定你想在这里实现什么。
您的类型替代规则是说,如果是“Woodham”,则元素应具有类型;如果该属性不存在或具有任何其他值(您的示例就是这种情况),则该元素应具有 type ;但是元素不能有类型,因为类型是抽象的。所以这显然是一个错误。@Type
AddDataWoodham
Type
AddData
AddData
您的实例似乎符合类型 ,但未针对该类型进行验证,因为它没有值为 的属性。AddDataWoodham
Type
Woodham
评论
0赞
Anonyme mein Name geht Dich n
10/4/2023
感谢您抽出宝贵时间接受采访!我再次编辑了这个问题并复制了一个小例子,你能帮我再检查一遍吗?
0赞
Michael Kay
10/4/2023
它有完全相同的问题。您的元素没有属性,因此默认类型变为 ,并且它不能采用该类型,因为它是抽象的。Type
AddData
0赞
Anonyme mein Name geht Dich n
10/4/2023
“Type”属性在第 41 行中定义:<xs:attribute name=“Type” type=“TCalculationStepType” use=“required” /> 谢谢!
1赞
Michael Kay
10/4/2023
好的,我看到你已经改变了这个例子。但是属性在错误的元素上:正在查找元素上的属性。Type
xs:alternative
Type
AdditionalData
1赞
Michael Kay
10/4/2023
我不得不查一下这个。有一种称为“可继承属性”的机制应该符合要求。github.com/w3c/xsdtests/blob/master/saxonData/CTA/cta0009.xsd 有一个例子,github.com/w3c/xsdtests/blob/master/saxonData/CTA/......
评论
@Type