Protege中为实例赋值rdf:XMLLiteral类型asGML属性保存报错问题
本体asGML属性赋值rdf:XMLLiteral保存报错解决方案
问题描述
我尝试使用名为asGML的数据属性为实例分配类型值,该实例属于此数据属性定义域对应类的对象,属性的取值范围为rdf:XMLLiteral数据类型(数据属性结构可参考Dataproperty附件图)。
我创建了名为25484-105的实例,所属类为asGML数据属性的定义域AbstractGeometry类,需要为该实例赋值符合属性取值范围类型的属性值,具体值原样复制自Ordnance Survey关联数据资源,类型为XMLLiteral,内容如下:
<gml:MultiPolygon> <gml:polygonMember> <gml:Polygon> <gml:outerBoundaryIs> <gml:LinearRing> <gml:coordinates>322508.3974999999,183565.0044 322506.8969,183552.0980999999 322509.7991,183506.8011 322527.1961999999,183509.9001999999 322542.4001,183503.7018999999 322553.0031999999,183496.8038999999 322573.3025999999,183471.3011999999 322573.8962,183470.3015 322574.8032,183464.0033 322575.1989,183458.304899999, 322574.3991999999164542.6994999999</gml:coordinates> </gml:LinearRing> </gml:outerBoundaryIs> </gml:Polygon> </gml:polygonMember> </gml:MultiPolygon>
每当我将该值分配给已创建的实例后,尝试保存本体时就会收到错误提示,错误详情可参考附件图1、图2。
修复方案
- 修正类型声明错误:你描述中提到的取值范围
rdf:MLLiteral为笔误,需严格将属性取值范围和赋值时的类型声明统一为rdf:XMLLiteral,不能省略类型标识。 - 修正GML语法错误:你使用的GML片段存在两处格式问题,直接导致XML校验失败:
- 坐标串中
322575.1989,183458.304899999,末尾多余逗号,删除即可 - 最后一组坐标
322574.3991999999164542.6994999999缺失逗号分隔,修正为322574.3991999999,164542.6994999999
- 坐标串中
- 补充命名空间声明:赋值前需确保本体中已声明
gml前缀对应的GML命名空间,也可直接在<gml:MultiPolygon>根节点上添加xmlns:gml="http://www.opengis.net/gml"属性,避免XML解析时无法识别前缀报错。 - 避免多余转义处理:如果你使用的是Protégé这类本体编辑工具,直接输入原始XML内容即可,不需要提前将尖括号转义为
</>,手动转义会导致工具识别内容时XML语法校验失败。
内容的提问来源于stack exchange,提问作者Satoti
相关产品推荐
相关产品推荐

