Java XSD—未绑定的任意(未知)元素数,但定义了序列中的最后一个元素
是否可以使用一个或多个XSD来验证以下xml结构Java XSD—未绑定的任意(未知)元素数,但定义了序列中的最后一个元素,java,xml,xsd,schema,Java,Xml,Xsd,Schema,是否可以使用一个或多个XSD来验证以下xml结构 <container> <unkownA /> <unkownB /> <unkownC /> ... <data /> </container> ... 按照这些规则 未知元素的数量是无限的 至少有一个未知元素 最后一个元素是数据 数据只出现一次 根据提供的规则验证数据 xml中的所有元素都具有相同的名称空间(“”),我们无法更
<container>
<unkownA />
<unkownB />
<unkownC />
...
<data />
</container>
...
按照这些规则
<xs:sequence>
<xs:any minOccurs="1" maxOccurs="unbounded" processContents="lax" />
<xs:element ref="data" minOccurs="1" />
</xs:sequence>
这当然是含糊不清的,违反了“独特粒子属性”
我在这里还了解了第二个名称空间的使用
但是,由于我们无法更改xml,这似乎不是一个解决方案,或者我显然无法正确理解它
由于我们使用Java来处理xml/xsd,xsd驻留在类路径中,因此xsd中的xs:import可能会出现问题
如果答案是“在这些约束条件下,xsd无法实现这一点”,我可以接受
有什么想法吗?如果您至少知道您希望在容器类型中出现的类型的名称,那么您可以将它们命名为xs:anyType。但是您需要知道可能的类型名列表,否则模式定义它们的意义是什么
更新:我不正确,您可以创建容器
,但是这将阻止您指定容器中必须有
元素 如果您至少知道您希望在容器类型中出现的类型的名称,那么您可以将它们命名为xs:anyType。但是您需要知道可能的类型名列表,否则模式定义它们的意义是什么
更新:我不正确,您可以创建容器
,但是这将阻止您指定容器中必须有
元素 您尝试的模式在XSD 1.1中有效-请使用最新版本的Saxon或Xerces再试一次。您尝试的模式在XSD 1.1中有效-请使用最新版本的Saxon或Xerces再试一次。最后成功的是什么,即使我不满意:
javax.xml.validation.SchemaFactory schemaFactory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
schemaFactory
.setFeature(
"http://apache.org/xml/features/validation/schema-full-checking",
false);
这似乎禁用了模式本身的验证。
xml的验证工作如预期和上面所述。
是的,我知道:禁用默认激活的安全/健全功能可能不是一个好主意。但是直到我知道没有时间找到更好的方法。什么最终奏效了,即使它不能让我快乐:
javax.xml.validation.SchemaFactory schemaFactory = SchemaFactory
.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
schemaFactory
.setFeature(
"http://apache.org/xml/features/validation/schema-full-checking",
false);
这似乎禁用了模式本身的验证。
xml的验证工作如预期和上面所述。
是的,我知道:禁用默认激活的安全/健全功能可能不是一个好主意。但是直到我知道没有时间找到更好的方法。您有“未知”数据类型的模式吗?@home:在验证的这一点上没有/在验证数据的模式中,此外,它们根本不需要验证您是否有“未知”数据类型的架构?@home:在验证的这一点上没有/在验证数据的架构中,它们也根本不需要验证架构在1.0中也是有效的。我花了一些时间整合xerces 2.11.0 beta版,但我不仅得到了“唯一粒子属性”错误,我还得到了一个错误,这似乎是由于XSD 1.1实现的beta状态造成的:
cvc elt.1.a:找不到元素“doc”的声明
-doc的声明显然在那里,并且与以前的xml api实现配合良好目前我无法让Saxon在我们的项目设置中工作,当我这样做的时候,我会报告并批准答案状态,如果它有效的话。因为Saxon的家庭版似乎不包含XSD 1.1的实现,只有pro和enterprise版本包含。因此,我必须获得评估许可证才能进行进一步的测试。这可能需要一段时间,因为项目现在正在进行中。模式在1.0中也有效。我花了一些时间整合xerces 2.11.0 beta版,但我不仅得到了“唯一粒子属性”错误,我还得到了一个错误,这似乎是由于XSD 1.1实现的beta状态造成的:cvc elt.1.a:找不到元素“doc”的声明
-doc的声明显然在那里,并且与以前的xml api实现配合良好目前我无法让Saxon在我们的项目设置中工作,当我这样做的时候,我会报告并批准答案状态,如果它有效的话。因为Saxon的家庭版似乎不包含XSD 1.1的实现,只有pro和enterprise版本包含。因此,我必须获得评估许可证才能进行进一步的测试。这可能需要一段时间,因为项目现在正在进行。我们尝试使用“通配符”的原因是我们不知道或不想知道容器中可能包含哪些元素,除了数据之外,我的原始答案是不正确的。我已经编辑过了。在您的情况下,需要将容器设置为xs:any类型。这意味着验证器将忽略您放在其中的任何内容。我们尝试使用“通配符”的原因是我们不知道或不想知道容器中可能包含哪些元素,除了担心的数据之外,我的原始答案是不正确的。我已经编辑过了。在您的情况下,需要将容器设置为xs:any类型。这意味着验证器将忽略您在其中输入的任何内容。