(데이터의) 유형:

(데이터의) 유형:

LaTeX에서는 메타데이터를 자주 사용하며 가장 일반적인 것은 다음과 같습니다.

  • \제목
  • \작가
  • \날짜
  • \주소

유효성 검사 없이 주로 사용됩니다.

다른 메타데이터 항목을 정의하고 문서의 값을 사용하며 테스트를 정의하고 항목 값을 확인할 수 있는 패키지가 있습니까?

이러한 패키지는 메타데이터 사용을 확장하고 테스트 내에서 데이터 계층 구조를 정의하는 데 매우 유용할 것 같습니다.

답변1

의견에서 언급했듯이 질문은 다소 과소 지정되었습니다. 그러나 메타데이터에 대한 일종의 "테스트 모음"을 작성하는 것은 상대적으로 쉽습니다. 명령 \title\author은 해당 인수를 내부 매크로 등에 기록합니다 \@title. \@author예를 들어 정규식을 사용하여 이러한 내부 매크로의 값을 검사할 수 있습니다. 이것이 결코 그러한 검사를 수행하는 가장 좋고 쉬운 방법은 아니지만 개념 증명 역할을 할 수 있습니다.

그러나 일반적인 경우에는 대부분의 입력이 이 필드에 허용되어야 합니다. 아래의 장난감 예에서는 몇 가지 규칙을 정의했지만 각 규칙을 위반하는 것이 합리적인 상황을 상상하는 것은 다소 쉽습니다. 나는 그것이 내 장난감 규칙의 제한이 아니라고 생각합니다. 당신이 생각해 낼 수 있는 모든 규칙에는 예외가 있습니다.

이제 코드입니다. 먼저 이 명령은 클래스에 기본적으로 정의되어 있지 않기 때문에 \address유사하게 정의합니다 \title(즉, 인수를 에 저장 ) .\@addressarticle

그런 다음 검사 중에 표시할 일부 메시지를 설정합니다. 이후 내부 매크로는 토큰 목록에 복사되어 정규식의 입력으로 사용됩니다.

코드의 나머지 부분은 일반적인 관리 작업입니다. 어떤 이유로 \regex_match토큰 목록을 허용하지 않습니다.변하기 쉬운하지만 직접 토큰 목록만 있으므로 변형을 만들어야 합니다. 패키지 코드와 사용자 명령을 분리하고 모든 것을 파일에 넣으려고 했습니다 .sty.

파일 metadatacheck.sty:

