Help:词表导入

在Semantic MediaWiki当中，通过将词表元素与维基站点术语关联起来，可以导入和复用属于已有语义网文档或标准的词表. 该功能的一个例子就是，semanticweb.org维基站点当中对于FOAF词表的使用. 尽管所关联的这些术语会像维基站点当中任何其他的标注那样发挥作用，但所导出的RDF将直接使用FOAF规范的元素，从而让用户能够通过该维基站点来编辑FOAF文件.

示例：导入foaf:knows
通常，可在维基站点当中加以描述（并且用于描述）的概念就是由该维基站点来定义的，因而属于本地概念. 因此，RDF导出结果用来表示一个概念的URI，通常来自于某个特定的，仅仅应当由该维基站点来使用的命名空间. 即使是您创建了一个看似来自于某部知名词表的属性，因为您把它命名为foaf:knows，仍会采用如下URI来导出它：

http://your.site/wiki/Special:URIResolver/Property-3AFoaf-3Aknows

这是由文章URL派生而来的XML兼容型URI（详情请参见Help:RDF导出）. Semantic MediaWiki的词表导入机制是通过允许以受控的方式复用外部词表，来解决这个问题的. 在管理员让外部词表变得现成可用之后，任何用户均可通过在相应文章当中添加下列文本，声明该维基站点当中的某条术语与所导入的某个元素相匹配：

imported from::foaf:knows

特殊属性imported from（导入自……）告诉SMW，当前维基站点的这个属性实际上指的就是来自于FOAF词表的属性 http://xmlns.com/foaf/0.1/knows.

不必将这篇维基文章命名为"Property:foaf:knows"，用户可以选用任何名称在其维基站点之中表示该属性. （semanticweb.org在这里采用的是"foaf:knows"，因为该维基站点上的社区预期具有一定的技术背景；而在另一个维基站点当中，则可能会首选某个技术性较低的名称. ）

为了对上述的"imported from"声明加以解释，维基站点需要理解作为"http://xmlns.com/foaf/0.1/knows"的简称的"foaf:knows"的含义. 对于"foaf:knows"，情况是如此，因为维基站点管理员让该属性变得可供用于这种目的. 关于导入进一步的词表一节描述的是，如何才能找出哪些元素可用，如何才能添加新的元素，以及这种"控制机制"背后的思想是什么.

导入属性
如上所述，基本上可以导入所有已知的元素. 当导入属性的时候，存在着一种次要的附加效果：所导入的元素将同时定义该属性的数据类型. 在当前的例子当中，仅仅借助于导入声明，就会将属性foaf:name声明为字符串型. '''如果要导入一个属性，请删除它的"has type"（具有类型……）声明. '''

导入进一步的词表
如上所述，并不是一部外部词表的每个元素均可导入. 要搞清楚究竟某个东西是否可供导入，最容易的方法就是，试着采用上述的声明来导入它. 如果行不通，事实框当中的消息就会告诉您相应的问题. 可能的原因有：


 * 1) 命名空间（如"foaf:"）根本不可用. 该维基站点并不知道此命名空间指的是什么，因而并不支持该范围内的任何元素.
 * 2) 特定元素（如"foaf:knows"）在（已知）命名空间"foaf:"当中不可用.
 * 3) 该元素已知，但在您当前正试图使用该元素的特定种类的页面上，无法导入该元素. 例如，在维基站点命名空间"Category:"当中的页面上，无法导入foaf:knows，因为相应的命名空间应当始终为 "Property:".

