为什么我使用两种不同的方法验证我的XML得到不同的结果? [英] Why am I getting different results using two different ways of validating my XML?
本文介绍了为什么我使用两种不同的方法验证我的XML得到不同的结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试使用XSD文件验证XML文件,但此操作不起作用,我不知道原因。
我想我们可以通过该示例在终端上执行此操作:
xmllint --noout --schema owl2-xml.xsd camera.owl
但它会产生一个错误,我特别不明白。
regexp error : failed to compile: expecting a branch after |
owl2-xml.xsd:30: element pattern: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}pattern': The value '([A-Z]|[a-z]|[À-Ö]|[Ø-ö]|[ø-˿]|[Ͱ-ͽ]|[Ϳ-]|[-]|[⁰-]|[Ⰰ-]|[、-]|[豈-﷏]|[ﷰ-�]|[𐀀-])(([A-Z]|[a-z]|[À-Ö]|[Ø-ö]|[ø-˿]|[Ͱ-ͽ]|[Ϳ-]|[-]|[⁰-]|[Ⰰ-]|[、-]|[豈-﷏]|[ﷰ-�]|[𐀀-]|_|-|[0-9]|·|[̀-ͯ]|[‿-⁀]|.)*([A-Z]|[a-z]|[À-Ö]|[Ø-ö]|[ø-˿]|[Ͱ-ͽ]|[Ϳ-]|[-]|[⁰-]|[Ⰰ-]|[、-]|[豈-﷏]|[ﷰ-�]|[𐀀-]|_|-|[0-9]|·|[̀-ͯ]|[‿-⁀] ))?|' of the facet 'pattern' is not a valid regular expression.
WXS schema owl2-xml.xsd failed to compile
但如果我选择验证器XML文件(此文件:http://mowl-power.cs.man.ac.uk:8080/validator/
)
我的XML文件已通过验证!
我不明白为什么,这不管用...当我选择(应该)的XML架构与验证器链接相同时。
该XML模式来自那里:(Owl2) 验证器也使用owl2结构。 所以..。我错过了什么?Owl文件示例
这是我正在使用并试图验证camera.owl
的示例推荐答案
有许多方法可以序列化OWL本体。其中之一是将其序列化为RDF。RDF还可以以多种不同的格式进行序列化,RDF/XML就是其中之一。您在网上看到的许多带有.owl
扩展名的文件都是OWL本体的RDF表示的RDF/XML序列化。将会有许多的可能性,因为同一个RDF图可以在RDF/XML序列化中以多种不同的方式序列化。有关该问题的详细信息,请参阅my answer至How to access OWL documents using XPath in Java?。
作为一个非常简单的例子,这里有一个OWL/XML序列化中的小OWL本体,它是通过Protégé生成的。如果您使用OWL/XML格式保存本体,则会得到以下结果:
<?xml version="1.0"?>
<!DOCTYPE Ontology [
<!ENTITY xsd "http://www.w3.org/2001/XMLSchema#" >
<!ENTITY xml "http://www.w3.org/XML/1998/namespace" >
<!ENTITY rdfs "http://www.w3.org/2000/01/rdf-schema#" >
<!ENTITY rdf "http://www.w3.org/1999/02/22-rdf-syntax-ns#" >
]>
<Ontology xmlns="http://www.w3.org/2002/07/owl#"
xml:base="https://stackoverflow.com/q/23984040/1281433/example"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xml="http://www.w3.org/XML/1998/namespace"
ontologyIRI="https://stackoverflow.com/q/23984040/1281433/example">
<Prefix name="rdf" IRI="http://www.w3.org/1999/02/22-rdf-syntax-ns#"/>
<Prefix name="rdfs" IRI="http://www.w3.org/2000/01/rdf-schema#"/>
<Prefix name="xsd" IRI="http://www.w3.org/2001/XMLSchema#"/>
<Prefix name="owl" IRI="http://www.w3.org/2002/07/owl#"/>
<Declaration>
<Class IRI="#Person"/>
</Declaration>
<Declaration>
<NamedIndividual IRI="#RichardNixon"/>
</Declaration>
<ClassAssertion>
<Class IRI="#Person"/>
<NamedIndividual IRI="#RichardNixon"/>
</ClassAssertion>
<AnnotationAssertion>
<AnnotationProperty abbreviatedIRI="rdfs:label"/>
<IRI>#RichardNixon</IRI>
<Literal xml:lang="en" datatypeIRI="&rdf;PlainLiteral">Richard Nixon</Literal>
</AnnotationAssertion>
</Ontology>
<!-- Generated by the OWL API (version 3.2.5.1912) http://owlapi.sourceforge.net -->
如果将相同的本体保存为RDF/XML,则会得到如下结果:
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:owl="http://www.w3.org/2002/07/owl#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns="https://stackoverflow.com/q/23984040/1281433/example#"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#">
<owl:Ontology rdf:about="https://stackoverflow.com/q/23984040/1281433/example"/>
<owl:Class rdf:about="https://stackoverflow.com/q/23984040/1281433/example#Person"/>
<owl:NamedIndividual rdf:about="https://stackoverflow.com/q/23984040/1281433/example#RichardNixon">
<rdf:type rdf:resource="https://stackoverflow.com/q/23984040/1281433/example#Person"/>
<rdfs:label xml:lang="en">Richard Nixon</rdfs:label>
</owl:NamedIndividual>
</rdf:RDF>
它们都是本体的基于XML的序列化,但它们是不同的,并且您正在使用的XSD只能验证OWL/XML表示。不过,两者都可以使用OWL验证器进行验证,因为它们都是OWL本体的合法序列化。
这篇关于为什么我使用两种不同的方法验证我的XML得到不同的结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文