Help:Свойства и типы

From semantic-mediawiki.org
Руководство пользователя
Введение
Интерфейсы навигации
Служебная:Ask
Служебная:Навигация (англ.)
Семантический поиск
Выборка страниц
Строгие компараторы
Отображение информации
Форматы вывода
Встраиваемые запросы
Концепты
Логический вывод
Редактирование
Свойства и типы (англ.)
Специальные свойства
Обратные свойства
Единицы измерения (англ.)
Семантические шаблоны (англ.)
Сервисные ссылки (англ.)
Semantic Web (англ.)
Экспорт OWL/RDF (англ.)
Внешние инструменты (англ.)
Импорт словарей
Руководство администратора (англ.)

Свойства и типы являются главными инструментами ввода семантических данных в Semantic MediaWiki. Свойства похожи на категории в MediaWiki, однако в отличие от категорий, у свойств есть не только название, но и значение. Для того, чтобы назначить вашей вики-странице свойство, вы должны отредактировать текст страницы и использовать следующую конструкцию:

 [[Имя свойства::Значение свойства]]

Этот синтаксис очень похож на создание обычных вики-ссылок (напомним, что для этого в MediaWiki используется конструкция вида [[Имя ссылки]]). При вставке семантического свойства в текст вики страницы отображаться будет только значение этого свойства.

Создание семантических свойств[edit]

Начнем с примера. Зайдите на Википедию и найдите там статью про Берлин. Легко заметить, что эта статья ссылается на массу вики-страниц, описывающих страны: США, Польша, Германия, Чехия и др. Вместе с тем мы понимаем, что связь Берлина с Германией является совершенно особенной: Берлин является столицей Германии.

Семантические свойства используются как раз для того, чтобы помечать такого рода ссылки, несущие смысловую нагрузку. Связь Москвы с Россией, Берлина с Германией и Вашингтона с США логично назвать является столицей. Для того, чтобы давать названия ссылкам, в Semantic MediaWiki и используюстся свойства. Достаточно заменить текст

[[Германия]]

на

[[является столицей::Германия]]

... чтобы создать семантическое свойство является столицей.

Для тех, кто просматривает вики-страничку, ничего не изменится - значение нашего семантического свойства бдет выглядеть точно так же как обычная вики-ссылка. Однако если вы всегда будете пользоваться свойством является столицей вместо вики-ссылок, то сможете с помощью SMW-запросов создавать, например, автоматически обновляющиеся списки стран и их столиц:

{{#ask:[[Категория:Город]]
|?является столицей
|format=table}}

Легко догадаться, что нужно всячески поощрять пользователей вашей вики использовать одни и те же имена семантических свойств для обозначения одних и тех же связей между объектами. Чтобы облегчить такое повторное использование свойств, каждому свойству в SMW сопоставляется страница, находящаяся в пространстве имен[1] Property (Свойство). Иными словами точно так же как страницы категорий называются Категория:Имя_категории, все страницы свойств называются Свойство:Имя_свойства. На этой странице вы можете описать, для чего используется это свойство на вашей вики; её можно править так же, как и любую другую вики-страницу.

Со временем количество свойств, которые вы используете на вики, возрастает. На спецстранице Special:Properties перечислены все свойства и указано, сколько раз они были использованы.

Существует несколько способов для того, чтобы добавить свойство на страницу:


Что вы хотите сделать Что нужно написать
Превратить ссылку Москва в семантическое свойство столица со значением Москва
 Столицей России является [[столица::Москва]]
Высвечивать другой текст на месте ссылки, например: столицей России является
<nowiki>[[столица::Москва|город Москва]]
</nowiki>
Столицей России является  [[столица::Москва|город Москва]]
Скрыть текст при назначении семантического свойства: используйте пробел после вертикальной черты
Чтобы скрыть значение семантического свойства [[Некоторое_свойство::его_значение| ]] используйте пробел после вертикальной черты.

Замечание: Пробел после знака вертикальной черты | обязателен! Если вы поставите пробел, то SMW не напечатает ничего. В случае, если вам нужно напечатать именно пробел, используйте &nbsp;.

Если вы хотите создать обыкновенную, несемантическую ссылку, в которую входит два двоеточие предварите ссылку одим двоеточием, например ,
C++ оператор :: .
[[:C++ оператор :: ]].
Если вы хотите назначить одно и то же значиение нескольким разным свойствам, используйте два двоеточие для того чтобы разделять свойства.
e.g. [[Свойство1::Свойство2::Значение]]. 