对于最后一种情况，可以使用适合于导入的文章来解决这个问题. 在其他情况下，只有拥有管理员权限的用户才能添加未知的词表元素. 通过修改维基站点即可非常迅速地解决（参见下文）. 但是，还存在一些情况就是，故意使某部词表不可用. 其中，可能的原因有：


 * 目前还不推荐公开使用您所希望使用的这个元素，或者社区里仍在讨论它的正确用法. 一个这样的例子就是foaf:OnlineEcommerceAccount.
 * 对于当前的用途而言，对所选词表的规范/说明过于模糊不清或者初级. 它今后可能会变得更加精确，而这会影响其在当前维基站点当中的使用（或者使其早期的使用变得不正确）.
 * 该词表尚未获得广泛采用，也不标准，因而当前维基站点的社区（由其管理员们来代表）并不赞成当前对它的使用. 并非每个人自制的本体都需要导入到维基站点当中.
 * 目前是依照别的本体语言，而不是SMW型维基站点所采用的本体语言（即OWL DL）来调整定制该词表的规范，因而不清楚如何正确地对其加以映射. 一部词表的导入同时也需要与OWL DL进行映射，因而必须对应当如何进行这种映射加以规定. 而且，关于将此类元素导出成OWL/RDF是否会有多大用处，也是个疑问.
 * 所导入的这个元素乃是用于导出的那些本体词表的组成部分.
 * 在这种情况下，该元素的使用也可能会直接损害导出结果的健全性（sanity，合理性）. 比如，如果把owl:Nothing作为类别导入到维基站点当中，只需向该类添加那么一篇文章，即可轻松地让整个结果输出变得缺乏一致性，而这又是不希望出现的情况.
 * 或者，在当前维基站点当中，可能早就以隐含的方式充分地表达了这个元素. 比如，要声明某事物是某个类的元素，并不需要导入属性rdf:type &mdash; 采用现有可用的类别机制足矣.

要搞清楚某个命名空间缩写有哪些可用的元素，一种快速的方法就是，转到文章MediaWiki:smw_import_foaf，并采用您所感兴趣的命名空间标识符来替换其中的foaf. 该系统背后的理论基础就是，社区可以决定对所需词表的理智使用，而每个用户仍有权利决定在哪些情况下去使用那些现成可用的元素，以及在当前的维基站点当中应当采用什么名称来表达它们.

让词表变得可供导入
只需采用一种"神奇的"名称为每部词表编辑一个专门的页面，拥有管理员身份的维基站点用户可以使新的元素变得现成可用. 这种页面位于Mediawiki命名空间当中，且前缀为smw_import_. 例如，foaf词表的相应页面就被命名为MediaWiki:smw_import_foaf. 其中，含有下列之类内容：

http://xmlns.com/foaf/0.1/|Friend Of A Friend name|Type:String homepage|Type:URI Person|Category knows|Type:Page ...

第一行告诉维基站点：


 * 缩写"foaf:"指的是"http://xmlns.com/foaf/0.1/"
 * 应当将"Friend Of A Friend"作为该词表元素额外的一个易于人工阅读的标签加以提供（比如，在事实框里面）.

之后，有一行声明的是，可在当前维基站点之中加以复用的各个词表元素. 例如，"name"（指的是"foaf:name"）只能是一个数据类型为String（字符串型）的属性. 通道符"|"之后的文字声明的是，可在其中使用某一元素的（独特）语境（上下文）. 通过采用Type:some datatype来规定元素的类型，来声明那些可作为属性而导入的元素. 通过指定命名空间标识符"Category"，来声明那些可作为类别而导入的元素. （注意：在SMW 1.0版里，类型和命名空间取决于您的语言设置！） 另外，亦可通过编写除上述内容以外的任何东西，来声明其他的元素；不过，我们还是强烈建议您使用有意义的字符串；我们的建议是"Main"，尽管您也可以在除"Property"和"Category"之外的命名空间当中使用此类元素.

更改导入声明
可能容易发生的情况就是，应当对维基站点上某个已有的文章进行修订，以便让其表示所导入的（另一个）概念. 例如，已经在使用类别"Person"的维基社区可能会决定将来把这个类别映射到"foaf:Person". 幸运的是，这并不是问题. '''在任何时刻均可对已有文章当中的导入声明（import statements）进行变更，而无需在维基站点当中进行额外的更新. ''' 所导出的RDF将会立即得到相应的修改. 当然，对于属性而言，在没有同时对采用相应属性的那些文章进行更新的情况下，通常不应当更改相应的数据类型. 这与导入稍有关系，因为属性的"imported from"声明也会定义其数据类型.