\ProvidesFile{software.dbx}[2022/08/01 datamodel extension for software entries, Roberto Di Cosmo]
\RequireBiber[3]
%
% the software entry type family, with their fields
%
\DeclareDatamodelEntrytypes{software,softwareversion,softwaremodule,codefragment}
\DeclareDatamodelFields[type=field,datatype=literal]{
  introducedin,
}
\DeclareDatamodelFields[type=list,datatype=literal]{
  license,
}
\DeclareDatamodelFields[type=field,datatype=uri]{
  repository,
}
\DeclareDatamodelFields[type=field, datatype=verbatim]{
  hal_id,
  hal_version,
  swhid,
  swhidcore,
}

%
% Fields for software entry
%
\DeclareDatamodelEntryfields[software]{
   abstract,
   addendum,
   author,
   date,
   doi,
   editor,
   eprint,
   eprintclass,
   eprinttype,
   file,
   hal_id,
   hal_version,
   institution,
   license,
   month,
   note,
   organization,
   publisher,
   related,
   relatedstring,
   repository,
   swhid,
   title,
   url,
   urldate,
   version,
   year,
}
\DeclareDatamodelConstraints[software]{
  \constraint[type=mandatory]{
    \constraintfieldsor{
      \constraintfield{author}
      \constraintfield{editor}
    }
    \constraintfield{title}
    \constraintfield{url}
    \constraintfield{year}
  }
}

%
% Fields for softwareversion entry
%
\DeclareDatamodelEntryfields[softwareversion]{
   abstract,
   addendum,
   author,
   crossref,
   date,
   doi,
   editor,
   eprint,
   eprintclass,
   eprinttype,
   file,
   hal_id,
   hal_version,
   institution,
   introducedin,
   license,
   month,
   note,
   organization,
   publisher,
   related,
   relatedstring,
   relatedtype,
   repository,
   subtitle,
   swhid,
   title,
   url,
   urldate,
   version,
   year,
}
\DeclareDatamodelConstraints[softwareversion]{
  \constraint[type=mandatory]{
    \constraintfieldsor{
      \constraintfield{author}
      \constraintfield{editor}
    }
    \constraintfield{title}
    \constraintfield{url}
    \constraintfield{version}
    \constraintfield{year}
  }
}

%
% Fields for softwaremodule entry
%
\DeclareDatamodelEntryfields[softwaremodule]{
   abstract,
   addendum,
   author,
   crossref,
   date,
   doi,
   editor,
   eprint,
   eprintclass,
   eprinttype,
   file,
   hal_id,
   hal_version,
   institution,
   introducedin,
   license,
   month,
   note,
   organization,
   publisher,
   related,
   relatedstring,
   relatedtype,
   repository,
   subtitle,
   swhid,
   title,
   url,
   urldate,
   version,
   year,
}
\DeclareDatamodelConstraints[softwaremodule]{
  \constraint[type=mandatory]{
    \constraintfield{author}
    \constraintfield{subtitle}
    \constraintfield{url}
    \constraintfield{year}
  }
}

%
% Fields for codefragment entry
%
\DeclareDatamodelEntryfields[codefragment]{
   abstract,
   addendum,
   author,
   crossref,
   date,
   doi,
   eprint,
   eprintclass,
   eprinttype,
   file,
   hal_id,
   hal_version,
   institution,
   introducedin,
   license,
   month,
   note,
   organization,
   publisher,
   related,
   relatedstring,
   relatedtype,
   repository,
   subtitle,
   swhid,
   title,
   url,
   urldate,
   version,
   year,
}
\DeclareDatamodelConstraints[codefragment]{
  \constraint[type=mandatory]{
    \constraintfield{url}
  }
}

