В информатике овеществление — это процесс, посредством которого абстрактная идея о программе превращается в явную модель данных или другой объект, созданный на языке программирования . Вычислимый/адресуемый объект — ресурс — создается в системе как прокси для невычислимого/адресуемого объекта. С помощью овеществления что-то, что ранее было неявным, невыраженным и, возможно, невыразимым, явно формулируется и становится доступным для концептуальной (логической или вычислительной) манипуляции. Неформально овеществление часто называют «превращением чего-либо в гражданина первого класса » в рамках конкретной системы. Некоторый аспект системы может быть овеществлен во время разработки языка , что связано с рефлексией в языках программирования. Его можно применять как пошаговое уточнение во время проектирования системы . Овеществление — один из наиболее часто используемых методов концептуального анализа и представления знаний .
В контексте языков программирования , овеществление — это процесс, посредством которого пользовательская программа или любой аспект языка программирования, который подразумевался в переведенной программе и системе выполнения, выражаются в самом языке. Этот процесс делает их доступными для программы, которая может проверять все эти аспекты как обычные данные . В рефлексивных языках данные овеществления причинно связаны с соответствующим овеществленным аспектом таким образом, что изменение одного из них влияет на другой. Следовательно, данные овеществления всегда являются точным представлением связанного овеществленного аспекта [ необходимо разъяснение ] . Часто говорят, что данные овеществления сделаны объектом первого класса [ необходима цитата ] . Овеществление, по крайней мере частично, было испытано во многих языках на сегодняшний день: в ранних диалектах Лиспа и в современных диалектах Пролога программы рассматривались как данные, хотя причинно-следственная связь часто оставалась на ответственности программиста. В Smalltalk -80 компилятор исходного текста в байт-код был частью системы времени выполнения с самых первых реализаций языка. [1]
символ * буфер = ( символ * ) 0xB8000000 ; буфер [ 0 ] = 10 ;
eval
orevaluate
, которая эффективно материализует интерпретатор языка.thisContext
в Smalltalk представляют собой материализацию текущего исполняемого блока.eval
.Конкретизация данных ( пошаговое уточнение ) подразумевает нахождение более конкретного представления абстрактных типов данных, используемых в формальной спецификации .
Data reification — это терминология Венского метода разработки (VDM), который большинство других людей назвали бы уточнением данных. Примером может служить шаг к реализации путем замены представления данных без аналога в предполагаемом языке реализации, например, наборов, на то, которое имеет аналог (например, карты с фиксированными доменами, которые могут быть реализованы массивами), или, по крайней мере, на то, которое ближе к тому, чтобы иметь аналог, например, последовательности. Сообщество VDM предпочитает слово «reification» вместо «refinement», поскольку этот процесс больше связан с конкретизацией идеи, чем с ее уточнением. [4]
Для получения информации о схожих значениях см. раздел Реификация (лингвистика) .
Реификация широко используется в концептуальном моделировании . [5] Реификация отношения означает рассмотрение его как сущности. Целью реификации отношения является его явное выражение, когда к нему необходимо добавить дополнительную информацию. Рассмотрим тип отношения IsMemberOf(member:Person, Committee)
. Экземпляр IsMemberOf
— это отношение, которое представляет тот факт, что человек является членом комитета. На рисунке ниже показан пример совокупности IsMemberOf
отношений в табличной форме. Человек P1 является членом комитетов C1 и C2 . Человек P2 является членом только комитета C1 .
Однако тот же факт можно рассматривать и как сущность. Рассматривая отношение как сущность, можно сказать, что сущность овеществляет отношение. Это называется овеществлением отношения. Как и любая другая сущность, она должна быть экземпляром типа сущности. В данном примере тип сущности был назван Membership
. Для каждого экземпляра IsMemberOf
существует один и только один экземпляр Membership
, и наоборот. Теперь становится возможным добавить больше информации к исходному отношению. В качестве примера мы можем выразить тот факт, что «лицо p1 было номинировано на должность члена комитета c1 лицом p2». Овеществленное отношение Membership
может использоваться в качестве источника нового отношения IsNominatedBy(Membership, Person)
.
Для получения информации о связанных с этим случаях см. Реификация (представление знаний) .
UML предоставляет конструкцию класса ассоциации для определения типов овеществленных отношений. Класс ассоциации — это единый элемент модели, который является как видом ассоциации [6] , так и видом класса. [7]
Ассоциация и тип сущности, который овеществляет, являются одним и тем же элементом модели. Обратите внимание, что атрибуты не могут быть овеществлены.
В языках семантической паутины , таких как Resource Description Framework (RDF) и Web Ontology Language (OWL), утверждение — это бинарное отношение. Оно используется для связи двух лиц или лица и значения. Иногда приложениям необходимо описывать другие утверждения RDF, например, для записи информации, например, когда были сделаны утверждения или кто их сделал, что иногда называется информацией о « происхождении ». Например, мы можем захотеть представить свойства отношения, такие как наша уверенность в нем, серьезность или сила отношения, релевантность отношения и т. д.
Пример из раздела концептуального моделирования описывает конкретного человека с URIref person:p1
, который является членом committee:c1
. RDF-триплет из этого описания —
лицо : p1 комитет : isMemberOf комитет : c1 .
Рассмотрите возможность сохранения двух дополнительных фактов: (i) для записи того, кто выдвинул данного человека в этот комитет (заявление о самом членстве), и (ii) для записи того, кто добавил факт в базу данных (заявление о заявлении).
Первый случай — это случай классической овеществления, как описано выше в UML: овеществить членство и сохранить его атрибуты, роли и т. д.:
комитет : Членство rdf : тип owl : Класс . комитет : членство12345 rdf : тип комитет : Членство . комитет : членство12345 комитет : ofPerson лицо : p1 . комитет : членство12345 комитет : inCommittee комитет : c1 . лицо : p2 комитет : назначенный комитет : членство12345 .
Кроме того, RDF предоставляет встроенный словарь, предназначенный для описания утверждений RDF. Описание утверждения с использованием этого словаря называется овеществлением утверждения. Словарь овеществления RDF состоит из типа rdf:Statement
, и свойств rdf:subject
, rdf:predicate
, и rdf:object
. [8]
Используя словарь овеществления, овеществление утверждения о членстве человека может быть получено путем присвоения утверждению URIref, например, так, committee:membership12345
чтобы описывающие утверждения можно было записать следующим образом:
комитет : членство12345Статистика rdf : тип rdf : Утверждение . комитет : членство12345Статистика rdf : субъект лицо : p1 . комитет : членство12345Статистика rdf : предикат комитет : являетсяЧленом . комитет : членство12345Статистика rdf : объект комитет : c1 .
Эти утверждения говорят, что ресурс, идентифицированный с помощью , URIref committee:membership12345Stat
является утверждением RDF, что субъект утверждения относится к ресурсу, идентифицированному с помощью person:p1
, предикат утверждения относится к ресурсу, идентифицированному с помощью committee:isMemberOf
, а объект утверждения относится к ресурсу committee:c1
. Предполагая, что исходное утверждение фактически идентифицировано с помощью committee:membership12345
, должно быть ясно, сравнивая исходное утверждение с овеществлением, что овеществление фактически описывает его. Традиционное использование словаря овеществления RDF всегда включает описание утверждения с помощью четырех утверждений в этом шаблоне. Поэтому их иногда называют «четверкой овеществления». [8]
Используя овеществление в соответствии с этим соглашением, мы могли бы записать факт person:p3
добавления утверждения в базу данных
лицо : p3 комитет : добавленоВБазу данных комитет : членство12345Статья .
Важно отметить, что при традиционном использовании овеществления предполагается, что субъект триплетов овеществления идентифицирует конкретный экземпляр триплета в конкретном документе RDF, а не какой-то произвольный триплет, имеющий тот же субъект, предикат и объект. Это конкретное соглашение используется, поскольку овеществление предназначено для выражения таких свойств, как даты составления и исходная информация, как в уже приведенных примерах, и эти свойства должны применяться к конкретным экземплярам триплетов. Обратите внимание, что (subject predicate object)
сам описанный триплет не подразумевается таким четверным овеществления (и не обязательно, чтобы он фактически существовал в базе данных). Это позволяет также использовать этот механизм для выражения того, какие триплеты не содержатся .
Мощность словаря овеществления в RDF ограничена отсутствием встроенных средств для назначения URIrefs утверждениям, поэтому для выражения информации о «происхождении» такого рода в RDF необходимо использовать некоторый механизм (вне RDF) для назначения URI отдельным утверждениям RDF, а затем делать дальнейшие утверждения об этих отдельных утверждениях, используя их URI для их идентификации. [8]
В XML Topic Map (XTM) только тема может иметь имя или играть роль в ассоциации. Можно использовать ассоциацию, чтобы сделать утверждение о теме, но нельзя напрямую делать утверждения об этом утверждении. Однако возможно создать тему, которая овеществляет нетематическую конструкцию в карте, таким образом позволяя ассоциации быть названной и рассматриваться как сама тема. [9]
В языках семантической паутины, таких как RDF и OWL, свойство — это бинарное отношение, используемое для связи двух лиц или лица и значения. Однако в некоторых случаях естественным и удобным способом представления определенных концепций является использование отношений для связи лица с более чем одним лицом или значением. Эти отношения называются n-арными отношениями . Примерами являются представление отношений между несколькими лицами, такими как комитет, лицо, являющееся членом комитета, и другое лицо, которое назначило первого человека членом комитета, или покупатель, продавец и объект, который был куплен при описании покупки книги.
Более общий подход к реификации заключается в создании явного нового класса и n новых свойств для представления n -арного отношения, делая экземпляр отношения, связывающего n индивидов, экземпляром этого класса. Этот подход также может использоваться для представления информации о происхождении и других свойств для отдельного экземпляра отношения. [10]
: p1 a : Лицо ; : имеет_членство _ : членство_12345 . _ : членство_12345 a : Членство ; : комитет : c1 ; : номинирован_кем : p2 .
Также важно отметить, что описанная здесь реификация не то же самое, что «цитата», встречающаяся в других языках. Вместо этого реификация описывает связь между конкретным экземпляром триплета и ресурсами, на которые ссылается триплет. Реификацию можно интуитивно прочитать как «эта триплет RDF говорит об этих вещах», а не (как в цитате) «эта триплет RDF имеет такую форму». Например, в примере реификации, использованном в этом разделе, триплет:
комитет : membership12345 rdf : субъект лицо : p1 .
описывая rdf:subject
исходного утверждения, говорит, что субъектом утверждения является ресурс (лицо), идентифицированный URIref person:p1
. Он не утверждает, что субъектом утверждения является сам URIref (т. е. строка, начинающаяся с определенных символов), как это было бы в случае цитаты.