Превращение данных на странице в семантические свойства[edit]

Мы научились создавать именованные ссылки с одних страниц на другие. Однако в тексте вики-статьи есть много другой полезной информации, например, страница Берлин может содержать число жителей в городе Берлин. Было бы замечательно прицепить к этому числу тэг "Население". Таким образом, текст

3,396,990 

... стал бы доступным для компьютерной обработки. В Semantic MediaWiki это возможно - просто создайте семантическое свойство Население, как обычно: перед числом 3,396,990 поставьте имя свойства и два двоеточия :: и заключите всю эту конструкцию в двойные квадратные скобки [[ ]]. В итоге получится

[[Население::3,396,990]].

Сохраните текст страницы и посмотрите на результат. Как видите, вики создала ссылку для страницы под названием 3,396,990. Разумеется, нет никакого смысла в том, чтобы хранить отдельную страницу для каждого числа. Другой проблемой является то, что прямо сейчас значения свойства Население не воспринимаются системой как числа. Например, если вам захочется вывести список всех немецких городов и количество жителей в них (о том, как это сделать, прочитайте в разделе Help:Встраиваемые запросы), вы не сможете корректно отсортировать этот список по возрастанию населения: сортировка будет идти в алфавитном порядке и значение "1,000,000" будет идти раньше чем, например, "345". Итак, мы хотим, чтобы значения свойства Население воспринимались нашей вики как числа, а не как страницы. Для того, чтобы это сделать вы должны указать тип свойства: почитайте про это в главе #Типы данных для свойств.

Правильное именование семантических свойств[edit]

Выбор имён для свойств - дело довольно важное, гораздо важнее, чем вы могли бы предположить а первый взгляд. Свойства должны называться так, чтобы полностью исключать двусмысленность и путаницу.

Путаница может возникать буквально на ровном месте. Например, как понимать семантическое свойство Столица и на какой странице его ставить. Сравните два предложения:

Столицей Германии является Берлин. ↔ Берлин является столицей Германии

Первое предложение волне могло бы встретиться в статье Германия, а второе - в статье Берлин. Легко заметить что у свойства Столица в первом случае значением является город, а во втором страна. В этом случае лучше переименовать свойство столица, например, вот так:

Столицей Германии является Берлин. ↔ Берлин является столицей Германии

Типы данных для свойств[edit]

Semantic MediaWiki поддерживает несколько типов данных для свойств, и эти типы даных определяют то, как будут выполняться различные операции над значениями свойств. В предыдущем примере у нас было свойство Население, для подобных свойств подходит тип Число.

Типы данных назначаются свойствам довольно интересным образом. У каждого свойства есть своя вики-страница в пространстве имен Property. На этой странице мы описываем то, как использовать свойство. Если добавить на страницу свойства Население специальное свойство [[has type::Number]], то тем самым мы укажем SMW, что с населением нужно обращаться как с числом.

Свойство has type - это одно из т.н. специальных свойств'. Вне зависимости от того, создали ли вы страницы для этих свойств в вики, данные свойства имеют специальное назначение.

Типы имеют большое значение. Во-первых, тип свойства определяет то, как именно будут обрабатываться значения этого свойства, а это важно для операций сравнения, сортировки и отображения значений. Во-вторых, нужно знать тип свойства для того, чтобы понимать разные способы написания одного и того же значения. К примеру, "1532", "1,532", и "1.532e3" обозначают одно и то же число. Наконец, свойства некоторых типов ведут себя особенным образом, о чем мы расскажем ниже. По этим причинам, каждое свойство должно быть явно помечено типом.

Почему же мы не указывали тип данных для свойства Является столицей, и все работало хорошо? Дело в том, что если вы не явно не указываете тип для свойства, SMW считает, что это свойство имеет тип Страница (Page). Свойства типа Страница. Однако хорошей практикой является явное задание типов всех свойств, которые вы используете на вики; важно также подробно описывать, для чего нужно каждое свойство и как его правильно использовать. Администратор вики может изменить тип для свойств по умолчанию с помощью опции smwgPDefaultType в LocalSettings.php.

Вы можете помечать страницы свойствами различных типов таким же образом, каким вы создаёте именованные ссылки (свойства типа Страница). Несколько примеров:

