You can parse an SGML/XML public identifier into its constituent parts using the following pattern, written here
as a find
rule.
find ( "+//" any ** => registered-owner-identifier "//" | "-//" any ** => unregistered-owner-identifier "//" | any ** => iso-owner-identifier "//") any ** => public-text-class " " ("-//" => unavailable-text-indicator)? any ** => public-text-description "//" (letter{2} => public-text-language value-end | ((any ** => public-text-designating-sequence ("//" | value-end)) (any* => public-text-display-version)?))In this pattern, the following pattern variables may or may not be specified, depending on the public identifier being scanned:
registered-owner-identifier
,
unregistered-owner-identifier
,
iso-owner-identifier
,
unavailable-text-indicator
,
public-text-language
,
public-text-designating-sequence
, and
public-text-display-version
;
is specified
.