Xsd 在OWL中描述字符串文字的正确方法?
对于以下XSD:Xsd 在OWL中描述字符串文字的正确方法?,xsd,owl,Xsd,Owl,对于以下XSD: <?xml version="1.0"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified"> <xs:simpleType name="size"> <xs:restriction base="xs:string"> <x
<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" attributeFormDefault="unqualified" elementFormDefault="qualified">
<xs:simpleType name="size">
<xs:restriction base="xs:string">
<xs:enumeration value="small" />
<xs:enumeration value="medium" />
<xs:enumeration value="large" />
</xs:restriction>
</xs:simpleType>
<xs:complexType name="jeans">
<xs:simpleContent>
<xs:extension base="size">
<xs:attribute name="sex">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="male" />
<xs:enumeration value="female" />
</xs:restriction>
</xs:simpleType>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
但我不喜欢这样。文字看起来很像常量。owl:类可以有许多实例。有没有办法在OWL中表示常量?结果可能如下所示:
<Constant rdf:abot="#female" rdf:type="http://www.w3.org/2001/XMLSchema#string">female</Constant>
女性
这个问题可以重新表述:如何在OWL中描述普通字符串文字?文字在OWL中是常量。核心问题是如何将XML模式转换为OWL,而转换并不总是简单的。在有枚举值的情况下,我建议创建一个类和枚举实例列表。因此,请尝试对模型进行以下编辑:
:GenderClass
a owl:Class ;
rdfs:subClassOf
[ a owl:Restriction ;
owl:maxCardinality "1"^^xsd:int ;
owl:onProperty :gender
] ;
owl:oneOf (:Class_2_male :Class_2_female) .
:Class_2_male
a :GenderClass ;
rdfs:label "male"^^xsd:string .
:Class_2_female ;
a :GenderClass ;
rdfs:label "female"^^xsd:string .
:gender
a owl:ObjectProperty ;
rdfs:range :GenderClass .
然后可以使用:gender谓词创建实例:
:Person1
a :Person ;
:gender :Class_2_female .
在猫头鹰中,一切都是常数。事物(个体)是常量虹膜,对象属性将它们与其他个体(更常量的虹膜)关联,数据类型属性将它们与字符串和数字等文本关联。当您想要进行此类限制时,可以创建任何一种枚举。如果希望保留现有XSD模式的意图,可能需要使用文本枚举
文字枚举
在OWL中,在指定数据类型属性的范围时,可以使用文本枚举。例如,在Protege中,您可以使用Manchester语法并指定hasSex属性的范围为{“男性”、“女性”}:
本体的RDF映射的序列化如下所示:
@前缀:。
@前缀rdf:。
@前缀owl:。
@前缀xsd:。
@前缀rdfs:。
:hasSex a owl:DatatypeProperty;
rdfs:range[a rdfs:Datatype;
owl:rdf:List中的一个;
rdf:第一个“女性”;
rdf:rest[a rdf:List;
rdf:第一个“男性”;
rdf:rest()
]
]
] .
个人计数
当然,您可能还希望使用个人作为枚举常量。你也可以这样做。在这种情况下,您有一些选择。在一种情况下,您可能有一个类,它实际上是一组已定义的个体,在这种情况下,您可能需要如下内容:
在Turtle中,这看起来像:
@前缀:。
@前缀rdf:。
@前缀owl:。
@前缀xsd:。
@前缀rdfs:。
:中等a猫头鹰:姓名/个人,:大小。
:小猫头鹰:姓名:个人,:大小。
:大型猫头鹰:名称:个体,:大小。
:大小猫头鹰:类;
owl:equivalentClass[一个owl:Class;
猫头鹰:其中之一(:中:大:小)
] .
但是,如果只想指定属性的范围,则不必创建相应的枚举类。您可以执行与文字枚举相同的操作,只需声明属性的范围是枚举。例如,您可以说hasdimiteresize的范围是{Small,Medium},而事先没有将某个类定义为等同于{Small,Medium}
相关的
另见:
- 这个问题的答案有一些额外的评论,关于你是想选择文字还是个人。如果你选择文字,那么你就不能对它们说任何其他的东西,而如果你选择个人,你可以
- 这只是枚举文本的另一个示例
- 一个示例,其中枚举的项必须是个人,而不是文字
{“male”,“female”}
。只要枚举上不需要元数据,字符串也可以工作。是的,这也是一个重要的问题。我提到过,例如,在“如果你想说关于响应类型的任何事情,它们必须是个体。例如,当响应类型是个体时,你可以给它们额外的类型,……如果你的响应类型是文本,你将无法做到这一点,因为文本不能成为语句的主题。”
:Person1
a :Person ;
:gender :Class_2_female .