; all_parts rdap_all.jcr ; ; JSON Content Rules (JCR) ruleset ; for the Registry Data Access Protocol (RDAP) ; ; Specified in RFC 7483 ;
# ruleset-id rdap_level_0
; ; The various types of responses ;
; start_part rdap_roots.jcr @{root} $entity_response = {
$response_mixin, $entity_mixin
}
@{root} $nameserver_response = {
$response_mixin, $nameserver_mixin
}
@{root} $domain_response = {
$response_mixin, $domain_mixin
}
@{root} $network_response = {
$response_mixin, $network_mixin
}
@{root} $autnum_response = {
$response_mixin, $autnum_mixin
}
@{root} $error_response = {
$response_mixin, $error_mixin
}
@{root} $help_response = {
$response_mixin, $lang ?
}
@{root} $domainSearch_response = {
$response_mixin, $lang ?, $domainSearchResult
}
@{root} $nameserverSearch_response = {
$response_mixin, $lang ?, $nameserverSearchResult
}
@{root} $entitySearch_response = {
$response_mixin, $lang ?, $entitySearchResult
} ; end_part
; start_part rdap_response_mixin.jcr $response_mixin = (
$rdapConformance ?, "notices" : $notices ?
) ; end_part
; ; RFC 7483 Section 4.1 - RDAP Conformance
;
; start_part rdap_conformance.jcr $rdapConformance = “rdapConformance” : [ string * ] ; end_part
; ; RFC 7483 Section 4.2 - Links ;
; start_part rdap_links.jcr $links = ( “links” : [ $link * ] )
; see RFC 5988 $link = {
"value" : uri ?, "rel" : string ?, "href" : uri, "hreflang" : [ $lang_value * ] ?, "title" : string ?, "media" : string ?, "type" : /[a-zA-Z][a-zA-Z0-9]*\/[a-zA-Z][a-zA-Z0-9]*/ ?
} ; end_part
; ; RFC 7483 Section 4.3 - Notices ;
; start_part rdap_notices.jcr $notices = [ $notice * ]
$notice = {
"title" : string ?, "description" : [ string * ], $noticeRemarkType ?, $links ?, $lang ?
}
$noticeRemarkType = “type” : string ; end_part
; ; RFC 7483 Section 4.4 - Language Identifier ;
; start_part rdap_language.jcr ; the language value as defined in RFC 5646 $lang_value =: /[a-z]{2}(-[A-Z]*(-[A-Z]{2})?)?/
$lang = ( “lang” : $lang_value ) ; end_part
; ; RFC 7483 Section 4.5 - Events ;
; start_part rdap_events.jcr $events = “events” : [ $event * ]
$noActorEvent_mixin = (
$eventAction, "eventDate" : datetime, $links ?, $lang ?
)
$eventAction = “eventAction” : string
$noActorEvent = {
$noActorEvent_mixin
}
$event = {
$noActorEvent_mixin, "eventActor" : string ?
}
; end_part
; ; RFC 7483 Section 4.6 - Status ;
; start_part rdap_status.jcr $status = “status” : [ string * ] ; end_part
; ; RFC 7483 Section 4.7 - Port43 ;
; start_part rdap_port.jcr $port43 = “port43” : string ; end_part
; ; RFC 7482 Section 4.8 - Public Ids ;
; start_part rdap_publicids.jcr $publicIds = “publicIds” : [ $publicId * ]
$publicId = {
"type" : string, "identifier" : string
} ; end_part
; ; Common Object
Class Structures ;
; start_part rdap_common_mixin.jcr $common_mixin = (
"handle" : string ?, "remarks" : [ $notice * ] ?, $links ?, $events ?, $status ?, $port43 ?, $lang ?
) ; end_part
; ; RFC 7483 Section 5.1 - Entity Object
Class ;
; start_part rdap_entity.jcr $entities = “entities” : [ $entity_oc * ]
$entity_oc = {
$entity_mixin
}
$entity_mixin = (
"objectClassName" : "entity", $common_mixin, "vcardArray" : [ "vcard", $vcard * ] ?, "asEventActor" : [ $noActorEvent * ] ?, $roles ?, $publicIds ?, $entities ?, "networks" : [ $network_oc * ] ?, "autnums" : [ $autnum_oc * ] ?
)
$roles = “roles” : [ string * ] ; end_part
; jCard (see RFC 7095) is an algorithm for converting ; vCard to JSON. Each jCard is represented by an array of ; vCard properties. The “version” property must be the ; first property, and there must be one and only one “fn” ; property in some part of the array. ; ; Here we represent this by an ordered array, with “version” ; being the first property, then listing all the properties ; that match by property name, then matching ; the “fn” property, then matching any other property again. ; start_part rdap_vcard_array.jcr $vcard = [
[ "version", {}, "text", "4.0" ], $vcard_not_fn_properties * , [ "fn", { $vcard_type_param?, $vcard_language_param? , $vcard_altid_param? , $vcard_pid_param? , $vcard_pref_param?, $vcard_any_param? }, "text", string ], $vcard_not_fn_properties *
]
$vcard_not_fn_properties =
( $vcard_source | $vcard_kind | $vcard_n | $vcard_nicname | $vcard_photo | $vcard_bday | $vcard_anniversary | $vcard_gender | $vcard_adr | $vcard_tel | $vcard_email | $vcard_impp | $vcard_lang | $vcard_tz | $vcard_geo | $vcard_title | $vcard_role | $vcard_logo | $vcard_org | $vcard_member | $vcard_related | $vcard_categories | $vcard_note | $vcard_prodid | $vcard_rev | $vcard_sound | $vcard_uid | $vcard_clientpidmap | $vcard_url | $vcard_key | $vcard_fburl | $vcard_caladruri | $vcard_caluri | $vcard_x10 )
; end_part
; vCard properties. Each one is defined with a common ; definition, and then a group that matches the property name. ; start_part rdap_vcard_properties.jcr $vcard_source = [ “source”, $vcard_source_prop ] $vcard_source_prop = (
{ $vcard_pid_param? , $vcard_pref_param?, $vcard_altid_param? , $vcard_mediatype_param?, $vcard_any_param? } , "uri", uri
)
$vcard_kind = [ “kind”, $vcard_kind_prop ] $vcard_kind_prop = (
{ $vcard_any_param? }, "text", $vcard_kind_type
)
$vcard_n = [ “n”, $vcard_n_prop ] $vcard_n_prop = (
{ $vcard_sort_as_param? , $vcard_language_param? , $vcard_altid_param? , $vcard_any_param? }, "text", $vcard_string_type_array
)
$vcard_nicname = [ “nicname”, $vcard_nicname_prop ] $vcard_nicname_prop = (
{ $vcard_type_param? , $vcard_language_param? , $vcard_altid_param? , $vcard_pid_param? , $vcard_pref_param? , $vcard_any_param ? }, "text", $vcard_string_type_array
)
$vcard_photo = [ “photo”, $vcard_photo_prop ] $vcard_photo_prop = (
{ $vcard_altid_param? , $vcard_type_param? , $vcard_mediatype_param? , $vcard_pref_param? , $vcard_pid_param? , $vcard_any_param? }, "uri", uri
)
$vcard_bday = [ “bday”, $vcard_bday_prop ] $vcard_bday_prop = (
( { $vcard_language_param?, $vcard_altid_param?, $vcard_calscale_param?, $vcard_any_param? }, "text", string ) | ( { $vcard_altid_param?, $vcard_calscale_param?, $vcard_any_param? }, "date-and-or-time", $vcard_date_and_or_time_type )
)
$vcard_anniversary = [ “anniversary”, $vcard_anniversary_prop ] $vcard_anniversary_prop = (
{ $vcard_altid_param?, $vcard_calscale_param?, $vcard_any_param? }, "date-and-or-time", $vcard_date_and_or_time_type
)
$vcard_gender = [ “gender”, $vcard_gender_prop ] $vcard_gender_prop = (
{ $vcard_any_param? }, "text", ( $vcard_gender_type | [ $vcard_gender_type, string + ] )
)
$vcard_adr = [ “adr”, $vcard_adr_prop ] $vcard_adr_prop = (
{ $vcard_label_param? , $vcard_language_param? , $vcard_geo_param ? , $vcard_tz_param? , $vcard_altid_param? , $vcard_pid_param? , $vcard_pref_param? , $vcard_type_param? , $vcard_any_param? }, "text", $vcard_string_type_array
)
$vcard_tel = [ “tel”, $vcard_tel_prop ] $vcard_tel_prop = (
( { $vcard_type_param? , $vcard_pid_param? , $vcard_pref_param? , $vcard_altid_param?, $vcard_any_param? }, "text", string ) | ( { $vcard_type_param? , $vcard_pid_param? , $vcard_pref_param? , $vcard_altid_param?, $vcard_mediatype_param?, $vcard_any_param? }, "uri", uri..tel )
)
$vcard_email = [ “email”, $vcard_email_prop ] $vcard_email_prop = (
{ $vcard_pid_param? , $vcard_pref_param? , $vcard_type_param? , $vcard_altid_param? , $vcard_any_param ? }, "text", string
)
$vcard_impp = [ “impp”, $vcard_impp_prop ] $vcard_impp_prop = (
{ $vcard_pid_param? , $vcard_pref_param? , $vcard_type_param? , $vcard_mediatype_param? , $vcard_altid_param? , $vcard_any_param }, "uri", uri..impp
)
$vcard_lang = [ “lang”, $vcard_lang_prop ] $vcard_lang_prop = (
{ $vcard_pid_param? , $vcard_pref_param? , $vcard_altid_param? , $vcard_type_param? , $vcard_any_param? }, "language-tag", $vcard_language_tag_type
)
$vcard_tz = [ “tz”, $vcard_tz_prop ] $vcard_tz_prop = (
{ $vcard_altid_param?, $vcard_pid_param? , $vcard_pref_param? , $vcard_type_param? , $vcard_mediatype_param?, $vcard_any_param? }, ( ( "text", string ) | ( "uri" , uri ) | ( "utc-offset" , $vcard_utc_offset_type ) )
)
$vcard_geo = [ “geo”, $vcard_geo_prop ] $vcard_geo_prop = (
{ $vcard_pid_param? , $vcard_pref_param? , $vcard_type_param? , $vcard_mediatype_param? , $vcard_altid_param? , $vcard_any_param? }, "uri", uri..geo
)
$vcard_title = [ “title”, $vcard_title_prop ] $vcard_title_prop = (
{ $vcard_language_param? , $vcard_pid_param? , $vcard_pref_param? , $vcard_altid_param? , $vcard_type_param? , $vcard_any_param? }, "text", string
)
$vcard_role = [ “role”, $vcard_role_prop ] $vcard_role_prop = (
{ $vcard_language_param? , $vcard_pid_param? , $vcard_pref_param? , $vcard_altid_param? , $vcard_type_param? , $vcard_any_param? }, "text", string
)
$vcard_logo = [ “logo”, $vcard_logo_prop ] $vcard_logo_prop = (
{ $vcard_altid_param? , $vcard_type_param? , $vcard_mediatype_param? , $vcard_pref_param? , $vcard_pid_param? , $vcard_language_param? , $vcard_any_param? }, "uri", uri
)
$vcard_org = [ “org”, $vcard_org_prop ] $vcard_org_prop = (
{ $vcard_sort_as_param? , $vcard_language_param? , $vcard_pid_param? , $vcard_pref_param? , $vcard_altid_param? , $vcard_type_param? , $vcard_any_param? }, "text", $vcard_string_type_array )
$vcard_member = [ “member”, $vcard_member_prop ] $vcard_member_prop = (
{ $vcard_altid_param? , $vcard_mediatype_param? , $vcard_pref_param? , $vcard_pid_param? , $vcard_any_param? }, "uri", uri
)
$vcard_related = [ “related”, $vcard_related_prop ] $vcard_related_prop = (
( { $vcard_mediatype_param? , $vcard_pref_param? , $vcard_altid_param? , $vcard_type_param? , $vcard_any_param? }, "uri", uri ) | ( { $vcard_language_param? , $vcard_pref_param? , $vcard_altid_param? , $vcard_type_param? , $vcard_any_param? }, "text", $vcard_related_type_array )
)
$vcard_categories = [ “categories”, $vcard_categories_prop ] $vcard_categories_prop = (
{ $vcard_pid_param? , $vcard_pref_param? , $vcard_type_param ?, $vcard_altid_param? , $vcard_any_param? }, "text", $vcard_string_type_array
)
$vcard_note = [ “note”, $vcard_note_prop ] $vcard_note_prop = (
{ $vcard_language_param? , $vcard_pid_param? , $vcard_pref_param? , $vcard_type_param? , $vcard_altid_param? , $vcard_any_param ? }, "text", string
)
$vcard_prodid = [ “prodid”, $vcard_prodid_prop ] $vcard_prodid_prop = ( { $vcard_any_param ? }, “text”, string )
$vcard_rev = [ “rev”, $vcard_rev_prop ] $vcard_rev_prop = (
{ $vcard_any_param ? }, "timestamp", datetime
)
$vcard_sound = [ “sound”, $vcard_sound_prop ] $vcard_sound_prop = (
{ $vcard_altid_param? , $vcard_mediatype_param? , $vcard_language_param? , $vcard_pref_param? , $vcard_pid_param? , $vcard_any_param? }, "uri", uri
)
$vcard_uid = [ “uid”, $vcard_uid_prop ] $vcard_uid_prop = (
( { $vcard_any_param? }, "uri", uri ) | ( { $vcard_any_param? }, "text", string )
)
$vcard_clientpidmap = [ “clientpidmap”, $vcard_clientpidmap_prop ] $vcard_clientpidmap_prop = ( {}, “text”, [ /^[0-9]+$/, uri ] )
$vcard_url = [ “url”, $vcard_url_prop ] $vcard_url_prop = (
{ $vcard_altid_param? , $vcard_mediatype_param? , $vcard_pref_param? , $vcard_pid_param? , $vcard_any_param? }, "uri", uri
)
$vcard_key = [ “key”, $vcard_key_prop ] $vcard_key_prop = (
( { $vcard_mediatype_param? , $vcard_pref_param? , $vcard_altid_param? , $vcard_type_param? , $vcard_any_param? }, "uri", uri ) | ( { $vcard_pref_param? , $vcard_altid_param? , $vcard_type_param? , $vcard_any_param? }, "text", string )
)
$vcard_fburl = [ “fburl”, $vcard_fburl_prop ] $vcard_fburl_prop = (
{ $vcard_altid_param? , $vcard_mediatype_param? , $vcard_altid_param? , $vcard_pref_param? , $vcard_pid_param? , $vcard_any_param? }, "uri", uri
)
$vcard_caladruri = [ “caladruri”, $vcard_caladruri_prop ] $vcard_caladruri_prop = (
{ $vcard_altid_param? , $vcard_mediatype_param? , $vcard_altid_param? , $vcard_pref_param? , $vcard_pid_param? , $vcard_any_param? }, "uri", uri
)
$vcard_caluri = [ “caluri”, $vcard_caluri_prop ] $vcard_caluri_prop = (
{ $vcard_altid_param? , $vcard_mediatype_param? , $vcard_altid_param? , $vcard_pref_param? , $vcard_pid_param? , $vcard_any_param? }, "uri", uri
)
$vcard_x10 = [ $vcard_x_name_type, $vcard_x10_prop ] $vcard_x10_prop = (
{ $vcard_language_param? , $vcard_pref_param? , $vcard_altid_param? , $vcard_pid_param? , $vcard_type_param? , $vcard_mediatype_param? , $vcard_calscale_param? , $vcard_sort_as_param? , $vcard_geo_param? , $vcard_tz_param? , $vcard_label_param? , $vcard_any_param? }, $vcard_x_name_type, $vcard_string_type_array
) ; end_part
; Each vCard property can have parameters. ; start_part rdap_vcard_params.jcr $vcard_language_param = “language” : $vcard_language_tag_type $vcard_pref_param = “pref” : $vcard_pref_type $vcard_altid_param = “altid” : string $vcard_pid_param = “pid” : $vcard_pid_type_array $vcard_type_param = “type” : $vcard_type_type_array $vcard_mediatype_param = “mediatype” : $vcard_mediatype_type $vcard_calscale_param = “calscale” : $vcard_calscale_type $vcard_sort_as_param = “sort-as” : $vcard_string_type_array $vcard_geo_param = “geo” : uri..geo $vcard_tz_param = “tz” : $vcard_utc_offset_type $vcard_label_param = “label” : $vcard_string_type_array $vcard_any_param = /^x-*$/ : $vcard_string_type_array ; end_part
; Each vCard property has a value type. ; start_part rdap_vcard_values.jcr $vcard_string_type_array =
( string | [ ( string | [ string * ] ) * ] )
$vcard_language_tag_type =:
/[a-z]{2}(-[A-Z][a-zA-Z]*(\-[A-Z]{2})?)?/
$vcard_mediatype_type =: /^w+/+(?:+[-.w]+)?$/ $vcard_utc_offset_type =: /^(([-+]d{1,2}):?(d{2})?)?$/ $vcard_date_or_time =: (
/^(\d{4})-?(\d{2})-?(\d{2})$/ | /^(\d{4})$/ | /^--(\d{2})-?(\d{2})$/ | /^--(\d{2})$/ | /^---(\d{2})$/ | /^(\d{2})(([-+]\d{1,2}):?(\d{2})?)?$/ | /^(\d{2}):?(\d{2})(([\-\+]\d{1,2}):?(\d{2})?)?$/ | /^(\d{2}):?(\d{2}):?(\d{2})(Z|([\-\+]\d{1,2}):?(\d{2})?)?$/ | /^-(\d{2}):?(\d{2})(Z|([\-\+]\d{1,2}):?(\d{2})?)?$/ | /^-(\d{2})(([\-\+]\d{1,2}):?(\d{2})?)?$/ | /^--(\d{2})(([\-\+]\d{1,2}):?(\d{2})?)?$/
) $vcard_date_and_or_time_type =: (
datetime | $vcard_date_or_time
) $vcard_group_type =: /^[a-zA-Z0-9-]+$/ $vcard_type_type =: (
"home" | "work" | $vcard_tel_type | $vcard_related_type | $vcard_x_name_type
) $vcard_type_type_array = (
$vcard_type_type | [ $vcard_type_type * ]
) $vcard_tel_type =: (
"text" | "voice" | "fax" | "cell" | "video" | "pager" | "textphone" | "main-number"
) $vcard_tel_type_array = ( $vcard_tel_type | [ $vcard_tel_type * ] ) $vcard_related_type =: (
"contact" | "acquaintance" | "friend" | "met" | "co-worker" | "colleague" | "co-resident" | "neighbor" | "child" | "parent" | "sibling" | "spouse" | "kin" | "muse" | "crush" | "date" | "sweetheart" | "me" | "agent" | "emergency"
) $vcard_related_type_array = (
$vcard_related_type | [ $vcard_related_type * ]
) $vcard_index_type =: /^[1-9]?*$/ $vcard_expertise_level_type =: (
"beginner" | "average" | "expert"
) $vcard_hobby_type =: ( “high” | “medium” | “low” ) $vcard_pref_type =: /^[1-9]?{1}$|^100$/ $vcard_pid_type =: /^[0-9]+(.+)?$/ $vcard_pid_type_array = (
$vcard_pid_type | [ $vcard_pid_type * ]
) $vcard_gender_type =: ( “M” | “F” | “O” | “N” | “U” ) $vcard_gender_type_array = (
$vcard_gender_type | [ $vcard_gender_type * ]
) $vcard_kind_type =: (
"individual" | "group" | "org" | "location" | "application" | "device"
) $vcard_iana_token_type =: /^[A-Za-z0-9-]*$/ $vcard_x_name_type =: /^x-*$/ $vcard_calscale_type =: (
"gregorian" | $vcard_iana_token_type | $vcard_x_name_type
) ; end_part
; ; RFC 7483 Section 5.2 - Nameserver Object
Class ;
; start_part rdap_nameserver.jcr $nameservers = “nameservers” : [ $nameserver_oc * ]
$nameserver_oc = {
$nameserver_mixin
}
$nameserver_mixin = (
"objectClassName" : "nameserver", $common_mixin, "ldhName" : fqdn, "unicodeName" : idn ?, "ipAddresses" : { "v4" : [ ipv4 + ] ?, "v6" : [ ipv6 + ] ? } ?, $entities ?
) ; end_part
; ; RFC 7483 Section 5.3 - Domain Object
Class ;
; start_part rdap_domain.jcr $domain_oc = {
$domain_mixin
}
$domain_mixin = (
"objectClassName" : "domain", $common_mixin, "ldhName" : fqdn, "unicodeName" : idn ?, "variants" : [ $variant * ] ?, $nameservers ?, $secureDNS ?, $entities ?, $publicIds ?, "network" : $network_oc ?
)
$variant = {
$variantRelation ?, "relation" : [ string * ] ?, "idnTable" : string ?, "variantNames" : [ { "ldhName" : fqdn, "unicodeName" : idn } * ]
}
$variantRelation = “relation” : [ string * ]
$secureDNS = “secureDNS” : {
"zoneSigned" : boolean ?, "delegationSigned" : boolean ?, "maxSigLife" : integer ?, "dsData" : [ $dsData_obj * ] ?, "keyData" : [ $keyData_obj * ] ?
}
$dsData_obj = {
"keyTag" : integer, "algorithm" : integer, "digest" : string, "digestType" : integer, $events ?, $links ?
}
$keyData_obj = {
"flags" : integer, "protocol" : integer, "publicKey" : string, "algorithm" : integer, $events ?, $links ?
} ; end_part
; ; RFC 7483 Section 5.4 - IP Network Object
Class ;
; start_part rdap_network.jcr $network_oc = {
$network_mixin
}
$network_mixin = (
"objectClassName" : "ip network", $common_mixin, "startAddress" : ( ipv4 | ipv6 ) ?, "endAddres" : ( ipv4 | ipv6 ) ?, "ipVersion" : ( "v4" | "v6" ) ?, "name" : string ?, "type" : string ?, "country" : /[A-Z]{2}/ ?, "parentHandle" : string ?, $entities ?
) ; end_part
; ; RFC 7483 Section 5.5 - Autnum Object
Class ;
; start_part rdap_autnum.jcr $autnum_oc = {
$autnum_mixin
}
$autnum_mixin = (
"objectClassName" : "autnum", $common_mixin, "startAutnum" : int32 ?, "endAutnum" : int32 ?, "name" : string ?, "type" : string ?, "country" : string ?, $entities ?
) ; end_part
; ; RFC 7483 Section 6 - Error ;
; start_part rdap_error.jcr $error_mixin = (
"errorCode" : integer, "title" : string ?, "description" : [ string * ] ?
) ; end_part
; ; RFC 7483 Section 8 - Search Results ;
; start_part rdap_searches.jcr $domainSearchResult =
"domainSearchResults" : [ $domain_oc + ]
$nameserverSearchResult =
"nameserverSearchResults" : [ $nameserver_oc + ]
$entitySearchResult =
"entitySearchResults" : [ $entity_oc + ]
; end_part