\ProvidesPackage{metadatacheck}[2024/01/07 v0.1 Regex Check on Metadata]
\newcommand{\address}[1]{\gdef\@address{#1}}

\ExplSyntaxOn
\prg_generate_conditional_variant:Nnn \regex_match:nn {nV} {T,F,TF}
\msg_new:nnnn{metadatacheck}{titleok}{Title~check~OK}{}
\msg_new:nnnn{metadatacheck}{authorok}{Author~check~OK}{}
\msg_new:nnnn{metadatacheck}{dateok}{Date~check~OK}{}
\msg_new:nnnn{metadatacheck}{addressok}{Address~check~OK}{}

\msg_new:nnnn{metadatacheck}{titleerr}{Title~does~not~start~with~upper~case}{}
\msg_new:nnnn{metadatacheck}{authorerr}{Author~cannot~have~numbers}{}
\msg_new:nnnn{metadatacheck}{dateerr}{Date~does~not~include~4-digit~year}{}
\msg_new:nnnn{metadatacheck}{addresserr}{Address~too~short~(5~characters~minimum)}{}

\cs_new:Nn \check_meta_data: {
\tl_set:Nx \l_title_tl {\@title}
\tl_set:Nx \l_author_tl {\@author}
\tl_set:Nx \l_date_tl {\@date}
\tl_set:Nx \l_address_tl {\@address}

\regex_match:nVTF{\A[A-Z]}{\l_title_tl}{\msg_note:nn{metadatacheck}{titleok}}{\msg_warning:nn{metadatacheck}{titleerr}}
\regex_match:nVTF{\A[^0-9]+\Z}{\l_author_tl}{\msg_note:nn{metadatacheck}{authorok}}{\msg_warning:nn{metadatacheck}{authorerr}}
\regex_match:nVTF{\d{4}}{\l_date_tl}{\msg_note:nn{metadatacheck}{dateok}}{\msg_warning:nn{metadatacheck}{dateerr}}
\regex_match:nVTF{.{5}}{\l_address_tl}{\msg_note:nn{metadatacheck}{addressok}}{\msg_warning:nn{metadatacheck}{addresserr}}
}
\NewDocumentCommand{\CheckMetaData}{ }
{
\check_meta_data:
}
\ExplSyntaxOff

사용자 문서:

\documentclass{article}
\usepackage{metadatacheck}
\title{my Title}
\author{Alic3 Sm1th}
\date{Christmas '23}
\address{23 Mulholland Drive}
\CheckMetaData

\begin{document}
\maketitle
\end{document}

결과(터미널 및 로그 파일):

Package metadatacheck Warning: Title does not start with upper case

Package metadatacheck Warning: Author cannot have numbers

Package metadatacheck Warning: Date does not include 4-digit year

Package metadatacheck Info: Address check OK

물론 이것은 사용자가 문서 명령이나 구성 파일을 통해 정규 표현식과 메시지를 제공할 수 있도록 허용함으로써 더욱 확장될 수 있습니다.

답변2

현재 Scott Pakin이 개발한 ctan에서 최소한 하나의 패키지를 사용할 수 있습니다.https://ctan.org/pkg/hyperxmp?lang=en 하이퍼xmpOP가 요청하는 것을 수행할 수 있으며 확장이 필요한 경우 좋은 출발점이 될 것입니다.

의견에서는 개발 작업이 완료되기 전에 먼저 사양을 작성해야 한다는 제안이 있었습니다. 나는 또한 좋은 예라고 생각하는 Adobe 사양에 대한 링크를 제공했습니다. 대부분의 경우 열거된 목록과 테이블만 사용할 수 있습니다. 제 생각에 가장 중요한 부분은 프로그램의 범위입니다. 질문의 맥락에서 메타데이터가 서로 다른 프로그램 간의 정보 교환을 위한 인터페이스라는 점을 감안할 때 어떤 소프트웨어가 이 정보를 읽을 것으로 예상되는지 대답해야 합니다. 사양이 작성되면 검증 기능을 개발할 수 있습니다. 필요에 따라 다양한 쓰기 시스템과 인코딩을 다루도록 주의를 기울여야 합니다.

LaTeX 패키지 요구 사항을 준수하는 날짜에 대한 데이터 유효성 검사의 예는 l3 프로그래밍 계층을 사용하여 작성된 l3doc 목록에서 찾을 수 있습니다. l3 프로그래밍 곡예의 경이로움!

웹 개발은 유사한 개발 단계를 거쳤지만 그러한 온톨로지는 실제로 따라잡지 못했습니다. 검색이 향상되고 이제 LLM을 사용하면 모두 함께 사라질 수 있지만 이것은 단지 내 의견일 뿐이며 여러분을 낙담시키려는 것은 아닙니다. .

답변3

이것은 정확한 답변은 아니지만 위의 설명에서 Ulrike Fischer가 요청한 사양입니다. 아직은 초기 단계이므로 이에 따라 편집하겠습니다.

패키지 메타데이터는 메타데이터 항목의 사용 및 유효성 검사를 정의하고 허용합니다.

새로운 enrty를 정의하려면 다음을 사용하십시오.

\definemetadataentry[type=
                     format=yyyy-mm-dd,
                     lower_range=0001-01-01,
                     upper_range=9999-12-31,
                     finite_range=,
                     default_value=,
                     optional/required,
                     validation_routine=,
                     hierarchy=
                    ]{name_of_metadata_entry}

어디:

(데이터의) 유형:

다음과 같을 수 있습니다:

  • 숫자(정수 또는 십진수)
  • 문자열
  • 날짜 시간

체재:

방금 정의한 데이터 유형의 형식을 제공하십시오.

lower_range=0001-01-01:

upper_range=9999-12-31:

연속적이거나 너무 길어서 전체를 나열할 수 없는 데이터의 하한 및 상한 범위를 정의합니다.

날짜 집합의 범위 예: 0001-01-01 ~ 9999-12-31

유한_범위:

전체를 쉽게 나열할 수 있는 데이터 범위를 정의합니다.

기본값:

정의되지 않은 경우 메타데이터 항목의 기본값이 되는 값입니다.

선택사항/필수:

특정 메타데이터 항목이 해당 항목을 정의하는 영역 내에서 필수인지 선택 사항인지 정의합니다.

유효성 검사 루틴(외부):

항목의 유효성을 검사하는 외부 루틴에 대한 호출입니다.

계층:

이전에 정의된 다른 메타데이터 항목과 관련하여 재귀적으로 정의된 요소입니다.

정의 및 사용 예

데이터 유형:

고려해야 할 3가지 유형의 데이터가 있습니다.

  • 숫자(정수 또는 십진수)
  • 문자열
  • 날짜 시간

날짜 형식:

날짜: 형식: YYYY-MM-DD 날짜시간: 형식: YYYY-MM-DD HH:MI:SS

날짜 형식은 'dd-mm-yyyy', 'yyyy-mm-dd', 'mm-dd-yyyy'와 같이 다양한 유형일 수 있습니다.

짧은 세기(yy)와 긴 세기(yyyy)와 함께 가장 많이 사용되는 10가지 형식을 언급합니다.

  • 미국: mm/dd/yy 및 mm/dd/yyyy
  • ANSI: yy.mm.dd & yyyy.mm.dd
  • 영국/프랑스어: dd/mm/yy 및 dd/mm/yyyy
  • 독일어: dd.mm.yy 및 dd.mm.yyyy
  • 일본: yy/mm/dd 및 yyyy/mm/dd
  • ISO: yymmdd & yyyymmdd
  • 유럽 ​​기본값 + 밀리초: dd mon yyyy hh:mi:ss:mmm(24시간)
  • 회교식: dd/mm/yyyy hh:mi:ss:mmmAM
RequirePackage{metadata}
\definemetadataentry[type=DATETIME,
                     format=yyyy-mm-dd,
                     lower_range=0001-01-01,
                     upper_range=9999-12-31
                     default_value=2000-12-31,
                     optional,
                     validation_routine=/usr/local/texlive2024/bin/abc.lua,
                    ]{date_of_publication}

\definemetadataentry[type=DECIMAL,
                     fomat=(8,6),
                    ]{latitude}

\definemetadataentry[type=DECIMAL,
                     format=(9,6),
                    ]{llongitude}

\definemetadataentry[type=CHARACTERSTRING]{email}

\definemetadataentry[type=CHARACTERSTRING]{url}

\definemetadataentry[type=NUMERIC,
                     format=integer,
                     lower-range=1,
                     upper-range=9999,
                    ]{volume_number}

\definemetadataentry[type=CHARACTERSTRING(2),
                     range={US,MX,CA,GT,HT,CU,HN,...},
                    ]{north_american_country}

메타데이터의 계층 구조.

\definemetadataentry[type=CHARACTERSTRING(2),
                     required,
                    ]{country}

\definemetadataentry[type=CHARACTERSTRING(10),
                     hierarchy=country,
                    ]{zipcode}

사용 예:

\zipcode[BR]{22430-085}
\zipcode[US]{91106-3840}
\zipcode[CA]{K1A 0T6}
\zipcode[DE]{13057}
\zipcode[IR]{81599-95950}
\definemetadataentry[type=CHARACTERSTRING(2),
                     required,
                    ]{decade}

\definemetadataentry[type=CHARACTERSTRING(10),
                     hierarchy=decade,
                    ]{msc}

사용 예:

\msc[2010]{76B75}
\msc[2020]{76D55}
\definemetadataentry[type=CHARACTERSTRING(100),
                     required,
                    ]{full_name}

\definemetadataentry[type=CHARACTERSTRING(30),
                     hierarchy=full_name,
                    ]{last_name}

사용 예:

\full_name{John Ewing}
\last_name{Ewing}

관련 정보