Skip to content

Commit 529bce2

Browse files
Merge pull request #154 from howardtrickey/main
Best Practices
2 parents 202c4cf + 733a877 commit 529bce2

17 files changed

Lines changed: 305 additions & 138 deletions

22-053/22-053.adoc

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
= User guide for OGC Points of Interest
1+
= Best Practices guide for OGC Points of Interest
22
:doctype: user-guide
33
:status: draft
44
:committee: technical
@@ -25,26 +25,10 @@ include::sections/01-introduction.adoc[]
2525
include::sections/02-usage.adoc[]
2626
include::sections/03-scope.adoc[]
2727
include::sections/04-normative-references.adoc[]
28-
include::sections/05-nonstandard-attributes.adoc[]
29-
30-
include::sections/06-choose-restaurant-use-case.adoc[]
31-
32-
// include::sections/06-construction-site-use-case.adoc[]
33-
34-
// include::sections/06-country-covid-requirements-use-case.adoc[]
35-
36-
// include::sections/06-covid-testing-center-use-case.adoc[]
3728

38-
// include::sections/06-ev-charging-stations-use-case.adoc[]
39-
40-
// include::sections/06-indoor-navigation-use-case.adoc[]
41-
42-
// include::sections/06-military-use-case.adoc[]
43-
44-
// include::sections/06-houses-and-utility-poles-use-case.adoc[]
45-
46-
// include::sections/06-package-dropoff-pickup-service-use-case.adoc[]
29+
include::sections/05-current-practices.adoc[]
30+
include::sections/05-nonstandard-attributes.adoc[]
4731

48-
// include::sections/06-poi-publication-use-case.adoc[]
32+
include::sections/06-public-poi-interchange-use-case.adoc[]
33+
include::sections/06-poi-publication-use-case.adoc[]
4934

50-
// include::sections/06-smart-tourism-use-case.adoc[]

22-053/sections/00-preface.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ POI-CM is an open conceptual data model for representing information about point
66

77
The aim of developing the OGC POI conceptual model is to reach a common definition of the basic entities, attributes, and relations of "points of interest." In the broadest terms, a point of interest is a location about which information of general interest is available. A POI can be as simple as a set of coordinates and an identifier, or more complex such as a three-dimensional model of a building with names in various languages, information about open and closed hours, and a civic address.
88

9-
This Users Guide provides extended explanations and examples for the individual concepts that are defined in the POI Conceptual Model Standard. Both the Conceptual Model Standard and this Users Guide are mutually linked to facilitate navigation between corresponding sections in these documents.
9+
This Best Practices Guide provides extended explanations and examples for the individual concepts that are defined in the POI Conceptual Model Standard. Both the Conceptual Model Standard and this Users Guide are mutually linked to facilitate navigation between corresponding sections in these documents.
1010

22-053/sections/01-introduction.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ POI data has traditionally been exchanged in proprietary formats by various tran
77

88
POI-CM is a common semantic information model for the representation of POI objects that can be shared across many use cases. The ability for a POI using this conceptual model to be shared and reused is especially important with respect to the cost-effective sustainable maintenance of POI set models, allowing the possibility of selling the same data to customers from different application fields.
99

10-
POI-CM is an open conceptual data model for the storage and exchange of POI models. It is defined through a Unified Modeling Language (UML) object model. This UML model extends the ISO Technical Committee 211 (TC211) https://github.com/ISO-TC211/HMMG[conceptual model standards] for spatial and temporal data. Building on the ISO foundation assures that the features described in the POI Models share the same spatial-temporal universe as features described by related standards (e.g., <<citygml,CityGML..).
10+
POI-CM is an open conceptual data model for the storage and exchange of POI models. It is defined through a Unified Modeling Language (UML) object model. This UML model extends the ISO Technical Committee 211 (TC211) https://github.com/ISO-TC211/HMMG[conceptual model standards] for spatial and temporal data. Building on the ISO foundation assures that the features described in the POI Models share the same spatial-temporal universe as features described by related standards (e.g., <<citygml,CityGML>>, ...).
1111

1212
A POI is not a dataset. Rather, it is a feature type that enhances an existing dataset of features. POI-CM builds on the ISO General Feature Model (<<iso19109,ISO 10109>>) and the ISO Geometry Model (<<iso19107,ISO 19107>>). To avoid reinventing things, POI-CM also borrows some classes from ISO Common Data Types (<<iso19103,ISO 19103>>) and <<citygml,OGC CityGML 3.0>>.
1313