Что вы хотите сделать Что нужно написать
Для данной страницы привязать свойство Имеет население со значением 1,234,567.
В стране проживает [[Имеет население::1,234,567]] человек."
Привязать числовое свойство, но показывать другой текст в статье
В стране проживает [[Имеет население::1,234,567|около миллиона]] человек.
На странице свойства назначить ему тип Число.
Это свойство имеет тип [[Has type::number]].
Показать URL-адрес, используя свойство типа URL
Наш замечательный сайт находится по адресу [[Is website::http://example.com]].
Показать ссылку типа "mailto" с помощью свойства типа "Email"
Вы можете связаться по электронной почте [[has email address::john@example.com]].

Список типов данных[edit]

Используя свойства различных типов, вы можете описать очень многие вещи. На страничке Special:Types в вашей вики есть список всех доступных типов данных. В таблице мы приводим типы, которые есть в стандартном пакете SMW:


Перечисления и допустимые значения свойств[edit]

Порой нам хочется указать не только тип свойства, но и список допустимых значений, которые то свойство может принимать. Для этого на страничке свойства вы должны задать список допустимых значений, используя специальное свойство Property:Allows value, вот так:

[[has type::number]]
[[Allows value::55]]
[[Allows value::56]]
[[Allows value::57]]

Единицы измерения[edit]

Тип данных Quantity позволит вам задавать единицы измерения для ваших числовых значений свойств, например 30 миль или 42 км. Для того, чтобы вики могла сама переводить одни единицы измерения в другие, вам придется явно определить единицу измерения, как описано в главе custom units. После этого ваши пользователи смогут использовать в значения свойства те единицы измерения, к которым привыкли, а вики позаботится об автоматическом преобразовании в запросах и при операциях сравнения.

Обратные (инверсные) свойства[edit]

Начиная с версии 1.5.0 в SMW стало возможным делать обратные свойства для типа Page. Подробнее об этом можно прочитать на странице Help:Inverse Properties.

Специальные свойства[edit]

В этой главе мы познакомились со специальными свойствами has type и Allows value. В SMW есть еще несколько подобных свойств, они описаны на страничке Special properties. Обратите внимание, что вы не можете использовать для своих свойств имена, совпадающие с именами специальных свойств. Начиная с Semantic MediaWiki 1.4.0, вы можете делать запросы по специальным свойствам и Help:Отображение информации отображать их, как обычно.

Функция #set для "тихого" аннотирования[edit]

Вместо того, чтобы использовать двойные квадратные скобки [[]] для аннотирования страниц семантическими свойствами, вы можете задействовать функцию #set. В качестве аргументов эта функция принимает пары название свойства=значение свойства и не печатает ничего на экран. Вот как это работает в нашем примере с Берлином:

{{#set:имеет население=3,396,990|является столицей=Германия}}

Функция #set окажется полезной когда вам захочется сохранять в качестве значений свойства большие фрагменты текста, содержащие вики-разметку с квадратными скобками, например вики-ссылки. В этих случаях стандартный способ привязывания семантических свойств правильно работать не будет.

Повторяющиеся события[edit]

Другим примером сложных данных являются периодические, повторяющиеся события. Ясно, что периодическое событие включает в себя несколько дат и повторяется с даты А по дату Б с периодичностью В. Функция #set_recurring_event используется как раз для того, чтобы можно было простым образом задавать повторяющиеся события в вики. Так же как и #set, функция #set_recurring_event не печатает ничего в тексте вики-статьи. Вот пример использования #set_recurring_event для создания события, повторяющегося раз в неделю:

{{#set_recurring_event:
property=Has date
|start=January 4, 2015
|end=June 8, 2015
|unit=week
|period=1
|include=March 16, 2015;March 23, 2015
|exclude=March 15, 2015;March 22, 2015}}

За подробностями можно обратиться к главе Help:Recurring events.

Как обстояли дела в более ранних версиях SMW[edit]

Вплоть до Semantic MediaWiki 1.5.6 для типов данных в вики было зарезервировано пространство имен "Type". Дабы не плодить лишние пространства имен, от такого подхода пришлось отказаться. Не удивляетесь, если встретите в этой вики выражения вроде "Type:Number". Для того, чтобы назначить тип для семантического свойства допустимы обе формы написания.

В очень старых версиях SMW свойства типа Page назывались связями между страницами, в то время как свойства других типов (числа, строки и т.д.) назывались атрибутами и назначались страницам, используя двоеточие и равно (:=) вместо двух двоеточий (::).

  1. См. также статью про пространства имен на MediaWiki.org


Эта страница относится ко всем версиям SMW, начиная с версии 1.6.0 вплоть до самой последней версии.
      Другие языки : fruk