22-053/sections/02-usage.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
[[ug_usage_section]]
22
== How To Use This Resource
33

4-
The Users Guide to the POI Conceptual Model (POI-CM) Standard is not intended to be read from start to finish. Rather, it is a resource structured to provide quick answers to questions that an implementer may have about the POI-CM Standard.
4+
The Best Practices Guide to the POI Conceptual Model (POI-CM) Standard is not intended to be read from start to finish. Rather, it is a resource structured to provide quick answers to questions that an implementer may have about the POI-CM Standard.
55

66
The POI-CM Standard includes hyperlinks that can be used to navigate directly to relevant sections of the User Guide.
77

22-053/sections/03-scope.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ This document provides Engineering Guidance on the use of the POI Conceptual Mod
55

66
The OGC POI Conceptual Model (POI-CM) Standard specifies the representation of POI models. The POI-CM is expected to be the basis for a number of future implementation standards in which subsets of the Conceptual Model can be implemented. These future standards will be published separately to enable consistent and efficient storage and exchange of data.
77

8-
The POI Conceptual Model Standard was designed to be concise and easy to use. As a result, most non-normative content has been removed. The purpose of this Users Guide is to capture that non-normative content and make it easy to access when needed.
8+
The POI Conceptual Model Standard was designed to be concise and easy to use. As a result, most non-normative content has been removed. The purpose of this Best Practices Guide is to capture that non-normative content and make it easy to access when needed.
Lines changed: 226 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,226 @@
1+
2+
[[ug_current_practices_section]]
3+
== Survey of Selected Current Practices
4+
5+
Most usages of this POI Conceptual Model standard will need to add extra _attributes_ (named properties) in a *POI_Payload* object.
6+
There are a number of attributes that are likely to come up often. Among the most common are:
7+
8+
* Multilingual names
9+
* Addresses, including multilingual addresses
10+
* Categories
11+
* Business Hours
12+
* Telephone Number
13+
14+
Since there are extant standards and practices for representing these, this section will survey those.
15+
The next section will then recommend how to model these attributes in a *POI_Payload*.
16+
17+
=== Some Common POI Information Practices and Standards ===
18+
19+
Before discussing the individual attributes, here are some of the references consulted for this survey:
20+
21+
Indoor Mapping Data Format (IMDF)::
22+
https://docs.ogc.org/cs/20-094/[IMDF] is an OGC Community Standard, originally developed by Apple, for indoor maps
23+
It can be used, for example, to map airports, malls, and train stations.
24+
It is a JSON format, based on GeoJSON.
25+
The concept of an https://docs.ogc.org/cs/20-094/Occupant/[Occupant] is very close to that of a POI representing a business.
26+
27+
OpenStreetMap::
28+
https://wiki.openstreetmap.org/wiki/Main_Page[OpenStreetMap] is a community-built map of the world.
29+
Some of its https://wiki.openstreetmap.org/wiki/Map_features[Primary Features] could be called POIs,
30+
and the https://wiki.openstreetmap.org/wiki/Tags[tags] of such features are similar to our attributes.
31+
The OpenStreetMap data model is a https://github.com/openstreetmap/openstreetmap-website/blob/master/db/structure.sql[database schema].
32+
Things are called _elements_ and _tags_ are used to provide the data for each element.
33+
34+
Overture Maps::
35+
https://docs.overturemaps.org/schema/[Overture Maps] is developed by a foundation as a map built on open data.
36+
It has a schema for https://docs.overturemaps.org/schema/reference/places/place/[places] that are essentially POIs.
37+
Overture uses OGC's feature model, and defines its data model schema using a JSON schema.
38+
39+
CityGML::
40+
https://www.ogc.org/standard/citygml/[CityGML] is an OGC standard for 3D city models.
41+
It is mostly about the buildings and other city infrastructure, rather than the occupants of the buildings.
42+
However, it is useful to see how it models addresses.
43+
44+
Google Hotels::
45+
Google provides an XML schema for uploading listings, and a public example of this is the
46+
https://developers.google.com/hotels/hotel-prices/dev-guide/hlf[Hotels listing] schema.
47+
Hotels are a subset of POIs but are otherwise very similar.
48+
49+
Schema.org::
50+
https://schema.org/[Schema.org] is a set of recommended schema for modeling various things on the web.
51+
It specifies markup for various https://schema.org/Property[Properties], some of which are relevant to POIs.
52+
A primary use is for putting _microdata_ into web pages to give information to search engines.
53+
54+
XML Schema::
55+
https://www.w3.org/TR/xmlschema11-2/[XML Schema Definition Language] models a number of primitive data types,
56+
some of which (language, dates and times) are relevant to this survey.
57+
58+
RFC5646::
59+
https://tools.ietf.org/html/rfc5646[RFC 5646] _Tags for Identifying Languages_ is an Internet Best Practices
60+
guide to tags for identifying natural languages.
61+
62+
=== Multilingual Names ===
63+
64+
POIs can have their names expressed differently in different natural languages:
65+
for example "la tour Eiffel" in French is "Eiffel Tower" in English and Eiffelturm in German.
66+
67+
*IMDF* https://docs.ogc.org/cs/20-094/Occupant/index.html[Occupants] have a _name_
68+
which has type https://docs.ogc.org/cs/20-094/Reference/index.html#labels[_LABELS_].
69+
LABELS are a JSON object used to express a string label in one or more langauges.
70+
The JSON object has member names that are languages, with the corresponding
71+
member values being the label in that language.
72+
For example:
73+
74+
```json
75+
name: {
76+
"en-US": "Center Pavillion",
77+
"en-GB": "Centre Pavillion"
78+
}
79+
```
80+
IMDF says that the langage member names should be a LANGUAGE_TAG, which is
81+
defined in their https://docs.ogc.org/cs/20-094/Reference[reference section]
82+
as an https://tools.ietf.org/html/rfc5646[RFC 5646] compliant language tag and sub-tag, script, and region subtag
83+
registered in the
84+
https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry[IANA Language Subtag Registry].
85+
IMDF requires that language tags may not be duplicated in a LABELS.
86+
An IMDF archive comes with a https://docs.ogc.org/cs/20-094/Manifest[Manifest] containing metadata about the described venue.
87+
Among the metadata is a _language_, whose value is the _default language_ tag for the venue.
88+
There is a requirement that all LABELS must contain an entry for the default language.
89+
90+
In *OpenStreeMap*, elements are given names with a _name=_ tag, which is decribed https://wiki.openstreetmap.org/wiki/Names#Localization[here].
91+
Additionally, there is a long article on https://wiki.openstreetmap.org/wiki/Multilingual_names[Multilingual names].
92+
There can be multiple _name=_ tags for an element, each giving the name in another language.
93+
The bare _name=_ tag gives the default language name, used locally.
94+
Names in other languages use the form _name:code=_, where _code_ is
95+
a language's https://www.loc.gov/standards/iso639-2/php/code_list.php[ISO 639-1 alpha-2 code (in the second column)],
96+
or https://www.loc.gov/standards/iso639-2/php/code_list.php[ISO 639-2/T (alpha-3)] code.
97+
It is recommended that the local name be repeated with an explicit language code,
98+
so that an implementation doesn't have to guess the local language.
99+
For example:
100+
101+
```
102+
name=la tour Eiffel
103+
name:fr=la tour Eiffel
104+
name:en=Eiffel Tower
105+
name:de=Eiffelturm
106+
```
107+
108+
In *Overture Maps*, names are objects with a _primary_ member (a string), and a _common_ member
109+
which is an object that itself contains members whose names are
110+
https://en.wikipedia.org/wiki/IETF_language_tag[IETF-BCP47] language tags
111+
and whose values are strings.
112+
For example
113+
114+
```json
115+
"names": {
116+
"primary" : "Statue of Liberty",
117+
"common" : {
118+
"fr" : "Statue de la Liberté",
119+
"it" : "Statua della Libertà"
120+
}
121+
}
122+
```
123+
124+
The primary name is expected to be the name in the localized langauge, and the common names
125+
give the name in other languages.
126+
The IETF-BCP47 language codes are expected to be in the
127+
https://www.iana.org/assignments/language-subtag-registry/language-subtag-registry[IANA language subtag registry].
128+
129+
Overture Maps allows an additional object in the _names_ element: a _rules_ object.
130+
It allows for expressing such variants as "short", "alternate", or "official", and includes
131+
an explicit _language_ member and _value_ member.
132+
133+
*Google Hotels* specifies the language at the file level only:
134+
that is, the entire collection of POIs is expected to have names in a single language,
135+
and that language is given by a _language_ XML element in the https://www.gstatic.com/localfeed/local_feed.xsd[schema].
136+
The language is expected to be an http://www.w3.org/WAI/ER/IG/ert/iso639.htm#2letter[ISO 639 lowercase 2-letter language code].
137+
138+
*CityGML* and *Schema.org* appear not to have addressed the issue of multilingual names.
139+
140+
==== Addresses, including Multilingual Addresses ====
141+
142+
There are many ways of expressing addresses of POIs.
143+
And, like POI names, addresses have country, locality, and street names that are different in different languages:
144+
e.g., Spain in English is España in Spanish.
145+
146+
In *IMDF*, an https://docs.ogc.org/cs/20-094/Address/index.html[Address] is a Feature object
147+
containing a number or properties:
148+
149+
* _address_: formatted postal address, excluding suite/unit identifier, i.e. "123 E. Main Street".
150+
* _unit_: if present, a qualifying official or proprietary unit/suite designation, i.e. "2A"
151+
* _locality_: the official locality (e.g. city, town) component of the postal address
152+
* _province_: if present, Province (e.g. state, territory) component of the postal address, using
153+
https://www.iso.org/standard/72483.html[ISO 3166-2]
154+
* _country_ : country component of the postal address, using
155+
https://www.iso.org/iso-3166-country-codes.html[ISO 3166]
156+
* _postal_code_ : mail sorting code associated with the postal address
157+
* _postal_code_ext_ : mail sorting code extension associated with the postal code
158+
* _postal_code_vanity_ : mail sorting code extension associated with the postal code
159+
160+
There is nothing said about expressing the _address_ or
161+
CityGML appears not to have addressed the issue of internationalized names.
162+
_locality_ in different languages,
163+
so presumably the local language is expected for those.
164+
By using ISO standards for _province_ and _country_, those can be tranlated into other languages
165+
when converting the codes to full names.
166+
167+
In *OpenStreetMap*, addresses are assigned to elements by giving them values for various _addr:xxx=_ tags,
168+
as described in https://wiki.openstreetmap.org/wiki/Addresses[this article].
169+
The tags are similar to those used by IMDF, but more comprehensive and more structured.
170+
Consult https://wiki.openstreetmap.org/wiki/Map_features#Addresses[here] for the full list.
171+
There is an attempt to fully structure addresses, rather than leaving the street etc. as an unstructured string,
172+
though there is a fallback _addr:full=_ tag for when structuring just doesn't work.
173+
For example:
174+
175+
```
176+
addr:housenumber=1000
177+
addr:street=5th Avenue
178+
addr:city=New York
179+
addr:state=NY
180+
addr:country=US
181+
```
182+
183+
For values that can be multilingual, the tags can have a language code added to them after a colon,
184+
just as they were in the _name:code=_ tags of the previous part of this section.
185+
For example:
186+
187+
```
188+
addr:city:en=Munich
189+
addr:city_de=München
190+
```
191+
192+
In *Overture Maps*, the https://docs.overturemaps.org/schema/reference/addresses/address/[address schema]
193+
has country, postcode, street, number, and unit, and then a number of "address levels" to capture
194+
all the various levels of administrative areas that might be present, in an ordered by unlabeled way.
195+
An example is:
196+
197+
```json
198+
"properties": {
199+
"theme": "addresses",
200+
"type": "address",
201+
"version": 0,
202+
"country": "US",
203+
"address_levels": [
204+
{
205+
"value": "MA"
206+
},
207+
{
208+
"value": "NEWTON CENTRE"
209+
}
210+
],
211+
"postcode": "02459",
212+
"street": "COMMONWEALTH AVE",
213+
"number": "1000"
214+
}
215+
```
216+
217+
The note that they loosely followed the ideas of https://openaddresses.io/[OpenAddresses].
218+
It appear that they do not explicitly address the issue of multilingual address components.
219+
220+
=== Categories ===
221+
222+
223+
=== Business Hours ===
224+
225+
226+
=== Telephone Number ===

0 commit comments

Comments
 (0)